From 88c717e497e0e8a2e6df12418833e46c56291724 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 25 Oct 2016 19:53:38 +0200 Subject: i64_smulh: revert to conditional branches instead of predicated insns "subslt" changes the flags, affecting the condition of the "sbclt" that follows. --- runtime/arm/i64_smulh.S | 16 ++++++++-------- 1 file 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 -- cgit