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:
Trevor Elliott
2022-08-26 09:07:22 -07:00
committed by GitHub
parent 05ffdc26ec
commit c1f9736938
10 changed files with 210 additions and 193 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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