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.