Mercurial > hg > truffle
comparison src/cpu/sparc/vm/sparc.ad @ 14416:6a936747b569
8024344: PPC64 (part 112): C argument in register AND stack slot.
Summary: On PPC, the first 13 floating point arguments to C calls are passed in floating point registers. Also, all but the first 8 arguments are passed on the stack. So there can be floating point arguments that are passed on the stack and in a register. We duplicate the regs datastructure in c_calling_convention() to represent this.
Reviewed-by: kvn, cjplummer
author | goetz |
---|---|
date | Thu, 12 Sep 2013 13:51:13 -0700 |
parents | 740e263c80c6 |
children | 2b8e28fdf503 |
comparison
equal
deleted
inserted
replaced
14415:666e6ce3976c | 14416:6a936747b569 |
---|---|
3216 // Body of function which returns an OptoRegs array locating | 3216 // Body of function which returns an OptoRegs array locating |
3217 // arguments either in registers or in stack slots for callin | 3217 // arguments either in registers or in stack slots for callin |
3218 // C. | 3218 // C. |
3219 c_calling_convention %{ | 3219 c_calling_convention %{ |
3220 // This is obviously always outgoing | 3220 // This is obviously always outgoing |
3221 (void) SharedRuntime::c_calling_convention(sig_bt, regs, length); | 3221 (void) SharedRuntime::c_calling_convention(sig_bt, regs, /*regs2=*/NULL, length); |
3222 %} | 3222 %} |
3223 | 3223 |
3224 // Location of native (C/C++) and interpreter return values. This is specified to | 3224 // Location of native (C/C++) and interpreter return values. This is specified to |
3225 // be the same as Java. In the 32-bit VM, long values are actually returned from | 3225 // be the same as Java. In the 32-bit VM, long values are actually returned from |
3226 // native calls in O0:O1 and returned to the interpreter in I0:I1. The copying | 3226 // native calls in O0:O1 and returned to the interpreter in I0:I1. The copying |
9116 effect(USE labl); | 9116 effect(USE labl); |
9117 | 9117 |
9118 size(4); | 9118 size(4); |
9119 ins_cost(BRANCH_COST); | 9119 ins_cost(BRANCH_COST); |
9120 format %{ "BA $labl\t! short branch" %} | 9120 format %{ "BA $labl\t! short branch" %} |
9121 ins_encode %{ | 9121 ins_encode %{ |
9122 Label* L = $labl$$label; | 9122 Label* L = $labl$$label; |
9123 assert(__ use_cbcond(*L), "back to back cbcond"); | 9123 assert(__ use_cbcond(*L), "back to back cbcond"); |
9124 __ ba_short(*L); | 9124 __ ba_short(*L); |
9125 %} | 9125 %} |
9126 ins_short_branch(1); | 9126 ins_short_branch(1); |