439 void fcmp(Register tmp, int index, bool pop_left, bool pop_right); 440 441 // Floating-point comparison for Java 442 // Compares the top-most stack entries on the FPU stack and stores the result in dst. 443 // The arguments are in reversed order on the stack (i.e., top of stack is first argument). 444 // (semantics as described in JVM spec.) 445 void fcmp2int(Register dst, bool unordered_is_less); 446 // Variant of the above which allows y to be further down the stack 447 // and which only pops x and y if specified. If pop_right is 448 // specified then pop_left must also be specified. 449 void fcmp2int(Register dst, bool unordered_is_less, int index, bool pop_left, bool pop_right); 450 451 // Floating-point remainder for Java (ST0 = ST0 fremr ST1, ST1 is empty afterwards) 452 // tmp is a temporary register, if none is available use noreg 453 void fremr(Register tmp); 454 455 // dst = c = a * b + c 456 void fmad(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c); 457 void fmaf(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c); 458 459 460 // same as fcmp2int, but using SSE2 461 void cmpss2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 462 void cmpsd2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 463 464 // branch to L if FPU flag C2 is set/not set 465 // tmp is a temporary register, if none is available use noreg 466 void jC2 (Register tmp, Label& L); 467 void jnC2(Register tmp, Label& L); 468 469 // Pop ST (ffree & fincstp combined) 470 void fpop(); 471 472 // Load float value from 'address'. If UseSSE >= 1, the value is loaded into 473 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 474 void load_float(Address src); 475 476 // Store float value to 'address'. If UseSSE >= 1, the value is stored 477 // from register xmm0. Otherwise, the value is stored from the FPU stack. 478 void store_float(Address dst); | 439 void fcmp(Register tmp, int index, bool pop_left, bool pop_right); 440 441 // Floating-point comparison for Java 442 // Compares the top-most stack entries on the FPU stack and stores the result in dst. 443 // The arguments are in reversed order on the stack (i.e., top of stack is first argument). 444 // (semantics as described in JVM spec.) 445 void fcmp2int(Register dst, bool unordered_is_less); 446 // Variant of the above which allows y to be further down the stack 447 // and which only pops x and y if specified. If pop_right is 448 // specified then pop_left must also be specified. 449 void fcmp2int(Register dst, bool unordered_is_less, int index, bool pop_left, bool pop_right); 450 451 // Floating-point remainder for Java (ST0 = ST0 fremr ST1, ST1 is empty afterwards) 452 // tmp is a temporary register, if none is available use noreg 453 void fremr(Register tmp); 454 455 // dst = c = a * b + c 456 void fmad(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c); 457 void fmaf(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c); 458 459 void vfmad(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c, int vector_len); 460 void vfmaf(XMMRegister dst, XMMRegister a, XMMRegister b, XMMRegister c, int vector_len); 461 void vfmad(XMMRegister dst, XMMRegister a, Address b, XMMRegister c, int vector_len); 462 void vfmaf(XMMRegister dst, XMMRegister a, Address b, XMMRegister c, int vector_len); 463 464 465 // same as fcmp2int, but using SSE2 466 void cmpss2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 467 void cmpsd2int(XMMRegister opr1, XMMRegister opr2, Register dst, bool unordered_is_less); 468 469 // branch to L if FPU flag C2 is set/not set 470 // tmp is a temporary register, if none is available use noreg 471 void jC2 (Register tmp, Label& L); 472 void jnC2(Register tmp, Label& L); 473 474 // Pop ST (ffree & fincstp combined) 475 void fpop(); 476 477 // Load float value from 'address'. If UseSSE >= 1, the value is loaded into 478 // register xmm0. Otherwise, the value is loaded onto the FPU stack. 479 void load_float(Address src); 480 481 // Store float value to 'address'. If UseSSE >= 1, the value is stored 482 // from register xmm0. Otherwise, the value is stored from the FPU stack. 483 void store_float(Address dst); |