< prev index next >

src/cpu/x86/vm/register_x86.hpp

Print this page

        

*** 43,56 **** class RegisterImpl: public AbstractRegisterImpl { public: enum { #ifndef AMD64 number_of_registers = 8, ! number_of_byte_registers = 4 #else number_of_registers = 16, ! number_of_byte_registers = 16 #endif // AMD64 }; // derived registers, offsets, and addresses Register successor() const { return as_Register(encoding() + 1); } --- 43,58 ---- class RegisterImpl: public AbstractRegisterImpl { public: enum { #ifndef AMD64 number_of_registers = 8, ! number_of_byte_registers = 4, ! max_slots_per_register = 1 #else number_of_registers = 16, ! number_of_byte_registers = 16, ! max_slots_per_register = 1 #endif // AMD64 }; // derived registers, offsets, and addresses Register successor() const { return as_Register(encoding() + 1); }
*** 141,153 **** // The implementation of XMM registers for the IA32 architecture class XMMRegisterImpl: public AbstractRegisterImpl { public: enum { #ifndef AMD64 ! number_of_registers = 8 #else ! number_of_registers = 16 #endif // AMD64 }; // construction friend XMMRegister as_XMMRegister(int encoding); --- 143,157 ---- // The implementation of XMM registers for the IA32 architecture class XMMRegisterImpl: public AbstractRegisterImpl { public: enum { #ifndef AMD64 ! number_of_registers = 8, ! max_slots_per_register = 16 // 512-bit #else ! number_of_registers = 32, ! max_slots_per_register = 16 // 512-bit #endif // AMD64 }; // construction friend XMMRegister as_XMMRegister(int encoding);
*** 181,190 **** --- 185,210 ---- CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm11, (11)); CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm12, (12)); CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm13, (13)); CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm14, (14)); CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm15, (15)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm16, (16)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm17, (17)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm18, (18)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm19, (19)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm20, (20)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm21, (21)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm22, (22)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm23, (23)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm24, (24)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm25, (25)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm26, (26)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm27, (27)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm28, (28)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm29, (29)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm30, (30)); + CONSTANT_REGISTER_DECLARATION(XMMRegister, xmm31, (31)); #endif // AMD64 // Only used by the 32bit stubGenerator. These can't be described by vmreg and hence // can't be described in oopMaps and therefore can't be used by the compilers (at least // were deopt might wan't to see them).
*** 198,207 **** --- 218,267 ---- CONSTANT_REGISTER_DECLARATION(MMXRegister, mmx4 , ( 4)); CONSTANT_REGISTER_DECLARATION(MMXRegister, mmx5 , ( 5)); CONSTANT_REGISTER_DECLARATION(MMXRegister, mmx6 , ( 6)); CONSTANT_REGISTER_DECLARATION(MMXRegister, mmx7 , ( 7)); + // Use XMMRegister as shortcut + class KRegisterImpl; + typedef KRegisterImpl* KRegister; + + inline KRegister as_KRegister(int encoding) { + return (KRegister)(intptr_t)encoding; + } + + // The implementation of XMM registers for the IA32 architecture + class KRegisterImpl : public AbstractRegisterImpl { + public: + enum { + number_of_registers = 8, + max_slots_per_register = 1 + }; + + // construction + friend KRegister as_KRegister(int encoding); + + inline VMReg as_VMReg(); + + // derived registers, offsets, and addresses + KRegister successor() const { return as_KRegister(encoding() + 1); } + + // accessors + int encoding() const { assert(is_valid(), err_msg("invalid register (%d)", (int)(intptr_t)this)); return (intptr_t)this; } + bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; } + const char* name() const; + }; + + // The Mask registers, for AVX3 enabled and up chips + CONSTANT_REGISTER_DECLARATION(KRegister, knoreg, (-1)); + CONSTANT_REGISTER_DECLARATION(KRegister, k0, (0)); + CONSTANT_REGISTER_DECLARATION(KRegister, k1, (1)); + CONSTANT_REGISTER_DECLARATION(KRegister, k2, (2)); + CONSTANT_REGISTER_DECLARATION(KRegister, k3, (3)); + CONSTANT_REGISTER_DECLARATION(KRegister, k4, (4)); + CONSTANT_REGISTER_DECLARATION(KRegister, k5, (5)); + CONSTANT_REGISTER_DECLARATION(KRegister, k6, (6)); + CONSTANT_REGISTER_DECLARATION(KRegister, k7, (7)); // Need to know the total number of registers of all sorts for SharedInfo. // Define a class that exports it. class ConcreteRegisterImpl : public AbstractRegisterImpl { public:
*** 214,229 **** number_of_registers = RegisterImpl::number_of_registers + #ifdef AMD64 RegisterImpl::number_of_registers + // "H" half of a 64bit register #endif // AMD64 2 * FloatRegisterImpl::number_of_registers + ! 8 * XMMRegisterImpl::number_of_registers + 1 // eflags }; static const int max_gpr; static const int max_fpr; static const int max_xmm; }; #endif // CPU_X86_VM_REGISTER_X86_HPP --- 274,291 ---- number_of_registers = RegisterImpl::number_of_registers + #ifdef AMD64 RegisterImpl::number_of_registers + // "H" half of a 64bit register #endif // AMD64 2 * FloatRegisterImpl::number_of_registers + ! XMMRegisterImpl::max_slots_per_register * XMMRegisterImpl::number_of_registers + ! KRegisterImpl::number_of_registers + // mask registers 1 // eflags }; static const int max_gpr; static const int max_fpr; static const int max_xmm; + static const int max_kpr; }; #endif // CPU_X86_VM_REGISTER_X86_HPP
< prev index next >