--- old/src/cpu/x86/vm/macroAssembler_x86.cpp 2015-12-02 11:46:51.621187700 -0800 +++ new/src/cpu/x86/vm/macroAssembler_x86.cpp 2015-12-02 11:46:51.280153600 -0800 @@ -971,6 +971,15 @@ } } +void MacroAssembler::addpd(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + Assembler::addpd(dst, as_Address(src)); + } else { + lea(rscratch1, src); + Assembler::addpd(dst, Address(rscratch1, 0)); + } +} + void MacroAssembler::align(int modulus) { align(modulus, offset()); } @@ -5947,34 +5956,22 @@ } Label slow_case, done; + if (trig == 't') { + ExternalAddress pi4_adr = (address)&pi_4; + if (reachable(pi4_adr)) { + // x ?<= pi/4 + fld_d(pi4_adr); + fld_s(1); // Stack: X PI/4 X + fabs(); // Stack: |X| PI/4 X + fcmp(tmp); + jcc(Assembler::above, slow_case); - ExternalAddress pi4_adr = (address)&pi_4; - if (reachable(pi4_adr)) { - // x ?<= pi/4 - fld_d(pi4_adr); - fld_s(1); // Stack: X PI/4 X - fabs(); // Stack: |X| PI/4 X - fcmp(tmp); - jcc(Assembler::above, slow_case); - - // fastest case: -pi/4 <= x <= pi/4 - switch(trig) { - case 's': - fsin(); - break; - case 'c': - fcos(); - break; - case 't': + // fastest case: -pi/4 <= x <= pi/4 ftan(); - break; - default: - assert(false, "bad intrinsic"); - break; + + jmp(done); } - jmp(done); } - // slow case: runtime call bind(slow_case);