Index: src/ia32/codegen-ia32.cc |
diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc |
index ee6f788c53ae9084dc6b048166fa110fb9ce5150..7e934939dfe85dc01ddb614e6dd2a14189ff0705 100644 |
--- a/src/ia32/codegen-ia32.cc |
+++ b/src/ia32/codegen-ia32.cc |
@@ -183,7 +183,7 @@ void CodeGenerator::Generate(CompilationInfo* info) { |
ASSERT_EQ(0, loop_nesting_); |
loop_nesting_ = info->is_in_loop() ? 1 : 0; |
- Isolate::Current()->set_jump_target_compiling_deferred_code(false); |
+ masm()->isolate()->set_jump_target_compiling_deferred_code(false); |
{ |
CodeGenState state(this); |
@@ -556,7 +556,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) { |
__ sar(val, 1); |
// If there was an overflow, bits 30 and 31 of the original number disagree. |
__ xor_(val, 0x80000000u); |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope fscope(SSE2); |
__ cvtsi2sd(xmm0, Operand(val)); |
} else { |
@@ -574,7 +574,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) { |
no_reg, &allocation_failed); |
VirtualFrame* clone = new VirtualFrame(frame_); |
scratch.Unuse(); |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope fscope(SSE2); |
__ movdbl(FieldOperand(val, HeapNumber::kValueOffset), xmm0); |
} else { |
@@ -587,7 +587,7 @@ void CodeGenerator::ConvertInt32ResultToNumber(Result* value) { |
RegisterFile empty_regs; |
SetFrame(clone, &empty_regs); |
__ bind(&allocation_failed); |
- if (!Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
// Pop the value from the floating point stack. |
__ fstp(0); |
} |
@@ -614,7 +614,7 @@ void CodeGenerator::Load(Expression* expr) { |
safe_int32_mode_enabled() && |
expr->side_effect_free() && |
expr->num_bit_ops() > 2 && |
- Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
BreakTarget unsafe_bailout; |
JumpTarget done; |
unsafe_bailout.set_expected_height(frame_->height()); |
@@ -995,7 +995,7 @@ class DeferredInlineBinaryOperation: public DeferredCode { |
Label* DeferredInlineBinaryOperation::NonSmiInputLabel() { |
if (Token::IsBitOp(op_) && |
- Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
return &non_smi_input_; |
} else { |
return entry_label(); |
@@ -1018,7 +1018,7 @@ void DeferredInlineBinaryOperation::JumpToConstantRhs(Condition cond, |
void DeferredInlineBinaryOperation::Generate() { |
// Registers are not saved implicitly for this stub, so we should not |
// tread on the registers that were not passed to us. |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2) && |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2) && |
((op_ == Token::ADD) || |
(op_ == Token::SUB) || |
(op_ == Token::MUL) || |
@@ -1154,7 +1154,7 @@ void DeferredInlineBinaryOperation::GenerateNonSmiInput() { |
// The left_ and right_ registers have not been initialized yet. |
__ mov(right_, Immediate(smi_value_)); |
__ mov(left_, Operand(dst_)); |
- if (!Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
__ jmp(entry_label()); |
return; |
} else { |
@@ -1267,7 +1267,7 @@ void DeferredInlineBinaryOperation::GenerateAnswerOutOfRange() { |
// This trashes right_. |
__ AllocateHeapNumber(left_, right_, no_reg, &after_alloc_failure2); |
__ bind(&allocation_ok); |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2) && |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2) && |
op_ != Token::SHR) { |
CpuFeatures::Scope use_sse2(SSE2); |
ASSERT(Token::IsBitOp(op_)); |
@@ -3032,7 +3032,7 @@ void CodeGenerator::ConstantSmiComparison(Condition cc, |
// constant smi. If the non-smi is a heap number and this is not |
// a loop condition, inline the floating point code. |
if (!is_loop_condition && |
- Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
// Right side is a constant smi and left side has been checked |
// not to be a smi. |
CpuFeatures::Scope use_sse2(SSE2); |
@@ -3196,7 +3196,7 @@ void CodeGenerator::GenerateInlineNumberComparison(Result* left_side, |
ASSERT(right_side->is_register()); |
JumpTarget not_numbers; |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope use_sse2(SSE2); |
// Load left and right operand into registers xmm0 and xmm1 and compare. |
@@ -3346,7 +3346,7 @@ void CodeGenerator::CallApplyLazy(Expression* applicand, |
__ j(not_equal, &build_args); |
__ mov(ecx, FieldOperand(eax, JSFunction::kCodeEntryOffset)); |
__ sub(Operand(ecx), Immediate(Code::kHeaderSize - kHeapObjectTag)); |
- Handle<Code> apply_code(Isolate::Current()->builtins()->builtin( |
+ Handle<Code> apply_code(masm()->isolate()->builtins()->builtin( |
Builtins::FunctionApply)); |
__ cmp(Operand(ecx), Immediate(apply_code)); |
__ j(not_equal, &build_args); |
@@ -3473,7 +3473,7 @@ void DeferredStackCheck::Generate() { |
void CodeGenerator::CheckStack() { |
DeferredStackCheck* deferred = new DeferredStackCheck; |
ExternalReference stack_limit = |
- ExternalReference::address_of_stack_limit(); |
+ ExternalReference::address_of_stack_limit(masm()->isolate()); |
__ cmp(esp, Operand::StaticVariable(stack_limit)); |
deferred->Branch(below); |
deferred->BindExit(); |
@@ -4647,7 +4647,8 @@ void CodeGenerator::VisitTryCatchStatement(TryCatchStatement* node) { |
function_return_is_shadowed_ = function_return_was_shadowed; |
// Get an external reference to the handler address. |
- ExternalReference handler_address(Isolate::k_handler_address); |
+ ExternalReference handler_address(Isolate::k_handler_address, |
+ masm()->isolate()); |
// Make sure that there's nothing left on the stack above the |
// handler structure. |
@@ -4773,7 +4774,8 @@ void CodeGenerator::VisitTryFinallyStatement(TryFinallyStatement* node) { |
function_return_is_shadowed_ = function_return_was_shadowed; |
// Get an external reference to the handler address. |
- ExternalReference handler_address(Isolate::k_handler_address); |
+ ExternalReference handler_address(Isolate::k_handler_address, |
+ masm()->isolate()); |
// If we can fall off the end of the try block, unlink from the try |
// chain and set the state on the frame to FALLING. |
@@ -7446,13 +7448,14 @@ void CodeGenerator::GenerateRandomHeapNumber( |
__ bind(&heapnumber_allocated); |
__ PrepareCallCFunction(0, ebx); |
- __ CallCFunction(ExternalReference::random_uint32_function(), 0); |
+ __ CallCFunction(ExternalReference::random_uint32_function(masm()->isolate()), |
+ 0); |
// Convert 32 random bits in eax to 0.(32 random bits) in a double |
// by computing: |
// ( 1.(20 0s)(32 random bits) x 2^20 ) - (1.0 x 2^20)). |
// This is implemented on both SSE2 and FPU. |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope fscope(SSE2); |
__ mov(ebx, Immediate(0x49800000)); // 1.0 x 2^20 as single. |
__ movd(xmm1, Operand(ebx)); |
@@ -7669,7 +7672,7 @@ void CodeGenerator::GenerateGetFromCache(ZoneList<Expression*>* args) { |
int cache_id = Smi::cast(*(args->at(0)->AsLiteral()->handle()))->value(); |
Handle<FixedArray> jsfunction_result_caches( |
- Isolate::Current()->global_context()->jsfunction_result_caches()); |
+ masm()->isolate()->global_context()->jsfunction_result_caches()); |
if (jsfunction_result_caches->length() <= cache_id) { |
__ Abort("Attempt to use undefined cache."); |
frame_->Push(FACTORY->undefined_value()); |
@@ -7858,7 +7861,7 @@ void CodeGenerator::GenerateMathPow(ZoneList<Expression*>* args) { |
ASSERT(args->length() == 2); |
Load(args->at(0)); |
Load(args->at(1)); |
- if (!Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
Result res = frame_->CallRuntime(Runtime::kMath_pow, 2); |
frame_->Push(&res); |
} else { |
@@ -8075,7 +8078,7 @@ void CodeGenerator::GenerateMathSqrt(ZoneList<Expression*>* args) { |
ASSERT_EQ(args->length(), 1); |
Load(args->at(0)); |
- if (!Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (!masm()->isolate()->cpu_features()->IsSupported(SSE2)) { |
Result result = frame()->CallRuntime(Runtime::kMath_sqrt, 1); |
frame()->Push(&result); |
} else { |
@@ -9388,7 +9391,7 @@ void DeferredReferenceGetNamedValue::Generate() { |
__ mov(eax, receiver_); |
} |
__ Set(ecx, Immediate(name_)); |
- Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Handle<Code> ic(masm()->isolate()->builtins()->builtin( |
Builtins::LoadIC_Initialize)); |
RelocInfo::Mode mode = is_contextual_ |
? RelocInfo::CODE_TARGET_CONTEXT |
@@ -9468,7 +9471,7 @@ void DeferredReferenceGetKeyedValue::Generate() { |
// it in the IC initialization code and patch the cmp instruction. |
// This means that we cannot allow test instructions after calls to |
// KeyedLoadIC stubs in other places. |
- Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Handle<Code> ic(masm()->isolate()->builtins()->builtin( |
Builtins::KeyedLoadIC_Initialize)); |
__ call(ic, RelocInfo::CODE_TARGET); |
// The delta from the start of the map-compare instruction to the |
@@ -9570,7 +9573,7 @@ void DeferredReferenceSetKeyedValue::Generate() { |
} |
// Call the IC stub. |
- Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Handle<Code> ic(masm()->isolate()->builtins()->builtin( |
(strict_mode_ == kStrictMode) ? Builtins::KeyedStoreIC_Initialize_Strict |
: Builtins::KeyedStoreIC_Initialize)); |
__ call(ic, RelocInfo::CODE_TARGET); |
@@ -9595,7 +9598,7 @@ Result CodeGenerator::EmitNamedLoad(Handle<String> name, bool is_contextual) { |
bool contextual_load_in_builtin = |
is_contextual && |
- (Isolate::Current()->bootstrapper()->IsActive() || |
+ (masm()->isolate()->bootstrapper()->IsActive() || |
(!info_->closure().is_null() && info_->closure()->IsBuiltin())); |
Result result; |
@@ -10193,7 +10196,7 @@ MemCopyFunction CreateMemCopyFunction() { |
__ int3(); |
__ bind(&ok); |
} |
- if (Isolate::Current()->cpu_features()->IsSupported(SSE2)) { |
+ if (masm.isolate()->cpu_features()->IsSupported(SSE2)) { |
CpuFeatures::Scope enable(SSE2); |
__ push(edi); |
__ push(esi); |