< prev index next >

src/cpu/x86/vm/assembler_x86.hpp

Print this page


   1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


1663   void orq(Address dst, int32_t imm32);
1664   void orq(Register dst, int32_t imm32);
1665   void orq(Register dst, Address src);
1666   void orq(Register dst, Register src);
1667 
1668   // Pack with unsigned saturation
1669   void packuswb(XMMRegister dst, XMMRegister src);
1670   void packuswb(XMMRegister dst, Address src);
1671   void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1672 
1673   // Pemutation of 64bit words
1674   void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1675   void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1676 
1677   void pause();
1678 
1679   // SSE4.2 string instructions
1680   void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1681   void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1682 






1683   // SSE 4.1 extract
1684   void pextrd(Register dst, XMMRegister src, int imm8);
1685   void pextrq(Register dst, XMMRegister src, int imm8);
1686   // SSE 2 extract
1687   void pextrw(Register dst, XMMRegister src, int imm8);
1688 
1689   // SSE 4.1 insert
1690   void pinsrd(XMMRegister dst, Register src, int imm8);
1691   void pinsrq(XMMRegister dst, Register src, int imm8);
1692   // SSE 2 insert
1693   void pinsrw(XMMRegister dst, Register src, int imm8);
1694 
1695   // SSE4.1 packed move
1696   void pmovzxbw(XMMRegister dst, XMMRegister src);
1697   void pmovzxbw(XMMRegister dst, Address src);
1698 


1699 #ifndef _LP64 // no 32bit push/pop on amd64
1700   void popl(Address dst);
1701 #endif
1702 
1703 #ifdef _LP64
1704   void popq(Address dst);
1705 #endif
1706 
1707   void popcntl(Register dst, Address src);
1708   void popcntl(Register dst, Register src);
1709 
1710 #ifdef _LP64
1711   void popcntq(Register dst, Address src);
1712   void popcntq(Register dst, Register src);
1713 #endif
1714 
1715   // Prefetches (SSE, SSE2, 3DNOW only)
1716 
1717   void prefetchnta(Address src);
1718   void prefetchr(Address src);


2092   void vextracti128h(Address dst, XMMRegister src);
2093 
2094   // Copy low 256bit into high 256bit of ZMM registers.
2095   void vinserti64x4h(XMMRegister dst, XMMRegister nds, XMMRegister src);
2096   void vinsertf64x4h(XMMRegister dst, XMMRegister nds, XMMRegister src);
2097   void vextracti64x4h(XMMRegister dst, XMMRegister src);
2098   void vextractf64x4h(XMMRegister dst, XMMRegister src);
2099   void vextractf64x4h(Address dst, XMMRegister src);
2100   void vinsertf64x4h(XMMRegister dst, Address src);
2101 
2102   // Copy targeted 128bit segments of the ZMM registers
2103   void vextracti64x2h(XMMRegister dst, XMMRegister src, int value);
2104   void vextractf64x2h(XMMRegister dst, XMMRegister src, int value);
2105   void vextractf32x4h(XMMRegister dst, XMMRegister src, int value);
2106   void vextractf32x4h(Address dst, XMMRegister src, int value);
2107   void vinsertf32x4h(XMMRegister dst, XMMRegister nds, XMMRegister src, int value);
2108   void vinsertf32x4h(XMMRegister dst, Address src, int value);
2109 
2110   // duplicate 4-bytes integer data from src into 8 locations in dest
2111   void vpbroadcastd(XMMRegister dst, XMMRegister src);



