OSDN Git Service

Clean up intrinsic Math.abs(float/double).
authorVladimir Marko <vmarko@google.com>
Wed, 19 Mar 2014 11:56:59 +0000 (11:56 +0000)
committerVladimir Marko <vmarko@google.com>
Thu, 20 Mar 2014 15:30:51 +0000 (15:30 +0000)
Don't load 0x7fffffff into register.

Change-Id: I0197f9f3ad33db1f6eb09a9b4113299c00f500e3

compiler/dex/quick/gen_invoke.cc

index 55d50ae..e3dc554 100644 (file)
@@ -1208,10 +1208,7 @@ bool Mir2Lir::GenInlinedAbsFloat(CallInfo* info) {
   rl_src = LoadValue(rl_src, kCoreReg);
   RegLocation rl_dest = InlineTarget(info);
   RegLocation rl_result = EvalLoc(rl_dest, kCoreReg, true);
-  int signMask = AllocTemp();
-  LoadConstant(signMask, 0x7fffffff);
-  OpRegRegReg(kOpAnd, rl_result.reg.GetReg(), rl_src.reg.GetReg(), signMask);
-  FreeTemp(signMask);
+  OpRegRegImm(kOpAnd, rl_result.reg.GetReg(), rl_src.reg.GetReg(), 0x7fffffff);
   StoreValue(rl_dest, rl_result);
   return true;
 }
@@ -1226,12 +1223,7 @@ bool Mir2Lir::GenInlinedAbsDouble(CallInfo* info) {
   RegLocation rl_dest = InlineTargetWide(info);
   RegLocation rl_result = EvalLoc(rl_dest, kCoreReg, true);
   OpRegCopyWide(rl_result.reg.GetReg(), rl_result.reg.GetHighReg(), rl_src.reg.GetReg(), rl_src.reg.GetHighReg());
-  FreeTemp(rl_src.reg.GetReg());
-  FreeTemp(rl_src.reg.GetHighReg());
-  int signMask = AllocTemp();
-  LoadConstant(signMask, 0x7fffffff);
-  OpRegReg(kOpAnd, rl_result.reg.GetHighReg(), signMask);
-  FreeTemp(signMask);
+  OpRegImm(kOpAnd, rl_result.reg.GetHighReg(), 0x7fffffff);
   StoreValueWide(rl_dest, rl_result);
   return true;
 }