hotspot/src/cpu/x86/vm/assembler_x86.hpp
changeset 9630 d6419e4395e3
parent 9437 9981851b4b8c
child 9978 80c391c46474
equal deleted inserted replaced
9629:1f4dc6af5ad8 9630:d6419e4395e3
   232   Address plus_disp(int disp) const {
   232   Address plus_disp(int disp) const {
   233     Address a = (*this);
   233     Address a = (*this);
   234     a._disp += disp;
   234     a._disp += disp;
   235     return a;
   235     return a;
   236   }
   236   }
       
   237   Address plus_disp(RegisterOrConstant disp, ScaleFactor scale = times_1) const {
       
   238     Address a = (*this);
       
   239     a._disp += disp.constant_or_zero() * scale_size(scale);
       
   240     if (disp.is_register()) {
       
   241       assert(!a.index()->is_valid(), "competing indexes");
       
   242       a._index = disp.as_register();
       
   243       a._scale = scale;
       
   244     }
       
   245     return a;
       
   246   }
       
   247   bool is_same_address(Address a) const {
       
   248     // disregard _rspec
       
   249     return _base == a._base && _disp == a._disp && _index == a._index && _scale == a._scale;
       
   250   }
   237 
   251 
   238   // The following two overloads are used in connection with the
   252   // The following two overloads are used in connection with the
   239   // ByteSize type (see sizes.hpp).  They simplify the use of
   253   // ByteSize type (see sizes.hpp).  They simplify the use of
   240   // ByteSize'd arguments in assembly code. Note that their equivalent
   254   // ByteSize'd arguments in assembly code. Note that their equivalent
   241   // for the optimized build are the member functions with int disp
   255   // for the optimized build are the member functions with int disp
  2027   void addptr(Address dst, Register src);
  2041   void addptr(Address dst, Register src);
  2028 
  2042 
  2029   void addptr(Register dst, Address src) { LP64_ONLY(addq(dst, src)) NOT_LP64(addl(dst, src)); }
  2043   void addptr(Register dst, Address src) { LP64_ONLY(addq(dst, src)) NOT_LP64(addl(dst, src)); }
  2030   void addptr(Register dst, int32_t src);
  2044   void addptr(Register dst, int32_t src);
  2031   void addptr(Register dst, Register src);
  2045   void addptr(Register dst, Register src);
       
  2046   void addptr(Register dst, RegisterOrConstant src) {
       
  2047     if (src.is_constant()) addptr(dst, (int) src.as_constant());
       
  2048     else                   addptr(dst,       src.as_register());
       
  2049   }
  2032 
  2050 
  2033   void andptr(Register dst, int32_t src);
  2051   void andptr(Register dst, int32_t src);
  2034   void andptr(Register src1, Register src2) { LP64_ONLY(andq(src1, src2)) NOT_LP64(andl(src1, src2)) ; }
  2052   void andptr(Register src1, Register src2) { LP64_ONLY(andq(src1, src2)) NOT_LP64(andl(src1, src2)) ; }
  2035 
  2053 
  2036   void cmp8(AddressLiteral src1, int imm);
  2054   void cmp8(AddressLiteral src1, int imm);
  2088   void subptr(Address dst, int32_t src) { LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src)); }
  2106   void subptr(Address dst, int32_t src) { LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src)); }
  2089 
  2107 
  2090   void subptr(Register dst, Address src) { LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src)); }
  2108   void subptr(Register dst, Address src) { LP64_ONLY(subq(dst, src)) NOT_LP64(subl(dst, src)); }
  2091   void subptr(Register dst, int32_t src);
  2109   void subptr(Register dst, int32_t src);
  2092   void subptr(Register dst, Register src);
  2110   void subptr(Register dst, Register src);
  2093 
  2111   void subptr(Register dst, RegisterOrConstant src) {
       
  2112     if (src.is_constant()) subptr(dst, (int) src.as_constant());
       
  2113     else                   subptr(dst,       src.as_register());
       
  2114   }
  2094 
  2115 
  2095   void sbbptr(Address dst, int32_t src) { LP64_ONLY(sbbq(dst, src)) NOT_LP64(sbbl(dst, src)); }
  2116   void sbbptr(Address dst, int32_t src) { LP64_ONLY(sbbq(dst, src)) NOT_LP64(sbbl(dst, src)); }
  2096   void sbbptr(Register dst, int32_t src) { LP64_ONLY(sbbq(dst, src)) NOT_LP64(sbbl(dst, src)); }
  2117   void sbbptr(Register dst, int32_t src) { LP64_ONLY(sbbq(dst, src)) NOT_LP64(sbbl(dst, src)); }
  2097 
  2118 
  2098   void xchgptr(Register src1, Register src2) { LP64_ONLY(xchgq(src1, src2)) NOT_LP64(xchgl(src1, src2)) ; }
  2119   void xchgptr(Register src1, Register src2) { LP64_ONLY(xchgq(src1, src2)) NOT_LP64(xchgl(src1, src2)) ; }
  2285   void movptr(Register dst, intptr_t src);
  2306   void movptr(Register dst, intptr_t src);
  2286   void movptr(Register dst, Register src);
  2307   void movptr(Register dst, Register src);
  2287   void movptr(Address dst, intptr_t src);
  2308   void movptr(Address dst, intptr_t src);
  2288 
  2309 
  2289   void movptr(Address dst, Register src);
  2310   void movptr(Address dst, Register src);
       
  2311 
       
  2312   void movptr(Register dst, RegisterOrConstant src) {
       
  2313     if (src.is_constant()) movptr(dst, src.as_constant());
       
  2314     else                   movptr(dst, src.as_register());
       
  2315   }
  2290 
  2316 
  2291 #ifdef _LP64
  2317 #ifdef _LP64
  2292   // Generally the next two are only used for moving NULL
  2318   // Generally the next two are only used for moving NULL
  2293   // Although there are situations in initializing the mark word where
  2319   // Although there are situations in initializing the mark word where
  2294   // they could be used. They are dangerous.
  2320   // they could be used. They are dangerous.