x64: Remove conditional SseOpcode::uses_src1 (#5842)

This is a follow-up to comments in #5795 to remove some cruft in the x64
instruction model to ensure that the shape of an `Inst` reflects what's
going to happen in regalloc and encoding. This accessor was used to
handle `round*`, `pextr*`, and `pshufb` instructions. The `round*` ones
had already moved to the appropriate `XmmUnary*` variant and `pshufb`
was additionally moved over to that variant as well.

The `pextr*` instructions got a new `Inst` variant and additionally had
their constructors slightly modified to no longer require the type as
input. The encoding for these instructions now automatically handles the
various type-related operands through a new `SseOpcode::Pextrq` operand
to represent 64-bit movements.
This commit is contained in:
Alex Crichton
2023-02-21 12:17:07 -06:00
committed by GitHub
parent e6a5ec3fde
commit c65de1f1b1
7 changed files with 98 additions and 141 deletions

View File

@@ -86,7 +86,7 @@ block0(v0: i64x2):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pextrd.w $1, %xmm0, %rax
; pextrq $1, %xmm0, %rax
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -753,8 +753,8 @@ block0(v0: i64x2):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pextrd.w $0, %xmm0, %rdx
; pextrd.w $1, %xmm0, %r9
; pextrq $0, %xmm0, %rdx
; pextrq $1, %xmm0, %r9
; sarq $36, %rdx, %rdx
; sarq $36, %r9, %r9
; uninit %xmm0
@@ -789,8 +789,8 @@ block0(v0: i64x2, v1: i32):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; pextrd.w $0, %xmm0, %r8
; pextrd.w $1, %xmm0, %r10
; pextrq $0, %xmm0, %r8
; pextrq $1, %xmm0, %r10
; movq %rdi, %rcx
; sarq %cl, %r8, %r8
; sarq %cl, %r10, %r10