aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/arm/i64_smulh.S
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2016-10-25 19:53:38 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2016-10-25 19:53:38 +0200
commit88c717e497e0e8a2e6df12418833e46c56291724 (patch)
treee0f3ce4a7bcbfab44e9d2bf664b1895089387e26 /runtime/arm/i64_smulh.S
parentfc8f28be257464c7b169a61b079ba19675f08e35 (diff)
downloadcompcert-kvx-88c717e497e0e8a2e6df12418833e46c56291724.tar.gz
compcert-kvx-88c717e497e0e8a2e6df12418833e46c56291724.zip
i64_smulh: revert to conditional branches instead of predicated insns
"subslt" changes the flags, affecting the condition of the "sbclt" that follows.
Diffstat (limited to 'runtime/arm/i64_smulh.S')
-rw-r--r--runtime/arm/i64_smulh.S16
1 files changed, 8 insertions, 8 deletions
diff --git a/runtime/arm/i64_smulh.S b/runtime/arm/i64_smulh.S
index 8e721c68..476f51ce 100644
--- a/runtime/arm/i64_smulh.S
+++ b/runtime/arm/i64_smulh.S
@@ -61,16 +61,16 @@ FUNCTION(__i64_smulh)
ADC r6, r6, r5
@@@ subtract X if Y < 0
cmp Reg1HI, #0
- itt lt
- subs.lt r7, r7, Reg0LO
- sbcs.lt r6, r6, Reg0HI
+ bge 1f
+ subs r7, r7, Reg0LO
+ sbcs r6, r6, Reg0HI
@@@ subtract Y if X < 0
- cmp Reg0HI, #0
- itt lt
- subs.lt r7, r7, Reg1LO
- sbcs.lt r6, r6, Reg1HI
+1: cmp Reg0HI, #0
+ bge 2f
+ subs r7, r7, Reg1LO
+ sbcs r6, r6, Reg1HI
@@@ return result in Reg0 pair
- mov Reg0LO, r7
+2: mov Reg0LO, r7
mov Reg0HI, r6
pop {r4, r5, r6, r7}
bx lr