114 bool is_reg() const { return is_valid() && !is_stack(); } 115 116 // A concrete register is a value that returns true for is_reg() and is 117 // also a register you could use in the assembler. On machines with 118 // 64bit registers only one half of the VMReg (and OptoReg) is considered 119 // concrete. 120 bool is_concrete(); 121 122 // VMRegs are 4 bytes wide on all platforms 123 static const int stack_slot_size; 124 static const int slots_per_word; 125 126 127 // This really ought to check that the register is "real" in the sense that 128 // we don't try and get the VMReg number of a physical register that doesn't 129 // have an expressible part. That would be pd specific code 130 VMReg next() { 131 assert((is_reg() && value() < stack0->value() - 1) || is_stack(), "must be"); 132 return (VMReg)(intptr_t)(value() + 1); 133 } 134 VMReg prev() { 135 assert((is_stack() && value() > stack0->value()) || (is_reg() && value() != 0), "must be"); 136 return (VMReg)(intptr_t)(value() - 1); 137 } 138 139 140 intptr_t value() const {return (intptr_t) this; } 141 142 void print_on(outputStream* st) const; 143 void print() const { print_on(tty); } 144 145 // bias a stack slot. 146 // Typically used to adjust a virtual frame slots by amounts that are offset by 147 // amounts that are part of the native abi. The VMReg must be a stack slot 148 // and the result must be also. 149 150 VMReg bias(int offset) { 151 assert(is_stack(), "must be"); 152 // VMReg res = VMRegImpl::as_VMReg(value() + offset); 153 VMReg res = stack2reg(reg2stack() + offset); | 114 bool is_reg() const { return is_valid() && !is_stack(); } 115 116 // A concrete register is a value that returns true for is_reg() and is 117 // also a register you could use in the assembler. On machines with 118 // 64bit registers only one half of the VMReg (and OptoReg) is considered 119 // concrete. 120 bool is_concrete(); 121 122 // VMRegs are 4 bytes wide on all platforms 123 static const int stack_slot_size; 124 static const int slots_per_word; 125 126 127 // This really ought to check that the register is "real" in the sense that 128 // we don't try and get the VMReg number of a physical register that doesn't 129 // have an expressible part. That would be pd specific code 130 VMReg next() { 131 assert((is_reg() && value() < stack0->value() - 1) || is_stack(), "must be"); 132 return (VMReg)(intptr_t)(value() + 1); 133 } 134 VMReg next(int i) { 135 assert((is_reg() && value() < stack0->value() - i) || is_stack(), "must be"); 136 return (VMReg)(intptr_t)(value() + i); 137 } 138 VMReg prev() { 139 assert((is_stack() && value() > stack0->value()) || (is_reg() && value() != 0), "must be"); 140 return (VMReg)(intptr_t)(value() - 1); 141 } 142 143 144 intptr_t value() const {return (intptr_t) this; } 145 146 void print_on(outputStream* st) const; 147 void print() const { print_on(tty); } 148 149 // bias a stack slot. 150 // Typically used to adjust a virtual frame slots by amounts that are offset by 151 // amounts that are part of the native abi. The VMReg must be a stack slot 152 // and the result must be also. 153 154 VMReg bias(int offset) { 155 assert(is_stack(), "must be"); 156 // VMReg res = VMRegImpl::as_VMReg(value() + offset); 157 VMReg res = stack2reg(reg2stack() + offset); |