x64: Lower vany_true, vall_true, vhigh_bits, iconcat, and isplit in ISLE (#4787)
Lower vany_true, vall_true, vhigh_bits, iconcat, and isplit in ISLE.
This commit is contained in:
@@ -17,20 +17,20 @@ block0(v0: i128, v1: i8):
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movzbq %dl, %rax
|
||||
; movq %rax, %rcx
|
||||
; movzbq %dl, %rcx
|
||||
; movq %rdi, %rdx
|
||||
; shlq %cl, %rdx, %rdx
|
||||
; shlq %cl, %rsi, %rsi
|
||||
; movq %rcx, %r8
|
||||
; movq %rcx, %rax
|
||||
; movl $64, %ecx
|
||||
; subq %rcx, %r8, %rcx
|
||||
; movq %rax, %r10
|
||||
; subq %rcx, %r10, %rcx
|
||||
; shrq %cl, %rdi, %rdi
|
||||
; xorq %rax, %rax, %rax
|
||||
; testq $127, %r8
|
||||
; testq $127, %r10
|
||||
; cmovzq %rax, %rdi, %rdi
|
||||
; orq %rdi, %rsi, %rdi
|
||||
; testq $64, %r8
|
||||
; testq $64, %r10
|
||||
; cmovzq %rdx, %rax, %rax
|
||||
; cmovzq %rdi, %rdx, %rdx
|
||||
; movq %rbp, %rsp
|
||||
|
||||
@@ -41,9 +41,9 @@ block0(v0: i64x2):
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pxor %xmm4, %xmm4, %xmm4
|
||||
; pcmpeqq %xmm4, %xmm0, %xmm4
|
||||
; ptest %xmm4, %xmm4
|
||||
; pxor %xmm3, %xmm3, %xmm3
|
||||
; pcmpeqq %xmm0, %xmm3, %xmm0
|
||||
; ptest %xmm0, %xmm0
|
||||
; setz %al
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
|
||||
@@ -16,24 +16,25 @@ block0(v0: i128, v1: i8):
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movzbq %dl, %rdx
|
||||
; movq %rdx, %rcx
|
||||
; movzbq %dl, %rcx
|
||||
; shrq %cl, %rdi, %rdi
|
||||
; movq %rsi, %r9
|
||||
; sarq %cl, %r9, %r9
|
||||
; movq %rsi, %rdx
|
||||
; sarq %cl, %rdx, %rdx
|
||||
; movq %rcx, %rax
|
||||
; movl $64, %ecx
|
||||
; subq %rcx, %rdx, %rcx
|
||||
; movq %rsi, %r8
|
||||
; shlq %cl, %r8, %r8
|
||||
; xorq %r10, %r10, %r10
|
||||
; testq $127, %rdx
|
||||
; cmovzq %r10, %r8, %r8
|
||||
; orq %rdi, %r8, %rdi
|
||||
; movq %rax, %r11
|
||||
; subq %rcx, %r11, %rcx
|
||||
; movq %rsi, %rax
|
||||
; shlq %cl, %rax, %rax
|
||||
; xorq %r8, %r8, %r8
|
||||
; testq $127, %r11
|
||||
; cmovzq %r8, %rax, %rax
|
||||
; orq %rdi, %rax, %rdi
|
||||
; sarq $63, %rsi, %rsi
|
||||
; testq $64, %rdx
|
||||
; movq %r9, %rax
|
||||
; testq $64, %r11
|
||||
; movq %rdx, %rax
|
||||
; cmovzq %rdi, %rax, %rax
|
||||
; cmovzq %r9, %rsi, %rsi
|
||||
; cmovzq %rdx, %rsi, %rsi
|
||||
; movq %rsi, %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
|
||||
@@ -15,24 +15,24 @@ block0(v0: i128, v1: i8):
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movzbq %dl, %rdx
|
||||
; movq %rdx, %rcx
|
||||
; movzbq %dl, %rcx
|
||||
; shrq %cl, %rdi, %rdi
|
||||
; movq %rsi, %r9
|
||||
; shrq %cl, %r9, %r9
|
||||
; movq %rsi, %r8
|
||||
; shrq %cl, %r8, %r8
|
||||
; movq %rcx, %rax
|
||||
; movl $64, %ecx
|
||||
; movq %rdx, %r10
|
||||
; subq %rcx, %r10, %rcx
|
||||
; movq %rax, %r11
|
||||
; subq %rcx, %r11, %rcx
|
||||
; shlq %cl, %rsi, %rsi
|
||||
; xorq %r8, %r8, %r8
|
||||
; testq $127, %r10
|
||||
; cmovzq %r8, %rsi, %rsi
|
||||
; xorq %rax, %rax, %rax
|
||||
; testq $127, %r11
|
||||
; cmovzq %rax, %rsi, %rsi
|
||||
; orq %rsi, %rdi, %rsi
|
||||
; xorq %rdx, %rdx, %rdx
|
||||
; testq $64, %r10
|
||||
; movq %r9, %rax
|
||||
; testq $64, %r11
|
||||
; movq %r8, %rax
|
||||
; cmovzq %rsi, %rax, %rax
|
||||
; cmovzq %r9, %rdx, %rdx
|
||||
; cmovzq %r8, %rdx, %rdx
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
@@ -188,7 +188,8 @@ block0(v0: i32, v1: i64, v2: i64):
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movq %rsi, %rcx
|
||||
; movq %rsi, %r9
|
||||
; movq %r9, %rcx
|
||||
; shrl %cl, %edi, %edi
|
||||
; movq %rdi, %rax
|
||||
; movq %rbp, %rsp
|
||||
|
||||
75
cranelift/filetests/filetests/isa/x64/vhigh_bits.clif
Normal file
75
cranelift/filetests/filetests/isa/x64/vhigh_bits.clif
Normal file
@@ -0,0 +1,75 @@
|
||||
test compile precise-output
|
||||
target x86_64
|
||||
|
||||
function %f1(i8x16) -> i8 {
|
||||
block0(v0: i8x16):
|
||||
v1 = vhigh_bits.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pmovmskb %xmm0, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f2(i8x16) -> i16 {
|
||||
block0(v0: i8x16):
|
||||
v1 = vhigh_bits.i16 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; pmovmskb %xmm0, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f3(i16x8) -> i8 {
|
||||
block0(v0: i16x8):
|
||||
v1 = vhigh_bits.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; packsswb %xmm0, %xmm0, %xmm0
|
||||
; pmovmskb %xmm0, %eax
|
||||
; shrq $8, %rax, %rax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f4(i32x4) -> i8 {
|
||||
block0(v0: i32x4):
|
||||
v1 = vhigh_bits.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movmskps %xmm0, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
function %f5(i64x2) -> i8 {
|
||||
block0(v0: i64x2):
|
||||
v1 = vhigh_bits.i8 v0
|
||||
return v1
|
||||
}
|
||||
|
||||
; pushq %rbp
|
||||
; movq %rsp, %rbp
|
||||
; block0:
|
||||
; movmskpd %xmm0, %eax
|
||||
; movq %rbp, %rsp
|
||||
; popq %rbp
|
||||
; ret
|
||||
|
||||
Reference in New Issue
Block a user