diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2018-04-04 16:01:32 +0200 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2018-04-04 16:30:10 +0200 |
commit | d72fcc2c96f665d0c7608797b1707f2d19daa892 (patch) | |
tree | 52c094e7c5a0449a877a9a7bd8925ee36ea3263c /mppa_k1c/Asmgen.v | |
parent | ca090744f399788a81f103206947d4d56cba9d87 (diff) | |
download | compcert-kvx-d72fcc2c96f665d0c7608797b1707f2d19daa892.tar.gz compcert-kvx-d72fcc2c96f665d0c7608797b1707f2d19daa892.zip |
MPPA - Long comparisons
Diffstat (limited to 'mppa_k1c/Asmgen.v')
-rw-r--r-- | mppa_k1c/Asmgen.v | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/mppa_k1c/Asmgen.v b/mppa_k1c/Asmgen.v index f1ff363d..710bb32c 100644 --- a/mppa_k1c/Asmgen.v +++ b/mppa_k1c/Asmgen.v @@ -128,6 +128,10 @@ Definition transl_comp (c: comparison) (s: signedness) (r1 r2: ireg) (lbl: label) (k: code) : list instruction := Pcompw (itest_for_cmp c s) RTMP r1 r2 :: Pcb BTwnez RTMP lbl :: k. +Definition transl_compl + (c: comparison) (s: signedness) (r1 r2: ireg) (lbl: label) (k: code) : list instruction := + Pcompd (itest_for_cmp c s) RTMP r1 r2 :: Pcb BTwnez RTMP lbl :: k. + Definition transl_cbranch (cond: condition) (args: list mreg) (lbl: label) (k: code) : res (list instruction ) := match cond, args with @@ -143,19 +147,19 @@ Definition transl_cbranch | Ccompimm c n, a1 :: nil => do r1 <- ireg_of a1; OK (loadimm32 RTMP n (transl_comp c Signed r1 RTMP lbl k)) -(*| Ccompl c, a1 :: a2 :: nil => + | Ccompluimm c n, a1 :: nil => + do r1 <- ireg_of a1; + OK (loadimm64 RTMP n (transl_compl c Unsigned r1 RTMP lbl k)) + | Ccompl c, a1 :: a2 :: nil => do r1 <- ireg_of a1; do r2 <- ireg_of a2; - OK (transl_cond_int64s c rd r1 r2 k) + OK (transl_compl c Signed r1 r2 lbl k) | Ccomplu c, a1 :: a2 :: nil => do r1 <- ireg_of a1; do r2 <- ireg_of a2; - OK (transl_cond_int64u c rd r1 r2 k) + OK (transl_compl c Unsigned r1 r2 lbl k) | Ccomplimm c n, a1 :: nil => do r1 <- ireg_of a1; - OK (transl_condimm_int64s c rd r1 n k) - | Ccompluimm c n, a1 :: nil => - do r1 <- ireg_of a1; - OK (transl_condimm_int64u c rd r1 n k) - | Ccompf c, f1 :: f2 :: nil => + OK (loadimm64 RTMP n (transl_compl c Signed r1 RTMP lbl k)) +(*| Ccompf c, f1 :: f2 :: nil => do r1 <- freg_of f1; do r2 <- freg_of f2; let (insn, normal) := transl_cond_float c rd r1 r2 in OK (insn :: if normal then k else Pxoriw rd rd Int.one :: k) |