< prev index next >
src/cpu/x86/vm/macroAssembler_x86.cpp
Print this page
*** 969,978 ****
--- 969,987 ----
lea(rscratch1, src);
addss(dst, Address(rscratch1, 0));
}
}
+ 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());
}
void MacroAssembler::align(int modulus, int target) {
*** 5945,5982 ****
tmp = rbx;
push(tmp);
}
Label slow_case, done;
!
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':
ftan();
! break;
! default:
! assert(false, "bad intrinsic");
! break;
! }
jmp(done);
}
!
// slow case: runtime call
bind(slow_case);
switch(trig) {
case 's':
--- 5954,5979 ----
tmp = rbx;
push(tmp);
}
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);
// fastest case: -pi/4 <= x <= pi/4
ftan();
!
jmp(done);
}
! }
// slow case: runtime call
bind(slow_case);
switch(trig) {
case 's':
< prev index next >