Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Side by Side Diff: src/mips/codegen-mips.cc

Issue 2866008: [Isolates] Move contents of Top into Isolate.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: ensure we're synced Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/messages.js ('k') | src/mips/macro-assembler-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 1166
1167 // Special handling of out of memory exceptions. 1167 // Special handling of out of memory exceptions.
1168 Failure* out_of_memory = Failure::OutOfMemoryException(); 1168 Failure* out_of_memory = Failure::OutOfMemoryException();
1169 __ Branch(eq, throw_out_of_memory_exception, 1169 __ Branch(eq, throw_out_of_memory_exception,
1170 v0, Operand(reinterpret_cast<int32_t>(out_of_memory))); 1170 v0, Operand(reinterpret_cast<int32_t>(out_of_memory)));
1171 1171
1172 // Retrieve the pending exception and clear the variable. 1172 // Retrieve the pending exception and clear the variable.
1173 __ LoadExternalReference(t0, ExternalReference::the_hole_value_location()); 1173 __ LoadExternalReference(t0, ExternalReference::the_hole_value_location());
1174 __ lw(a3, MemOperand(t0)); 1174 __ lw(a3, MemOperand(t0));
1175 __ LoadExternalReference(t0, 1175 __ LoadExternalReference(t0,
1176 ExternalReference(Top::k_pending_exception_address)); 1176 ExternalReference(Isolate::k_pending_exception_address));
1177 __ lw(v0, MemOperand(t0)); 1177 __ lw(v0, MemOperand(t0));
1178 __ sw(a3, MemOperand(t0)); 1178 __ sw(a3, MemOperand(t0));
1179 1179
1180 // Special handling of termination exceptions which are uncatchable 1180 // Special handling of termination exceptions which are uncatchable
1181 // by javascript code. 1181 // by javascript code.
1182 __ Branch(eq, throw_termination_exception, 1182 __ Branch(eq, throw_termination_exception,
1183 v0, Operand(Factory::termination_exception())); 1183 v0, Operand(Factory::termination_exception()));
1184 1184
1185 // Handle normal exception. 1185 // Handle normal exception.
1186 __ b(throw_normal_exception); 1186 __ b(throw_normal_exception);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 // args 1263 // args
1264 1264
1265 // Save callee saved registers on the stack. 1265 // Save callee saved registers on the stack.
1266 __ MultiPush((kCalleeSaved | ra.bit()) & ~sp.bit()); 1266 __ MultiPush((kCalleeSaved | ra.bit()) & ~sp.bit());
1267 1267
1268 // We build an EntryFrame. 1268 // We build an EntryFrame.
1269 __ li(t3, Operand(-1)); // Push a bad frame pointer to fail if it is used. 1269 __ li(t3, Operand(-1)); // Push a bad frame pointer to fail if it is used.
1270 int marker = is_construct ? StackFrame::ENTRY_CONSTRUCT : StackFrame::ENTRY; 1270 int marker = is_construct ? StackFrame::ENTRY_CONSTRUCT : StackFrame::ENTRY;
1271 __ li(t2, Operand(Smi::FromInt(marker))); 1271 __ li(t2, Operand(Smi::FromInt(marker)));
1272 __ li(t1, Operand(Smi::FromInt(marker))); 1272 __ li(t1, Operand(Smi::FromInt(marker)));
1273 __ LoadExternalReference(t0, ExternalReference(Top::k_c_entry_fp_address)); 1273 __ LoadExternalReference(t0,
1274 ExternalReference(Isolate::k_c_entry_fp_address));
1274 __ lw(t0, MemOperand(t0)); 1275 __ lw(t0, MemOperand(t0));
1275 __ MultiPush(t0.bit() | t1.bit() | t2.bit() | t3.bit()); 1276 __ MultiPush(t0.bit() | t1.bit() | t2.bit() | t3.bit());
1276 1277
1277 // Setup frame pointer for the frame to be pushed. 1278 // Setup frame pointer for the frame to be pushed.
1278 __ addiu(fp, sp, -EntryFrameConstants::kCallerFPOffset); 1279 __ addiu(fp, sp, -EntryFrameConstants::kCallerFPOffset);
1279 1280
1280 // Load argv in s0 register. 1281 // Load argv in s0 register.
1281 __ lw(s0, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize + 1282 __ lw(s0, MemOperand(sp, (kNumCalleeSaved + 1) * kPointerSize +
1282 StandardFrameConstants::kCArgsSlotsSize)); 1283 StandardFrameConstants::kCArgsSlotsSize));
1283 1284
(...skipping 15 matching lines...) Expand all
1299 1300
1300 // Call a faked try-block that does the invoke. 1301 // Call a faked try-block that does the invoke.
1301 __ bal(&invoke); 1302 __ bal(&invoke);
1302 __ nop(); // Branch delay slot nop. 1303 __ nop(); // Branch delay slot nop.
1303 1304
1304 // Caught exception: Store result (exception) in the pending 1305 // Caught exception: Store result (exception) in the pending
1305 // exception field in the JSEnv and return a failure sentinel. 1306 // exception field in the JSEnv and return a failure sentinel.
1306 // Coming in here the fp will be invalid because the PushTryHandler below 1307 // Coming in here the fp will be invalid because the PushTryHandler below
1307 // sets it to 0 to signal the existence of the JSEntry frame. 1308 // sets it to 0 to signal the existence of the JSEntry frame.
1308 __ LoadExternalReference(t0, 1309 __ LoadExternalReference(t0,
1309 ExternalReference(Top::k_pending_exception_address)); 1310 ExternalReference(Isolate::k_pending_exception_address));
1310 __ sw(v0, MemOperand(t0)); // We come back from 'invoke'. result is in v0. 1311 __ sw(v0, MemOperand(t0)); // We come back from 'invoke'. result is in v0.
1311 __ li(v0, Operand(reinterpret_cast<int32_t>(Failure::Exception()))); 1312 __ li(v0, Operand(reinterpret_cast<int32_t>(Failure::Exception())));
1312 __ b(&exit); 1313 __ b(&exit);
1313 __ nop(); // Branch delay slot nop. 1314 __ nop(); // Branch delay slot nop.
1314 1315
1315 // Invoke: Link this frame into the handler chain. 1316 // Invoke: Link this frame into the handler chain.
1316 __ bind(&invoke); 1317 __ bind(&invoke);
1317 __ PushTryHandler(IN_JS_ENTRY, JS_ENTRY_HANDLER); 1318 __ PushTryHandler(IN_JS_ENTRY, JS_ENTRY_HANDLER);
1318 // If an exception not caught by another handler occurs, this handler 1319 // If an exception not caught by another handler occurs, this handler
1319 // returns control to the code after the bal(&invoke) above, which 1320 // returns control to the code after the bal(&invoke) above, which
1320 // restores all kCalleeSaved registers (including cp and fp) to their 1321 // restores all kCalleeSaved registers (including cp and fp) to their
1321 // saved values before returning a failure to C. 1322 // saved values before returning a failure to C.
1322 1323
1323 // Clear any pending exceptions. 1324 // Clear any pending exceptions.
1324 __ LoadExternalReference(t0, ExternalReference::the_hole_value_location()); 1325 __ LoadExternalReference(t0, ExternalReference::the_hole_value_location());
1325 __ lw(t1, MemOperand(t0)); 1326 __ lw(t1, MemOperand(t0));
1326 __ LoadExternalReference(t0, 1327 __ LoadExternalReference(t0,
1327 ExternalReference(Top::k_pending_exception_address)); 1328 ExternalReference(Isolate::k_pending_exception_address));
1328 __ sw(t1, MemOperand(t0)); 1329 __ sw(t1, MemOperand(t0));
1329 1330
1330 // Invoke the function by calling through JS entry trampoline builtin. 1331 // Invoke the function by calling through JS entry trampoline builtin.
1331 // Notice that we cannot store a reference to the trampoline code directly in 1332 // Notice that we cannot store a reference to the trampoline code directly in
1332 // this stub, because runtime stubs are not traversed when doing GC. 1333 // this stub, because runtime stubs are not traversed when doing GC.
1333 1334
1334 // Registers: 1335 // Registers:
1335 // a0: entry_address 1336 // a0: entry_address
1336 // a1: function 1337 // a1: function
1337 // a2: reveiver_pointer 1338 // a2: reveiver_pointer
(...skipping 18 matching lines...) Expand all
1356 1357
1357 // Call JSEntryTrampoline. 1358 // Call JSEntryTrampoline.
1358 __ addiu(t9, t9, Code::kHeaderSize - kHeapObjectTag); 1359 __ addiu(t9, t9, Code::kHeaderSize - kHeapObjectTag);
1359 __ CallBuiltin(t9); 1360 __ CallBuiltin(t9);
1360 1361
1361 // Unlink this frame from the handler chain. When reading the 1362 // Unlink this frame from the handler chain. When reading the
1362 // address of the next handler, there is no need to use the address 1363 // address of the next handler, there is no need to use the address
1363 // displacement since the current stack pointer (sp) points directly 1364 // displacement since the current stack pointer (sp) points directly
1364 // to the stack handler. 1365 // to the stack handler.
1365 __ lw(t1, MemOperand(sp, StackHandlerConstants::kNextOffset)); 1366 __ lw(t1, MemOperand(sp, StackHandlerConstants::kNextOffset));
1366 __ LoadExternalReference(t0, ExternalReference(Top::k_handler_address)); 1367 __ LoadExternalReference(t0, ExternalReference(Isolate::k_handler_address));
1367 __ sw(t1, MemOperand(t0)); 1368 __ sw(t1, MemOperand(t0));
1368 1369
1369 // This restores sp to its position before PushTryHandler. 1370 // This restores sp to its position before PushTryHandler.
1370 __ addiu(sp, sp, StackHandlerConstants::kSize); 1371 __ addiu(sp, sp, StackHandlerConstants::kSize);
1371 1372
1372 __ bind(&exit); // v0 holds result 1373 __ bind(&exit); // v0 holds result
1373 // Restore the top frame descriptors from the stack. 1374 // Restore the top frame descriptors from the stack.
1374 __ Pop(t1); 1375 __ Pop(t1);
1375 __ LoadExternalReference(t0, ExternalReference(Top::k_c_entry_fp_address)); 1376 __ LoadExternalReference(t0,
1377 ExternalReference(Isolate::k_c_entry_fp_address));
1376 __ sw(t1, MemOperand(t0)); 1378 __ sw(t1, MemOperand(t0));
1377 1379
1378 // Reset the stack to the callee saved registers. 1380 // Reset the stack to the callee saved registers.
1379 __ addiu(sp, sp, -EntryFrameConstants::kCallerFPOffset); 1381 __ addiu(sp, sp, -EntryFrameConstants::kCallerFPOffset);
1380 1382
1381 // Restore callee saved registers from the stack. 1383 // Restore callee saved registers from the stack.
1382 __ MultiPop((kCalleeSaved | ra.bit()) & ~sp.bit()); 1384 __ MultiPop((kCalleeSaved | ra.bit()) & ~sp.bit());
1383 // Return. 1385 // Return.
1384 __ Jump(ra); 1386 __ Jump(ra);
1385 } 1387 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 ASSERT(static_cast<unsigned>(cc_) >> 28 < (1 << 15)); 1425 ASSERT(static_cast<unsigned>(cc_) >> 28 < (1 << 15));
1424 return (static_cast<unsigned>(cc_) >> 27) | (strict_ ? 1 : 0); 1426 return (static_cast<unsigned>(cc_) >> 27) | (strict_ ? 1 : 0);
1425 } 1427 }
1426 1428
1427 1429
1428 #undef __ 1430 #undef __
1429 1431
1430 } } // namespace v8::internal 1432 } } // namespace v8::internal
1431 1433
1432 #endif // V8_TARGET_ARCH_MIPS 1434 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/messages.js ('k') | src/mips/macro-assembler-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698