Chromium Code Reviews| Index: src/mips/macro-assembler-mips.cc |
| diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
| index 81e9ec980e6b8b56e2bf79f275046a4ff1999472..47e55f1379d30d9deaba92a4d4e426bfefb35c37 100644 |
| --- a/src/mips/macro-assembler-mips.cc |
| +++ b/src/mips/macro-assembler-mips.cc |
| @@ -3929,7 +3929,9 @@ static int AddressOffset(ExternalReference ref0, ExternalReference ref1) { |
| void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function, |
| - int stack_space) { |
| + int stack_space, |
| + bool returns_handle, |
| + int return_value_offset_from_fp) { |
| ExternalReference next_address = |
| ExternalReference::handle_scope_next_address(isolate()); |
| const int kNextOffset = 0; |
| @@ -3985,15 +3987,20 @@ void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function, |
| Label promote_scheduled_exception; |
| Label delete_allocated_handles; |
| Label leave_exit_frame; |
| - |
| - // If result is non-zero, dereference to get the result value |
| - // otherwise set it to undefined. |
| - Label skip; |
| - LoadRoot(a0, Heap::kUndefinedValueRootIndex); |
| - Branch(&skip, eq, v0, Operand(zero_reg)); |
| - lw(a0, MemOperand(v0)); |
| - bind(&skip); |
| - mov(v0, a0); |
| + Label return_value_loaded; |
| + |
| + if (returns_handle) { |
| + Label load_return_value; |
| + Branch(&load_return_value, eq, v0, Operand(zero_reg)); |
| + // derefernce returned value |
|
Paul Lind
2013/05/21 16:46:39
nit: Please fix spelling and start with Capital, a
kilvadyb
2013/05/21 17:21:30
Done.
|
| + lw(v0, MemOperand(v0)); |
| + b(&return_value_loaded); |
| + nop(); |
| + bind(&load_return_value); |
| + } |
| + // load value from ReturnValue |
|
Paul Lind
2013/05/21 16:46:39
nits again:
// Load value from ReturnValue.
kilvadyb
2013/05/21 17:21:30
Done.
|
| + lw(v0, MemOperand(fp, return_value_offset_from_fp*kPointerSize)); |
| + bind(&return_value_loaded); |
| // No more valid handles (the result handle was the last one). Restore |
| // previous handle scope. |
| @@ -4024,6 +4031,7 @@ void MacroAssembler::CallApiFunctionAndReturn(ExternalReference function, |
| // HandleScope limit has changed. Delete allocated extensions. |
| bind(&delete_allocated_handles); |
| +// stop("check 3"); |
|
Paul Lind
2013/05/21 16:46:39
This looks wrong. Was this a leftover from some de
kilvadyb
2013/05/21 17:21:30
Done.
|
| sw(s1, MemOperand(s3, kLimitOffset)); |
| mov(s0, v0); |
| mov(a0, v0); |