1758 // to construct decryption expanded key |
1758 // to construct decryption expanded key |
1759 const bool Matcher::pass_original_key_for_aes() { |
1759 const bool Matcher::pass_original_key_for_aes() { |
1760 return true; |
1760 return true; |
1761 } |
1761 } |
1762 |
1762 |
1763 /* NOTE: All currently supported SPARC HW provides fast conversion. |
1763 // NOTE: All currently supported SPARC HW provides fast conversion. |
1764 * |
1764 const bool Matcher::convL2FSupported(void) { return true; } |
1765 * TODO: Clean-out code depending on 'has_fast_fxtof'. |
|
1766 */ |
|
1767 const bool Matcher::convL2FSupported(void) { |
|
1768 return VM_Version::has_fast_fxtof(); |
|
1769 } |
|
1770 |
1765 |
1771 // Is this branch offset short enough that a short branch can be used? |
1766 // Is this branch offset short enough that a short branch can be used? |
1772 // |
1767 // |
1773 // NOTE: If the platform does not provide any short branch variants, then |
1768 // NOTE: If the platform does not provide any short branch variants, then |
1774 // this method should return false for offset 0. |
1769 // this method should return false for offset 0. |
8242 opcode(Assembler::fpop1_op3, Assembler::arith_op, Assembler::fmuld_opf); |
8237 opcode(Assembler::fpop1_op3, Assembler::arith_op, Assembler::fmuld_opf); |
8243 ins_encode(form3_opf_rs1D_rs2D_rdD(src1, src2, dst)); |
8238 ins_encode(form3_opf_rs1D_rs2D_rdD(src1, src2, dst)); |
8244 ins_pipe(fmulD_reg_reg); |
8239 ins_pipe(fmulD_reg_reg); |
8245 %} |
8240 %} |
8246 |
8241 |
8247 instruct convL2D_reg_slow_fxtof(regD dst, stackSlotL src) %{ |
|
8248 match(Set dst (ConvL2D src)); |
|
8249 ins_cost(DEFAULT_COST*8 + MEMORY_REF_COST*6); |
|
8250 |
|
8251 expand %{ |
|
8252 regD_low tmpsrc; |
|
8253 iRegI ix43300000; |
|
8254 iRegI ix41f00000; |
|
8255 stackSlotL lx43300000; |
|
8256 stackSlotL lx41f00000; |
|
8257 regD_low dx43300000; |
|
8258 regD dx41f00000; |
|
8259 regD tmp1; |
|
8260 regD_low tmp2; |
|
8261 regD tmp3; |
|
8262 regD tmp4; |
|
8263 |
|
8264 stkL_to_regD(tmpsrc, src); |
|
8265 |
|
8266 loadConI_x43300000(ix43300000); |
|
8267 loadConI_x41f00000(ix41f00000); |
|
8268 regI_to_stkLHi(lx43300000, ix43300000); |
|
8269 regI_to_stkLHi(lx41f00000, ix41f00000); |
|
8270 stkL_to_regD(dx43300000, lx43300000); |
|
8271 stkL_to_regD(dx41f00000, lx41f00000); |
|
8272 |
|
8273 convI2D_regDHi_regD(tmp1, tmpsrc); |
|
8274 regDHi_regDLo_to_regD(tmp2, dx43300000, tmpsrc); |
|
8275 subD_regD_regD(tmp3, tmp2, dx43300000); |
|
8276 mulD_regD_regD(tmp4, tmp1, dx41f00000); |
|
8277 addD_regD_regD(dst, tmp3, tmp4); |
|
8278 %} |
|
8279 %} |
|
8280 |
|
8281 // Long to Double conversion using fast fxtof |
8242 // Long to Double conversion using fast fxtof |
8282 instruct convL2D_helper(regD dst, regD tmp) %{ |
8243 instruct convL2D_helper(regD dst, regD tmp) %{ |
8283 effect(DEF dst, USE tmp); |
8244 effect(DEF dst, USE tmp); |
8284 size(4); |
8245 size(4); |
8285 format %{ "FXTOD $tmp,$dst" %} |
8246 format %{ "FXTOD $tmp,$dst" %} |
8287 ins_encode(form3_opf_rs2D_rdD(tmp, dst)); |
8248 ins_encode(form3_opf_rs2D_rdD(tmp, dst)); |
8288 ins_pipe(fcvtL2D); |
8249 ins_pipe(fcvtL2D); |
8289 %} |
8250 %} |
8290 |
8251 |
8291 instruct convL2D_stk_fast_fxtof(regD dst, stackSlotL src) %{ |
8252 instruct convL2D_stk_fast_fxtof(regD dst, stackSlotL src) %{ |
8292 predicate(VM_Version::has_fast_fxtof()); |
|
8293 match(Set dst (ConvL2D src)); |
8253 match(Set dst (ConvL2D src)); |
8294 ins_cost(DEFAULT_COST + 3 * MEMORY_REF_COST); |
8254 ins_cost(DEFAULT_COST + 3 * MEMORY_REF_COST); |
8295 expand %{ |
8255 expand %{ |
8296 regD tmp; |
8256 regD tmp; |
8297 stkL_to_regD(tmp, src); |
8257 stkL_to_regD(tmp, src); |