src/share/vm/c1/c1_LinearScan.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot-comp Sdiff src/share/vm/c1

src/share/vm/c1/c1_LinearScan.cpp

Print this page




1122         }
1123       }
1124     } else {
1125       // FPU stack float instruction
1126       switch (op->code()) {
1127         case lir_add:
1128         case lir_sub:
1129         case lir_mul:
1130         case lir_div:
1131         {
1132           assert(op->as_Op2() != NULL, "must be LIR_Op2");
1133           LIR_Op2* op2 = (LIR_Op2*)op;
1134           if (op2->in_opr1() != op2->in_opr2() && op2->in_opr2() == opr) {
1135             assert((op2->result_opr()->is_register() || op->code() == lir_cmp) && op2->in_opr1()->is_register(), "cannot mark second operand as stack if others are not in register");
1136             return shouldHaveRegister;
1137           }
1138         }
1139       }
1140     }
1141 
1142   } else if (opr_type != T_LONG) {
1143     // integer instruction (note: long operands must always be in register)
1144     switch (op->code()) {
1145       case lir_cmp:
1146       case lir_add:
1147       case lir_sub:
1148       case lir_logic_and:
1149       case lir_logic_or:
1150       case lir_logic_xor:
1151       {
1152         assert(op->as_Op2() != NULL, "must be LIR_Op2");
1153         LIR_Op2* op2 = (LIR_Op2*)op;
1154         if (op2->in_opr1() != op2->in_opr2() && op2->in_opr2() == opr) {
1155           assert((op2->result_opr()->is_register() || op->code() == lir_cmp) && op2->in_opr1()->is_register(), "cannot mark second operand as stack if others are not in register");
1156           return shouldHaveRegister;
1157         }
1158       }
1159     }
1160   }
1161 #endif // X86
1162 




1122         }
1123       }
1124     } else {
1125       // FPU stack float instruction
1126       switch (op->code()) {
1127         case lir_add:
1128         case lir_sub:
1129         case lir_mul:
1130         case lir_div:
1131         {
1132           assert(op->as_Op2() != NULL, "must be LIR_Op2");
1133           LIR_Op2* op2 = (LIR_Op2*)op;
1134           if (op2->in_opr1() != op2->in_opr2() && op2->in_opr2() == opr) {
1135             assert((op2->result_opr()->is_register() || op->code() == lir_cmp) && op2->in_opr1()->is_register(), "cannot mark second operand as stack if others are not in register");
1136             return shouldHaveRegister;
1137           }
1138         }
1139       }
1140     }
1141 
1142   } else if (opr_type != T_LONG && LP64_ONLY(opr_type != T_OBJECT) NOT_LP64(true)) {
1143     // integer instruction (note: long operands must always be in register)
1144     switch (op->code()) {
1145       case lir_cmp:
1146       case lir_add:
1147       case lir_sub:
1148       case lir_logic_and:
1149       case lir_logic_or:
1150       case lir_logic_xor:
1151       {
1152         assert(op->as_Op2() != NULL, "must be LIR_Op2");
1153         LIR_Op2* op2 = (LIR_Op2*)op;
1154         if (op2->in_opr1() != op2->in_opr2() && op2->in_opr2() == opr) {
1155           assert((op2->result_opr()->is_register() || op->code() == lir_cmp) && op2->in_opr1()->is_register(), "cannot mark second operand as stack if others are not in register");
1156           return shouldHaveRegister;
1157         }
1158       }
1159     }
1160   }
1161 #endif // X86
1162 


src/share/vm/c1/c1_LinearScan.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File