804
805
806 // LIR_OpLock
807 case lir_lock:
808 case lir_unlock: {
809 assert(op->as_OpLock() != NULL, "must be");
810 LIR_OpLock* opLock = (LIR_OpLock*)op;
811
812 if (opLock->_info) do_info(opLock->_info);
813
814 // TODO: check if these operands really have to be temp
815 // (or if input is sufficient). This may have influence on the oop map!
816 assert(opLock->_lock->is_valid(), "used"); do_temp(opLock->_lock);
817 assert(opLock->_hdr->is_valid(), "used"); do_temp(opLock->_hdr);
818 assert(opLock->_obj->is_valid(), "used"); do_temp(opLock->_obj);
819
820 if (opLock->_scratch->is_valid()) do_temp(opLock->_scratch);
821 assert(opLock->_result->is_illegal(), "unused");
822
823 do_stub(opLock->_stub);
824
825 break;
826 }
827
828
829 // LIR_OpDelay
830 case lir_delay_slot: {
831 assert(op->as_OpDelay() != NULL, "must be");
832 LIR_OpDelay* opDelay = (LIR_OpDelay*)op;
833
834 visit(opDelay->delay_op());
835 break;
836 }
837
838 // LIR_OpTypeCheck
839 case lir_instanceof:
840 case lir_checkcast:
841 case lir_store_check: {
842 assert(op->as_OpTypeCheck() != NULL, "must be");
843 LIR_OpTypeCheck* opTypeCheck = (LIR_OpTypeCheck*)op;
1040 void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
1041 masm->emit_opTypeCheck(this);
1042 if (stub()) {
1043 masm->append_code_stub(stub());
1044 }
1045 }
1046
1047 void LIR_OpCompareAndSwap::emit_code(LIR_Assembler* masm) {
1048 masm->emit_compare_and_swap(this);
1049 }
1050
1051 void LIR_Op3::emit_code(LIR_Assembler* masm) {
1052 masm->emit_op3(this);
1053 }
1054
1055 void LIR_OpLock::emit_code(LIR_Assembler* masm) {
1056 masm->emit_lock(this);
1057 if (stub()) {
1058 masm->append_code_stub(stub());
1059 }
1060 }
1061
1062 #ifdef ASSERT
1063 void LIR_OpAssert::emit_code(LIR_Assembler* masm) {
1064 masm->emit_assert(this);
1065 }
1066 #endif
1067
1068 void LIR_OpDelay::emit_code(LIR_Assembler* masm) {
1069 masm->emit_delay(this);
1070 }
1071
1072 void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) {
1073 masm->emit_profile_call(this);
1074 }
1075
1076 void LIR_OpProfileType::emit_code(LIR_Assembler* masm) {
1077 masm->emit_profile_type(this);
1078 }
1079
1341 tmp));
1342 }
1343
1344
1345 void LIR_List::unsigned_shift_right(LIR_Opr value, LIR_Opr count, LIR_Opr dst, LIR_Opr tmp) {
1346 append(new LIR_Op2(
1347 lir_ushr,
1348 value,
1349 count,
1350 dst,
1351 tmp));
1352 }
1353
1354 void LIR_List::fcmp2int(LIR_Opr left, LIR_Opr right, LIR_Opr dst, bool is_unordered_less) {
1355 append(new LIR_Op2(is_unordered_less ? lir_ucmp_fd2i : lir_cmp_fd2i,
1356 left,
1357 right,
1358 dst));
1359 }
1360
1361 void LIR_List::lock_object(LIR_Opr hdr, LIR_Opr obj, LIR_Opr lock, LIR_Opr scratch, CodeStub* stub, CodeEmitInfo* info) {
1362 append(new LIR_OpLock(
1363 lir_lock,
1364 hdr,
1365 obj,
1366 lock,
1367 scratch,
1368 stub,
1369 info));
1370 }
1371
1372 void LIR_List::unlock_object(LIR_Opr hdr, LIR_Opr obj, LIR_Opr lock, LIR_Opr scratch, CodeStub* stub) {
1373 append(new LIR_OpLock(
1374 lir_unlock,
1375 hdr,
1376 obj,
1377 lock,
1378 scratch,
1379 stub,
1380 NULL));
1381 }
1382
1383
1384 void check_LIR() {
1385 // cannot do the proper checking as PRODUCT and other modes return different results
1386 // guarantee(sizeof(LIR_OprDesc) == wordSize, "may not have a v-table");
1387 }
1388
1389
|
804
805
806 // LIR_OpLock
807 case lir_lock:
808 case lir_unlock: {
809 assert(op->as_OpLock() != NULL, "must be");
810 LIR_OpLock* opLock = (LIR_OpLock*)op;
811
812 if (opLock->_info) do_info(opLock->_info);
813
814 // TODO: check if these operands really have to be temp
815 // (or if input is sufficient). This may have influence on the oop map!
816 assert(opLock->_lock->is_valid(), "used"); do_temp(opLock->_lock);
817 assert(opLock->_hdr->is_valid(), "used"); do_temp(opLock->_hdr);
818 assert(opLock->_obj->is_valid(), "used"); do_temp(opLock->_obj);
819
820 if (opLock->_scratch->is_valid()) do_temp(opLock->_scratch);
821 assert(opLock->_result->is_illegal(), "unused");
822
823 do_stub(opLock->_stub);
824 do_stub(opLock->_throw_imse_stub);
825
826 break;
827 }
828
829
830 // LIR_OpDelay
831 case lir_delay_slot: {
832 assert(op->as_OpDelay() != NULL, "must be");
833 LIR_OpDelay* opDelay = (LIR_OpDelay*)op;
834
835 visit(opDelay->delay_op());
836 break;
837 }
838
839 // LIR_OpTypeCheck
840 case lir_instanceof:
841 case lir_checkcast:
842 case lir_store_check: {
843 assert(op->as_OpTypeCheck() != NULL, "must be");
844 LIR_OpTypeCheck* opTypeCheck = (LIR_OpTypeCheck*)op;
1041 void LIR_OpTypeCheck::emit_code(LIR_Assembler* masm) {
1042 masm->emit_opTypeCheck(this);
1043 if (stub()) {
1044 masm->append_code_stub(stub());
1045 }
1046 }
1047
1048 void LIR_OpCompareAndSwap::emit_code(LIR_Assembler* masm) {
1049 masm->emit_compare_and_swap(this);
1050 }
1051
1052 void LIR_Op3::emit_code(LIR_Assembler* masm) {
1053 masm->emit_op3(this);
1054 }
1055
1056 void LIR_OpLock::emit_code(LIR_Assembler* masm) {
1057 masm->emit_lock(this);
1058 if (stub()) {
1059 masm->append_code_stub(stub());
1060 }
1061 if (throw_imse_stub()) {
1062 masm->append_code_stub(throw_imse_stub());
1063 }
1064 }
1065
1066 #ifdef ASSERT
1067 void LIR_OpAssert::emit_code(LIR_Assembler* masm) {
1068 masm->emit_assert(this);
1069 }
1070 #endif
1071
1072 void LIR_OpDelay::emit_code(LIR_Assembler* masm) {
1073 masm->emit_delay(this);
1074 }
1075
1076 void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) {
1077 masm->emit_profile_call(this);
1078 }
1079
1080 void LIR_OpProfileType::emit_code(LIR_Assembler* masm) {
1081 masm->emit_profile_type(this);
1082 }
1083
1345 tmp));
1346 }
1347
1348
1349 void LIR_List::unsigned_shift_right(LIR_Opr value, LIR_Opr count, LIR_Opr dst, LIR_Opr tmp) {
1350 append(new LIR_Op2(
1351 lir_ushr,
1352 value,
1353 count,
1354 dst,
1355 tmp));
1356 }
1357
1358 void LIR_List::fcmp2int(LIR_Opr left, LIR_Opr right, LIR_Opr dst, bool is_unordered_less) {
1359 append(new LIR_Op2(is_unordered_less ? lir_ucmp_fd2i : lir_cmp_fd2i,
1360 left,
1361 right,
1362 dst));
1363 }
1364
1365 void LIR_List::lock_object(LIR_Opr hdr, LIR_Opr obj, LIR_Opr lock, LIR_Opr scratch, CodeStub* stub, CodeEmitInfo* info, CodeStub* throw_imse_stub) {
1366 append(new LIR_OpLock(
1367 lir_lock,
1368 hdr,
1369 obj,
1370 lock,
1371 scratch,
1372 stub,
1373 info,
1374 throw_imse_stub));
1375 }
1376
1377 void LIR_List::unlock_object(LIR_Opr hdr, LIR_Opr obj, LIR_Opr lock, LIR_Opr scratch, CodeStub* stub) {
1378 append(new LIR_OpLock(
1379 lir_unlock,
1380 hdr,
1381 obj,
1382 lock,
1383 scratch,
1384 stub,
1385 NULL));
1386 }
1387
1388
1389 void check_LIR() {
1390 // cannot do the proper checking as PRODUCT and other modes return different results
1391 // guarantee(sizeof(LIR_OprDesc) == wordSize, "may not have a v-table");
1392 }
1393
1394
|