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);
|