Mercurial > hg > truffle
comparison src/cpu/ppc/vm/cppInterpreter_ppc.cpp @ 17803:31e80afe3fed
8035647: PPC64: Support for elf v2 abi.
Summary: ELFv2 ABI used by the little endian PowerPC64 on Linux.
Reviewed-by: kvn
Contributed-by: asmundak@google.com
author | goetz |
---|---|
date | Thu, 06 Mar 2014 10:55:28 -0800 |
parents | c668f307a4c0 |
children | 58cf34613a72 |
comparison
equal
deleted
inserted
replaced
17802:7c462558a08a | 17803:31e80afe3fed |
---|---|
1134 // | 1134 // |
1135 // Our signature handlers copy required arguments to the C stack | 1135 // Our signature handlers copy required arguments to the C stack |
1136 // (outgoing C args), R3_ARG1 to R10_ARG8, and F1_ARG1 to | 1136 // (outgoing C args), R3_ARG1 to R10_ARG8, and F1_ARG1 to |
1137 // F13_ARG13. | 1137 // F13_ARG13. |
1138 __ mr(R3_ARG1, R18_locals); | 1138 __ mr(R3_ARG1, R18_locals); |
1139 #if !defined(ABI_ELFv2) | |
1139 __ ld(signature_handler_fd, 0, signature_handler_fd); | 1140 __ ld(signature_handler_fd, 0, signature_handler_fd); |
1141 #endif | |
1140 __ call_stub(signature_handler_fd); | 1142 __ call_stub(signature_handler_fd); |
1141 // reload method | 1143 // reload method |
1142 __ ld(R19_method, state_(_method)); | 1144 __ ld(R19_method, state_(_method)); |
1143 | 1145 |
1144 // Remove the register parameter varargs slots we allocated in | 1146 // Remove the register parameter varargs slots we allocated in |
1293 // Block. We do the call directly and leave the current | 1295 // Block. We do the call directly and leave the current |
1294 // last_Java_frame setup undisturbed. We must save any possible | 1296 // last_Java_frame setup undisturbed. We must save any possible |
1295 // native result acrosss the call. No oop is present | 1297 // native result acrosss the call. No oop is present |
1296 | 1298 |
1297 __ mr(R3_ARG1, R16_thread); | 1299 __ mr(R3_ARG1, R16_thread); |
1300 #if defined(ABI_ELFv2) | |
1301 __ call_c(CAST_FROM_FN_PTR(address, JavaThread::check_special_condition_for_native_trans), | |
1302 relocInfo::none); | |
1303 #else | |
1298 __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, JavaThread::check_special_condition_for_native_trans), | 1304 __ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, JavaThread::check_special_condition_for_native_trans), |
1299 relocInfo::none); | 1305 relocInfo::none); |
1306 #endif | |
1300 __ bind(sync_check_done); | 1307 __ bind(sync_check_done); |
1301 | 1308 |
1302 //============================================================================= | 1309 //============================================================================= |
1303 // <<<<<< Back in Interpreter Frame >>>>> | 1310 // <<<<<< Back in Interpreter Frame >>>>> |
1304 | 1311 |
1411 // exception handler, pop the frame and return to the handler. | 1418 // exception handler, pop the frame and return to the handler. |
1412 | 1419 |
1413 // First, pop to caller's frame. | 1420 // First, pop to caller's frame. |
1414 __ pop_interpreter_frame(R11_scratch1, R12_scratch2, R21_tmp1 /* set to return pc */, R22_tmp2); | 1421 __ pop_interpreter_frame(R11_scratch1, R12_scratch2, R21_tmp1 /* set to return pc */, R22_tmp2); |
1415 | 1422 |
1416 __ push_frame_abi112(0, R11_scratch1); | 1423 __ push_frame_reg_args(0, R11_scratch1); |
1417 // Get the address of the exception handler. | 1424 // Get the address of the exception handler. |
1418 __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), | 1425 __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), |
1419 R16_thread, | 1426 R16_thread, |
1420 R21_tmp1 /* return pc */); | 1427 R21_tmp1 /* return pc */); |
1421 __ pop_frame(); | 1428 __ pop_frame(); |
2543 | 2550 |
2544 __ mr(R14, R3_ARG1); // R14 := ARG1 | 2551 __ mr(R14, R3_ARG1); // R14 := ARG1 |
2545 __ mr(R4_ARG2, R3_ARG1); // ARG2 := ARG1 | 2552 __ mr(R4_ARG2, R3_ARG1); // ARG2 := ARG1 |
2546 | 2553 |
2547 // Find the address of the "catch_exception" stub. | 2554 // Find the address of the "catch_exception" stub. |
2548 __ push_frame_abi112(0, R11_scratch1); | 2555 __ push_frame_reg_args(0, R11_scratch1); |
2549 __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), | 2556 __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), |
2550 R16_thread, | 2557 R16_thread, |
2551 R4_ARG2); | 2558 R4_ARG2); |
2552 __ pop_frame(); | 2559 __ pop_frame(); |
2553 | 2560 |