|
196 | 196 | (num_bits Imm8Gpr)
|
197 | 197 | (dst WritableGpr))
|
198 | 198 |
|
199 |
| - ;; Arithmetic SIMD shifts. |
200 |
| - (XmmRmiReg (opcode SseOpcode) |
201 |
| - (src1 Xmm) |
202 |
| - (src2 XmmMemAlignedImm) |
203 |
| - (dst WritableXmm)) |
204 |
| - |
205 | 199 | ;; Integer comparisons/tests: cmp or test (b w l q) (reg addr imm) reg.
|
206 | 200 | (CmpRmiR (size OperandSize) ;; 1, 2, 4, or 8
|
207 | 201 | (opcode CmpOpcode)
|
|
980 | 974 | Pmuludq
|
981 | 975 | Pshufb
|
982 | 976 | Pshufd
|
983 |
| - Psllw |
984 |
| - Pslld |
985 |
| - Psllq |
986 |
| - Psraw |
987 |
| - Psrad |
988 |
| - Psrlw |
989 |
| - Psrld |
990 |
| - Psrlq |
991 | 977 | Ptest
|
992 | 978 | Punpckhbw
|
993 | 979 | Punpckhwd
|
|
1839 | 1825 |
|
1840 | 1826 | (decl is_imm8 (u8) GprMemImm)
|
1841 | 1827 | (extern extractor is_imm8 is_imm8)
|
| 1828 | +(decl is_imm8_xmm (u8) XmmMemImm) |
| 1829 | +(extern extractor is_imm8_xmm is_imm8_xmm) |
1842 | 1830 | (decl is_simm8 (i8) GprMemImm)
|
1843 | 1831 | (extern extractor is_simm8 is_simm8)
|
1844 | 1832 | (decl is_imm16 (u16) GprMemImm)
|
|
1853 | 1841 | (extern extractor is_gpr is_gpr)
|
1854 | 1842 | (decl is_gpr_mem (GprMem) GprMemImm)
|
1855 | 1843 | (extern extractor is_gpr_mem is_gpr_mem)
|
1856 |
| -(decl is_xmm_mem (XmmMem) XmmMem) |
| 1844 | +(decl is_xmm_mem (XmmMem) XmmMemImm) |
1857 | 1845 | (extern extractor is_xmm_mem is_xmm_mem)
|
1858 | 1846 | (decl is_xmm (Xmm) XmmMem)
|
1859 | 1847 | (extern extractor is_xmm is_xmm)
|
|
2132 | 2120 | (_ Unit (emit (MInst.XmmUnaryRmRImmEvex op src dst imm))))
|
2133 | 2121 | dst))
|
2134 | 2122 |
|
2135 |
| -;; Helper for creating `MInst.XmmRmiXmm` instructions. |
2136 |
| -(decl xmm_rmi_xmm (SseOpcode Xmm XmmMemAlignedImm) Xmm) |
2137 |
| -(rule (xmm_rmi_xmm op src1 src2) |
2138 |
| - (let ((dst WritableXmm (temp_writable_xmm)) |
2139 |
| - (_ Unit (emit (MInst.XmmRmiReg op |
2140 |
| - src1 |
2141 |
| - src2 |
2142 |
| - dst)))) |
2143 |
| - dst)) |
2144 |
| - |
2145 | 2123 | ;; Helper for creating `MInst.XmmToGprImm` instructions.
|
2146 | 2124 | (decl xmm_to_gpr_imm (SseOpcode Xmm u8) Gpr)
|
2147 | 2125 | (rule (xmm_to_gpr_imm op src imm)
|
|
3609 | 3587 | (rule 1 (x64_orpd src1 src2)
|
3610 | 3588 | (if-let true (use_avx))
|
3611 | 3589 | (xmm_rmir_vex (AvxOpcode.Vorpd) src1 src2))
|
3612 |
| -(rule 0 (x64_orpd src1 (is_xmm_mem src2)) (x64_orpd_a src1 src2)) |
| 3590 | +(rule 0 (x64_orpd src1 src2) (x64_orpd_a src1 src2)) |
3613 | 3591 |
|
3614 | 3592 | ;; Helper fxor creating `pxor` instructions.
|
3615 | 3593 | (decl x64_pxor (Xmm XmmMem) Xmm)
|
|
4392 | 4370 |
|
4393 | 4371 | ;; Helper for creating `psllw` instructions.
|
4394 | 4372 | (decl x64_psllw (Xmm XmmMemImm) Xmm)
|
4395 |
| -(rule 0 (x64_psllw src1 src2) |
4396 |
| - (xmm_rmi_xmm (SseOpcode.Psllw) src1 src2)) |
4397 |
| -(rule 1 (x64_psllw src1 src2) |
| 4373 | +(rule 2 (x64_psllw src1 src2) |
4398 | 4374 | (if-let true (use_avx))
|
4399 | 4375 | (xmm_rmir_vex (AvxOpcode.Vpsllw) src1 src2))
|
| 4376 | +(rule 1 (x64_psllw src1 (is_xmm_mem src2)) (x64_psllw_a src1 src2)) |
| 4377 | +(rule 0 (x64_psllw src1 (is_imm8_xmm src2)) (x64_psllw_b src1 src2)) |
4400 | 4378 |
|
4401 | 4379 | ;; Helper for creating `pslld` instructions.
|
4402 | 4380 | (decl x64_pslld (Xmm XmmMemImm) Xmm)
|
4403 |
| -(rule 0 (x64_pslld src1 src2) |
4404 |
| - (xmm_rmi_xmm (SseOpcode.Pslld) src1 src2)) |
4405 |
| -(rule 1 (x64_pslld src1 src2) |
| 4381 | +(rule 2 (x64_pslld src1 src2) |
4406 | 4382 | (if-let true (use_avx))
|
4407 | 4383 | (xmm_rmir_vex (AvxOpcode.Vpslld) src1 src2))
|
| 4384 | +(rule 1 (x64_pslld src1 (is_xmm_mem src2)) (x64_pslld_a src1 src2)) |
| 4385 | +(rule 0 (x64_pslld src1 (is_imm8_xmm src2)) (x64_pslld_b src1 src2)) |
4408 | 4386 |
|
4409 | 4387 | ;; Helper for creating `psllq` instructions.
|
4410 | 4388 | (decl x64_psllq (Xmm XmmMemImm) Xmm)
|
4411 |
| -(rule 0 (x64_psllq src1 src2) |
4412 |
| - (xmm_rmi_xmm (SseOpcode.Psllq) src1 src2)) |
4413 |
| -(rule 1 (x64_psllq src1 src2) |
| 4389 | +(rule 2 (x64_psllq src1 src2) |
4414 | 4390 | (if-let true (use_avx))
|
4415 | 4391 | (xmm_rmir_vex (AvxOpcode.Vpsllq) src1 src2))
|
| 4392 | +(rule 1 (x64_psllq src1 (is_xmm_mem src2)) (x64_psllq_a src1 src2)) |
| 4393 | +(rule 0 (x64_psllq src1 (is_imm8_xmm src2)) (x64_psllq_b src1 src2)) |
4416 | 4394 |
|
4417 | 4395 | ;; Helper for creating `psrlw` instructions.
|
4418 | 4396 | (decl x64_psrlw (Xmm XmmMemImm) Xmm)
|
4419 |
| -(rule 0 (x64_psrlw src1 src2) |
4420 |
| - (xmm_rmi_xmm (SseOpcode.Psrlw) src1 src2)) |
4421 |
| -(rule 1 (x64_psrlw src1 src2) |
| 4397 | +(rule 2 (x64_psrlw src1 src2) |
4422 | 4398 | (if-let true (use_avx))
|
4423 | 4399 | (xmm_rmir_vex (AvxOpcode.Vpsrlw) src1 src2))
|
| 4400 | +(rule 1 (x64_psrlw src1 (is_xmm_mem src2)) (x64_psrlw_a src1 src2)) |
| 4401 | +(rule 0 (x64_psrlw src1 (is_imm8_xmm src2)) (x64_psrlw_b src1 src2)) |
4424 | 4402 |
|
4425 | 4403 | ;; Helper for creating `psrld` instructions.
|
4426 | 4404 | (decl x64_psrld (Xmm XmmMemImm) Xmm)
|
4427 |
| -(rule 0 (x64_psrld src1 src2) |
4428 |
| - (xmm_rmi_xmm (SseOpcode.Psrld) src1 src2)) |
4429 |
| -(rule 1 (x64_psrld src1 src2) |
| 4405 | +(rule 2 (x64_psrld src1 src2) |
4430 | 4406 | (if-let true (use_avx))
|
4431 | 4407 | (xmm_rmir_vex (AvxOpcode.Vpsrld) src1 src2))
|
| 4408 | +(rule 1 (x64_psrld src1 (is_xmm_mem src2)) (x64_psrld_a src1 src2)) |
| 4409 | +(rule 0 (x64_psrld src1 (is_imm8_xmm src2)) (x64_psrld_b src1 src2)) |
4432 | 4410 |
|
4433 | 4411 | ;; Helper for creating `psrlq` instructions.
|
4434 | 4412 | (decl x64_psrlq (Xmm XmmMemImm) Xmm)
|
4435 |
| -(rule 0 (x64_psrlq src1 src2) |
4436 |
| - (xmm_rmi_xmm (SseOpcode.Psrlq) src1 src2)) |
4437 |
| -(rule 1 (x64_psrlq src1 src2) |
| 4413 | +(rule 2 (x64_psrlq src1 src2) |
4438 | 4414 | (if-let true (use_avx))
|
4439 | 4415 | (xmm_rmir_vex (AvxOpcode.Vpsrlq) src1 src2))
|
| 4416 | +(rule 1 (x64_psrlq src1 (is_xmm_mem src2)) (x64_psrlq_a src1 src2)) |
| 4417 | +(rule 0 (x64_psrlq src1 (is_imm8_xmm src2)) (x64_psrlq_b src1 src2)) |
4440 | 4418 |
|
4441 | 4419 | ;; Helper for creating `psraw` instructions.
|
4442 | 4420 | (decl x64_psraw (Xmm XmmMemImm) Xmm)
|
4443 |
| -(rule 0 (x64_psraw src1 src2) |
4444 |
| - (xmm_rmi_xmm (SseOpcode.Psraw) src1 src2)) |
4445 |
| -(rule 1 (x64_psraw src1 src2) |
| 4421 | +(rule 2 (x64_psraw src1 src2) |
4446 | 4422 | (if-let true (use_avx))
|
4447 | 4423 | (xmm_rmir_vex (AvxOpcode.Vpsraw) src1 src2))
|
| 4424 | +(rule 1 (x64_psraw src1 (is_xmm_mem src2)) (x64_psraw_a src1 src2)) |
| 4425 | +(rule 0 (x64_psraw src1 (is_imm8_xmm src2)) (x64_psraw_b src1 src2)) |
4448 | 4426 |
|
4449 | 4427 | ;; Helper for creating `psrad` instructions.
|
4450 | 4428 | (decl x64_psrad (Xmm XmmMemImm) Xmm)
|
4451 |
| -(rule 0 (x64_psrad src1 src2) |
4452 |
| - (xmm_rmi_xmm (SseOpcode.Psrad) src1 src2)) |
4453 |
| -(rule 1 (x64_psrad src1 src2) |
| 4429 | +(rule 2 (x64_psrad src1 src2) |
4454 | 4430 | (if-let true (use_avx))
|
4455 | 4431 | (xmm_rmir_vex (AvxOpcode.Vpsrad) src1 src2))
|
| 4432 | +(rule 1 (x64_psrad src1 (is_xmm_mem src2)) (x64_psrad_a src1 src2)) |
| 4433 | +(rule 0 (x64_psrad src1 (is_imm8_xmm src2)) (x64_psrad_b src1 src2)) |
4456 | 4434 |
|
4457 | 4435 | ;; Helper for creating `vpsraq` instructions.
|
4458 | 4436 | (decl x64_vpsraq (Xmm XmmMem) Xmm)
|
|
0 commit comments