1301 // activation and we are calling a leaf VM function only.
1302 generate_unwind_exception(sasm);
1303 }
1304 break;
1305
1306 case throw_array_store_exception_id:
1307 { StubFrame f(sasm, "throw_array_store_exception", dont_gc_arguments);
1308 // tos + 0: link
1309 // + 1: return address
1310 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), true);
1311 }
1312 break;
1313
1314 case throw_class_cast_exception_id:
1315 { StubFrame f(sasm, "throw_class_cast_exception", dont_gc_arguments);
1316 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
1317 }
1318 break;
1319
1320 case throw_incompatible_class_change_error_id:
1321 { StubFrame f(sasm, "throw_incompatible_class_cast_exception", dont_gc_arguments);
1322 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
1323 }
1324 break;
1325
1326 case slow_subtype_check_id:
1327 {
1328 // Typical calling sequence:
1329 // __ push(klass_RInfo); // object klass or other subclass
1330 // __ push(sup_k_RInfo); // array element klass or other superclass
1331 // __ call(slow_subtype_check);
1332 // Note that the subclass is pushed first, and is therefore deepest.
1333 // Previous versions of this code reversed the names 'sub' and 'super'.
1334 // This was operationally harmless but made the code unreadable.
1335 enum layout {
1336 rax_off, SLOT2(raxH_off)
1337 rcx_off, SLOT2(rcxH_off)
1338 rsi_off, SLOT2(rsiH_off)
1339 rdi_off, SLOT2(rdiH_off)
1340 // saved_rbp_off, SLOT2(saved_rbpH_off)
1341 return_off, SLOT2(returnH_off)
1342 sup_k_off, SLOT2(sup_kH_off)
|
1301 // activation and we are calling a leaf VM function only.
1302 generate_unwind_exception(sasm);
1303 }
1304 break;
1305
1306 case throw_array_store_exception_id:
1307 { StubFrame f(sasm, "throw_array_store_exception", dont_gc_arguments);
1308 // tos + 0: link
1309 // + 1: return address
1310 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), true);
1311 }
1312 break;
1313
1314 case throw_class_cast_exception_id:
1315 { StubFrame f(sasm, "throw_class_cast_exception", dont_gc_arguments);
1316 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
1317 }
1318 break;
1319
1320 case throw_incompatible_class_change_error_id:
1321 { StubFrame f(sasm, "throw_incompatible_class_change_error", dont_gc_arguments);
1322 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
1323 }
1324 break;
1325
1326 case throw_illegal_monitor_state_exception_id:
1327 { StubFrame f(sasm, "throw_illegal_monitor_state_exception", dont_gc_arguments);
1328 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_illegal_monitor_state_exception), false);
1329 }
1330 break;
1331
1332 case slow_subtype_check_id:
1333 {
1334 // Typical calling sequence:
1335 // __ push(klass_RInfo); // object klass or other subclass
1336 // __ push(sup_k_RInfo); // array element klass or other superclass
1337 // __ call(slow_subtype_check);
1338 // Note that the subclass is pushed first, and is therefore deepest.
1339 // Previous versions of this code reversed the names 'sub' and 'super'.
1340 // This was operationally harmless but made the code unreadable.
1341 enum layout {
1342 rax_off, SLOT2(raxH_off)
1343 rcx_off, SLOT2(rcxH_off)
1344 rsi_off, SLOT2(rsiH_off)
1345 rdi_off, SLOT2(rdiH_off)
1346 // saved_rbp_off, SLOT2(saved_rbpH_off)
1347 return_off, SLOT2(returnH_off)
1348 sup_k_off, SLOT2(sup_kH_off)
|