Skip to content

Commit a6d1244

Browse files
authored
Add ptest and vptest to the new assembler (#11139)
1 parent a7b5a91 commit a6d1244

4 files changed

Lines changed: 8 additions & 10 deletions

File tree

cranelift/assembler-x64/meta/src/instructions/cmp.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ pub fn list() -> Vec<Inst> {
3737
inst("testw", fmt("MR", [r(rm16), r(r16)]).flags(W), rex([0x66, 0x85]), _64b | compat),
3838
inst("testl", fmt("MR", [r(rm32), r(r32)]).flags(W), rex([0x85]), _64b | compat),
3939
inst("testq", fmt("MR", [r(rm64), r(r64)]).flags(W), rex([0x85]).w(), _64b | compat),
40+
// `AND` xmm and set flags.
41+
inst("ptest", fmt("RM", [r(xmm1), r(align(xmm_m128))]).flags(W), rex([0x66, 0x0F, 0x38, 0x17]).r(), _64b | compat | sse41).alt(avx, "vptest_rm"),
42+
inst("vptest", fmt("RM", [r(xmm1), r(xmm_m128)]).flags(W), vex(L128)._66()._0f38().op(0x17).r(), _64b | compat | avx),
4043
// Compare floating point and set flags.
4144
inst("ucomiss", fmt("A", [r(xmm1), r(xmm_m32)]).flags(W), rex([0x0F, 0x2E]).r(), _64b | compat | sse).alt(avx, "vucomiss_a"),
4245
inst("ucomisd", fmt("A", [r(xmm1), r(xmm_m64)]).flags(W), rex([0x66, 0x0F, 0x2E]).r(), _64b | compat | sse2).alt(avx, "vucomisd_a"),

cranelift/codegen/src/isa/x64/inst.isle

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,6 @@
463463
(type SseOpcode extern
464464
(enum Insertps
465465
Pshufb
466-
Ptest
467466
Shufps
468467
))
469468

@@ -2385,11 +2384,7 @@
23852384

23862385
;; Helper for creating `ptest` instructions.
23872386
(decl x64_ptest (Xmm XmmMem) ProducesFlags)
2388-
(rule (x64_ptest src1 src2)
2389-
(xmm_cmp_rm_r (SseOpcode.Ptest) src1 src2))
2390-
(rule 1 (x64_ptest src1 src2)
2391-
(if-let true (use_avx))
2392-
(xmm_cmp_rm_r_vex (AvxOpcode.Vptest) src1 src2))
2387+
(rule (x64_ptest src1 src2) (x64_ptest_rm_or_avx src1 src2))
23932388

23942389
;; Helper for creating `cmove` instructions. Note that these instructions do not
23952390
;; always result in a single emitted x86 instruction; e.g., XmmCmove uses jumps

cranelift/filetests/filetests/isa/x64/simd-logical-compile-avx.clif

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ block0(v0: i32x4):
1111
; pushq %rbp
1212
; movq %rsp, %rbp
1313
; block0:
14-
; vptest %xmm0, %xmm0
14+
; vptest %xmm0, %xmm0
1515
; setne %al
1616
; movq %rbp, %rsp
1717
; popq %rbp
@@ -41,7 +41,7 @@ block0(v0: i64x2):
4141
; uninit %xmm2
4242
; vpxor %xmm2, %xmm2, %xmm4
4343
; vpcmpeqq %xmm4, %xmm0, %xmm6
44-
; vptest %xmm6, %xmm6
44+
; vptest %xmm6, %xmm6
4545
; sete %al
4646
; movq %rbp, %rsp
4747
; popq %rbp

cranelift/filetests/filetests/isa/x64/simd-logical-compile.clif

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ block0(v0: i32x4):
3939
; pushq %rbp
4040
; movq %rsp, %rbp
4141
; block0:
42-
; ptest %xmm0, %xmm0
42+
; ptest %xmm0, %xmm0
4343
; setne %al
4444
; movq %rbp, %rsp
4545
; popq %rbp
@@ -69,7 +69,7 @@ block0(v0: i64x2):
6969
; uninit %xmm3
7070
; pxor %xmm3, %xmm3
7171
; pcmpeqq %xmm3, %xmm0
72-
; ptest %xmm0, %xmm0
72+
; ptest %xmm0, %xmm0
7373
; sete %al
7474
; movq %rbp, %rsp
7575
; popq %rbp

0 commit comments

Comments
 (0)