hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
changeset 13742 9180987e305d
parent 13728 882756847a04
child 13886 8d82c4dfa722
equal deleted inserted replaced
13741:e4395deb8597 13742:9180987e305d
  1000     tty->print_cr("   ###class not loaded at new bci %d", x->printable_bci());
  1000     tty->print_cr("   ###class not loaded at new bci %d", x->printable_bci());
  1001   }
  1001   }
  1002 #endif
  1002 #endif
  1003   CodeEmitInfo* info = state_for(x, x->state());
  1003   CodeEmitInfo* info = state_for(x, x->state());
  1004   LIR_Opr reg = result_register_for(x->type());
  1004   LIR_Opr reg = result_register_for(x->type());
  1005   LIR_Opr klass_reg = new_register(objectType);
       
  1006   new_instance(reg, x->klass(),
  1005   new_instance(reg, x->klass(),
  1007                        FrameMap::rcx_oop_opr,
  1006                        FrameMap::rcx_oop_opr,
  1008                        FrameMap::rdi_oop_opr,
  1007                        FrameMap::rdi_oop_opr,
  1009                        FrameMap::rsi_oop_opr,
  1008                        FrameMap::rsi_oop_opr,
  1010                        LIR_OprFact::illegalOpr,
  1009                        LIR_OprFact::illegalOpr,
  1011                        FrameMap::rdx_oop_opr, info);
  1010                        FrameMap::rdx_metadata_opr, info);
  1012   LIR_Opr result = rlock_result(x);
  1011   LIR_Opr result = rlock_result(x);
  1013   __ move(reg, result);
  1012   __ move(reg, result);
  1014 }
  1013 }
  1015 
  1014 
  1016 
  1015 
  1023   LIR_Opr reg = result_register_for(x->type());
  1022   LIR_Opr reg = result_register_for(x->type());
  1024   LIR_Opr tmp1 = FrameMap::rcx_oop_opr;
  1023   LIR_Opr tmp1 = FrameMap::rcx_oop_opr;
  1025   LIR_Opr tmp2 = FrameMap::rsi_oop_opr;
  1024   LIR_Opr tmp2 = FrameMap::rsi_oop_opr;
  1026   LIR_Opr tmp3 = FrameMap::rdi_oop_opr;
  1025   LIR_Opr tmp3 = FrameMap::rdi_oop_opr;
  1027   LIR_Opr tmp4 = reg;
  1026   LIR_Opr tmp4 = reg;
  1028   LIR_Opr klass_reg = FrameMap::rdx_oop_opr;
  1027   LIR_Opr klass_reg = FrameMap::rdx_metadata_opr;
  1029   LIR_Opr len = length.result();
  1028   LIR_Opr len = length.result();
  1030   BasicType elem_type = x->elt_type();
  1029   BasicType elem_type = x->elt_type();
  1031 
  1030 
  1032   __ oop2reg(ciTypeArrayKlass::make(elem_type)->constant_encoding(), klass_reg);
  1031   __ metadata2reg(ciTypeArrayKlass::make(elem_type)->constant_encoding(), klass_reg);
  1033 
  1032 
  1034   CodeStub* slow_path = new NewTypeArrayStub(klass_reg, len, reg, info);
  1033   CodeStub* slow_path = new NewTypeArrayStub(klass_reg, len, reg, info);
  1035   __ allocate_array(reg, len, tmp1, tmp2, tmp3, tmp4, elem_type, klass_reg, slow_path);
  1034   __ allocate_array(reg, len, tmp1, tmp2, tmp3, tmp4, elem_type, klass_reg, slow_path);
  1036 
  1035 
  1037   LIR_Opr result = rlock_result(x);
  1036   LIR_Opr result = rlock_result(x);
  1053   const LIR_Opr reg = result_register_for(x->type());
  1052   const LIR_Opr reg = result_register_for(x->type());
  1054   LIR_Opr tmp1 = FrameMap::rcx_oop_opr;
  1053   LIR_Opr tmp1 = FrameMap::rcx_oop_opr;
  1055   LIR_Opr tmp2 = FrameMap::rsi_oop_opr;
  1054   LIR_Opr tmp2 = FrameMap::rsi_oop_opr;
  1056   LIR_Opr tmp3 = FrameMap::rdi_oop_opr;
  1055   LIR_Opr tmp3 = FrameMap::rdi_oop_opr;
  1057   LIR_Opr tmp4 = reg;
  1056   LIR_Opr tmp4 = reg;
  1058   LIR_Opr klass_reg = FrameMap::rdx_oop_opr;
  1057   LIR_Opr klass_reg = FrameMap::rdx_metadata_opr;
  1059 
  1058 
  1060   length.load_item_force(FrameMap::rbx_opr);
  1059   length.load_item_force(FrameMap::rbx_opr);
  1061   LIR_Opr len = length.result();
  1060   LIR_Opr len = length.result();
  1062 
  1061 
  1063   CodeStub* slow_path = new NewObjectArrayStub(klass_reg, len, reg, info);
  1062   CodeStub* slow_path = new NewObjectArrayStub(klass_reg, len, reg, info);
  1101     size->load_nonconstant();
  1100     size->load_nonconstant();
  1102 
  1101 
  1103     store_stack_parameter(size->result(), in_ByteSize(i*4));
  1102     store_stack_parameter(size->result(), in_ByteSize(i*4));
  1104   }
  1103   }
  1105 
  1104 
  1106   LIR_Opr reg = result_register_for(x->type());
  1105   LIR_Opr klass_reg = FrameMap::rax_metadata_opr;
  1107   klass2reg_with_patching(reg, x->klass(), patching_info);
  1106   klass2reg_with_patching(klass_reg, x->klass(), patching_info);
  1108 
  1107 
  1109   LIR_Opr rank = FrameMap::rbx_opr;
  1108   LIR_Opr rank = FrameMap::rbx_opr;
  1110   __ move(LIR_OprFact::intConst(x->rank()), rank);
  1109   __ move(LIR_OprFact::intConst(x->rank()), rank);
  1111   LIR_Opr varargs = FrameMap::rcx_opr;
  1110   LIR_Opr varargs = FrameMap::rcx_opr;
  1112   __ move(FrameMap::rsp_opr, varargs);
  1111   __ move(FrameMap::rsp_opr, varargs);
  1113   LIR_OprList* args = new LIR_OprList(3);
  1112   LIR_OprList* args = new LIR_OprList(3);
  1114   args->append(reg);
  1113   args->append(klass_reg);
  1115   args->append(rank);
  1114   args->append(rank);
  1116   args->append(varargs);
  1115   args->append(varargs);
       
  1116   LIR_Opr reg = result_register_for(x->type());
  1117   __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
  1117   __ call_runtime(Runtime1::entry_for(Runtime1::new_multi_array_id),
  1118                   LIR_OprFact::illegalOpr,
  1118                   LIR_OprFact::illegalOpr,
  1119                   reg, args, info);
  1119                   reg, args, info);
  1120 
  1120 
  1121   LIR_Opr result = rlock_result(x);
  1121   LIR_Opr result = rlock_result(x);