Chromium Code Reviews| 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 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 760 } | 760 } |
| 761 #endif // def DEBUG | 761 #endif // def DEBUG |
| 762 return Serializer::enabled(); | 762 return Serializer::enabled(); |
| 763 } else if (rmode_ == RelocInfo::NONE) { | 763 } else if (rmode_ == RelocInfo::NONE) { |
| 764 return false; | 764 return false; |
| 765 } | 765 } |
| 766 return true; | 766 return true; |
| 767 } | 767 } |
| 768 | 768 |
| 769 | 769 |
| 770 bool Operand::is_single_instruction() const { | 770 bool Operand::is_single_instruction(Instr instr) const { |
| 771 if (rm_.is_valid()) return true; | 771 if (rm_.is_valid()) return true; |
| 772 if (must_use_constant_pool()) return false; | |
| 773 uint32_t dummy1, dummy2; | 772 uint32_t dummy1, dummy2; |
|
Lasse Reichstein
2011/03/10 11:58:48
So the change here is that even if must_use_consta
Søren Thygesen Gjesse
2011/03/10 12:47:02
Before this was never used to check a mov instruct
| |
| 774 return fits_shifter(imm32_, &dummy1, &dummy2, NULL); | 773 if (must_use_constant_pool() || |
| 774 !fits_shifter(imm32_, &dummy1, &dummy2, &instr)) { | |
| 775 // The immediate operand cannot be encoded as a shifter operand, or use of | |
| 776 // constant pool is required. For a mov instruction not setting the | |
| 777 // condition code additional instruction conventions can be used. | |
| 778 if ((instr & ~kCondMask) == 13*B21) { // mov, S not set | |
| 779 if (must_use_constant_pool() || !CpuFeatures::IsSupported(ARMv7)) { | |
|
Lasse Reichstein
2011/03/10 11:58:48
Could you force using the constant pool for some i
Søren Thygesen Gjesse
2011/03/10 12:47:02
The only case where movw and movt will be used is
| |
| 780 // mov instruction will be an ldr from constant pool (one instruction). | |
| 781 return true; | |
| 782 } else { | |
| 783 // mov instruction will be a mov or movw followed by movt (two | |
| 784 // instructions). | |
| 785 return false; | |
| 786 } | |
| 787 } else { | |
| 788 // If this is not a mov or mvn instruction there will always an additional | |
| 789 // instructions - either mov or ldr. The mov might actually be two | |
| 790 // instructions mov or movw followed by movt so including the actual | |
| 791 // instruction two or three instructions will be generated. | |
| 792 return false; | |
| 793 } | |
| 794 } else { | |
| 795 // No use of constant pool and the immediate operand can be encoded as a | |
| 796 // shifter operand. | |
| 797 return true; | |
| 798 } | |
| 775 } | 799 } |
| 776 | 800 |
| 777 | 801 |
| 778 void Assembler::addrmod1(Instr instr, | 802 void Assembler::addrmod1(Instr instr, |
| 779 Register rn, | 803 Register rn, |
| 780 Register rd, | 804 Register rd, |
| 781 const Operand& x) { | 805 const Operand& x) { |
| 782 CheckBuffer(); | 806 CheckBuffer(); |
| 783 ASSERT((instr & ~(kCondMask | kOpCodeMask | S)) == 0); | 807 ASSERT((instr & ~(kCondMask | kOpCodeMask | S)) == 0); |
| 784 if (!x.rm_.is_valid()) { | 808 if (!x.rm_.is_valid()) { |
| (...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2747 | 2771 |
| 2748 // Since a constant pool was just emitted, move the check offset forward by | 2772 // Since a constant pool was just emitted, move the check offset forward by |
| 2749 // the standard interval. | 2773 // the standard interval. |
| 2750 next_buffer_check_ = pc_offset() + kCheckConstInterval; | 2774 next_buffer_check_ = pc_offset() + kCheckConstInterval; |
| 2751 } | 2775 } |
| 2752 | 2776 |
| 2753 | 2777 |
| 2754 } } // namespace v8::internal | 2778 } } // namespace v8::internal |
| 2755 | 2779 |
| 2756 #endif // V8_TARGET_ARCH_ARM | 2780 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |