4275 ld(tmp, 0, tmp);
4276 if (oop != tmp) mr_if_needed(R4_ARG2, oop);
4277 load_const_optimized(R3_ARG1, (address)msg, R0);
4278 // Call destination for its side effect.
4279 call_c(tmp);
4280
4281 pop_frame();
4282 restore_LR_CR(tmp);
4283 restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
4284 }
4285
4286 const char* stop_types[] = {
4287 "stop",
4288 "untested",
4289 "unimplemented",
4290 "shouldnotreachhere"
4291 };
4292
4293 static void stop_on_request(int tp, const char* msg) {
4294 tty->print("PPC assembly code requires stop: (%s) %s\n", stop_types[tp%/*stop_end*/4], msg);
4295 guarantee(false, err_msg("PPC assembly code requires stop: %s", msg));
4296 }
4297
4298 // Call a C-function that prints output.
4299 void MacroAssembler::stop(int type, const char* msg, int id) {
4300 #ifndef PRODUCT
4301 block_comment(err_msg("stop: %s %s {", stop_types[type%stop_end], msg));
4302 #else
4303 block_comment("stop {");
4304 #endif
4305
4306 // setup arguments
4307 load_const_optimized(R3_ARG1, type);
4308 load_const_optimized(R4_ARG2, (void *)msg, /*tmp=*/R0);
4309 call_VM_leaf(CAST_FROM_FN_PTR(address, stop_on_request), R3_ARG1, R4_ARG2);
4310 illtrap();
4311 emit_int32(id);
4312 block_comment("} stop;");
4313 }
4314
4315 #ifndef PRODUCT
|
4275 ld(tmp, 0, tmp);
4276 if (oop != tmp) mr_if_needed(R4_ARG2, oop);
4277 load_const_optimized(R3_ARG1, (address)msg, R0);
4278 // Call destination for its side effect.
4279 call_c(tmp);
4280
4281 pop_frame();
4282 restore_LR_CR(tmp);
4283 restore_volatile_gprs(R1_SP, -nbytes_save); // except R0
4284 }
4285
4286 const char* stop_types[] = {
4287 "stop",
4288 "untested",
4289 "unimplemented",
4290 "shouldnotreachhere"
4291 };
4292
4293 static void stop_on_request(int tp, const char* msg) {
4294 tty->print("PPC assembly code requires stop: (%s) %s\n", stop_types[tp%/*stop_end*/4], msg);
4295 guarantee(false, "PPC assembly code requires stop: %s", msg);
4296 }
4297
4298 // Call a C-function that prints output.
4299 void MacroAssembler::stop(int type, const char* msg, int id) {
4300 #ifndef PRODUCT
4301 block_comment(err_msg("stop: %s %s {", stop_types[type%stop_end], msg));
4302 #else
4303 block_comment("stop {");
4304 #endif
4305
4306 // setup arguments
4307 load_const_optimized(R3_ARG1, type);
4308 load_const_optimized(R4_ARG2, (void *)msg, /*tmp=*/R0);
4309 call_VM_leaf(CAST_FROM_FN_PTR(address, stop_on_request), R3_ARG1, R4_ARG2);
4310 illtrap();
4311 emit_int32(id);
4312 block_comment("} stop;");
4313 }
4314
4315 #ifndef PRODUCT
|