aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/Asmblockgen.v
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-05-09 16:59:36 +0200
committerCyril SIX <cyril.six@kalray.eu>2019-05-09 16:59:57 +0200
commit94daba603cfb3f3be26f4b7e7215bdd695e51179 (patch)
treed99d1b0aee3485b023c38d99a73f7ec6a560f34c /mppa_k1c/Asmblockgen.v
parent1bed3383fb21e7604320c7eb4c877ceded447efa (diff)
downloadcompcert-kvx-94daba603cfb3f3be26f4b7e7215bdd695e51179.tar.gz
compcert-kvx-94daba603cfb3f3be26f4b7e7215bdd695e51179.zip
Exploiting immediate comparisons
Diffstat (limited to 'mppa_k1c/Asmblockgen.v')
-rw-r--r--mppa_k1c/Asmblockgen.v20
1 files changed, 14 insertions, 6 deletions
diff --git a/mppa_k1c/Asmblockgen.v b/mppa_k1c/Asmblockgen.v
index dc55715a..f2292f9a 100644
--- a/mppa_k1c/Asmblockgen.v
+++ b/mppa_k1c/Asmblockgen.v
@@ -135,10 +135,18 @@ 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 ::g Pcb BTwnez RTMP lbl ::g k.
+Definition transl_compi
+ (c: comparison) (s: signedness) (r: ireg) (imm: int) (lbl: label) (k: code) : list instruction :=
+ Pcompiw (itest_for_cmp c s) RTMP r imm ::g Pcb BTwnez RTMP lbl ::g k.
+
Definition transl_compl
(c: comparison) (s: signedness) (r1 r2: ireg) (lbl: label) (k: code) : list instruction :=
Pcompl (itest_for_cmp c s) RTMP r1 r2 ::g Pcb BTwnez RTMP lbl ::g k.
+Definition transl_compil
+ (c: comparison) (s: signedness) (r: ireg) (imm: int64) (lbl: label) (k: code) : list instruction :=
+ Pcompil (itest_for_cmp c s) RTMP r imm ::g Pcb BTwnez RTMP lbl ::g k.
+
Definition select_comp (n: int) (c: comparison) : option comparison :=
if Int.eq n Int.zero then
match c with
@@ -156,10 +164,10 @@ Definition transl_opt_compuimm
match c with
| Ceq => Pcbu BTweqz r1 lbl ::g k
| Cne => Pcbu BTwnez r1 lbl ::g k
- | _ => loadimm32 RTMP n ::g (transl_comp c Unsigned r1 RTMP lbl k)
+ | _ => transl_compi c Unsigned r1 n lbl k
end
else
- loadimm32 RTMP n ::g (transl_comp c Unsigned r1 RTMP lbl k)
+ transl_compi c Unsigned r1 n lbl k
.
(* Definition transl_opt_compuimm
@@ -192,10 +200,10 @@ Definition transl_opt_compluimm
match c with
| Ceq => Pcbu BTdeqz r1 lbl ::g k
| Cne => Pcbu BTdnez r1 lbl ::g k
- | _ => loadimm64 RTMP n ::g (transl_compl c Unsigned r1 RTMP lbl k)
+ | _ => transl_compil c Unsigned r1 n lbl k
end
else
- loadimm64 RTMP n ::g (transl_compl c Unsigned r1 RTMP lbl k)
+ transl_compil c Unsigned r1 n lbl k
.
Definition transl_comp_float32 (cmp: comparison) (r1 r2: ireg) (lbl: label) (k: code) :=
@@ -239,7 +247,7 @@ Definition transl_cbranch
OK (if Int.eq n Int.zero then
Pcb (btest_for_cmpswz c) r1 lbl ::g k
else
- loadimm32 RTMP n ::g (transl_comp c Signed r1 RTMP lbl k)
+ transl_compi c Signed r1 n lbl k
)
| Ccompluimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
@@ -255,7 +263,7 @@ Definition transl_cbranch
OK (if Int64.eq n Int64.zero then
Pcb (btest_for_cmpsdz c) r1 lbl ::g k
else
- loadimm64 RTMP n ::g (transl_compl c Signed r1 RTMP lbl k)
+ transl_compil c Signed r1 n lbl k
)
| Ccompf c, a1 :: a2 :: nil =>
do r1 <- ireg_of a1; do r2 <- ireg_of a2;