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 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 } | 590 } |
591 return offset; | 591 return offset; |
592 } | 592 } |
593 | 593 |
594 | 594 |
595 void Assembler::PatchConstantPoolAccessInstruction( | 595 void Assembler::PatchConstantPoolAccessInstruction( |
596 int pc_offset, int offset, ConstantPoolEntry::Access access, | 596 int pc_offset, int offset, ConstantPoolEntry::Access access, |
597 ConstantPoolEntry::Type type) { | 597 ConstantPoolEntry::Type type) { |
598 Address pc = buffer_ + pc_offset; | 598 Address pc = buffer_ + pc_offset; |
599 bool overflowed = (access == ConstantPoolEntry::OVERFLOWED); | 599 bool overflowed = (access == ConstantPoolEntry::OVERFLOWED); |
| 600 CHECK(overflowed != is_int16(offset)); |
600 #ifdef DEBUG | 601 #ifdef DEBUG |
601 ConstantPoolEntry::Access access_check = | 602 ConstantPoolEntry::Access access_check = |
602 static_cast<ConstantPoolEntry::Access>(-1); | 603 static_cast<ConstantPoolEntry::Access>(-1); |
603 DCHECK(IsConstantPoolLoadStart(pc, &access_check)); | 604 DCHECK(IsConstantPoolLoadStart(pc, &access_check)); |
604 DCHECK(access_check == access); | 605 DCHECK(access_check == access); |
605 DCHECK(overflowed != is_int16(offset)); | |
606 #endif | 606 #endif |
607 if (overflowed) { | 607 if (overflowed) { |
608 int hi_word = static_cast<int>(offset >> 16); | 608 int hi_word = static_cast<int>(offset >> 16); |
609 int lo_word = static_cast<int>(offset & 0xffff); | 609 int lo_word = static_cast<int>(offset & 0xffff); |
610 if (lo_word & 0x8000) hi_word++; | 610 if (lo_word & 0x8000) hi_word++; |
611 | 611 |
612 Instr instr1 = instr_at(pc); | 612 Instr instr1 = instr_at(pc); |
613 Instr instr2 = instr_at(pc + kInstrSize); | 613 Instr instr2 = instr_at(pc + kInstrSize); |
614 instr1 &= ~kImm16Mask; | 614 instr1 &= ~kImm16Mask; |
615 instr1 |= (hi_word & kImm16Mask); | 615 instr1 |= (hi_word & kImm16Mask); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 } | 721 } |
722 #endif | 722 #endif |
723 return; | 723 return; |
724 } | 724 } |
725 UNREACHABLE(); | 725 UNREACHABLE(); |
726 } | 726 } |
727 } | 727 } |
728 } // namespace v8::internal | 728 } // namespace v8::internal |
729 | 729 |
730 #endif // V8_PPC_ASSEMBLER_PPC_INL_H_ | 730 #endif // V8_PPC_ASSEMBLER_PPC_INL_H_ |
OLD | NEW |