| Index: vm/stub_code_ia32.cc
|
| ===================================================================
|
| --- vm/stub_code_ia32.cc (revision 2842)
|
| +++ vm/stub_code_ia32.cc (working copy)
|
| @@ -420,8 +420,7 @@
|
| __ pushl(ECX); // Preserve ic-data array.
|
| // First resolve the function to get the function object.
|
|
|
| - // Setup space for return value on stack by pushing smi 0.
|
| - __ pushl(Immediate(0));
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EAX); // Push receiver.
|
| __ CallRuntimeFromStub(kResolveCompileInstanceFunctionRuntimeEntry);
|
| __ popl(EAX); // Remove receiver pushed earlier.
|
| @@ -456,7 +455,7 @@
|
| __ pushl(EDX); // Preserve ic-data array.
|
| __ pushl(EDI); // Preserve arguments descriptor array.
|
|
|
| - __ pushl(Immediate(0));
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EAX); // Push receiver.
|
| __ pushl(EDX); // Ic-data array.
|
| __ CallRuntimeFromStub(kResolveImplicitClosureFunctionRuntimeEntry);
|
| @@ -491,7 +490,7 @@
|
| __ pushl(EDX); // Preserve ic-data array.
|
| __ pushl(EDI); // Preserve arguments descriptor array.
|
|
|
| - __ pushl(Immediate(0));
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EAX); // Push receiver.
|
| __ pushl(EDX); // Ic-data array.
|
| __ CallRuntimeFromStub(kResolveImplicitClosureThroughGetterRuntimeEntry);
|
| @@ -510,7 +509,7 @@
|
|
|
| // ECX: Closure object.
|
| // EDI: Arguments descriptor array.
|
| - __ pushl(Immediate(0)); // Result from invoking Closure.
|
| + __ pushl(raw_null); // Setup space on stack for result from invoking Closure.
|
| __ pushl(ECX); // Closure object.
|
| __ pushl(EDI); // Arguments descriptor.
|
| __ movl(EDI, FieldAddress(EDI, Array::data_offset()));
|
| @@ -546,8 +545,7 @@
|
| // ECX: raw_null.
|
| // EDI: argument descriptor array.
|
|
|
| - // Setup space for return value on stack by pushing smi 0.
|
| - __ pushl(Immediate(0)); // Result from noSuchMethod.
|
| + __ pushl(raw_null); // Setup space on stack for result from noSuchMethod.
|
| __ pushl(EAX); // Receiver.
|
| __ pushl(EDX); // IC-data array.
|
| __ pushl(EDI); // Argument descriptor array.
|
| @@ -702,7 +700,7 @@
|
| // into the runtime.
|
| __ Bind(&slow_case);
|
| __ EnterFrame(0);
|
| - __ pushl(raw_null); // Push Null object for return value.
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ pushl(EDX); // Array length as Smi.
|
| __ pushl(ECX); // Element type.
|
| __ pushl(raw_null); // Null instantiator.
|
| @@ -794,8 +792,7 @@
|
| // calling into the runtime.
|
| __ EnterFrame(0);
|
|
|
| - // Setup space for return value on stack by pushing smi 0.
|
| - __ pushl(Immediate(0)); // Result from reporting the error.
|
| + __ pushl(raw_null); // Setup space on stack for result from error reporting.
|
| __ pushl(EDI); // Non-closure object.
|
| // Total number of args is the first Smi in args descriptor array (EDX).
|
| __ movl(EDI, FieldAddress(EDX, Array::data_offset())); // Load num_args.
|
| @@ -938,6 +935,8 @@
|
| // EAX: new allocated RawContext object.
|
| // EBX and EDX are destroyed.
|
| void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
|
| + const Immediate raw_null =
|
| + Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| if (FLAG_inline_alloc) {
|
| const Class& context_class = Class::ZoneHandle(Object::context_class());
|
| Label slow_case;
|
| @@ -1024,8 +1023,7 @@
|
| }
|
| // Create a stub frame.
|
| __ EnterFrame(0);
|
| - const Context& new_context = Context::ZoneHandle();
|
| - __ PushObject(new_context); // Push Null context for return value.
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ SmiTag(EDX);
|
| __ pushl(EDX);
|
| __ CallRuntimeFromStub(kAllocateContextRuntimeEntry); // Allocate context.
|
| @@ -1205,8 +1203,7 @@
|
| }
|
| // Create a stub frame.
|
| __ EnterFrame(0);
|
| - const Object& new_object = Object::ZoneHandle();
|
| - __ PushObject(new_object); // Push Null object for return value.
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ PushObject(cls); // Push class of object to be allocated.
|
| if (is_cls_parameterized) {
|
| __ pushl(EAX); // Push type arguments of object to be allocated.
|
| @@ -1354,8 +1351,7 @@
|
| }
|
| // Create a stub frame.
|
| __ EnterFrame(0);
|
| - const Closure& new_closure = Closure::ZoneHandle();
|
| - __ PushObject(new_closure); // Push Null closure for return value.
|
| + __ pushl(raw_null); // Setup space on stack for return value.
|
| __ PushObject(func);
|
| if (is_implicit_static_closure) {
|
| __ CallRuntimeFromStub(kAllocateImplicitStaticClosureRuntimeEntry);
|
| @@ -1408,13 +1404,14 @@
|
| // noSuchMethod(InvocationMirror call).
|
| // Also, the class NoSuchMethodException has to be modified accordingly.
|
| // Total number of args is the first Smi in args descriptor array (EDX).
|
| + const Immediate raw_null =
|
| + Immediate(reinterpret_cast<intptr_t>(Object::null()));
|
| __ movl(EDI, FieldAddress(EDX, Array::data_offset()));
|
| __ SmiUntag(EDI);
|
| __ movl(EAX, Address(EBP, EDI, TIMES_4, kWordSize)); // Get receiver.
|
|
|
| __ EnterFrame(0);
|
| - // Setup space for return value on stack by pushing smi 0.
|
| - __ pushl(Immediate(0)); // Result from noSuchMethod.
|
| + __ pushl(raw_null); // Setup space on stack for result from noSuchMethod.
|
| __ pushl(EAX); // Receiver.
|
| __ pushl(ECX); // IC data array.
|
| __ pushl(EDX); // Arguments descriptor array.
|
| @@ -1532,10 +1529,9 @@
|
| __ movl(EAX, FieldAddress(EDX, Array::data_offset()));
|
| __ leal(EAX, Address(ESP, EAX, TIMES_2, 0)); // EAX is Smi.
|
| __ EnterFrame(0);
|
| - // Setup space for return value on stack by pushing smi 0.
|
| __ pushl(EDX); // Preserve arguments array.
|
| __ pushl(ECX); // Preserve IC data array
|
| - __ pushl(Immediate(0)); // Space for result (target code object).
|
| + __ pushl(raw_null); // Setup space on stack for result (target code object).
|
| __ movl(EDX, FieldAddress(EDX, Array::data_offset()));
|
| // Push call arguments.
|
| for (intptr_t i = 0; i < num_args; i++) {
|
|
|