173 // This store will need a precise card mark, so go ahead and |
173 // This store will need a precise card mark, so go ahead and |
174 // compute the full adddres instead of computing once for the |
174 // compute the full adddres instead of computing once for the |
175 // store and again for the card mark. |
175 // store and again for the card mark. |
176 LIR_Opr tmp = new_pointer_register(); |
176 LIR_Opr tmp = new_pointer_register(); |
177 __ leal(LIR_OprFact::address(addr), tmp); |
177 __ leal(LIR_OprFact::address(addr), tmp); |
178 return new LIR_Address(tmp, 0, type); |
178 return new LIR_Address(tmp, type); |
179 } else { |
179 } else { |
180 return addr; |
180 return addr; |
181 } |
181 } |
182 } |
182 } |
183 |
183 |
184 |
184 |
185 void LIRGenerator::increment_counter(address counter, int step) { |
185 void LIRGenerator::increment_counter(address counter, int step) { |
186 LIR_Opr pointer = new_pointer_register(); |
186 LIR_Opr pointer = new_pointer_register(); |
187 __ move(LIR_OprFact::intptrConst(counter), pointer); |
187 __ move(LIR_OprFact::intptrConst(counter), pointer); |
188 LIR_Address* addr = new LIR_Address(pointer, 0, T_INT); |
188 LIR_Address* addr = new LIR_Address(pointer, T_INT); |
189 increment_counter(addr, step); |
189 increment_counter(addr, step); |
190 } |
190 } |
191 |
191 |
192 |
192 |
193 void LIRGenerator::increment_counter(LIR_Address* addr, int step) { |
193 void LIRGenerator::increment_counter(LIR_Address* addr, int step) { |