1 /* 2 * This file contains instructions for testing by the test titled: 3 * 4 * "Test x86 instruction decoder - new instructions" 5 * 6 * Note that the 'Expecting' comment lines are consumed by the 7 * gen-insn-x86-dat.awk script and have the format: 8 * 9 * Expecting: <op> <branch> <rel> 10 * 11 * If this file is changed, remember to run the gen-insn-x86-dat.sh 12 * script and commit the result. 13 * 14 * Refer to insn-x86.c for more details. 15 */ 16 17 int main(void) 18 { 19 /* Following line is a marker for the awk script - do not change */ 20 asm volatile("rdtsc"); /* Start here */ 21 22 #ifdef __x86_64__ 23 24 /* bndmk m64, bnd */ 25 26 asm volatile("bndmk (%rax), %bnd0"); 27 asm volatile("bndmk (%r8), %bnd0"); 28 asm volatile("bndmk (0x12345678), %bnd0"); 29 asm volatile("bndmk (%rax), %bnd3"); 30 asm volatile("bndmk (%rcx,%rax,1), %bnd0"); 31 asm volatile("bndmk 0x12345678(,%rax,1), %bnd0"); 32 asm volatile("bndmk (%rax,%rcx,1), %bnd0"); 33 asm volatile("bndmk (%rax,%rcx,8), %bnd0"); 34 asm volatile("bndmk 0x12(%rax), %bnd0"); 35 asm volatile("bndmk 0x12(%rbp), %bnd0"); 36 asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0"); 37 asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0"); 38 asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0"); 39 asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0"); 40 asm volatile("bndmk 0x12345678(%rax), %bnd0"); 41 asm volatile("bndmk 0x12345678(%rbp), %bnd0"); 42 asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0"); 43 asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0"); 44 asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0"); 45 asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0"); 46 47 /* bndcl r/m64, bnd */ 48 49 asm volatile("bndcl (%rax), %bnd0"); 50 asm volatile("bndcl (%r8), %bnd0"); 51 asm volatile("bndcl (0x12345678), %bnd0"); 52 asm volatile("bndcl (%rax), %bnd3"); 53 asm volatile("bndcl (%rcx,%rax,1), %bnd0"); 54 asm volatile("bndcl 0x12345678(,%rax,1), %bnd0"); 55 asm volatile("bndcl (%rax,%rcx,1), %bnd0"); 56 asm volatile("bndcl (%rax,%rcx,8), %bnd0"); 57 asm volatile("bndcl 0x12(%rax), %bnd0"); 58 asm volatile("bndcl 0x12(%rbp), %bnd0"); 59 asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0"); 60 asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0"); 61 asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0"); 62 asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0"); 63 asm volatile("bndcl 0x12345678(%rax), %bnd0"); 64 asm volatile("bndcl 0x12345678(%rbp), %bnd0"); 65 asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0"); 66 asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0"); 67 asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0"); 68 asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0"); 69 asm volatile("bndcl %rax, %bnd0"); 70 71 /* bndcu r/m64, bnd */ 72 73 asm volatile("bndcu (%rax), %bnd0"); 74 asm volatile("bndcu (%r8), %bnd0"); 75 asm volatile("bndcu (0x12345678), %bnd0"); 76 asm volatile("bndcu (%rax), %bnd3"); 77 asm volatile("bndcu (%rcx,%rax,1), %bnd0"); 78 asm volatile("bndcu 0x12345678(,%rax,1), %bnd0"); 79 asm volatile("bndcu (%rax,%rcx,1), %bnd0"); 80 asm volatile("bndcu (%rax,%rcx,8), %bnd0"); 81 asm volatile("bndcu 0x12(%rax), %bnd0"); 82 asm volatile("bndcu 0x12(%rbp), %bnd0"); 83 asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0"); 84 asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0"); 85 asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0"); 86 asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0"); 87 asm volatile("bndcu 0x12345678(%rax), %bnd0"); 88 asm volatile("bndcu 0x12345678(%rbp), %bnd0"); 89 asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0"); 90 asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0"); 91 asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0"); 92 asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0"); 93 asm volatile("bndcu %rax, %bnd0"); 94 95 /* bndcn r/m64, bnd */ 96 97 asm volatile("bndcn (%rax), %bnd0"); 98 asm volatile("bndcn (%r8), %bnd0"); 99 asm volatile("bndcn (0x12345678), %bnd0"); 100 asm volatile("bndcn (%rax), %bnd3"); 101 asm volatile("bndcn (%rcx,%rax,1), %bnd0"); 102 asm volatile("bndcn 0x12345678(,%rax,1), %bnd0"); 103 asm volatile("bndcn (%rax,%rcx,1), %bnd0"); 104 asm volatile("bndcn (%rax,%rcx,8), %bnd0"); 105 asm volatile("bndcn 0x12(%rax), %bnd0"); 106 asm volatile("bndcn 0x12(%rbp), %bnd0"); 107 asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0"); 108 asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0"); 109 asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0"); 110 asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0"); 111 asm volatile("bndcn 0x12345678(%rax), %bnd0"); 112 asm volatile("bndcn 0x12345678(%rbp), %bnd0"); 113 asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0"); 114 asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0"); 115 asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0"); 116 asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0"); 117 asm volatile("bndcn %rax, %bnd0"); 118 119 /* bndmov m128, bnd */ 120 121 asm volatile("bndmov (%rax), %bnd0"); 122 asm volatile("bndmov (%r8), %bnd0"); 123 asm volatile("bndmov (0x12345678), %bnd0"); 124 asm volatile("bndmov (%rax), %bnd3"); 125 asm volatile("bndmov (%rcx,%rax,1), %bnd0"); 126 asm volatile("bndmov 0x12345678(,%rax,1), %bnd0"); 127 asm volatile("bndmov (%rax,%rcx,1), %bnd0"); 128 asm volatile("bndmov (%rax,%rcx,8), %bnd0"); 129 asm volatile("bndmov 0x12(%rax), %bnd0"); 130 asm volatile("bndmov 0x12(%rbp), %bnd0"); 131 asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0"); 132 asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0"); 133 asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0"); 134 asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0"); 135 asm volatile("bndmov 0x12345678(%rax), %bnd0"); 136 asm volatile("bndmov 0x12345678(%rbp), %bnd0"); 137 asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0"); 138 asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0"); 139 asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0"); 140 asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0"); 141 142 /* bndmov bnd, m128 */ 143 144 asm volatile("bndmov %bnd0, (%rax)"); 145 asm volatile("bndmov %bnd0, (%r8)"); 146 asm volatile("bndmov %bnd0, (0x12345678)"); 147 asm volatile("bndmov %bnd3, (%rax)"); 148 asm volatile("bndmov %bnd0, (%rcx,%rax,1)"); 149 asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)"); 150 asm volatile("bndmov %bnd0, (%rax,%rcx,1)"); 151 asm volatile("bndmov %bnd0, (%rax,%rcx,8)"); 152 asm volatile("bndmov %bnd0, 0x12(%rax)"); 153 asm volatile("bndmov %bnd0, 0x12(%rbp)"); 154 asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)"); 155 asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)"); 156 asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)"); 157 asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)"); 158 asm volatile("bndmov %bnd0, 0x12345678(%rax)"); 159 asm volatile("bndmov %bnd0, 0x12345678(%rbp)"); 160 asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)"); 161 asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)"); 162 asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)"); 163 asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)"); 164 165 /* bndmov bnd2, bnd1 */ 166 167 asm volatile("bndmov %bnd0, %bnd1"); 168 asm volatile("bndmov %bnd1, %bnd0"); 169 170 /* bndldx mib, bnd */ 171 172 asm volatile("bndldx (%rax), %bnd0"); 173 asm volatile("bndldx (%r8), %bnd0"); 174 asm volatile("bndldx (0x12345678), %bnd0"); 175 asm volatile("bndldx (%rax), %bnd3"); 176 asm volatile("bndldx (%rcx,%rax,1), %bnd0"); 177 asm volatile("bndldx 0x12345678(,%rax,1), %bnd0"); 178 asm volatile("bndldx (%rax,%rcx,1), %bnd0"); 179 asm volatile("bndldx 0x12(%rax), %bnd0"); 180 asm volatile("bndldx 0x12(%rbp), %bnd0"); 181 asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0"); 182 asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0"); 183 asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0"); 184 asm volatile("bndldx 0x12345678(%rax), %bnd0"); 185 asm volatile("bndldx 0x12345678(%rbp), %bnd0"); 186 asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0"); 187 asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0"); 188 asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0"); 189 190 /* bndstx bnd, mib */ 191 192 asm volatile("bndstx %bnd0, (%rax)"); 193 asm volatile("bndstx %bnd0, (%r8)"); 194 asm volatile("bndstx %bnd0, (0x12345678)"); 195 asm volatile("bndstx %bnd3, (%rax)"); 196 asm volatile("bndstx %bnd0, (%rcx,%rax,1)"); 197 asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)"); 198 asm volatile("bndstx %bnd0, (%rax,%rcx,1)"); 199 asm volatile("bndstx %bnd0, 0x12(%rax)"); 200 asm volatile("bndstx %bnd0, 0x12(%rbp)"); 201 asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)"); 202 asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)"); 203 asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)"); 204 asm volatile("bndstx %bnd0, 0x12345678(%rax)"); 205 asm volatile("bndstx %bnd0, 0x12345678(%rbp)"); 206 asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)"); 207 asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)"); 208 asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)"); 209 210 /* bnd prefix on call, ret, jmp and all jcc */ 211 212 asm volatile("bnd call label1"); /* Expecting: call unconditional 0 */ 213 asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ 214 asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ 215 asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ 216 asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ 217 asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ 218 asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0 */ 219 220 /* sha1rnds4 imm8, xmm2/m128, xmm1 */ 221 222 asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); 223 asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); 224 asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0"); 225 asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8"); 226 asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8"); 227 asm volatile("sha1rnds4 $0x91, (%rax), %xmm0"); 228 asm volatile("sha1rnds4 $0x91, (%r8), %xmm0"); 229 asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); 230 asm volatile("sha1rnds4 $0x91, (%rax), %xmm3"); 231 asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0"); 232 asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0"); 233 asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0"); 234 asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0"); 235 asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0"); 236 asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0"); 237 asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0"); 238 asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0"); 239 asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0"); 240 asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0"); 241 asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0"); 242 asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0"); 243 asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0"); 244 asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0"); 245 asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0"); 246 asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0"); 247 asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15"); 248 249 /* sha1nexte xmm2/m128, xmm1 */ 250 251 asm volatile("sha1nexte %xmm1, %xmm0"); 252 asm volatile("sha1nexte %xmm7, %xmm2"); 253 asm volatile("sha1nexte %xmm8, %xmm0"); 254 asm volatile("sha1nexte %xmm7, %xmm8"); 255 asm volatile("sha1nexte %xmm15, %xmm8"); 256 asm volatile("sha1nexte (%rax), %xmm0"); 257 asm volatile("sha1nexte (%r8), %xmm0"); 258 asm volatile("sha1nexte (0x12345678), %xmm0"); 259 asm volatile("sha1nexte (%rax), %xmm3"); 260 asm volatile("sha1nexte (%rcx,%rax,1), %xmm0"); 261 asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0"); 262 asm volatile("sha1nexte (%rax,%rcx,1), %xmm0"); 263 asm volatile("sha1nexte (%rax,%rcx,8), %xmm0"); 264 asm volatile("sha1nexte 0x12(%rax), %xmm0"); 265 asm volatile("sha1nexte 0x12(%rbp), %xmm0"); 266 asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0"); 267 asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0"); 268 asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0"); 269 asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0"); 270 asm volatile("sha1nexte 0x12345678(%rax), %xmm0"); 271 asm volatile("sha1nexte 0x12345678(%rbp), %xmm0"); 272 asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0"); 273 asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0"); 274 asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0"); 275 asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0"); 276 asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15"); 277 278 /* sha1msg1 xmm2/m128, xmm1 */ 279 280 asm volatile("sha1msg1 %xmm1, %xmm0"); 281 asm volatile("sha1msg1 %xmm7, %xmm2"); 282 asm volatile("sha1msg1 %xmm8, %xmm0"); 283 asm volatile("sha1msg1 %xmm7, %xmm8"); 284 asm volatile("sha1msg1 %xmm15, %xmm8"); 285 asm volatile("sha1msg1 (%rax), %xmm0"); 286 asm volatile("sha1msg1 (%r8), %xmm0"); 287 asm volatile("sha1msg1 (0x12345678), %xmm0"); 288 asm volatile("sha1msg1 (%rax), %xmm3"); 289 asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0"); 290 asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0"); 291 asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0"); 292 asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0"); 293 asm volatile("sha1msg1 0x12(%rax), %xmm0"); 294 asm volatile("sha1msg1 0x12(%rbp), %xmm0"); 295 asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0"); 296 asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0"); 297 asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0"); 298 asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0"); 299 asm volatile("sha1msg1 0x12345678(%rax), %xmm0"); 300 asm volatile("sha1msg1 0x12345678(%rbp), %xmm0"); 301 asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0"); 302 asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0"); 303 asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0"); 304 asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0"); 305 asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15"); 306 307 /* sha1msg2 xmm2/m128, xmm1 */ 308 309 asm volatile("sha1msg2 %xmm1, %xmm0"); 310 asm volatile("sha1msg2 %xmm7, %xmm2"); 311 asm volatile("sha1msg2 %xmm8, %xmm0"); 312 asm volatile("sha1msg2 %xmm7, %xmm8"); 313 asm volatile("sha1msg2 %xmm15, %xmm8"); 314 asm volatile("sha1msg2 (%rax), %xmm0"); 315 asm volatile("sha1msg2 (%r8), %xmm0"); 316 asm volatile("sha1msg2 (0x12345678), %xmm0"); 317 asm volatile("sha1msg2 (%rax), %xmm3"); 318 asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0"); 319 asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0"); 320 asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0"); 321 asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0"); 322 asm volatile("sha1msg2 0x12(%rax), %xmm0"); 323 asm volatile("sha1msg2 0x12(%rbp), %xmm0"); 324 asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0"); 325 asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0"); 326 asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0"); 327 asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0"); 328 asm volatile("sha1msg2 0x12345678(%rax), %xmm0"); 329 asm volatile("sha1msg2 0x12345678(%rbp), %xmm0"); 330 asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0"); 331 asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0"); 332 asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0"); 333 asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0"); 334 asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15"); 335 336 /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ 337 /* Note sha256rnds2 has an implicit operand 'xmm0' */ 338 339 asm volatile("sha256rnds2 %xmm4, %xmm1"); 340 asm volatile("sha256rnds2 %xmm7, %xmm2"); 341 asm volatile("sha256rnds2 %xmm8, %xmm1"); 342 asm volatile("sha256rnds2 %xmm7, %xmm8"); 343 asm volatile("sha256rnds2 %xmm15, %xmm8"); 344 asm volatile("sha256rnds2 (%rax), %xmm1"); 345 asm volatile("sha256rnds2 (%r8), %xmm1"); 346 asm volatile("sha256rnds2 (0x12345678), %xmm1"); 347 asm volatile("sha256rnds2 (%rax), %xmm3"); 348 asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1"); 349 asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1"); 350 asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1"); 351 asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1"); 352 asm volatile("sha256rnds2 0x12(%rax), %xmm1"); 353 asm volatile("sha256rnds2 0x12(%rbp), %xmm1"); 354 asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1"); 355 asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1"); 356 asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1"); 357 asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1"); 358 asm volatile("sha256rnds2 0x12345678(%rax), %xmm1"); 359 asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1"); 360 asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1"); 361 asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1"); 362 asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1"); 363 asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1"); 364 asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15"); 365 366 /* sha256msg1 xmm2/m128, xmm1 */ 367 368 asm volatile("sha256msg1 %xmm1, %xmm0"); 369 asm volatile("sha256msg1 %xmm7, %xmm2"); 370 asm volatile("sha256msg1 %xmm8, %xmm0"); 371 asm volatile("sha256msg1 %xmm7, %xmm8"); 372 asm volatile("sha256msg1 %xmm15, %xmm8"); 373 asm volatile("sha256msg1 (%rax), %xmm0"); 374 asm volatile("sha256msg1 (%r8), %xmm0"); 375 asm volatile("sha256msg1 (0x12345678), %xmm0"); 376 asm volatile("sha256msg1 (%rax), %xmm3"); 377 asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0"); 378 asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0"); 379 asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0"); 380 asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0"); 381 asm volatile("sha256msg1 0x12(%rax), %xmm0"); 382 asm volatile("sha256msg1 0x12(%rbp), %xmm0"); 383 asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0"); 384 asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0"); 385 asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0"); 386 asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0"); 387 asm volatile("sha256msg1 0x12345678(%rax), %xmm0"); 388 asm volatile("sha256msg1 0x12345678(%rbp), %xmm0"); 389 asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0"); 390 asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0"); 391 asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0"); 392 asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0"); 393 asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15"); 394 395 /* sha256msg2 xmm2/m128, xmm1 */ 396 397 asm volatile("sha256msg2 %xmm1, %xmm0"); 398 asm volatile("sha256msg2 %xmm7, %xmm2"); 399 asm volatile("sha256msg2 %xmm8, %xmm0"); 400 asm volatile("sha256msg2 %xmm7, %xmm8"); 401 asm volatile("sha256msg2 %xmm15, %xmm8"); 402 asm volatile("sha256msg2 (%rax), %xmm0"); 403 asm volatile("sha256msg2 (%r8), %xmm0"); 404 asm volatile("sha256msg2 (0x12345678), %xmm0"); 405 asm volatile("sha256msg2 (%rax), %xmm3"); 406 asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0"); 407 asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0"); 408 asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0"); 409 asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0"); 410 asm volatile("sha256msg2 0x12(%rax), %xmm0"); 411 asm volatile("sha256msg2 0x12(%rbp), %xmm0"); 412 asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0"); 413 asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0"); 414 asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0"); 415 asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0"); 416 asm volatile("sha256msg2 0x12345678(%rax), %xmm0"); 417 asm volatile("sha256msg2 0x12345678(%rbp), %xmm0"); 418 asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0"); 419 asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0"); 420 asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0"); 421 asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0"); 422 asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15"); 423 424 /* clflushopt m8 */ 425 426 asm volatile("clflushopt (%rax)"); 427 asm volatile("clflushopt (%r8)"); 428 asm volatile("clflushopt (0x12345678)"); 429 asm volatile("clflushopt 0x12345678(%rax,%rcx,8)"); 430 asm volatile("clflushopt 0x12345678(%r8,%rcx,8)"); 431 /* Also check instructions in the same group encoding as clflushopt */ 432 asm volatile("clflush (%rax)"); 433 asm volatile("clflush (%r8)"); 434 asm volatile("sfence"); 435 436 /* clwb m8 */ 437 438 asm volatile("clwb (%rax)"); 439 asm volatile("clwb (%r8)"); 440 asm volatile("clwb (0x12345678)"); 441 asm volatile("clwb 0x12345678(%rax,%rcx,8)"); 442 asm volatile("clwb 0x12345678(%r8,%rcx,8)"); 443 /* Also check instructions in the same group encoding as clwb */ 444 asm volatile("xsaveopt (%rax)"); 445 asm volatile("xsaveopt (%r8)"); 446 asm volatile("mfence"); 447 448 /* xsavec mem */ 449 450 asm volatile("xsavec (%rax)"); 451 asm volatile("xsavec (%r8)"); 452 asm volatile("xsavec (0x12345678)"); 453 asm volatile("xsavec 0x12345678(%rax,%rcx,8)"); 454 asm volatile("xsavec 0x12345678(%r8,%rcx,8)"); 455 456 /* xsaves mem */ 457 458 asm volatile("xsaves (%rax)"); 459 asm volatile("xsaves (%r8)"); 460 asm volatile("xsaves (0x12345678)"); 461 asm volatile("xsaves 0x12345678(%rax,%rcx,8)"); 462 asm volatile("xsaves 0x12345678(%r8,%rcx,8)"); 463 464 /* xrstors mem */ 465 466 asm volatile("xrstors (%rax)"); 467 asm volatile("xrstors (%r8)"); 468 asm volatile("xrstors (0x12345678)"); 469 asm volatile("xrstors 0x12345678(%rax,%rcx,8)"); 470 asm volatile("xrstors 0x12345678(%r8,%rcx,8)"); 471 472 #else /* #ifdef __x86_64__ */ 473 474 /* bndmk m32, bnd */ 475 476 asm volatile("bndmk (%eax), %bnd0"); 477 asm volatile("bndmk (0x12345678), %bnd0"); 478 asm volatile("bndmk (%eax), %bnd3"); 479 asm volatile("bndmk (%ecx,%eax,1), %bnd0"); 480 asm volatile("bndmk 0x12345678(,%eax,1), %bnd0"); 481 asm volatile("bndmk (%eax,%ecx,1), %bnd0"); 482 asm volatile("bndmk (%eax,%ecx,8), %bnd0"); 483 asm volatile("bndmk 0x12(%eax), %bnd0"); 484 asm volatile("bndmk 0x12(%ebp), %bnd0"); 485 asm volatile("bndmk 0x12(%ecx,%eax,1), %bnd0"); 486 asm volatile("bndmk 0x12(%ebp,%eax,1), %bnd0"); 487 asm volatile("bndmk 0x12(%eax,%ecx,1), %bnd0"); 488 asm volatile("bndmk 0x12(%eax,%ecx,8), %bnd0"); 489 asm volatile("bndmk 0x12345678(%eax), %bnd0"); 490 asm volatile("bndmk 0x12345678(%ebp), %bnd0"); 491 asm volatile("bndmk 0x12345678(%ecx,%eax,1), %bnd0"); 492 asm volatile("bndmk 0x12345678(%ebp,%eax,1), %bnd0"); 493 asm volatile("bndmk 0x12345678(%eax,%ecx,1), %bnd0"); 494 asm volatile("bndmk 0x12345678(%eax,%ecx,8), %bnd0"); 495 496 /* bndcl r/m32, bnd */ 497 498 asm volatile("bndcl (%eax), %bnd0"); 499 asm volatile("bndcl (0x12345678), %bnd0"); 500 asm volatile("bndcl (%eax), %bnd3"); 501 asm volatile("bndcl (%ecx,%eax,1), %bnd0"); 502 asm volatile("bndcl 0x12345678(,%eax,1), %bnd0"); 503 asm volatile("bndcl (%eax,%ecx,1), %bnd0"); 504 asm volatile("bndcl (%eax,%ecx,8), %bnd0"); 505 asm volatile("bndcl 0x12(%eax), %bnd0"); 506 asm volatile("bndcl 0x12(%ebp), %bnd0"); 507 asm volatile("bndcl 0x12(%ecx,%eax,1), %bnd0"); 508 asm volatile("bndcl 0x12(%ebp,%eax,1), %bnd0"); 509 asm volatile("bndcl 0x12(%eax,%ecx,1), %bnd0"); 510 asm volatile("bndcl 0x12(%eax,%ecx,8), %bnd0"); 511 asm volatile("bndcl 0x12345678(%eax), %bnd0"); 512 asm volatile("bndcl 0x12345678(%ebp), %bnd0"); 513 asm volatile("bndcl 0x12345678(%ecx,%eax,1), %bnd0"); 514 asm volatile("bndcl 0x12345678(%ebp,%eax,1), %bnd0"); 515 asm volatile("bndcl 0x12345678(%eax,%ecx,1), %bnd0"); 516 asm volatile("bndcl 0x12345678(%eax,%ecx,8), %bnd0"); 517 asm volatile("bndcl %eax, %bnd0"); 518 519 /* bndcu r/m32, bnd */ 520 521 asm volatile("bndcu (%eax), %bnd0"); 522 asm volatile("bndcu (0x12345678), %bnd0"); 523 asm volatile("bndcu (%eax), %bnd3"); 524 asm volatile("bndcu (%ecx,%eax,1), %bnd0"); 525 asm volatile("bndcu 0x12345678(,%eax,1), %bnd0"); 526 asm volatile("bndcu (%eax,%ecx,1), %bnd0"); 527 asm volatile("bndcu (%eax,%ecx,8), %bnd0"); 528 asm volatile("bndcu 0x12(%eax), %bnd0"); 529 asm volatile("bndcu 0x12(%ebp), %bnd0"); 530 asm volatile("bndcu 0x12(%ecx,%eax,1), %bnd0"); 531 asm volatile("bndcu 0x12(%ebp,%eax,1), %bnd0"); 532 asm volatile("bndcu 0x12(%eax,%ecx,1), %bnd0"); 533 asm volatile("bndcu 0x12(%eax,%ecx,8), %bnd0"); 534 asm volatile("bndcu 0x12345678(%eax), %bnd0"); 535 asm volatile("bndcu 0x12345678(%ebp), %bnd0"); 536 asm volatile("bndcu 0x12345678(%ecx,%eax,1), %bnd0"); 537 asm volatile("bndcu 0x12345678(%ebp,%eax,1), %bnd0"); 538 asm volatile("bndcu 0x12345678(%eax,%ecx,1), %bnd0"); 539 asm volatile("bndcu 0x12345678(%eax,%ecx,8), %bnd0"); 540 asm volatile("bndcu %eax, %bnd0"); 541 542 /* bndcn r/m32, bnd */ 543 544 asm volatile("bndcn (%eax), %bnd0"); 545 asm volatile("bndcn (0x12345678), %bnd0"); 546 asm volatile("bndcn (%eax), %bnd3"); 547 asm volatile("bndcn (%ecx,%eax,1), %bnd0"); 548 asm volatile("bndcn 0x12345678(,%eax,1), %bnd0"); 549 asm volatile("bndcn (%eax,%ecx,1), %bnd0"); 550 asm volatile("bndcn (%eax,%ecx,8), %bnd0"); 551 asm volatile("bndcn 0x12(%eax), %bnd0"); 552 asm volatile("bndcn 0x12(%ebp), %bnd0"); 553 asm volatile("bndcn 0x12(%ecx,%eax,1), %bnd0"); 554 asm volatile("bndcn 0x12(%ebp,%eax,1), %bnd0"); 555 asm volatile("bndcn 0x12(%eax,%ecx,1), %bnd0"); 556 asm volatile("bndcn 0x12(%eax,%ecx,8), %bnd0"); 557 asm volatile("bndcn 0x12345678(%eax), %bnd0"); 558 asm volatile("bndcn 0x12345678(%ebp), %bnd0"); 559 asm volatile("bndcn 0x12345678(%ecx,%eax,1), %bnd0"); 560 asm volatile("bndcn 0x12345678(%ebp,%eax,1), %bnd0"); 561 asm volatile("bndcn 0x12345678(%eax,%ecx,1), %bnd0"); 562 asm volatile("bndcn 0x12345678(%eax,%ecx,8), %bnd0"); 563 asm volatile("bndcn %eax, %bnd0"); 564 565 /* bndmov m64, bnd */ 566 567 asm volatile("bndmov (%eax), %bnd0"); 568 asm volatile("bndmov (0x12345678), %bnd0"); 569 asm volatile("bndmov (%eax), %bnd3"); 570 asm volatile("bndmov (%ecx,%eax,1), %bnd0"); 571 asm volatile("bndmov 0x12345678(,%eax,1), %bnd0"); 572 asm volatile("bndmov (%eax,%ecx,1), %bnd0"); 573 asm volatile("bndmov (%eax,%ecx,8), %bnd0"); 574 asm volatile("bndmov 0x12(%eax), %bnd0"); 575 asm volatile("bndmov 0x12(%ebp), %bnd0"); 576 asm volatile("bndmov 0x12(%ecx,%eax,1), %bnd0"); 577 asm volatile("bndmov 0x12(%ebp,%eax,1), %bnd0"); 578 asm volatile("bndmov 0x12(%eax,%ecx,1), %bnd0"); 579 asm volatile("bndmov 0x12(%eax,%ecx,8), %bnd0"); 580 asm volatile("bndmov 0x12345678(%eax), %bnd0"); 581 asm volatile("bndmov 0x12345678(%ebp), %bnd0"); 582 asm volatile("bndmov 0x12345678(%ecx,%eax,1), %bnd0"); 583 asm volatile("bndmov 0x12345678(%ebp,%eax,1), %bnd0"); 584 asm volatile("bndmov 0x12345678(%eax,%ecx,1), %bnd0"); 585 asm volatile("bndmov 0x12345678(%eax,%ecx,8), %bnd0"); 586 587 /* bndmov bnd, m64 */ 588 589 asm volatile("bndmov %bnd0, (%eax)"); 590 asm volatile("bndmov %bnd0, (0x12345678)"); 591 asm volatile("bndmov %bnd3, (%eax)"); 592 asm volatile("bndmov %bnd0, (%ecx,%eax,1)"); 593 asm volatile("bndmov %bnd0, 0x12345678(,%eax,1)"); 594 asm volatile("bndmov %bnd0, (%eax,%ecx,1)"); 595 asm volatile("bndmov %bnd0, (%eax,%ecx,8)"); 596 asm volatile("bndmov %bnd0, 0x12(%eax)"); 597 asm volatile("bndmov %bnd0, 0x12(%ebp)"); 598 asm volatile("bndmov %bnd0, 0x12(%ecx,%eax,1)"); 599 asm volatile("bndmov %bnd0, 0x12(%ebp,%eax,1)"); 600 asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,1)"); 601 asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,8)"); 602 asm volatile("bndmov %bnd0, 0x12345678(%eax)"); 603 asm volatile("bndmov %bnd0, 0x12345678(%ebp)"); 604 asm volatile("bndmov %bnd0, 0x12345678(%ecx,%eax,1)"); 605 asm volatile("bndmov %bnd0, 0x12345678(%ebp,%eax,1)"); 606 asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,1)"); 607 asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,8)"); 608 609 /* bndmov bnd2, bnd1 */ 610 611 asm volatile("bndmov %bnd0, %bnd1"); 612 asm volatile("bndmov %bnd1, %bnd0"); 613 614 /* bndldx mib, bnd */ 615 616 asm volatile("bndldx (%eax), %bnd0"); 617 asm volatile("bndldx (0x12345678), %bnd0"); 618 asm volatile("bndldx (%eax), %bnd3"); 619 asm volatile("bndldx (%ecx,%eax,1), %bnd0"); 620 asm volatile("bndldx 0x12345678(,%eax,1), %bnd0"); 621 asm volatile("bndldx (%eax,%ecx,1), %bnd0"); 622 asm volatile("bndldx 0x12(%eax), %bnd0"); 623 asm volatile("bndldx 0x12(%ebp), %bnd0"); 624 asm volatile("bndldx 0x12(%ecx,%eax,1), %bnd0"); 625 asm volatile("bndldx 0x12(%ebp,%eax,1), %bnd0"); 626 asm volatile("bndldx 0x12(%eax,%ecx,1), %bnd0"); 627 asm volatile("bndldx 0x12345678(%eax), %bnd0"); 628 asm volatile("bndldx 0x12345678(%ebp), %bnd0"); 629 asm volatile("bndldx 0x12345678(%ecx,%eax,1), %bnd0"); 630 asm volatile("bndldx 0x12345678(%ebp,%eax,1), %bnd0"); 631 asm volatile("bndldx 0x12345678(%eax,%ecx,1), %bnd0"); 632 633 /* bndstx bnd, mib */ 634 635 asm volatile("bndstx %bnd0, (%eax)"); 636 asm volatile("bndstx %bnd0, (0x12345678)"); 637 asm volatile("bndstx %bnd3, (%eax)"); 638 asm volatile("bndstx %bnd0, (%ecx,%eax,1)"); 639 asm volatile("bndstx %bnd0, 0x12345678(,%eax,1)"); 640 asm volatile("bndstx %bnd0, (%eax,%ecx,1)"); 641 asm volatile("bndstx %bnd0, 0x12(%eax)"); 642 asm volatile("bndstx %bnd0, 0x12(%ebp)"); 643 asm volatile("bndstx %bnd0, 0x12(%ecx,%eax,1)"); 644 asm volatile("bndstx %bnd0, 0x12(%ebp,%eax,1)"); 645 asm volatile("bndstx %bnd0, 0x12(%eax,%ecx,1)"); 646 asm volatile("bndstx %bnd0, 0x12345678(%eax)"); 647 asm volatile("bndstx %bnd0, 0x12345678(%ebp)"); 648 asm volatile("bndstx %bnd0, 0x12345678(%ecx,%eax,1)"); 649 asm volatile("bndstx %bnd0, 0x12345678(%ebp,%eax,1)"); 650 asm volatile("bndstx %bnd0, 0x12345678(%eax,%ecx,1)"); 651 652 /* bnd prefix on call, ret, jmp and all jcc */ 653 654 asm volatile("bnd call label1"); /* Expecting: call unconditional 0xfffffffc */ 655 asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ 656 asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ 657 asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ 658 asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ 659 asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ 660 asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0xfffffffc */ 661 662 /* sha1rnds4 imm8, xmm2/m128, xmm1 */ 663 664 asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); 665 asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); 666 asm volatile("sha1rnds4 $0x91, (%eax), %xmm0"); 667 asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); 668 asm volatile("sha1rnds4 $0x91, (%eax), %xmm3"); 669 asm volatile("sha1rnds4 $0x91, (%ecx,%eax,1), %xmm0"); 670 asm volatile("sha1rnds4 $0x91, 0x12345678(,%eax,1), %xmm0"); 671 asm volatile("sha1rnds4 $0x91, (%eax,%ecx,1), %xmm0"); 672 asm volatile("sha1rnds4 $0x91, (%eax,%ecx,8), %xmm0"); 673 asm volatile("sha1rnds4 $0x91, 0x12(%eax), %xmm0"); 674 asm volatile("sha1rnds4 $0x91, 0x12(%ebp), %xmm0"); 675 asm volatile("sha1rnds4 $0x91, 0x12(%ecx,%eax,1), %xmm0"); 676 asm volatile("sha1rnds4 $0x91, 0x12(%ebp,%eax,1), %xmm0"); 677 asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,1), %xmm0"); 678 asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,8), %xmm0"); 679 asm volatile("sha1rnds4 $0x91, 0x12345678(%eax), %xmm0"); 680 asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp), %xmm0"); 681 asm volatile("sha1rnds4 $0x91, 0x12345678(%ecx,%eax,1), %xmm0"); 682 asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp,%eax,1), %xmm0"); 683 asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,1), %xmm0"); 684 asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,8), %xmm0"); 685 686 /* sha1nexte xmm2/m128, xmm1 */ 687 688 asm volatile("sha1nexte %xmm1, %xmm0"); 689 asm volatile("sha1nexte %xmm7, %xmm2"); 690 asm volatile("sha1nexte (%eax), %xmm0"); 691 asm volatile("sha1nexte (0x12345678), %xmm0"); 692 asm volatile("sha1nexte (%eax), %xmm3"); 693 asm volatile("sha1nexte (%ecx,%eax,1), %xmm0"); 694 asm volatile("sha1nexte 0x12345678(,%eax,1), %xmm0"); 695 asm volatile("sha1nexte (%eax,%ecx,1), %xmm0"); 696 asm volatile("sha1nexte (%eax,%ecx,8), %xmm0"); 697 asm volatile("sha1nexte 0x12(%eax), %xmm0"); 698 asm volatile("sha1nexte 0x12(%ebp), %xmm0"); 699 asm volatile("sha1nexte 0x12(%ecx,%eax,1), %xmm0"); 700 asm volatile("sha1nexte 0x12(%ebp,%eax,1), %xmm0"); 701 asm volatile("sha1nexte 0x12(%eax,%ecx,1), %xmm0"); 702 asm volatile("sha1nexte 0x12(%eax,%ecx,8), %xmm0"); 703 asm volatile("sha1nexte 0x12345678(%eax), %xmm0"); 704 asm volatile("sha1nexte 0x12345678(%ebp), %xmm0"); 705 asm volatile("sha1nexte 0x12345678(%ecx,%eax,1), %xmm0"); 706 asm volatile("sha1nexte 0x12345678(%ebp,%eax,1), %xmm0"); 707 asm volatile("sha1nexte 0x12345678(%eax,%ecx,1), %xmm0"); 708 asm volatile("sha1nexte 0x12345678(%eax,%ecx,8), %xmm0"); 709 710 /* sha1msg1 xmm2/m128, xmm1 */ 711 712 asm volatile("sha1msg1 %xmm1, %xmm0"); 713 asm volatile("sha1msg1 %xmm7, %xmm2"); 714 asm volatile("sha1msg1 (%eax), %xmm0"); 715 asm volatile("sha1msg1 (0x12345678), %xmm0"); 716 asm volatile("sha1msg1 (%eax), %xmm3"); 717 asm volatile("sha1msg1 (%ecx,%eax,1), %xmm0"); 718 asm volatile("sha1msg1 0x12345678(,%eax,1), %xmm0"); 719 asm volatile("sha1msg1 (%eax,%ecx,1), %xmm0"); 720 asm volatile("sha1msg1 (%eax,%ecx,8), %xmm0"); 721 asm volatile("sha1msg1 0x12(%eax), %xmm0"); 722 asm volatile("sha1msg1 0x12(%ebp), %xmm0"); 723 asm volatile("sha1msg1 0x12(%ecx,%eax,1), %xmm0"); 724 asm volatile("sha1msg1 0x12(%ebp,%eax,1), %xmm0"); 725 asm volatile("sha1msg1 0x12(%eax,%ecx,1), %xmm0"); 726 asm volatile("sha1msg1 0x12(%eax,%ecx,8), %xmm0"); 727 asm volatile("sha1msg1 0x12345678(%eax), %xmm0"); 728 asm volatile("sha1msg1 0x12345678(%ebp), %xmm0"); 729 asm volatile("sha1msg1 0x12345678(%ecx,%eax,1), %xmm0"); 730 asm volatile("sha1msg1 0x12345678(%ebp,%eax,1), %xmm0"); 731 asm volatile("sha1msg1 0x12345678(%eax,%ecx,1), %xmm0"); 732 asm volatile("sha1msg1 0x12345678(%eax,%ecx,8), %xmm0"); 733 734 /* sha1msg2 xmm2/m128, xmm1 */ 735 736 asm volatile("sha1msg2 %xmm1, %xmm0"); 737 asm volatile("sha1msg2 %xmm7, %xmm2"); 738 asm volatile("sha1msg2 (%eax), %xmm0"); 739 asm volatile("sha1msg2 (0x12345678), %xmm0"); 740 asm volatile("sha1msg2 (%eax), %xmm3"); 741 asm volatile("sha1msg2 (%ecx,%eax,1), %xmm0"); 742 asm volatile("sha1msg2 0x12345678(,%eax,1), %xmm0"); 743 asm volatile("sha1msg2 (%eax,%ecx,1), %xmm0"); 744 asm volatile("sha1msg2 (%eax,%ecx,8), %xmm0"); 745 asm volatile("sha1msg2 0x12(%eax), %xmm0"); 746 asm volatile("sha1msg2 0x12(%ebp), %xmm0"); 747 asm volatile("sha1msg2 0x12(%ecx,%eax,1), %xmm0"); 748 asm volatile("sha1msg2 0x12(%ebp,%eax,1), %xmm0"); 749 asm volatile("sha1msg2 0x12(%eax,%ecx,1), %xmm0"); 750 asm volatile("sha1msg2 0x12(%eax,%ecx,8), %xmm0"); 751 asm volatile("sha1msg2 0x12345678(%eax), %xmm0"); 752 asm volatile("sha1msg2 0x12345678(%ebp), %xmm0"); 753 asm volatile("sha1msg2 0x12345678(%ecx,%eax,1), %xmm0"); 754 asm volatile("sha1msg2 0x12345678(%ebp,%eax,1), %xmm0"); 755 asm volatile("sha1msg2 0x12345678(%eax,%ecx,1), %xmm0"); 756 asm volatile("sha1msg2 0x12345678(%eax,%ecx,8), %xmm0"); 757 758 /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ 759 /* Note sha256rnds2 has an implicit operand 'xmm0' */ 760 761 asm volatile("sha256rnds2 %xmm4, %xmm1"); 762 asm volatile("sha256rnds2 %xmm7, %xmm2"); 763 asm volatile("sha256rnds2 (%eax), %xmm1"); 764 asm volatile("sha256rnds2 (0x12345678), %xmm1"); 765 asm volatile("sha256rnds2 (%eax), %xmm3"); 766 asm volatile("sha256rnds2 (%ecx,%eax,1), %xmm1"); 767 asm volatile("sha256rnds2 0x12345678(,%eax,1), %xmm1"); 768 asm volatile("sha256rnds2 (%eax,%ecx,1), %xmm1"); 769 asm volatile("sha256rnds2 (%eax,%ecx,8), %xmm1"); 770 asm volatile("sha256rnds2 0x12(%eax), %xmm1"); 771 asm volatile("sha256rnds2 0x12(%ebp), %xmm1"); 772 asm volatile("sha256rnds2 0x12(%ecx,%eax,1), %xmm1"); 773 asm volatile("sha256rnds2 0x12(%ebp,%eax,1), %xmm1"); 774 asm volatile("sha256rnds2 0x12(%eax,%ecx,1), %xmm1"); 775 asm volatile("sha256rnds2 0x12(%eax,%ecx,8), %xmm1"); 776 asm volatile("sha256rnds2 0x12345678(%eax), %xmm1"); 777 asm volatile("sha256rnds2 0x12345678(%ebp), %xmm1"); 778 asm volatile("sha256rnds2 0x12345678(%ecx,%eax,1), %xmm1"); 779 asm volatile("sha256rnds2 0x12345678(%ebp,%eax,1), %xmm1"); 780 asm volatile("sha256rnds2 0x12345678(%eax,%ecx,1), %xmm1"); 781 asm volatile("sha256rnds2 0x12345678(%eax,%ecx,8), %xmm1"); 782 783 /* sha256msg1 xmm2/m128, xmm1 */ 784 785 asm volatile("sha256msg1 %xmm1, %xmm0"); 786 asm volatile("sha256msg1 %xmm7, %xmm2"); 787 asm volatile("sha256msg1 (%eax), %xmm0"); 788 asm volatile("sha256msg1 (0x12345678), %xmm0"); 789 asm volatile("sha256msg1 (%eax), %xmm3"); 790 asm volatile("sha256msg1 (%ecx,%eax,1), %xmm0"); 791 asm volatile("sha256msg1 0x12345678(,%eax,1), %xmm0"); 792 asm volatile("sha256msg1 (%eax,%ecx,1), %xmm0"); 793 asm volatile("sha256msg1 (%eax,%ecx,8), %xmm0"); 794 asm volatile("sha256msg1 0x12(%eax), %xmm0"); 795 asm volatile("sha256msg1 0x12(%ebp), %xmm0"); 796 asm volatile("sha256msg1 0x12(%ecx,%eax,1), %xmm0"); 797 asm volatile("sha256msg1 0x12(%ebp,%eax,1), %xmm0"); 798 asm volatile("sha256msg1 0x12(%eax,%ecx,1), %xmm0"); 799 asm volatile("sha256msg1 0x12(%eax,%ecx,8), %xmm0"); 800 asm volatile("sha256msg1 0x12345678(%eax), %xmm0"); 801 asm volatile("sha256msg1 0x12345678(%ebp), %xmm0"); 802 asm volatile("sha256msg1 0x12345678(%ecx,%eax,1), %xmm0"); 803 asm volatile("sha256msg1 0x12345678(%ebp,%eax,1), %xmm0"); 804 asm volatile("sha256msg1 0x12345678(%eax,%ecx,1), %xmm0"); 805 asm volatile("sha256msg1 0x12345678(%eax,%ecx,8), %xmm0"); 806 807 /* sha256msg2 xmm2/m128, xmm1 */ 808 809 asm volatile("sha256msg2 %xmm1, %xmm0"); 810 asm volatile("sha256msg2 %xmm7, %xmm2"); 811 asm volatile("sha256msg2 (%eax), %xmm0"); 812 asm volatile("sha256msg2 (0x12345678), %xmm0"); 813 asm volatile("sha256msg2 (%eax), %xmm3"); 814 asm volatile("sha256msg2 (%ecx,%eax,1), %xmm0"); 815 asm volatile("sha256msg2 0x12345678(,%eax,1), %xmm0"); 816 asm volatile("sha256msg2 (%eax,%ecx,1), %xmm0"); 817 asm volatile("sha256msg2 (%eax,%ecx,8), %xmm0"); 818 asm volatile("sha256msg2 0x12(%eax), %xmm0"); 819 asm volatile("sha256msg2 0x12(%ebp), %xmm0"); 820 asm volatile("sha256msg2 0x12(%ecx,%eax,1), %xmm0"); 821 asm volatile("sha256msg2 0x12(%ebp,%eax,1), %xmm0"); 822 asm volatile("sha256msg2 0x12(%eax,%ecx,1), %xmm0"); 823 asm volatile("sha256msg2 0x12(%eax,%ecx,8), %xmm0"); 824 asm volatile("sha256msg2 0x12345678(%eax), %xmm0"); 825 asm volatile("sha256msg2 0x12345678(%ebp), %xmm0"); 826 asm volatile("sha256msg2 0x12345678(%ecx,%eax,1), %xmm0"); 827 asm volatile("sha256msg2 0x12345678(%ebp,%eax,1), %xmm0"); 828 asm volatile("sha256msg2 0x12345678(%eax,%ecx,1), %xmm0"); 829 asm volatile("sha256msg2 0x12345678(%eax,%ecx,8), %xmm0"); 830 831 /* clflushopt m8 */ 832 833 asm volatile("clflushopt (%eax)"); 834 asm volatile("clflushopt (0x12345678)"); 835 asm volatile("clflushopt 0x12345678(%eax,%ecx,8)"); 836 /* Also check instructions in the same group encoding as clflushopt */ 837 asm volatile("clflush (%eax)"); 838 asm volatile("sfence"); 839 840 /* clwb m8 */ 841 842 asm volatile("clwb (%eax)"); 843 asm volatile("clwb (0x12345678)"); 844 asm volatile("clwb 0x12345678(%eax,%ecx,8)"); 845 /* Also check instructions in the same group encoding as clwb */ 846 asm volatile("xsaveopt (%eax)"); 847 asm volatile("mfence"); 848 849 /* xsavec mem */ 850 851 asm volatile("xsavec (%eax)"); 852 asm volatile("xsavec (0x12345678)"); 853 asm volatile("xsavec 0x12345678(%eax,%ecx,8)"); 854 855 /* xsaves mem */ 856 857 asm volatile("xsaves (%eax)"); 858 asm volatile("xsaves (0x12345678)"); 859 asm volatile("xsaves 0x12345678(%eax,%ecx,8)"); 860 861 /* xrstors mem */ 862 863 asm volatile("xrstors (%eax)"); 864 asm volatile("xrstors (0x12345678)"); 865 asm volatile("xrstors 0x12345678(%eax,%ecx,8)"); 866 867 #endif /* #ifndef __x86_64__ */ 868 869 /* pcommit */ 870 871 asm volatile("pcommit"); 872 873 /* Following line is a marker for the awk script - do not change */ 874 asm volatile("rdtsc"); /* Stop here */ 875 876 return 0; 877 } 878