Revision: 20248
Author:   [email protected]
Date:     Tue Mar 25 13:45:17 2014 UTC
Log:      ARM64: Minor improvement in LCodeGen::DoCheckInstanceType.

[email protected]

Review URL: https://codereview.chromium.org/207453008
http://code.google.com/p/v8/source/detail?r=20248

Modified:
 /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.cc
 /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.h

=======================================
--- /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.cc Tue Mar 25 13:35:19 2014 UTC +++ /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.cc Tue Mar 25 13:45:17 2014 UTC
@@ -1078,18 +1078,18 @@

void LCodeGen::DeoptimizeIfNegative(Register rt, LEnvironment* environment) {
   int sign_bit = rt.Is64Bits() ? kXSignBit : kWSignBit;
-  DeoptimizeBranch(environment, reg_bit_set, rt, sign_bit);
+  DeoptimizeIfBitSet(rt, sign_bit, environment);
 }


 void LCodeGen::DeoptimizeIfSmi(Register rt,
                                LEnvironment* environment) {
-  DeoptimizeBranch(environment, reg_bit_clear, rt, MaskToBit(kSmiTagMask));
+  DeoptimizeIfBitClear(rt, MaskToBit(kSmiTagMask), environment);
 }


 void LCodeGen::DeoptimizeIfNotSmi(Register rt, LEnvironment* environment) {
-  DeoptimizeBranch(environment, reg_bit_set, rt, MaskToBit(kSmiTagMask));
+  DeoptimizeIfBitSet(rt, MaskToBit(kSmiTagMask), environment);
 }


@@ -1114,6 +1114,20 @@
   __ TestForMinusZero(input);
   DeoptimizeIf(vs, environment);
 }
+
+
+void LCodeGen::DeoptimizeIfBitSet(Register rt,
+                                  int bit,
+                                  LEnvironment* environment) {
+  DeoptimizeBranch(environment, reg_bit_set, rt, bit);
+}
+
+
+void LCodeGen::DeoptimizeIfBitClear(Register rt,
+                                    int bit,
+                                    LEnvironment* environment) {
+  DeoptimizeBranch(environment, reg_bit_clear, rt, bit);
+}


 void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) {
@@ -2184,10 +2198,11 @@

     if (IsPowerOf2(mask)) {
       ASSERT((tag == 0) || (tag == mask));
- // TODO(all): We might be able to use tbz/tbnz if we can guarantee that
-      // the deopt handler is reachable by a tbz instruction.
-      __ Tst(scratch, mask);
-      DeoptimizeIf(tag == 0 ? ne : eq, instr->environment());
+      if (tag == 0) {
+        DeoptimizeIfBitSet(scratch, MaskToBit(mask), instr->environment());
+      } else {
+ DeoptimizeIfBitClear(scratch, MaskToBit(mask), instr->environment());
+      }
     } else {
       if (tag == 0) {
         __ Tst(scratch, mask);
=======================================
--- /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.h Mon Mar 24 16:41:37 2014 UTC +++ /branches/bleeding_edge/src/arm64/lithium-codegen-arm64.h Tue Mar 25 13:45:17 2014 UTC
@@ -237,6 +237,8 @@
                            Heap::RootListIndex index,
                            LEnvironment* environment);
void DeoptimizeIfMinusZero(DoubleRegister input, LEnvironment* environment);
+  void DeoptimizeIfBitSet(Register rt, int bit, LEnvironment* environment);
+ void DeoptimizeIfBitClear(Register rt, int bit, LEnvironment* environment);
   void ApplyCheckIf(Condition cc, LBoundsCheck* check);

   MemOperand PrepareKeyedExternalArrayOperand(Register key,

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to