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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user