| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 push(holder_reg); // Temporarily save holder on the stack. | 373 push(holder_reg); // Temporarily save holder on the stack. |
| 374 // Read the first word and compare to the native_context_map. | 374 // Read the first word and compare to the native_context_map. |
| 375 lw(holder_reg, FieldMemOperand(scratch, HeapObject::kMapOffset)); | 375 lw(holder_reg, FieldMemOperand(scratch, HeapObject::kMapOffset)); |
| 376 LoadRoot(at, Heap::kNativeContextMapRootIndex); | 376 LoadRoot(at, Heap::kNativeContextMapRootIndex); |
| 377 Check(eq, "JSGlobalObject::native_context should be a native context.", | 377 Check(eq, "JSGlobalObject::native_context should be a native context.", |
| 378 holder_reg, Operand(at)); | 378 holder_reg, Operand(at)); |
| 379 pop(holder_reg); // Restore holder. | 379 pop(holder_reg); // Restore holder. |
| 380 } | 380 } |
| 381 | 381 |
| 382 // Check if both contexts are the same. | 382 // Check if both contexts are the same. |
| 383 lw(at, FieldMemOperand(holder_reg, JSGlobalProxy::kContextOffset)); | 383 lw(at, FieldMemOperand(holder_reg, JSGlobalProxy::kNativeContextOffset)); |
| 384 Branch(&same_contexts, eq, scratch, Operand(at)); | 384 Branch(&same_contexts, eq, scratch, Operand(at)); |
| 385 | 385 |
| 386 // Check the context is a native context. | 386 // Check the context is a native context. |
| 387 if (emit_debug_code()) { | 387 if (emit_debug_code()) { |
| 388 // TODO(119): Avoid push(holder_reg)/pop(holder_reg). | 388 // TODO(119): Avoid push(holder_reg)/pop(holder_reg). |
| 389 push(holder_reg); // Temporarily save holder on the stack. | 389 push(holder_reg); // Temporarily save holder on the stack. |
| 390 mov(holder_reg, at); // Move at to its holding place. | 390 mov(holder_reg, at); // Move at to its holding place. |
| 391 LoadRoot(at, Heap::kNullValueRootIndex); | 391 LoadRoot(at, Heap::kNullValueRootIndex); |
| 392 Check(ne, "JSGlobalProxy::context() should not be null.", | 392 Check(ne, "JSGlobalProxy::context() should not be null.", |
| 393 holder_reg, Operand(at)); | 393 holder_reg, Operand(at)); |
| 394 | 394 |
| 395 lw(holder_reg, FieldMemOperand(holder_reg, HeapObject::kMapOffset)); | 395 lw(holder_reg, FieldMemOperand(holder_reg, HeapObject::kMapOffset)); |
| 396 LoadRoot(at, Heap::kNativeContextMapRootIndex); | 396 LoadRoot(at, Heap::kNativeContextMapRootIndex); |
| 397 Check(eq, "JSGlobalObject::native_context should be a native context.", | 397 Check(eq, "JSGlobalObject::native_context should be a native context.", |
| 398 holder_reg, Operand(at)); | 398 holder_reg, Operand(at)); |
| 399 // Restore at is not needed. at is reloaded below. | 399 // Restore at is not needed. at is reloaded below. |
| 400 pop(holder_reg); // Restore holder. | 400 pop(holder_reg); // Restore holder. |
| 401 // Restore at to holder's context. | 401 // Restore at to holder's context. |
| 402 lw(at, FieldMemOperand(holder_reg, JSGlobalProxy::kContextOffset)); | 402 lw(at, FieldMemOperand(holder_reg, JSGlobalProxy::kNativeContextOffset)); |
| 403 } | 403 } |
| 404 | 404 |
| 405 // Check that the security token in the calling global object is | 405 // Check that the security token in the calling global object is |
| 406 // compatible with the security token in the receiving global | 406 // compatible with the security token in the receiving global |
| 407 // object. | 407 // object. |
| 408 int token_offset = Context::kHeaderSize + | 408 int token_offset = Context::kHeaderSize + |
| 409 Context::SECURITY_TOKEN_INDEX * kPointerSize; | 409 Context::SECURITY_TOKEN_INDEX * kPointerSize; |
| 410 | 410 |
| 411 lw(scratch, FieldMemOperand(scratch, token_offset)); | 411 lw(scratch, FieldMemOperand(scratch, token_offset)); |
| 412 lw(at, FieldMemOperand(at, token_offset)); | 412 lw(at, FieldMemOperand(at, token_offset)); |
| (...skipping 5052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5465 opcode == BGTZL); | 5465 opcode == BGTZL); |
| 5466 opcode = (cond == eq) ? BEQ : BNE; | 5466 opcode = (cond == eq) ? BEQ : BNE; |
| 5467 instr = (instr & ~kOpcodeMask) | opcode; | 5467 instr = (instr & ~kOpcodeMask) | opcode; |
| 5468 masm_.emit(instr); | 5468 masm_.emit(instr); |
| 5469 } | 5469 } |
| 5470 | 5470 |
| 5471 | 5471 |
| 5472 } } // namespace v8::internal | 5472 } } // namespace v8::internal |
| 5473 | 5473 |
| 5474 #endif // V8_TARGET_ARCH_MIPS | 5474 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |