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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_MIPS | 7 #if V8_TARGET_ARCH_MIPS |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 1237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1248 __ Branch(&throw_termination_exception, eq, v0, Operand(t0)); | 1248 __ Branch(&throw_termination_exception, eq, v0, Operand(t0)); |
1249 | 1249 |
1250 // Handle normal exception. | 1250 // Handle normal exception. |
1251 __ Throw(v0); | 1251 __ Throw(v0); |
1252 | 1252 |
1253 __ bind(&throw_termination_exception); | 1253 __ bind(&throw_termination_exception); |
1254 __ ThrowUncatchable(v0); | 1254 __ ThrowUncatchable(v0); |
1255 } | 1255 } |
1256 | 1256 |
1257 | 1257 |
1258 void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) { | 1258 void JSEntryStub::Generate(MacroAssembler* masm) { |
1259 Label invoke, handler_entry, exit; | 1259 Label invoke, handler_entry, exit; |
1260 Isolate* isolate = masm->isolate(); | 1260 Isolate* isolate = masm->isolate(); |
1261 | 1261 |
1262 // Registers: | 1262 // Registers: |
1263 // a0: entry address | 1263 // a0: entry address |
1264 // a1: function | 1264 // a1: function |
1265 // a2: receiver | 1265 // a2: receiver |
1266 // a3: argc | 1266 // a3: argc |
1267 // | 1267 // |
1268 // Stack: | 1268 // Stack: |
(...skipping 13 matching lines...) Expand all Loading... |
1282 | 1282 |
1283 // Load argv in s0 register. | 1283 // Load argv in s0 register. |
1284 int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize; | 1284 int offset_to_argv = (kNumCalleeSaved + 1) * kPointerSize; |
1285 offset_to_argv += kNumCalleeSavedFPU * kDoubleSize; | 1285 offset_to_argv += kNumCalleeSavedFPU * kDoubleSize; |
1286 | 1286 |
1287 __ InitializeRootRegister(); | 1287 __ InitializeRootRegister(); |
1288 __ lw(s0, MemOperand(sp, offset_to_argv + kCArgsSlotsSize)); | 1288 __ lw(s0, MemOperand(sp, offset_to_argv + kCArgsSlotsSize)); |
1289 | 1289 |
1290 // We build an EntryFrame. | 1290 // We build an EntryFrame. |
1291 __ li(t3, Operand(-1)); // Push a bad frame pointer to fail if it is used. | 1291 __ li(t3, Operand(-1)); // Push a bad frame pointer to fail if it is used. |
1292 int marker = is_construct ? StackFrame::ENTRY_CONSTRUCT : StackFrame::ENTRY; | 1292 int marker = type(); |
1293 __ li(t2, Operand(Smi::FromInt(marker))); | 1293 __ li(t2, Operand(Smi::FromInt(marker))); |
1294 __ li(t1, Operand(Smi::FromInt(marker))); | 1294 __ li(t1, Operand(Smi::FromInt(marker))); |
1295 __ li(t0, Operand(ExternalReference(Isolate::kCEntryFPAddress, | 1295 __ li(t0, Operand(ExternalReference(Isolate::kCEntryFPAddress, |
1296 isolate))); | 1296 isolate))); |
1297 __ lw(t0, MemOperand(t0)); | 1297 __ lw(t0, MemOperand(t0)); |
1298 __ Push(t3, t2, t1, t0); | 1298 __ Push(t3, t2, t1, t0); |
1299 // Set up frame pointer for the frame to be pushed. | 1299 // Set up frame pointer for the frame to be pushed. |
1300 __ addiu(fp, sp, -EntryFrameConstants::kCallerFPOffset); | 1300 __ addiu(fp, sp, -EntryFrameConstants::kCallerFPOffset); |
1301 | 1301 |
1302 // Registers: | 1302 // Registers: |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 // a3: argc | 1373 // a3: argc |
1374 // s0: argv | 1374 // s0: argv |
1375 // | 1375 // |
1376 // Stack: | 1376 // Stack: |
1377 // handler frame | 1377 // handler frame |
1378 // entry frame | 1378 // entry frame |
1379 // callee saved registers + ra | 1379 // callee saved registers + ra |
1380 // 4 args slots | 1380 // 4 args slots |
1381 // args | 1381 // args |
1382 | 1382 |
1383 if (is_construct) { | 1383 if (type() == StackFrame::ENTRY_CONSTRUCT) { |
1384 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, | 1384 ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, |
1385 isolate); | 1385 isolate); |
1386 __ li(t0, Operand(construct_entry)); | 1386 __ li(t0, Operand(construct_entry)); |
1387 } else { | 1387 } else { |
1388 ExternalReference entry(Builtins::kJSEntryTrampoline, masm->isolate()); | 1388 ExternalReference entry(Builtins::kJSEntryTrampoline, masm->isolate()); |
1389 __ li(t0, Operand(entry)); | 1389 __ li(t0, Operand(entry)); |
1390 } | 1390 } |
1391 __ lw(t9, MemOperand(t0)); // Deref address. | 1391 __ lw(t9, MemOperand(t0)); // Deref address. |
1392 | 1392 |
1393 // Call JSEntryTrampoline. | 1393 // Call JSEntryTrampoline. |
(...skipping 3493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4887 MemOperand(fp, 6 * kPointerSize), | 4887 MemOperand(fp, 6 * kPointerSize), |
4888 NULL); | 4888 NULL); |
4889 } | 4889 } |
4890 | 4890 |
4891 | 4891 |
4892 #undef __ | 4892 #undef __ |
4893 | 4893 |
4894 } } // namespace v8::internal | 4894 } } // namespace v8::internal |
4895 | 4895 |
4896 #endif // V8_TARGET_ARCH_MIPS | 4896 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |