Index: src/mips/code-stubs-mips.cc |
diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc |
index 5de535acb881cd38f020064fa05ff3ec3dad1dcd..9f0d535416c6c8c3c04b2c3bc63ed94f067b690a 100644 |
--- a/src/mips/code-stubs-mips.cc |
+++ b/src/mips/code-stubs-mips.cc |
@@ -38,6 +38,17 @@ namespace v8 { |
namespace internal { |
+void KeyedLoadFastElementStub::InitializeInterfaceDescriptor( |
+ Isolate* isolate, |
+ CodeStubInterfaceDescriptor* descriptor) { |
+ static Register registers[] = { a1, a0 }; |
+ descriptor->register_param_count_ = 2; |
+ descriptor->register_params_ = registers; |
+ descriptor->deoptimization_handler_ = |
+ isolate->builtins()->KeyedLoadIC_Miss(); |
+} |
+ |
+ |
#define __ ACCESS_MASM(masm) |
static void EmitIdenticalObjectComparison(MacroAssembler* masm, |
@@ -500,7 +511,7 @@ void FastCloneShallowObjectStub::Generate(MacroAssembler* masm) { |
// 52 fraction bits (20 in the first word, 32 in the second). Zeros is a |
// scratch register. Destroys the source register. No GC occurs during this |
// stub so you don't have to set up the frame. |
-class ConvertToDoubleStub : public CodeStub { |
+class ConvertToDoubleStub : public PlatformCodeStub { |
public: |
ConvertToDoubleStub(Register result_reg_1, |
Register result_reg_2, |
@@ -3893,12 +3904,29 @@ void CodeStub::GenerateStubsAheadOfTime() { |
void CodeStub::GenerateFPStubs() { |
- CEntryStub save_doubles(1, kSaveFPRegs); |
- Handle<Code> code = save_doubles.GetCode(); |
- code->set_is_pregenerated(true); |
- StoreBufferOverflowStub stub(kSaveFPRegs); |
- stub.GetCode()->set_is_pregenerated(true); |
- code->GetIsolate()->set_fp_stubs_generated(true); |
+ SaveFPRegsMode mode = CpuFeatures::IsSupported(FPU) |
+ ? kSaveFPRegs |
+ : kDontSaveFPRegs; |
+ CEntryStub save_doubles(1, mode); |
+ StoreBufferOverflowStub stub(mode); |
+ // These stubs might already be in the snapshot, detect that and don't |
+ // regenerate, which would lead to code stub initialization state being messed |
+ // up. |
+ Code* save_doubles_code = NULL; |
+ Code* store_buffer_overflow_code = NULL; |
+ if (!save_doubles.FindCodeInCache(&save_doubles_code, ISOLATE)) { |
+ if (CpuFeatures::IsSupported(FPU)) { |
+ CpuFeatures::Scope scope2(FPU); |
+ save_doubles_code = *save_doubles.GetCode(); |
+ store_buffer_overflow_code = *stub.GetCode(); |
+ } else { |
+ save_doubles_code = *save_doubles.GetCode(); |
+ store_buffer_overflow_code = *stub.GetCode(); |
+ } |
+ save_doubles_code->set_is_pregenerated(true); |
+ store_buffer_overflow_code->set_is_pregenerated(true); |
+ } |
+ ISOLATE->set_fp_stubs_generated(true); |
} |