274 }
275 LIR_Opr reg = new_register(addr->type());
276 __ load(addr, reg);
277 __ add(reg, imm, reg);
278 __ store(reg, addr);
279 }
280
281 void LIRGenerator::cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info) {
282 LIR_Opr reg = new_register(T_INT);
283 __ load(generate_address(base, disp, T_INT), reg, info);
284 __ cmp(condition, reg, LIR_OprFact::intConst(c));
285 }
286
287 void LIRGenerator::cmp_reg_mem(LIR_Condition condition, LIR_Opr reg, LIR_Opr base, int disp, BasicType type, CodeEmitInfo* info) {
288 LIR_Opr reg1 = new_register(T_INT);
289 __ load(generate_address(base, disp, type), reg1, info);
290 __ cmp(condition, reg, reg1);
291 }
292
293
294 bool LIRGenerator::strength_reduce_multiply(LIR_Opr left, int c, LIR_Opr result, LIR_Opr tmp) {
295
296 if (is_power_of_2(c - 1)) {
297 __ shift_left(left, exact_log2(c - 1), tmp);
298 __ add(tmp, left, result);
299 return true;
300 } else if (is_power_of_2(c + 1)) {
301 __ shift_left(left, exact_log2(c + 1), tmp);
302 __ sub(tmp, left, result);
303 return true;
304 } else {
305 return false;
306 }
307 }
308
309 void LIRGenerator::store_stack_parameter (LIR_Opr item, ByteSize offset_from_sp) {
310 BasicType type = item->type();
311 __ store(item, new LIR_Address(FrameMap::sp_opr, in_bytes(offset_from_sp), type));
312 }
313
314 void LIRGenerator::array_store_check(LIR_Opr value, LIR_Opr array, CodeEmitInfo* store_check_info, ciMethod* profiled_method, int profiled_bci) {
|
274 }
275 LIR_Opr reg = new_register(addr->type());
276 __ load(addr, reg);
277 __ add(reg, imm, reg);
278 __ store(reg, addr);
279 }
280
281 void LIRGenerator::cmp_mem_int(LIR_Condition condition, LIR_Opr base, int disp, int c, CodeEmitInfo* info) {
282 LIR_Opr reg = new_register(T_INT);
283 __ load(generate_address(base, disp, T_INT), reg, info);
284 __ cmp(condition, reg, LIR_OprFact::intConst(c));
285 }
286
287 void LIRGenerator::cmp_reg_mem(LIR_Condition condition, LIR_Opr reg, LIR_Opr base, int disp, BasicType type, CodeEmitInfo* info) {
288 LIR_Opr reg1 = new_register(T_INT);
289 __ load(generate_address(base, disp, type), reg1, info);
290 __ cmp(condition, reg, reg1);
291 }
292
293
294 bool LIRGenerator::strength_reduce_multiply(LIR_Opr left, jint c, LIR_Opr result, LIR_Opr tmp) {
295
296 if (is_power_of_2(c - 1)) {
297 __ shift_left(left, exact_log2(c - 1), tmp);
298 __ add(tmp, left, result);
299 return true;
300 } else if (is_power_of_2(c + 1)) {
301 __ shift_left(left, exact_log2(c + 1), tmp);
302 __ sub(tmp, left, result);
303 return true;
304 } else {
305 return false;
306 }
307 }
308
309 void LIRGenerator::store_stack_parameter (LIR_Opr item, ByteSize offset_from_sp) {
310 BasicType type = item->type();
311 __ store(item, new LIR_Address(FrameMap::sp_opr, in_bytes(offset_from_sp), type));
312 }
313
314 void LIRGenerator::array_store_check(LIR_Opr value, LIR_Opr array, CodeEmitInfo* store_check_info, ciMethod* profiled_method, int profiled_bci) {
|