| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_MIPS | 5 #if V8_TARGET_ARCH_MIPS |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 Label zero; | 1095 Label zero; |
| 1096 __ Branch(&zero, eq, cp, Operand(zero_reg)); | 1096 __ Branch(&zero, eq, cp, Operand(zero_reg)); |
| 1097 __ sw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 1097 __ sw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 1098 __ bind(&zero); | 1098 __ bind(&zero); |
| 1099 | 1099 |
| 1100 // Compute the handler entry address and jump to it. | 1100 // Compute the handler entry address and jump to it. |
| 1101 __ li(a1, Operand(pending_handler_code_address)); | 1101 __ li(a1, Operand(pending_handler_code_address)); |
| 1102 __ lw(a1, MemOperand(a1)); | 1102 __ lw(a1, MemOperand(a1)); |
| 1103 __ li(a2, Operand(pending_handler_offset_address)); | 1103 __ li(a2, Operand(pending_handler_offset_address)); |
| 1104 __ lw(a2, MemOperand(a2)); | 1104 __ lw(a2, MemOperand(a2)); |
| 1105 __ Addu(a1, a1, Operand(Code::kHeaderSize - kHeapObjectTag)); | |
| 1106 __ Addu(t9, a1, a2); | 1105 __ Addu(t9, a1, a2); |
| 1107 __ Jump(t9); | 1106 __ Jump(t9, Code::kHeaderSize - kHeapObjectTag); |
| 1108 } | 1107 } |
| 1109 | 1108 |
| 1110 | 1109 |
| 1111 void JSEntryStub::Generate(MacroAssembler* masm) { | 1110 void JSEntryStub::Generate(MacroAssembler* masm) { |
| 1112 Label invoke, handler_entry, exit; | 1111 Label invoke, handler_entry, exit; |
| 1113 Isolate* isolate = masm->isolate(); | 1112 Isolate* isolate = masm->isolate(); |
| 1114 | 1113 |
| 1115 // Registers: | 1114 // Registers: |
| 1116 // a0: entry address | 1115 // a0: entry address |
| 1117 // a1: function | 1116 // a1: function |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1230 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, | 1229 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, |
| 1231 isolate); | 1230 isolate); |
| 1232 __ li(t0, Operand(construct_entry)); | 1231 __ li(t0, Operand(construct_entry)); |
| 1233 } else { | 1232 } else { |
| 1234 ExternalReference entry(Builtins::kJSEntryTrampoline, masm->isolate()); | 1233 ExternalReference entry(Builtins::kJSEntryTrampoline, masm->isolate()); |
| 1235 __ li(t0, Operand(entry)); | 1234 __ li(t0, Operand(entry)); |
| 1236 } | 1235 } |
| 1237 __ lw(t9, MemOperand(t0)); // Deref address. | 1236 __ lw(t9, MemOperand(t0)); // Deref address. |
| 1238 | 1237 |
| 1239 // Call JSEntryTrampoline. | 1238 // Call JSEntryTrampoline. |
| 1240 __ addiu(t9, t9, Code::kHeaderSize - kHeapObjectTag); | 1239 __ Call(t9, Code::kHeaderSize - kHeapObjectTag); |
| 1241 __ Call(t9); | |
| 1242 | 1240 |
| 1243 // Unlink this frame from the handler chain. | 1241 // Unlink this frame from the handler chain. |
| 1244 __ PopStackHandler(); | 1242 __ PopStackHandler(); |
| 1245 | 1243 |
| 1246 __ bind(&exit); // v0 holds result | 1244 __ bind(&exit); // v0 holds result |
| 1247 // Check if the current stack frame is marked as the outermost JS frame. | 1245 // Check if the current stack frame is marked as the outermost JS frame. |
| 1248 Label non_outermost_js_2; | 1246 Label non_outermost_js_2; |
| 1249 __ pop(t1); | 1247 __ pop(t1); |
| 1250 __ Branch(&non_outermost_js_2, ne, t1, | 1248 __ Branch(&non_outermost_js_2, ne, t1, |
| 1251 Operand(StackFrame::OUTERMOST_JSENTRY_FRAME)); | 1249 Operand(StackFrame::OUTERMOST_JSENTRY_FRAME)); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1414 | 1412 |
| 1415 __ AssertUndefinedOrAllocationSite(a2, t1); | 1413 __ AssertUndefinedOrAllocationSite(a2, t1); |
| 1416 | 1414 |
| 1417 // Pass function as new target. | 1415 // Pass function as new target. |
| 1418 __ mov(a3, a1); | 1416 __ mov(a3, a1); |
| 1419 | 1417 |
| 1420 // Tail call to the function-specific construct stub (still in the caller | 1418 // Tail call to the function-specific construct stub (still in the caller |
| 1421 // context at this point). | 1419 // context at this point). |
| 1422 __ lw(t0, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); | 1420 __ lw(t0, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); |
| 1423 __ lw(t0, FieldMemOperand(t0, SharedFunctionInfo::kConstructStubOffset)); | 1421 __ lw(t0, FieldMemOperand(t0, SharedFunctionInfo::kConstructStubOffset)); |
| 1424 __ Addu(at, t0, Operand(Code::kHeaderSize - kHeapObjectTag)); | 1422 __ Jump(at, t0, Code::kHeaderSize - kHeapObjectTag); |
| 1425 __ Jump(at); | |
| 1426 | 1423 |
| 1427 __ bind(&non_function); | 1424 __ bind(&non_function); |
| 1428 __ mov(a3, a1); | 1425 __ mov(a3, a1); |
| 1429 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); | 1426 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); |
| 1430 } | 1427 } |
| 1431 | 1428 |
| 1432 // StringCharCodeAtGenerator. | 1429 // StringCharCodeAtGenerator. |
| 1433 void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) { | 1430 void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) { |
| 1434 DCHECK(!t0.is(index_)); | 1431 DCHECK(!t0.is(index_)); |
| 1435 DCHECK(!t0.is(result_)); | 1432 DCHECK(!t0.is(result_)); |
| (...skipping 1667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3103 kStackUnwindSpace, kInvalidStackOffset, | 3100 kStackUnwindSpace, kInvalidStackOffset, |
| 3104 return_value_operand, NULL); | 3101 return_value_operand, NULL); |
| 3105 } | 3102 } |
| 3106 | 3103 |
| 3107 #undef __ | 3104 #undef __ |
| 3108 | 3105 |
| 3109 } // namespace internal | 3106 } // namespace internal |
| 3110 } // namespace v8 | 3107 } // namespace v8 |
| 3111 | 3108 |
| 3112 #endif // V8_TARGET_ARCH_MIPS | 3109 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |