Index: src/arm/ic-arm.cc |
=================================================================== |
--- src/arm/ic-arm.cc (revision 9808) |
+++ src/arm/ic-arm.cc (working copy) |
@@ -382,10 +382,10 @@ |
// The generated code does not accept smi keys. |
// The generated code falls through if both probes miss. |
-static void GenerateMonomorphicCacheProbe(MacroAssembler* masm, |
- int argc, |
- Code::Kind kind, |
- Code::ExtraICState extra_ic_state) { |
+void CallICBase::GenerateMonomorphicCacheProbe(MacroAssembler* masm, |
+ int argc, |
+ Code::Kind kind, |
+ Code::ExtraICState extra_state) { |
// ----------- S t a t e ------------- |
// -- r1 : receiver |
// -- r2 : name |
@@ -395,7 +395,7 @@ |
// Probe the stub cache. |
Code::Flags flags = Code::ComputeFlags(kind, |
MONOMORPHIC, |
- extra_ic_state, |
+ extra_state, |
NORMAL, |
argc); |
Isolate::Current()->stub_cache()->GenerateProbe( |
@@ -464,7 +464,7 @@ |
} |
-static void GenerateCallNormal(MacroAssembler* masm, int argc) { |
+void CallICBase::GenerateNormal(MacroAssembler* masm, int argc) { |
// ----------- S t a t e ------------- |
// -- r2 : name |
// -- lr : return address |
@@ -486,10 +486,10 @@ |
} |
-static void GenerateCallMiss(MacroAssembler* masm, |
- int argc, |
- IC::UtilityId id, |
- Code::ExtraICState extra_ic_state) { |
+void CallICBase::GenerateMiss(MacroAssembler* masm, |
+ int argc, |
+ IC::UtilityId id, |
+ Code::ExtraICState extra_state) { |
// ----------- S t a t e ------------- |
// -- r2 : name |
// -- lr : return address |
@@ -541,7 +541,7 @@ |
} |
// Invoke the function. |
- CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state) |
+ CallKind call_kind = CallICBase::Contextual::decode(extra_state) |
? CALL_AS_FUNCTION |
: CALL_AS_METHOD; |
ParameterCount actual(argc); |
@@ -553,18 +553,6 @@ |
} |
-void CallIC::GenerateMiss(MacroAssembler* masm, |
- int argc, |
- Code::ExtraICState extra_ic_state) { |
- // ----------- S t a t e ------------- |
- // -- r2 : name |
- // -- lr : return address |
- // ----------------------------------- |
- |
- GenerateCallMiss(masm, argc, IC::kCallIC_Miss, extra_ic_state); |
-} |
- |
- |
void CallIC::GenerateMegamorphic(MacroAssembler* masm, |
int argc, |
Code::ExtraICState extra_ic_state) { |
@@ -580,27 +568,6 @@ |
} |
-void CallIC::GenerateNormal(MacroAssembler* masm, int argc) { |
- // ----------- S t a t e ------------- |
- // -- r2 : name |
- // -- lr : return address |
- // ----------------------------------- |
- |
- GenerateCallNormal(masm, argc); |
- GenerateMiss(masm, argc, Code::kNoExtraICState); |
-} |
- |
- |
-void KeyedCallIC::GenerateMiss(MacroAssembler* masm, int argc) { |
- // ----------- S t a t e ------------- |
- // -- r2 : name |
- // -- lr : return address |
- // ----------------------------------- |
- |
- GenerateCallMiss(masm, argc, IC::kKeyedCallIC_Miss, Code::kNoExtraICState); |
-} |
- |
- |
void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) { |
// ----------- S t a t e ------------- |
// -- r2 : name |
@@ -718,7 +685,7 @@ |
__ JumpIfSmi(r2, &miss); |
__ IsObjectJSStringType(r2, r0, &miss); |
- GenerateCallNormal(masm, argc); |
+ CallICBase::GenerateNormal(masm, argc); |
__ bind(&miss); |
GenerateMiss(masm, argc); |
} |
@@ -1244,6 +1211,47 @@ |
} |
+void KeyedStoreIC::GenerateTransitionElementsSmiToDouble(MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- r2 : receiver |
+ // -- r3 : target map |
+ // -- lr : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in r0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ ElementsTransitionGenerator::GenerateSmiOnlyToDouble(masm, &fail); |
+ __ mov(r0, r2); |
+ __ Ret(); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(r2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1); |
+} |
+ |
+ |
+void KeyedStoreIC::GenerateTransitionElementsDoubleToObject( |
+ MacroAssembler* masm) { |
+ // ---------- S t a t e -------------- |
+ // -- r2 : receiver |
+ // -- r3 : target map |
+ // -- lr : return address |
+ // ----------------------------------- |
+ // Must return the modified receiver in r0. |
+ if (!FLAG_trace_elements_transitions) { |
+ Label fail; |
+ ElementsTransitionGenerator::GenerateDoubleToObject(masm, &fail); |
+ __ mov(r0, r2); |
+ __ Ret(); |
+ __ bind(&fail); |
+ } |
+ |
+ __ push(r2); |
+ __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1); |
+} |
+ |
+ |
void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm, |
StrictModeFlag strict_mode) { |
// ---------- S t a t e -------------- |
@@ -1559,11 +1567,9 @@ |
case Token::LT: |
return lt; |
case Token::GT: |
- // Reverse left and right operands to obtain ECMA-262 conversion order. |
- return lt; |
+ return gt; |
case Token::LTE: |
- // Reverse left and right operands to obtain ECMA-262 conversion order. |
- return ge; |
+ return le; |
case Token::GTE: |
return ge; |
default: |