aboutsummaryrefslogtreecommitdiffstats
path: root/arm/Asmgen.v
diff options
context:
space:
mode:
authorMichael Schmidt <github@mschmidt.me>2017-12-15 00:01:30 +0100
committerMichael Schmidt <github@mschmidt.me>2017-12-15 00:01:30 +0100
commit73ab7968d862c4d4d883fb3d3215353eba905b0f (patch)
treeed09a92dc480a54eb26987e66d3dfb83fbe03de7 /arm/Asmgen.v
parentcdf6681b3450baa1489c6a62e1903a450c0e2c3f (diff)
downloadcompcert-kvx-73ab7968d862c4d4d883fb3d3215353eba905b0f.tar.gz
compcert-kvx-73ab7968d862c4d4d883fb3d3215353eba905b0f.zip
Introduce 'cmn' instruction and optimize compare-with-immediate when negated immediates can be encoded.
Diffstat (limited to 'arm/Asmgen.v')
-rw-r--r--arm/Asmgen.v4
1 files changed, 4 insertions, 0 deletions
diff --git a/arm/Asmgen.v b/arm/Asmgen.v
index ed64e2f0..1d2f360f 100644
--- a/arm/Asmgen.v
+++ b/arm/Asmgen.v
@@ -242,12 +242,16 @@ Definition transl_cond
do r1 <- ireg_of a1;
OK (if is_immed_arith n then
Pcmp r1 (SOimm n) :: k
+ else if is_immed_arith (Int.neg n) then
+ Pcmn r1 (SOimm (Int.neg n)) :: k
else
loadimm IR14 n (Pcmp r1 (SOreg IR14) :: k))
| Ccompuimm c n, a1 :: nil =>
do r1 <- ireg_of a1;
OK (if is_immed_arith n then
Pcmp r1 (SOimm n) :: k
+ else if is_immed_arith (Int.neg n) then
+ Pcmn r1 (SOimm (Int.neg n)) :: k
else
loadimm IR14 n (Pcmp r1 (SOreg IR14) :: k))
| Ccompf cmp, a1 :: a2 :: nil =>