| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_ASSEMBLER_X64_H_ | 5 #ifndef VM_ASSEMBLER_X64_H_ |
| 6 #define VM_ASSEMBLER_X64_H_ | 6 #define VM_ASSEMBLER_X64_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_x64.h directly; use assembler.h instead. | 9 #error Do not include assembler_x64.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 inline void EmitUint8(uint8_t value); | 671 inline void EmitUint8(uint8_t value); |
| 672 inline void EmitInt32(int32_t value); | 672 inline void EmitInt32(int32_t value); |
| 673 inline void EmitInt64(int64_t value); | 673 inline void EmitInt64(int64_t value); |
| 674 | 674 |
| 675 inline void EmitRegisterREX(Register reg, uint8_t rex); | 675 inline void EmitRegisterREX(Register reg, uint8_t rex); |
| 676 inline void EmitRegisterOperand(int rm, int reg); | 676 inline void EmitRegisterOperand(int rm, int reg); |
| 677 inline void EmitOperandREX(int rm, const Operand& operand, uint8_t rex); | 677 inline void EmitOperandREX(int rm, const Operand& operand, uint8_t rex); |
| 678 inline void EmitXmmRegisterOperand(int rm, XmmRegister reg); | 678 inline void EmitXmmRegisterOperand(int rm, XmmRegister reg); |
| 679 inline void EmitFixup(AssemblerFixup* fixup); | 679 inline void EmitFixup(AssemblerFixup* fixup); |
| 680 inline void EmitOperandSizeOverride(); | 680 inline void EmitOperandSizeOverride(); |
| 681 | 681 inline void EmitREX_RB(XmmRegister reg, |
| 682 XmmRegister base, |
| 683 uint8_t rex = REX_NONE); |
| 684 inline void EmitREX_RB(XmmRegister reg, |
| 685 const Operand& operand, |
| 686 uint8_t rex = REX_NONE); |
| 687 inline void EmitREX_RB(XmmRegister reg, |
| 688 Register base, |
| 689 uint8_t rex = REX_NONE); |
| 690 inline void EmitREX_RB(Register reg, |
| 691 XmmRegister base, |
| 692 uint8_t rex = REX_NONE); |
| 682 void EmitOperand(int rm, const Operand& operand); | 693 void EmitOperand(int rm, const Operand& operand); |
| 683 void EmitImmediate(const Immediate& imm); | 694 void EmitImmediate(const Immediate& imm); |
| 684 void EmitComplex(int rm, const Operand& operand, const Immediate& immediate); | 695 void EmitComplex(int rm, const Operand& operand, const Immediate& immediate); |
| 685 void EmitLabel(Label* label, int instruction_size); | 696 void EmitLabel(Label* label, int instruction_size); |
| 686 void EmitLabelLink(Label* label); | 697 void EmitLabelLink(Label* label); |
| 687 void EmitNearLabelLink(Label* label); | 698 void EmitNearLabelLink(Label* label); |
| 688 | 699 |
| 689 void EmitGenericShift(bool wide, int rm, Register reg, const Immediate& imm); | 700 void EmitGenericShift(bool wide, int rm, Register reg, const Immediate& imm); |
| 690 void EmitGenericShift(bool wide, int rm, Register operand, Register shifter); | 701 void EmitGenericShift(bool wide, int rm, Register operand, Register shifter); |
| 691 | 702 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 719 | 730 |
| 720 | 731 |
| 721 inline void Assembler::EmitOperandREX(int rm, | 732 inline void Assembler::EmitOperandREX(int rm, |
| 722 const Operand& operand, | 733 const Operand& operand, |
| 723 uint8_t rex) { | 734 uint8_t rex) { |
| 724 rex |= (rm > 7 ? REX_R : REX_NONE) | operand.rex(); | 735 rex |= (rm > 7 ? REX_R : REX_NONE) | operand.rex(); |
| 725 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); | 736 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); |
| 726 } | 737 } |
| 727 | 738 |
| 728 | 739 |
| 740 inline void Assembler::EmitREX_RB(XmmRegister reg, |
| 741 XmmRegister base, |
| 742 uint8_t rex) { |
| 743 if (reg > 7) rex |= REX_R; |
| 744 if (base > 7) rex |= REX_B; |
| 745 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); |
| 746 } |
| 747 |
| 748 |
| 749 inline void Assembler::EmitREX_RB(XmmRegister reg, |
| 750 const Operand& operand, |
| 751 uint8_t rex) { |
| 752 if (reg > 7) rex |= REX_R; |
| 753 rex |= operand.rex(); |
| 754 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); |
| 755 } |
| 756 |
| 757 |
| 758 inline void Assembler::EmitREX_RB(XmmRegister reg, |
| 759 Register base, |
| 760 uint8_t rex) { |
| 761 if (reg > 7) rex |= REX_R; |
| 762 if (base > 7) rex |= REX_B; |
| 763 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); |
| 764 } |
| 765 |
| 766 |
| 767 inline void Assembler::EmitREX_RB(Register reg, |
| 768 XmmRegister base, |
| 769 uint8_t rex) { |
| 770 if (reg > 7) rex |= REX_R; |
| 771 if (base > 7) rex |= REX_B; |
| 772 if (rex != REX_NONE) EmitUint8(REX_PREFIX | rex); |
| 773 } |
| 774 |
| 775 |
| 729 inline void Assembler::EmitFixup(AssemblerFixup* fixup) { | 776 inline void Assembler::EmitFixup(AssemblerFixup* fixup) { |
| 730 buffer_.EmitFixup(fixup); | 777 buffer_.EmitFixup(fixup); |
| 731 } | 778 } |
| 732 | 779 |
| 733 | 780 |
| 734 inline void Assembler::EmitOperandSizeOverride() { | 781 inline void Assembler::EmitOperandSizeOverride() { |
| 735 EmitUint8(0x66); | 782 EmitUint8(0x66); |
| 736 } | 783 } |
| 737 | 784 |
| 738 } // namespace dart | 785 } // namespace dart |
| 739 | 786 |
| 740 #endif // VM_ASSEMBLER_X64_H_ | 787 #endif // VM_ASSEMBLER_X64_H_ |
| OLD | NEW |