| Index: src/ia32/lithium-codegen-ia32.cc
|
| diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc
|
| index 1691098f9f7ce0899f4576c0c793c8eb4b9300ec..88f413afa050660956a2bc5276f7b8e40205f124 100644
|
| --- a/src/ia32/lithium-codegen-ia32.cc
|
| +++ b/src/ia32/lithium-codegen-ia32.cc
|
| @@ -1062,7 +1062,7 @@ void LCodeGen::DoConstantD(LConstantD* instr) {
|
| uint64_t int_val = BitCast<uint64_t, double>(v);
|
| int32_t lower = static_cast<int32_t>(int_val);
|
| int32_t upper = static_cast<int32_t>(int_val >> (kBitsPerInt));
|
| - if (isolate()->cpu_features()->IsSupported(SSE4_1)) {
|
| + if (CpuFeatures::IsSupported(SSE4_1)) {
|
| CpuFeatures::Scope scope(SSE4_1);
|
| if (lower != 0) {
|
| __ Set(temp, Immediate(lower));
|
| @@ -2032,7 +2032,7 @@ void LCodeGen::DoReturn(LReturn* instr) {
|
| }
|
|
|
|
|
| -void LCodeGen::DoLoadGlobal(LLoadGlobal* instr) {
|
| +void LCodeGen::DoLoadGlobalCell(LLoadGlobalCell* instr) {
|
| Register result = ToRegister(instr->result());
|
| __ mov(result, Operand::Cell(instr->hydrogen()->cell()));
|
| if (instr->hydrogen()->check_hole_value()) {
|
| @@ -2042,7 +2042,20 @@ void LCodeGen::DoLoadGlobal(LLoadGlobal* instr) {
|
| }
|
|
|
|
|
| -void LCodeGen::DoStoreGlobal(LStoreGlobal* instr) {
|
| +void LCodeGen::DoLoadGlobalGeneric(LLoadGlobalGeneric* instr) {
|
| + ASSERT(ToRegister(instr->context()).is(esi));
|
| + ASSERT(ToRegister(instr->global_object()).is(eax));
|
| + ASSERT(ToRegister(instr->result()).is(eax));
|
| +
|
| + __ mov(ecx, instr->name());
|
| + RelocInfo::Mode mode = instr->for_typeof() ? RelocInfo::CODE_TARGET :
|
| + RelocInfo::CODE_TARGET_CONTEXT;
|
| + Handle<Code> ic = isolate()->builtins()->LoadIC_Initialize();
|
| + CallCode(ic, mode, instr);
|
| +}
|
| +
|
| +
|
| +void LCodeGen::DoStoreGlobalCell(LStoreGlobalCell* instr) {
|
| Register value = ToRegister(instr->InputAt(0));
|
| Operand cell_operand = Operand::Cell(instr->hydrogen()->cell());
|
|
|
| @@ -2060,6 +2073,17 @@ void LCodeGen::DoStoreGlobal(LStoreGlobal* instr) {
|
| }
|
|
|
|
|
| +void LCodeGen::DoStoreGlobalGeneric(LStoreGlobalGeneric* instr) {
|
| + ASSERT(ToRegister(instr->context()).is(esi));
|
| + ASSERT(ToRegister(instr->global_object()).is(edx));
|
| + ASSERT(ToRegister(instr->value()).is(eax));
|
| +
|
| + __ mov(ecx, instr->name());
|
| + Handle<Code> ic = isolate()->builtins()->StoreIC_Initialize();
|
| + CallCode(ic, RelocInfo::CODE_TARGET_CONTEXT, instr);
|
| +}
|
| +
|
| +
|
| void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) {
|
| Register context = ToRegister(instr->context());
|
| Register result = ToRegister(instr->result());
|
| @@ -2304,11 +2328,11 @@ void LCodeGen::DoLoadKeyedSpecializedArrayElement(
|
| break;
|
| case kExternalUnsignedIntArray:
|
| __ mov(result, Operand(external_pointer, key, times_4, 0));
|
| - __ test(Operand(result), Immediate(0x80000000));
|
| + __ test(result, Operand(result));
|
| // TODO(danno): we could be more clever here, perhaps having a special
|
| // version of the stub that detects if the overflow case actually
|
| // happens, and generate code that returns a double rather than int.
|
| - DeoptimizeIf(not_zero, instr->environment());
|
| + DeoptimizeIf(negative, instr->environment());
|
| break;
|
| case kExternalFloatArray:
|
| UNREACHABLE();
|
| @@ -3427,7 +3451,7 @@ void LCodeGen::DoDeferredTaggedToI(LTaggedToI* instr) {
|
| __ jmp(&done);
|
|
|
| __ bind(&heap_number);
|
| - if (isolate()->cpu_features()->IsSupported(SSE3)) {
|
| + if (CpuFeatures::IsSupported(SSE3)) {
|
| CpuFeatures::Scope scope(SSE3);
|
| NearLabel convert;
|
| // Use more powerful conversion when sse3 is available.
|
| @@ -3537,7 +3561,7 @@ void LCodeGen::DoDoubleToI(LDoubleToI* instr) {
|
| // the JS bitwise operations.
|
| __ cvttsd2si(result_reg, Operand(input_reg));
|
| __ cmp(result_reg, 0x80000000u);
|
| - if (isolate()->cpu_features()->IsSupported(SSE3)) {
|
| + if (CpuFeatures::IsSupported(SSE3)) {
|
| // This will deoptimize if the exponent of the input in out of range.
|
| CpuFeatures::Scope scope(SSE3);
|
| NearLabel convert, done;
|
|
|