Chromium Code Reviews| Index: src/ia32/lithium-codegen-ia32.cc |
| =================================================================== |
| --- src/ia32/lithium-codegen-ia32.cc (revision 6782) |
| +++ src/ia32/lithium-codegen-ia32.cc (working copy) |
| @@ -43,13 +43,20 @@ |
| public: |
| SafepointGenerator(LCodeGen* codegen, |
| LPointerMap* pointers, |
| - int deoptimization_index) |
| + int deoptimization_index, |
| + bool ensure_reloc_space = false) |
| : codegen_(codegen), |
| pointers_(pointers), |
| - deoptimization_index_(deoptimization_index) { } |
| + deoptimization_index_(deoptimization_index), |
| + ensure_reloc_space_(ensure_reloc_space) { } |
| virtual ~SafepointGenerator() { } |
| virtual void Generate() { |
| + // Ensure that we have enough space in the reloc info to patch |
| + // this with calls when doing deoptimization. |
| + if (ensure_reloc_space_) { |
| + codegen_->masm()->RecordComment(NULL, true); |
|
Kevin Millikin (Chromium)
2011/02/15 12:19:15
I guess printing comments works with NULL strings?
Rico
2011/02/15 13:33:00
Printing with null works, but I changed this to a
|
| + } |
| codegen_->RecordSafepoint(pointers_, deoptimization_index_); |
| } |
| @@ -57,6 +64,7 @@ |
| LCodeGen* codegen_; |
| LPointerMap* pointers_; |
| int deoptimization_index_; |
| + bool ensure_reloc_space_; |
| }; |
| @@ -3731,9 +3739,13 @@ |
| LEnvironment* env = instr->deoptimization_environment(); |
| RecordPosition(pointers->position()); |
| RegisterEnvironmentForDeoptimization(env); |
| + // Create safepoint generator that will also ensure enough space in the |
| + // reloc info for patching in deoptimization (since this is invoking a |
| + // builtin) |
| SafepointGenerator safepoint_generator(this, |
| pointers, |
| - env->deoptimization_index()); |
| + env->deoptimization_index(), |
| + true); |
| __ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
| __ push(Immediate(Smi::FromInt(strict_mode_flag()))); |
| __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION, &safepoint_generator); |