< prev index next >

src/cpu/x86/vm/macroAssembler_x86.hpp

Print this page




 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 


< prev index next >