| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 instr |= (imm16 & kImm16Mask); | 446 instr |= (imm16 & kImm16Mask); |
| 447 } | 447 } |
| 448 instr_at_put(pos, instr); | 448 instr_at_put(pos, instr); |
| 449 break; | 449 break; |
| 450 } | 450 } |
| 451 case kUnboundMovLabelOffsetOpcode: { | 451 case kUnboundMovLabelOffsetOpcode: { |
| 452 // Load the position of the label relative to the generated code object | 452 // Load the position of the label relative to the generated code object |
| 453 // pointer in a register. | 453 // pointer in a register. |
| 454 Register dst = Register::from_code(instr_at(pos + kInstrSize)); | 454 Register dst = Register::from_code(instr_at(pos + kInstrSize)); |
| 455 int32_t offset = target_pos + (Code::kHeaderSize - kHeapObjectTag); | 455 int32_t offset = target_pos + (Code::kHeaderSize - kHeapObjectTag); |
| 456 CodePatcher patcher(reinterpret_cast<byte*>(buffer_ + pos), 2, | 456 CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), 2, |
| 457 CodePatcher::DONT_FLUSH); | 457 CodePatcher::DONT_FLUSH); |
| 458 patcher.masm()->bitwise_mov32(dst, offset); | 458 patcher.masm()->bitwise_mov32(dst, offset); |
| 459 break; | 459 break; |
| 460 } | 460 } |
| 461 case kUnboundAddLabelOffsetOpcode: { | 461 case kUnboundAddLabelOffsetOpcode: { |
| 462 // dst = base + position + immediate | 462 // dst = base + position + immediate |
| 463 Instr operands = instr_at(pos + kInstrSize); | 463 Instr operands = instr_at(pos + kInstrSize); |
| 464 Register dst = Register::from_code((operands >> 21) & 0x1f); | 464 Register dst = Register::from_code((operands >> 21) & 0x1f); |
| 465 Register base = Register::from_code((operands >> 16) & 0x1f); | 465 Register base = Register::from_code((operands >> 16) & 0x1f); |
| 466 int32_t offset = target_pos + SIGN_EXT_IMM16(operands & kImm16Mask); | 466 int32_t offset = target_pos + SIGN_EXT_IMM16(operands & kImm16Mask); |
| 467 CodePatcher patcher(reinterpret_cast<byte*>(buffer_ + pos), 2, | 467 CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), 2, |
| 468 CodePatcher::DONT_FLUSH); | 468 CodePatcher::DONT_FLUSH); |
| 469 patcher.masm()->bitwise_add32(dst, base, offset); | 469 patcher.masm()->bitwise_add32(dst, base, offset); |
| 470 break; | 470 break; |
| 471 } | 471 } |
| 472 case kUnboundMovLabelAddrOpcode: { | 472 case kUnboundMovLabelAddrOpcode: { |
| 473 // Load the address of the label in a register. | 473 // Load the address of the label in a register. |
| 474 Register dst = Register::from_code(instr_at(pos + kInstrSize)); | 474 Register dst = Register::from_code(instr_at(pos + kInstrSize)); |
| 475 CodePatcher patcher(reinterpret_cast<byte*>(buffer_ + pos), | 475 CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), |
| 476 kMovInstructionsNoConstantPool, | 476 kMovInstructionsNoConstantPool, |
| 477 CodePatcher::DONT_FLUSH); | 477 CodePatcher::DONT_FLUSH); |
| 478 // Keep internal references relative until EmitRelocations. | 478 // Keep internal references relative until EmitRelocations. |
| 479 patcher.masm()->bitwise_mov(dst, target_pos); | 479 patcher.masm()->bitwise_mov(dst, target_pos); |
| 480 break; | 480 break; |
| 481 } | 481 } |
| 482 case kUnboundJumpTableEntryOpcode: { | 482 case kUnboundJumpTableEntryOpcode: { |
| 483 CodePatcher patcher(reinterpret_cast<byte*>(buffer_ + pos), | 483 CodePatcher patcher(isolate(), reinterpret_cast<byte*>(buffer_ + pos), |
| 484 kPointerSize / kInstrSize, CodePatcher::DONT_FLUSH); | 484 kPointerSize / kInstrSize, CodePatcher::DONT_FLUSH); |
| 485 // Keep internal references relative until EmitRelocations. | 485 // Keep internal references relative until EmitRelocations. |
| 486 patcher.masm()->dp(target_pos); | 486 patcher.masm()->dp(target_pos); |
| 487 break; | 487 break; |
| 488 } | 488 } |
| 489 default: | 489 default: |
| 490 DCHECK(false); | 490 DCHECK(false); |
| 491 break; | 491 break; |
| 492 } | 492 } |
| 493 } | 493 } |
| (...skipping 1961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2455 | 2455 |
| 2456 trampoline_ = Trampoline(pc_offset() - size, tracked_branch_count_); | 2456 trampoline_ = Trampoline(pc_offset() - size, tracked_branch_count_); |
| 2457 } | 2457 } |
| 2458 } | 2458 } |
| 2459 | 2459 |
| 2460 | 2460 |
| 2461 } // namespace internal | 2461 } // namespace internal |
| 2462 } // namespace v8 | 2462 } // namespace v8 |
| 2463 | 2463 |
| 2464 #endif // V8_TARGET_ARCH_PPC | 2464 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |