From ad2c227e019f7494897b427ba9eedbf88c9a5e9e Mon Sep 17 00:00:00 2001 From: "mvstanton@chromium.org" Date: Thu, 18 Apr 2013 15:09:48 +0000 Subject: [PATCH] Saving Hydrogen code stubs in the snapshot requires us to respect the availability of VFP32DREGS. BUG= Review URL: https://codereview.chromium.org/13878011 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14338 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/lithium-codegen-arm.cc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index d2f44b0..c6ba517 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -36,6 +36,14 @@ namespace v8 { namespace internal { +static SaveFPRegsMode GetSaveFPRegsMode() { + // We don't need to save floating point regs when generating the snapshot + return CpuFeatures::IsSafeForSnapshot(VFP32DREGS) + ? kSaveFPRegs + : kDontSaveFPRegs; +} + + class SafepointGenerator : public CallWrapper { public: SafepointGenerator(LCodeGen* codegen, @@ -238,7 +246,12 @@ bool LCodeGen::GeneratePrologue() { __ str(r0, target); // Update the write barrier. This clobbers r3 and r0. __ RecordWriteContextSlot( - cp, target.offset(), r0, r3, GetLinkRegisterState(), kSaveFPRegs); + cp, + target.offset(), + r0, + r3, + GetLinkRegisterState(), + GetSaveFPRegsMode()); } } Comment(";;; End allocate local context"); @@ -3067,7 +3080,7 @@ void LCodeGen::DoStoreContextSlot(LStoreContextSlot* instr) { value, scratch, GetLinkRegisterState(), - kSaveFPRegs, + GetSaveFPRegsMode(), EMIT_REMEMBERED_SET, check_needed); } @@ -4256,7 +4269,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { scratch, temp, GetLinkRegisterState(), - kSaveFPRegs, + GetSaveFPRegsMode(), OMIT_REMEMBERED_SET, OMIT_SMI_CHECK); } @@ -4275,7 +4288,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { value, scratch, GetLinkRegisterState(), - kSaveFPRegs, + GetSaveFPRegsMode(), EMIT_REMEMBERED_SET, check_needed); } @@ -4290,7 +4303,7 @@ void LCodeGen::DoStoreNamedField(LStoreNamedField* instr) { value, object, GetLinkRegisterState(), - kSaveFPRegs, + GetSaveFPRegsMode(), EMIT_REMEMBERED_SET, check_needed); } @@ -4484,7 +4497,7 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) { key, value, GetLinkRegisterState(), - kSaveFPRegs, + GetSaveFPRegsMode(), EMIT_REMEMBERED_SET, check_needed); } -- 2.7.4