- patches.suse/slab-handle-memoryless-nodes-v2a.patch: Refresh.
[linux-flexiantxendom0-3.2.10.git] / arch / x86 / include / asm / inst.h
1 /*
2  * Generate .byte code for some instructions not supported by old
3  * binutils.
4  */
5 #ifndef X86_ASM_INST_H
6 #define X86_ASM_INST_H
7
8 #ifdef __ASSEMBLY__
9
10         .macro XMM_NUM opd xmm
11         .ifc \xmm,%xmm0
12         \opd = 0
13         .endif
14         .ifc \xmm,%xmm1
15         \opd = 1
16         .endif
17         .ifc \xmm,%xmm2
18         \opd = 2
19         .endif
20         .ifc \xmm,%xmm3
21         \opd = 3
22         .endif
23         .ifc \xmm,%xmm4
24         \opd = 4
25         .endif
26         .ifc \xmm,%xmm5
27         \opd = 5
28         .endif
29         .ifc \xmm,%xmm6
30         \opd = 6
31         .endif
32         .ifc \xmm,%xmm7
33         \opd = 7
34         .endif
35         .ifc \xmm,%xmm8
36         \opd = 8
37         .endif
38         .ifc \xmm,%xmm9
39         \opd = 9
40         .endif
41         .ifc \xmm,%xmm10
42         \opd = 10
43         .endif
44         .ifc \xmm,%xmm11
45         \opd = 11
46         .endif
47         .ifc \xmm,%xmm12
48         \opd = 12
49         .endif
50         .ifc \xmm,%xmm13
51         \opd = 13
52         .endif
53         .ifc \xmm,%xmm14
54         \opd = 14
55         .endif
56         .ifc \xmm,%xmm15
57         \opd = 15
58         .endif
59         .endm
60
61         .macro PFX_OPD_SIZE
62         .byte 0x66
63         .endm
64
65         .macro PFX_REX opd1 opd2
66         .if (\opd1 | \opd2) & 8
67         .byte 0x40 | ((\opd1 & 8) >> 3) | ((\opd2 & 8) >> 1)
68         .endif
69         .endm
70
71         .macro MODRM mod opd1 opd2
72         .byte \mod | (\opd1 & 7) | ((\opd2 & 7) << 3)
73         .endm
74
75         .macro PSHUFB_XMM xmm1 xmm2
76         XMM_NUM pshufb_opd1 \xmm1
77         XMM_NUM pshufb_opd2 \xmm2
78         PFX_OPD_SIZE
79         PFX_REX pshufb_opd1 pshufb_opd2
80         .byte 0x0f, 0x38, 0x00
81         MODRM 0xc0 pshufb_opd1 pshufb_opd2
82         .endm
83
84         .macro PCLMULQDQ imm8 xmm1 xmm2
85         XMM_NUM clmul_opd1 \xmm1
86         XMM_NUM clmul_opd2 \xmm2
87         PFX_OPD_SIZE
88         PFX_REX clmul_opd1 clmul_opd2
89         .byte 0x0f, 0x3a, 0x44
90         MODRM 0xc0 clmul_opd1 clmul_opd2
91         .byte \imm8
92         .endm
93
94         .macro AESKEYGENASSIST rcon xmm1 xmm2
95         XMM_NUM aeskeygen_opd1 \xmm1
96         XMM_NUM aeskeygen_opd2 \xmm2
97         PFX_OPD_SIZE
98         PFX_REX aeskeygen_opd1 aeskeygen_opd2
99         .byte 0x0f, 0x3a, 0xdf
100         MODRM 0xc0 aeskeygen_opd1 aeskeygen_opd2
101         .byte \rcon
102         .endm
103
104         .macro AESIMC xmm1 xmm2
105         XMM_NUM aesimc_opd1 \xmm1
106         XMM_NUM aesimc_opd2 \xmm2
107         PFX_OPD_SIZE
108         PFX_REX aesimc_opd1 aesimc_opd2
109         .byte 0x0f, 0x38, 0xdb
110         MODRM 0xc0 aesimc_opd1 aesimc_opd2
111         .endm
112
113         .macro AESENC xmm1 xmm2
114         XMM_NUM aesenc_opd1 \xmm1
115         XMM_NUM aesenc_opd2 \xmm2
116         PFX_OPD_SIZE
117         PFX_REX aesenc_opd1 aesenc_opd2
118         .byte 0x0f, 0x38, 0xdc
119         MODRM 0xc0 aesenc_opd1 aesenc_opd2
120         .endm
121
122         .macro AESENCLAST xmm1 xmm2
123         XMM_NUM aesenclast_opd1 \xmm1
124         XMM_NUM aesenclast_opd2 \xmm2
125         PFX_OPD_SIZE
126         PFX_REX aesenclast_opd1 aesenclast_opd2
127         .byte 0x0f, 0x38, 0xdd
128         MODRM 0xc0 aesenclast_opd1 aesenclast_opd2
129         .endm
130
131         .macro AESDEC xmm1 xmm2
132         XMM_NUM aesdec_opd1 \xmm1
133         XMM_NUM aesdec_opd2 \xmm2
134         PFX_OPD_SIZE
135         PFX_REX aesdec_opd1 aesdec_opd2
136         .byte 0x0f, 0x38, 0xde
137         MODRM 0xc0 aesdec_opd1 aesdec_opd2
138         .endm
139
140         .macro AESDECLAST xmm1 xmm2
141         XMM_NUM aesdeclast_opd1 \xmm1
142         XMM_NUM aesdeclast_opd2 \xmm2
143         PFX_OPD_SIZE
144         PFX_REX aesdeclast_opd1 aesdeclast_opd2
145         .byte 0x0f, 0x38, 0xdf
146         MODRM 0xc0 aesdeclast_opd1 aesdeclast_opd2
147         .endm
148 #endif
149
150 #endif