summaryrefslogtreecommitdiffstats
path: root/compiler
diff options
context:
space:
mode:
authorbuzbee <buzbee@google.com>2014-04-07 12:35:39 -0700
committerbuzbee <buzbee@google.com>2014-04-07 12:35:39 -0700
commita1983d4dab10b0cc51e9d1b6bcafa9a723fabcd9 (patch)
tree57816a00f986c5711786f44aeba67267b7fe7dd3 /compiler
parent4d3dc8a04da8a80251b381cdb482190363171dc1 (diff)
downloadart-a1983d4dab10b0cc51e9d1b6bcafa9a723fabcd9.tar.gz
art-a1983d4dab10b0cc51e9d1b6bcafa9a723fabcd9.tar.bz2
art-a1983d4dab10b0cc51e9d1b6bcafa9a723fabcd9.zip
Quick compiler: fix CmpLong pair handling
OpCmpLong wasn't properly extracting the low register of a pair. Change-Id: I6d6cc3de1f543f4316e561648f371f793502fddb
Diffstat (limited to 'compiler')
-rw-r--r--compiler/dex/quick/arm/int_arm.cc5
1 files changed, 2 insertions, 3 deletions
diff --git a/compiler/dex/quick/arm/int_arm.cc b/compiler/dex/quick/arm/int_arm.cc
index 1abb91d23..54c118dae 100644
--- a/compiler/dex/quick/arm/int_arm.cc
+++ b/compiler/dex/quick/arm/int_arm.cc
@@ -90,8 +90,7 @@ void ArmMir2Lir::OpEndIT(LIR* it) {
* neg rX
* done:
*/
-void ArmMir2Lir::GenCmpLong(RegLocation rl_dest, RegLocation rl_src1,
- RegLocation rl_src2) {
+void ArmMir2Lir::GenCmpLong(RegLocation rl_dest, RegLocation rl_src1, RegLocation rl_src2) {
LIR* target1;
LIR* target2;
rl_src1 = LoadValueWide(rl_src1, kCoreReg);
@@ -101,7 +100,7 @@ void ArmMir2Lir::GenCmpLong(RegLocation rl_dest, RegLocation rl_src1,
OpRegReg(kOpCmp, rl_src1.reg.GetHigh(), rl_src2.reg.GetHigh());
LIR* branch1 = OpCondBranch(kCondLt, NULL);
LIR* branch2 = OpCondBranch(kCondGt, NULL);
- OpRegRegReg(kOpSub, t_reg, rl_src1.reg, rl_src2.reg);
+ OpRegRegReg(kOpSub, t_reg, rl_src1.reg.GetLow(), rl_src2.reg.GetLow());
LIR* branch3 = OpCondBranch(kCondEq, NULL);
LIR* it = OpIT(kCondHi, "E");