40 } |
40 } |
41 |
41 |
42 class RegisterImpl: public AbstractRegisterImpl { |
42 class RegisterImpl: public AbstractRegisterImpl { |
43 public: |
43 public: |
44 enum { |
44 enum { |
45 number_of_registers = 32, |
45 number_of_registers = 32, |
46 number_of_byte_registers = 32 |
46 number_of_byte_registers = 32, |
|
47 number_of_registers_for_jvmci = 34 // Including SP and ZR. |
47 }; |
48 }; |
48 |
49 |
49 // derived registers, offsets, and addresses |
50 // derived registers, offsets, and addresses |
50 Register successor() const { return as_Register(encoding() + 1); } |
51 Register successor() const { return as_Register(encoding() + 1); } |
51 |
52 |
101 CONSTANT_REGISTER_DECLARATION(Register, r27, (27)); |
102 CONSTANT_REGISTER_DECLARATION(Register, r27, (27)); |
102 CONSTANT_REGISTER_DECLARATION(Register, r28, (28)); |
103 CONSTANT_REGISTER_DECLARATION(Register, r28, (28)); |
103 CONSTANT_REGISTER_DECLARATION(Register, r29, (29)); |
104 CONSTANT_REGISTER_DECLARATION(Register, r29, (29)); |
104 CONSTANT_REGISTER_DECLARATION(Register, r30, (30)); |
105 CONSTANT_REGISTER_DECLARATION(Register, r30, (30)); |
105 |
106 |
|
107 |
|
108 // r31 is not a general purpose register, but represents either the |
|
109 // stack pointer or the zero/discard register depending on the |
|
110 // instruction. |
106 CONSTANT_REGISTER_DECLARATION(Register, r31_sp, (31)); |
111 CONSTANT_REGISTER_DECLARATION(Register, r31_sp, (31)); |
107 CONSTANT_REGISTER_DECLARATION(Register, zr, (32)); |
112 CONSTANT_REGISTER_DECLARATION(Register, zr, (32)); |
108 CONSTANT_REGISTER_DECLARATION(Register, sp, (33)); |
113 CONSTANT_REGISTER_DECLARATION(Register, sp, (33)); |
109 |
114 |
110 // Used as a filler in instructions where a register field is unused. |
115 // Used as a filler in instructions where a register field is unused. |