< prev index next >

src/hotspot/cpu/aarch64/c1_LIRGenerator_aarch64.cpp

Print this page
8248238: Adding Windows support to OpenJDK on AArch64

Summary: Adding Windows support for AArch64

Contributed-by: Ludovic Henry <luhenry@microsoft.com>, Monica Beckwith <monica.beckwith@microsoft.com>
Reviewed-by:


 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) {


< prev index next >