2112 
2113   // duplicate n-bytes integer data from src into vector_len locations in dest
2114   void evpbroadcastb(XMMRegister dst, XMMRegister src, int vector_len);
2115   void evpbroadcastb(XMMRegister dst, Address src, int vector_len);
2116   void evpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len);
2117   void evpbroadcastw(XMMRegister dst, Address src, int vector_len);
2118   void evpbroadcastd(XMMRegister dst, XMMRegister src, int vector_len);
2119   void evpbroadcastd(XMMRegister dst, Address src, int vector_len);
2120   void evpbroadcastq(XMMRegister dst, XMMRegister src, int vector_len);
2121   void evpbroadcastq(XMMRegister dst, Address src, int vector_len);
2122 
2123   void evpbroadcastss(XMMRegister dst, XMMRegister src, int vector_len);
2124   void evpbroadcastss(XMMRegister dst, Address src, int vector_len);
2125   void evpbroadcastsd(XMMRegister dst, XMMRegister src, int vector_len);
2126   void evpbroadcastsd(XMMRegister dst, Address src, int vector_len);
2127 
2128   void evpbroadcastb(XMMRegister dst, Register src, int vector_len);
2129   void evpbroadcastw(XMMRegister dst, Register src, int vector_len);
2130   void evpbroadcastd(XMMRegister dst, Register src, int vector_len);
2131   void evpbroadcastq(XMMRegister dst, Register src, int vector_len);


   1 /*
   2  * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


1663   void orq(Address dst, int32_t imm32);
1664   void orq(Register dst, int32_t imm32);
1665   void orq(Register dst, Address src);
1666   void orq(Register dst, Register src);
1667 
1668   // Pack with unsigned saturation
1669   void packuswb(XMMRegister dst, XMMRegister src);
1670   void packuswb(XMMRegister dst, Address src);
1671   void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1672 
1673   // Pemutation of 64bit words
1674   void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1675   void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1676 
1677   void pause();
1678 
1679   // SSE4.2 string instructions
1680   void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1681   void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1682 
1683   void pcmpeqw(XMMRegister dst, XMMRegister src);
1684   void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1685 
1686   void pmovmskb(Register dst, XMMRegister src);
1687   void vpmovmskb(Register dst, XMMRegister src);
1688 
1689   // SSE 4.1 extract
1690   void pextrd(Register dst, XMMRegister src, int imm8);
1691   void pextrq(Register dst, XMMRegister src, int imm8);
1692   // SSE 2 extract
1693   void pextrw(Register dst, XMMRegister src, int imm8);
1694 
1695   // SSE 4.1 insert
1696   void pinsrd(XMMRegister dst, Register src, int imm8);
1697   void pinsrq(XMMRegister dst, Register src, int imm8);
1698   // SSE 2 insert
1699   void pinsrw(XMMRegister dst, Register src, int imm8);
1700 
1701   // SSE4.1 packed move
1702   void pmovzxbw(XMMRegister dst, XMMRegister src);
1703   void pmovzxbw(XMMRegister dst, Address src);
1704 
1705   void vpmovzxbw(XMMRegister dst, Address src);
1706 
1707 #ifndef _LP64 // no 32bit push/pop on amd64
1708   void popl(Address dst);
1709 #endif
1710 
1711 #ifdef _LP64
1712   void popq(Address dst);
1713 #endif
1714 
1715   void popcntl(Register dst, Address src);
1716   void popcntl(Register dst, Register src);
1717 
1718 #ifdef _LP64
1719   void popcntq(Register dst, Address src);
1720   void popcntq(Register dst, Register src);
1721 #endif
1722 
1723   // Prefetches (SSE, SSE2, 3DNOW only)
1724 
1725   void prefetchnta(Address src);
1726   void prefetchr(Address src);


2100   void vextracti128h(Address dst, XMMRegister src);
2101 
2102   // Copy low 256bit into high 256bit of ZMM registers.
2103   void vinserti64x4h(XMMRegister dst, XMMRegister nds, XMMRegister src);
2104   void vinsertf64x4h(XMMRegister dst, XMMRegister nds, XMMRegister src);
2105   void vextracti64x4h(XMMRegister dst, XMMRegister src);
2106   void vextractf64x4h(XMMRegister dst, XMMRegister src);
2107   void vextractf64x4h(Address dst, XMMRegister src);
2108   void vinsertf64x4h(XMMRegister dst, Address src);
2109 
2110   // Copy targeted 128bit segments of the ZMM registers
2111   void vextracti64x2h(XMMRegister dst, XMMRegister src, int value);
2112   void vextractf64x2h(XMMRegister dst, XMMRegister src, int value);
2113   void vextractf32x4h(XMMRegister dst, XMMRegister src, int value);
2114   void vextractf32x4h(Address dst, XMMRegister src, int value);
2115   void vinsertf32x4h(XMMRegister dst, XMMRegister nds, XMMRegister src, int value);
2116   void vinsertf32x4h(XMMRegister dst, Address src, int value);
2117 
2118   // duplicate 4-bytes integer data from src into 8 locations in dest
2119   void vpbroadcastd(XMMRegister dst, XMMRegister src);
2120 
2121   // duplicate 2-bytes integer data from src into 16 locations in dest
2122   void vpbroadcastw(XMMRegister dst, XMMRegister src);
2123 
2124   // duplicate n-bytes integer data from src into vector_len locations in dest
2125   void evpbroadcastb(XMMRegister dst, XMMRegister src, int vector_len);
2126   void evpbroadcastb(XMMRegister dst, Address src, int vector_len);
2127   void evpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len);
2128   void evpbroadcastw(XMMRegister dst, Address src, int vector_len);
2129   void evpbroadcastd(XMMRegister dst, XMMRegister src, int vector_len);
2130   void evpbroadcastd(XMMRegister dst, Address src, int vector_len);
2131   void evpbroadcastq(XMMRegister dst, XMMRegister src, int vector_len);
2132   void evpbroadcastq(XMMRegister dst, Address src, int vector_len);
2133 
2134   void evpbroadcastss(XMMRegister dst, XMMRegister src, int vector_len);
2135   void evpbroadcastss(XMMRegister dst, Address src, int vector_len);
2136   void evpbroadcastsd(XMMRegister dst, XMMRegister src, int vector_len);
2137   void evpbroadcastsd(XMMRegister dst, Address src, int vector_len);
2138 
2139   void evpbroadcastb(XMMRegister dst, Register src, int vector_len);
2140   void evpbroadcastw(XMMRegister dst, Register src, int vector_len);
2141   void evpbroadcastd(XMMRegister dst, Register src, int vector_len);
2142   void evpbroadcastq(XMMRegister dst, Register src, int vector_len);


< prev index next >