diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2018-11-30 17:31:11 +0100 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2018-11-30 17:31:11 +0100 |
commit | 79a2dac7e5317e515ce9610db1d48d0fc9ff0708 (patch) | |
tree | fe280055b9f4697ae9f1f61398d43b041b229fc7 /runtime | |
parent | 30e8e1618e59bdb585b1fb36cddce41eefe12364 (diff) | |
download | compcert-kvx-79a2dac7e5317e515ce9610db1d48d0fc9ff0708.tar.gz compcert-kvx-79a2dac7e5317e515ce9610db1d48d0fc9ff0708.zip |
Finished implementation of va_arg + testing done
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/Makefile | 2 | ||||
-rw-r--r-- | runtime/mppa_k1c/vararg.S | 72 |
2 files changed, 73 insertions, 1 deletions
diff --git a/runtime/Makefile b/runtime/Makefile index 30c1fc83..66ec6fec 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -23,7 +23,7 @@ OBJS=i64_dtou.o i64_utod.o i64_utof.o vararg.o else ifeq ($(ARCH),powerpc64) OBJS=i64_dtou.o i64_stof.o i64_utod.o i64_utof.o vararg.o else ifeq ($(ARCH),mppa_k1c) -OBJS=i64_umod.o i64_udiv.o i64_udivmod.o i64_sdiv.o i64_smod.o +OBJS=i64_umod.o i64_udiv.o i64_udivmod.o i64_sdiv.o i64_smod.o vararg.o DOMAKE:=$(shell (cd mppa_k1c && make)) else OBJS=i64_dtos.o i64_dtou.o i64_sar.o i64_sdiv.o i64_shl.o \ diff --git a/runtime/mppa_k1c/vararg.S b/runtime/mppa_k1c/vararg.S new file mode 100644 index 00000000..41c2b39e --- /dev/null +++ b/runtime/mppa_k1c/vararg.S @@ -0,0 +1,72 @@ + +// typedef void * va_list; +// unsigned int __compcert_va_int32(va_list * ap); +// unsigned long long __compcert_va_int64(va_list * ap); + + .text + .balign 2 + .globl __compcert_va_int32 +__compcert_va_int32: +# Prologue + addd $r14 = $r12, 0 +;; + addd $r12 = $r12, -16 +;; + sd 0[$r12] = $r14 +;; + get $r16 = $ra +;; + sd 8[$r12] = $r16 +;; +# Body + ld $r32 = 0[$r0] # $r32 <- *ap +;; + addd $r32 = $r32, 8 # $r32 <- $r32 + WORDSIZE +;; + sd 0[$r0] = $r32 # *ap <- $r32 +;; + lws $r0 = -8[$r32] # retvalue <- 32-bits at *ap - WORDSIZE +;; +# Prologue + ld $r16 = 8[$r12] +;; + set $ra = $r16 +;; + addd $r12 = $r12, 16 +;; + ret +;; + + .text + .balign 2 + .globl __compcert_va_int64 +__compcert_va_int64: +# Prologue + addd $r14 = $r12, 0 +;; + addd $r12 = $r12, -16 +;; + sd 0[$r12] = $r14 +;; + get $r16 = $ra +;; + sd 8[$r12] = $r16 +;; +# Body + ld $r32 = 0[$r0] # $r32 <- *ap +;; + addd $r32 = $r32, 8 # $r32 <- $r32 + WORDSIZE +;; + sd 0[$r0] = $r32 # *ap <- $r32 +;; + ld $r0 = -8[$r32] # retvalue <- 64-bits at *ap - WORDSIZE +;; +# Prologue + ld $r16 = 8[$r12] +;; + set $ra = $r16 +;; + addd $r12 = $r12, 16 +;; + ret +;; |