hotspot/src/cpu/x86/vm/assembler_x86.cpp
changeset 12742 b055b648431a
parent 12739 09f26b73ae66
child 12955 7cb409520a04
equal deleted inserted replaced
12741:9315df9ea655 12742:b055b648431a
  6952   if (!VM_Version::supports_cmov()) {
  6952   if (!VM_Version::supports_cmov()) {
  6953     // fcmp needs a temporary so preserve rdx,
  6953     // fcmp needs a temporary so preserve rdx,
  6954     tmp = rdx;
  6954     tmp = rdx;
  6955   }
  6955   }
  6956   Register tmp2 = rax;
  6956   Register tmp2 = rax;
  6957   NOT_LP64(Register tmp3 = rcx;)
  6957   Register tmp3 = rcx;
  6958 
  6958 
  6959   if (is_exp) {
  6959   if (is_exp) {
  6960     // Stack: X
  6960     // Stack: X
  6961     fld_s(0);                   // duplicate argument for runtime call. Stack: X X
  6961     fld_s(0);                   // duplicate argument for runtime call. Stack: X X
  6962     fast_exp();                 // Stack: exp(X) X
  6962     fast_exp();                 // Stack: exp(X) X
  7079       bind(integer);
  7079       bind(integer);
  7080     }
  7080     }
  7081 #else
  7081 #else
  7082     {
  7082     {
  7083       Label integer;
  7083       Label integer;
  7084       shlq(tmp2, 1);
  7084       mov(tmp3, tmp2); // preserve tmp2 for parity check below
       
  7085       shlq(tmp3, 1);
  7085       jcc(Assembler::carryClear, integer);
  7086       jcc(Assembler::carryClear, integer);
  7086       jcc(Assembler::notZero, integer);
  7087       jcc(Assembler::notZero, integer);
  7087       stop("integer indefinite value shouldn't be seen here");
  7088       stop("integer indefinite value shouldn't be seen here");
  7088       bind(integer);
  7089       bind(integer);
  7089     }
  7090     }