| Index: src/ia32/stub-cache-ia32.cc
|
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc
|
| index f52aa87553408357361c31b3554b3e381d452726..9b8f096621b5b2710f5c4f18c726e1ba0f139df4 100644
|
| --- a/src/ia32/stub-cache-ia32.cc
|
| +++ b/src/ia32/stub-cache-ia32.cc
|
| @@ -66,8 +66,8 @@ static void ProbeTable(Isolate* isolate,
|
| __ j(not_equal, &miss);
|
|
|
| // Jump to the first instruction in the code stub.
|
| - __ add(Operand(extra), Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| - __ jmp(Operand(extra));
|
| + __ add(extra, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| + __ jmp(extra);
|
|
|
| __ bind(&miss);
|
| } else {
|
| @@ -92,8 +92,8 @@ static void ProbeTable(Isolate* isolate,
|
| __ mov(offset, Operand::StaticArray(offset, times_2, value_offset));
|
|
|
| // Jump to the first instruction in the code stub.
|
| - __ add(Operand(offset), Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| - __ jmp(Operand(offset));
|
| + __ add(offset, Immediate(Code::kHeaderSize - kHeapObjectTag));
|
| + __ jmp(offset);
|
|
|
| // Pop at miss.
|
| __ bind(&miss);
|
| @@ -204,8 +204,8 @@ void StubCache::GenerateProbe(MacroAssembler* masm,
|
| __ add(scratch, FieldOperand(receiver, HeapObject::kMapOffset));
|
| __ xor_(scratch, flags);
|
| __ and_(scratch, (kPrimaryTableSize - 1) << kHeapObjectTagSize);
|
| - __ sub(scratch, Operand(name));
|
| - __ add(Operand(scratch), Immediate(flags));
|
| + __ sub(scratch, name);
|
| + __ add(scratch, Immediate(flags));
|
| __ and_(scratch, (kSecondaryTableSize - 1) << kHeapObjectTagSize);
|
|
|
| // Probe the secondary table.
|
| @@ -318,7 +318,7 @@ void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm,
|
| Register scratch2,
|
| Label* miss_label) {
|
| __ TryGetFunctionPrototype(receiver, scratch1, scratch2, miss_label);
|
| - __ mov(eax, Operand(scratch1));
|
| + __ mov(eax, scratch1);
|
| __ ret(0);
|
| }
|
|
|
| @@ -406,7 +406,7 @@ static void FreeSpaceForFastApiCall(MacroAssembler* masm, Register scratch) {
|
| // frame.
|
| // -----------------------------------
|
| __ pop(scratch);
|
| - __ add(Operand(esp), Immediate(kPointerSize * kFastApiCallArguments));
|
| + __ add(esp, Immediate(kPointerSize * kFastApiCallArguments));
|
| __ push(scratch);
|
| }
|
|
|
| @@ -462,7 +462,7 @@ static MaybeObject* GenerateFastApiCall(MacroAssembler* masm,
|
| __ PrepareCallApiFunction(kApiArgc + kApiStackSpace);
|
|
|
| __ mov(ApiParameterOperand(1), eax); // v8::Arguments::implicit_args_.
|
| - __ add(Operand(eax), Immediate(argc * kPointerSize));
|
| + __ add(eax, Immediate(argc * kPointerSize));
|
| __ mov(ApiParameterOperand(2), eax); // v8::Arguments::values_.
|
| __ Set(ApiParameterOperand(3), Immediate(argc)); // v8::Arguments::length_.
|
| // v8::Arguments::is_construct_call_.
|
| @@ -789,7 +789,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
|
|
| // Update the write barrier for the array address.
|
| // Pass the value being stored in the now unused name_reg.
|
| - __ mov(name_reg, Operand(eax));
|
| + __ mov(name_reg, eax);
|
| __ RecordWriteField(receiver_reg,
|
| offset,
|
| name_reg,
|
| @@ -804,7 +804,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
|
|
| // Update the write barrier for the array address.
|
| // Pass the value being stored in the now unused name_reg.
|
| - __ mov(name_reg, Operand(eax));
|
| + __ mov(name_reg, eax);
|
| __ RecordWriteField(scratch,
|
| offset,
|
| name_reg,
|
| @@ -943,7 +943,7 @@ Register StubCompiler::CheckPrototypes(JSObject* object,
|
| } else if (heap()->InNewSpace(prototype)) {
|
| // Get the map of the current object.
|
| __ mov(scratch1, FieldOperand(reg, HeapObject::kMapOffset));
|
| - __ cmp(Operand(scratch1), Immediate(Handle<Map>(current->map())));
|
| + __ cmp(scratch1, Immediate(Handle<Map>(current->map())));
|
| // Branch on the result of the map check.
|
| __ j(not_equal, miss);
|
| // Check access rights to the global object. This has to happen
|
| @@ -1064,7 +1064,7 @@ MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
|
| __ pop(scratch3); // Get return address to place it below.
|
|
|
| __ push(receiver); // receiver
|
| - __ mov(scratch2, Operand(esp));
|
| + __ mov(scratch2, esp);
|
| ASSERT(!scratch2.is(reg));
|
| __ push(reg); // holder
|
| // Push data from AccessorInfo.
|
| @@ -1095,7 +1095,7 @@ MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
|
|
|
| __ PrepareCallApiFunction(kApiArgc);
|
| __ mov(ApiParameterOperand(0), ebx); // name.
|
| - __ add(Operand(ebx), Immediate(kPointerSize));
|
| + __ add(ebx, Immediate(kPointerSize));
|
| __ mov(ApiParameterOperand(1), ebx); // arguments pointer.
|
|
|
| // Emitting a stub call may try to allocate (if the code is not
|
| @@ -1272,7 +1272,7 @@ void StubCompiler::GenerateLoadInterceptor(JSObject* object,
|
|
|
| void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) {
|
| if (kind_ == Code::KEYED_CALL_IC) {
|
| - __ cmp(Operand(ecx), Immediate(Handle<String>(name)));
|
| + __ cmp(ecx, Immediate(Handle<String>(name)));
|
| __ j(not_equal, miss);
|
| }
|
| }
|
| @@ -1329,7 +1329,7 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
|
| Immediate(Handle<SharedFunctionInfo>(function->shared())));
|
| __ j(not_equal, miss);
|
| } else {
|
| - __ cmp(Operand(edi), Immediate(Handle<JSFunction>(function)));
|
| + __ cmp(edi, Immediate(Handle<JSFunction>(function)));
|
| __ j(not_equal, miss);
|
| }
|
| }
|
| @@ -1460,13 +1460,13 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| __ mov(eax, FieldOperand(edx, JSArray::kLengthOffset));
|
| STATIC_ASSERT(kSmiTagSize == 1);
|
| STATIC_ASSERT(kSmiTag == 0);
|
| - __ add(Operand(eax), Immediate(Smi::FromInt(argc)));
|
| + __ add(eax, Immediate(Smi::FromInt(argc)));
|
|
|
| // Get the element's length into ecx.
|
| __ mov(ecx, FieldOperand(ebx, FixedArray::kLengthOffset));
|
|
|
| // Check if we could survive without allocation.
|
| - __ cmp(eax, Operand(ecx));
|
| + __ cmp(eax, ecx);
|
| __ j(greater, &attempt_to_grow_elements);
|
|
|
| // Check if value is a smi.
|
| @@ -1538,9 +1538,9 @@ MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| __ lea(edx, FieldOperand(ebx,
|
| eax, times_half_pointer_size,
|
| FixedArray::kHeaderSize - argc * kPointerSize));
|
| - __ cmp(edx, Operand(ecx));
|
| + __ cmp(edx, ecx);
|
| __ j(not_equal, &call_builtin);
|
| - __ add(Operand(ecx), Immediate(kAllocationDelta * kPointerSize));
|
| + __ add(ecx, Immediate(kAllocationDelta * kPointerSize));
|
| __ cmp(ecx, Operand::StaticVariable(new_space_allocation_limit));
|
| __ j(above, &call_builtin);
|
|
|
| @@ -1636,7 +1636,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object,
|
|
|
| // Get the array's length into ecx and calculate new length.
|
| __ mov(ecx, FieldOperand(edx, JSArray::kLengthOffset));
|
| - __ sub(Operand(ecx), Immediate(Smi::FromInt(1)));
|
| + __ sub(ecx, Immediate(Smi::FromInt(1)));
|
| __ j(negative, &return_undefined);
|
|
|
| // Get the last element.
|
| @@ -1645,7 +1645,7 @@ MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object,
|
| __ mov(eax, FieldOperand(ebx,
|
| ecx, times_half_pointer_size,
|
| FixedArray::kHeaderSize));
|
| - __ cmp(Operand(eax), Immediate(factory()->the_hole_value()));
|
| + __ cmp(eax, Immediate(factory()->the_hole_value()));
|
| __ j(equal, &call_builtin);
|
|
|
| // Set the array's length.
|
| @@ -2109,10 +2109,10 @@ MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object,
|
| __ sar(ebx, kBitsPerInt - 1);
|
|
|
| // Do bitwise not or do nothing depending on ebx.
|
| - __ xor_(eax, Operand(ebx));
|
| + __ xor_(eax, ebx);
|
|
|
| // Add 1 or do nothing depending on ebx.
|
| - __ sub(eax, Operand(ebx));
|
| + __ sub(eax, ebx);
|
|
|
| // If the result is still negative, go to the slow case.
|
| // This only happens for the most negative smi.
|
| @@ -2195,7 +2195,7 @@ MaybeObject* CallStubCompiler::CompileFastApiCall(
|
|
|
| // Allocate space for v8::Arguments implicit values. Must be initialized
|
| // before calling any runtime function.
|
| - __ sub(Operand(esp), Immediate(kFastApiCallArguments * kPointerSize));
|
| + __ sub(esp, Immediate(kFastApiCallArguments * kPointerSize));
|
|
|
| // Check that the maps haven't changed and find a Holder as a side effect.
|
| CheckPrototypes(JSObject::cast(object), edx, holder,
|
| @@ -2211,7 +2211,7 @@ MaybeObject* CallStubCompiler::CompileFastApiCall(
|
| if (result->IsFailure()) return result;
|
|
|
| __ bind(&miss);
|
| - __ add(Operand(esp), Immediate(kFastApiCallArguments * kPointerSize));
|
| + __ add(esp, Immediate(kFastApiCallArguments * kPointerSize));
|
|
|
| __ bind(&miss_before_stack_reserved);
|
| MaybeObject* maybe_result = GenerateMissBranch();
|
| @@ -2711,7 +2711,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
|
| __ IncrementCounter(counters->keyed_store_field(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(ecx), Immediate(Handle<String>(name)));
|
| + __ cmp(ecx, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| // Generate store field code. Trashes the name register.
|
| @@ -3003,7 +3003,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadField(String* name,
|
| __ IncrementCounter(counters->keyed_load_field(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| GenerateLoadField(receiver, holder, edx, ebx, ecx, edi, index, name, &miss);
|
| @@ -3033,7 +3033,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadCallback(
|
| __ IncrementCounter(counters->keyed_load_callback(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| MaybeObject* result = GenerateLoadCallback(receiver, holder, edx, eax, ebx,
|
| @@ -3068,7 +3068,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadConstant(String* name,
|
| __ IncrementCounter(counters->keyed_load_constant_function(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| GenerateLoadConstant(receiver, holder, edx, ebx, ecx, edi,
|
| @@ -3096,7 +3096,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| __ IncrementCounter(counters->keyed_load_interceptor(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| LookupResult lookup;
|
| @@ -3132,7 +3132,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
|
| __ IncrementCounter(counters->keyed_load_array_length(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| GenerateLoadArrayLength(masm(), edx, ecx, &miss);
|
| @@ -3157,7 +3157,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
|
| __ IncrementCounter(counters->keyed_load_string_length(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| GenerateLoadStringLength(masm(), edx, ecx, ebx, &miss, true);
|
| @@ -3182,7 +3182,7 @@ MaybeObject* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
|
| __ IncrementCounter(counters->keyed_load_function_prototype(), 1);
|
|
|
| // Check that the name has not changed.
|
| - __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| + __ cmp(eax, Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss);
|
|
|
| GenerateLoadFunctionPrototype(masm(), edx, ecx, ebx, &miss);
|
| @@ -3360,7 +3360,7 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) {
|
| // Move argc to ebx and retrieve and tag the JSObject to return.
|
| __ mov(ebx, eax);
|
| __ pop(eax);
|
| - __ or_(Operand(eax), Immediate(kHeapObjectTag));
|
| + __ or_(eax, Immediate(kHeapObjectTag));
|
|
|
| // Remove caller arguments and receiver from the stack and return.
|
| __ pop(ecx);
|
| @@ -3741,10 +3741,10 @@ void KeyedStoreStubCompiler::GenerateStoreExternalArray(
|
| // If the value is NaN or +/-infinity, the result is 0x80000000,
|
| // which is automatically zero when taken mod 2^n, n < 32.
|
| __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
|
| - __ sub(Operand(esp), Immediate(2 * kPointerSize));
|
| + __ sub(esp, Immediate(2 * kPointerSize));
|
| __ fisttp_d(Operand(esp, 0));
|
| __ pop(ebx);
|
| - __ add(Operand(esp), Immediate(kPointerSize));
|
| + __ add(esp, Immediate(kPointerSize));
|
| } else {
|
| ASSERT(CpuFeatures::IsSupported(SSE2));
|
| CpuFeatures::Scope scope(SSE2);
|
| @@ -3953,7 +3953,7 @@ void KeyedStoreStubCompiler::GenerateStoreFastElement(
|
| FixedArray::kHeaderSize));
|
| __ mov(Operand(ecx, 0), eax);
|
| // Make sure to preserve the value in register eax.
|
| - __ mov(edx, Operand(eax));
|
| + __ mov(edx, eax);
|
| __ RecordWrite(edi, ecx, edx, kDontSaveFPRegs);
|
| }
|
|
|
|
|