430 431 // Floating-point comparison for Java 432 // Compares the top-most stack entries on the FPU stack and stores the result in dst. 433 // The arguments are in reversed order on the stack (i.e., top of stack is first argument). 434 // (semantics as described in JVM spec.) 435 void fcmp2int(Register dst, bool unordered_is_less); 436 // Variant of the above which allows y to be further down the stack 437 // and which only pops x and y if specified. If pop_right is 438 // specified then pop_left must also be specified. 439 void fcmp2int(Register dst, bool unordered_is_less, int index, bool pop_left, bool pop_right); 440 441 // Floating-point remainder for Java (ST0 = ST0 fremr ST1, ST1 is empty afterwards) 442 // tmp is a temporary register, if none is available use noreg 443 void fremr(Register tmp); 444 445 446 // same as fcmp2int, but using SSE2 447 void cmpss2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 448 void cmpsd2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 449 450 // Inlined sin/cos generator for Java; must not use CPU instruction 451 // directly on Intel as it does not have high enough precision 452 // outside of the range [-pi/4, pi/4]. Extra argument indicate the 453 // number of FPU stack slots in use; all but the topmost will 454 // require saving if a slow case is necessary. Assumes argument is 455 // on FP TOS; result is on FP TOS. No cpu registers are changed by 456 // this code. 457 void trigfunc(char trig, int num_fpu_regs_in_use = 1); 458 459 // branch to L if FPU flag C2 is set/not set 460 // tmp is a temporary register, if none is available use noreg 461 void jC2 (Register tmp, Label& L); 462 void jnC2(Register tmp, Label& L); 463 464 // Pop ST (ffree & fincstp combined) 465 void fpop(); 466 467 // Load float value from 'address'. If UseSSE >= 1, the value is loaded into 468 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 469 void load_float(Address src); 470 471 // Store float value to 'address'. If UseSSE >= 1, the value is stored 472 // from register xmm0. Otherwise, the value is stored from the FPU stack. 473 void store_float(Address dst); 474 475 // Load double value from 'address'. If UseSSE >= 2, the value is loaded into 476 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 477 void load_double(Address src); 478 | 430 431 // Floating-point comparison for Java 432 // Compares the top-most stack entries on the FPU stack and stores the result in dst. 433 // The arguments are in reversed order on the stack (i.e., top of stack is first argument). 434 // (semantics as described in JVM spec.) 435 void fcmp2int(Register dst, bool unordered_is_less); 436 // Variant of the above which allows y to be further down the stack 437 // and which only pops x and y if specified. If pop_right is 438 // specified then pop_left must also be specified. 439 void fcmp2int(Register dst, bool unordered_is_less, int index, bool pop_left, bool pop_right); 440 441 // Floating-point remainder for Java (ST0 = ST0 fremr ST1, ST1 is empty afterwards) 442 // tmp is a temporary register, if none is available use noreg 443 void fremr(Register tmp); 444 445 446 // same as fcmp2int, but using SSE2 447 void cmpss2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 448 void cmpsd2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 449 450 // branch to L if FPU flag C2 is set/not set 451 // tmp is a temporary register, if none is available use noreg 452 void jC2 (Register tmp, Label& L); 453 void jnC2(Register tmp, Label& L); 454 455 // Pop ST (ffree & fincstp combined) 456 void fpop(); 457 458 // Load float value from 'address'. If UseSSE >= 1, the value is loaded into 459 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 460 void load_float(Address src); 461 462 // Store float value to 'address'. If UseSSE >= 1, the value is stored 463 // from register xmm0. Otherwise, the value is stored from the FPU stack. 464 void store_float(Address dst); 465 466 // Load double value from 'address'. If UseSSE >= 2, the value is loaded into 467 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 468 void load_double(Address src); 469 |