--- old/src/cpu/x86/vm/macroAssembler_x86.cpp 2016-01-08 17:22:48.254519900 -0800 +++ new/src/cpu/x86/vm/macroAssembler_x86.cpp 2016-01-08 17:22:47.914519900 -0800 @@ -972,6 +972,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()); } @@ -5732,34 +5741,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); @@ -5792,7 +5789,6 @@ } } - // Look up the method for a megamorphic invokeinterface call. // The target method is determined by . // The receiver klass is in recv_klass.