x64: Refactor and fill out some gpr-vs-xmm bits (#6058)

* x64: Add instruction helpers for `mov{d,q}`

These will soon grow AVX-equivalents so move them to instruction helpers
to have clauses for AVX in the future.

* x64: Don't auto-convert between RegMemImm and XmmMemImm

The previous conversion, `mov_rmi_to_xmm`, would move from GPR registers
to XMM registers which isn't what many of the other `convert` statements
between these newtypes do. This seemed like a possible footgun so I've
removed the auto-conversion and added an explicit helper to go from a
`u32` to an `XmmMemImm`.

* x64: Add AVX encodings of some more GPR-related insns

This commit adds some more support for AVX instructions where GPRs are
in use mixed in with XMM registers. This required a few more variants of
`Inst` to handle the new instructions.

* Fix vpmovmskb encoding

* Fix xmm-to-gpr encoding of vmovd/vmovq

* Fix typo

* Fix rebase conflict

* Fix rebase conflict with tests
This commit is contained in:
Alex Crichton
2023-03-22 09:58:09 -05:00
committed by GitHub
parent a1072007b8
commit 2fde25311e
14 changed files with 695 additions and 83 deletions

View File

@@ -0,0 +1,104 @@
test compile precise-output
set enable_simd
target x86_64 has_avx
function %f3(i32) -> f32 {
block0(v0: i32):
v1 = fcvt_from_sint.f32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vcvtsi2ss %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vcvtsi2ssl %edi, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %f4(i64) -> f32 {
block0(v0: i64):
v1 = fcvt_from_sint.f32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vcvtsi2ss %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vcvtsi2ssq %rdi, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %f7(i32) -> f64 {
block0(v0: i32):
v1 = fcvt_from_sint.f64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vcvtsi2sd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vcvtsi2sdl %edi, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %f8(i64) -> f64 {
block0(v0: i64):
v1 = fcvt_from_sint.f64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vcvtsi2sd %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vcvtsi2sdq %rdi, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq

View File

@@ -0,0 +1,104 @@
test compile precise-output
set enable_simd
target x86_64 has_avx
function %i32_to_f32(i32) -> f32 {
block0(v0: i32):
v1 = bitcast.f32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %i64_to_f64(i64) -> f64 {
block0(v0: i64):
v1 = bitcast.f64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovq %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovq %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %f32_to_i32(f32) -> i32 {
block0(v0: f32):
v1 = bitcast.i32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; retq
function %f64_to_i64(f64) -> i64 {
block0(v0: f64):
v1 = bitcast.i64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovq %xmm0, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovq %xmm0, %rax
; movq %rbp, %rsp
; popq %rbp
; retq

View File

@@ -0,0 +1,104 @@
test compile precise-output
set enable_simd
target x86_64
function %i32_to_f32(i32) -> f32 {
block0(v0: i32):
v1 = bitcast.f32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %i64_to_f64(i64) -> f64 {
block0(v0: i64):
v1 = bitcast.f64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movq %rdi, %xmm0
; movq %rbp, %rsp
; popq %rbp
; retq
function %f32_to_i32(f32) -> i32 {
block0(v0: f32):
v1 = bitcast.i32 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; retq
function %f64_to_i64(f64) -> i64 {
block0(v0: f64):
v1 = bitcast.i64 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %xmm0, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movq %xmm0, %rax
; movq %rbp, %rsp
; popq %rbp
; retq

View File

@@ -920,7 +920,7 @@ block0(v0: i8x16, v1: i32):
; vpunpcklbw %xmm0, %xmm0, %xmm5
; vpunpckhbw %xmm0, %xmm0, %xmm7
; addl %r9d, $8, %r9d
; movd %r9d, %xmm11
; vmovd %r9d, %xmm11
; vpsraw %xmm5, %xmm11, %xmm13
; vpsraw %xmm7, %xmm11, %xmm15
; vpacksswb %xmm13, %xmm15, %xmm0
@@ -938,7 +938,7 @@ block0(v0: i8x16, v1: i32):
; vpunpcklbw %xmm0, %xmm0, %xmm5
; vpunpckhbw %xmm0, %xmm0, %xmm7
; addl $8, %r9d
; movd %r9d, %xmm11
; vmovd %r9d, %xmm11
; vpsraw %xmm11, %xmm5, %xmm13
; vpsraw %xmm11, %xmm7, %xmm15
; vpacksswb %xmm15, %xmm13, %xmm0
@@ -992,7 +992,7 @@ block0(v0: i16x8, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $15, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsraw %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1005,7 +1005,7 @@ block0(v0: i16x8, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0xf, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsraw %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1049,7 +1049,7 @@ block0(v0: i32x4, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $31, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrad %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1062,7 +1062,7 @@ block0(v0: i32x4, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0x1f, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrad %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1315,7 +1315,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; uninit %xmm4
; vpxor %xmm4, %xmm4, %xmm6
; vpshufb %xmm2, %xmm6, %xmm0
@@ -1328,7 +1328,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpxor %xmm4, %xmm4, %xmm6
; vpshufb %xmm6, %xmm2, %xmm0
; movq %rbp, %rsp
@@ -1389,7 +1389,7 @@ block0(v0: i8x16, v1: i32):
; block0:
; movq %rdi, %r10
; andq %r10, $7, %r10
; movd %r10d, %xmm5
; vmovd %r10d, %xmm5
; vpsllw %xmm0, %xmm5, %xmm7
; lea const(0), %rsi
; shlq $4, %r10, %r10
@@ -1406,7 +1406,7 @@ block0(v0: i8x16, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %r10
; andq $7, %r10
; movd %r10d, %xmm5
; vmovd %r10d, %xmm5
; vpsllw %xmm5, %xmm0, %xmm7
; leaq 0x15(%rip), %rsi
; shlq $4, %r10
@@ -1461,7 +1461,7 @@ block0(v0: i16x8, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $15, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsllw %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1474,7 +1474,7 @@ block0(v0: i16x8, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0xf, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsllw %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1518,7 +1518,7 @@ block0(v0: i32x4, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $31, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpslld %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1531,7 +1531,7 @@ block0(v0: i32x4, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0x1f, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpslld %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1575,7 +1575,7 @@ block0(v0: i64x2, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $63, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsllq %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1588,7 +1588,7 @@ block0(v0: i64x2, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0x3f, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsllq %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1632,7 +1632,7 @@ block0(v0: i8x16, v1: i32):
; block0:
; movq %rdi, %r10
; andq %r10, $7, %r10
; movd %r10d, %xmm5
; vmovd %r10d, %xmm5
; vpsrlw %xmm0, %xmm5, %xmm7
; lea const(0), %rsi
; shlq $4, %r10, %r10
@@ -1648,7 +1648,7 @@ block0(v0: i8x16, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %r10
; andq $7, %r10
; movd %r10d, %xmm5
; vmovd %r10d, %xmm5
; vpsrlw %xmm5, %xmm0, %xmm7
; leaq 0x15(%rip), %rsi
; shlq $4, %r10
@@ -1713,7 +1713,7 @@ block0(v0: i16x8, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $15, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrlw %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1726,7 +1726,7 @@ block0(v0: i16x8, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0xf, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrlw %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1770,7 +1770,7 @@ block0(v0: i32x4, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $31, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrld %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1783,7 +1783,7 @@ block0(v0: i32x4, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0x1f, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrld %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1827,7 +1827,7 @@ block0(v0: i64x2, v1: i32):
; block0:
; movq %rdi, %rcx
; andq %rcx, $63, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrlq %xmm0, %xmm5, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -1840,7 +1840,7 @@ block0(v0: i64x2, v1: i32):
; block1: ; offset 0x4
; movq %rdi, %rcx
; andq $0x3f, %rcx
; movd %ecx, %xmm5
; vmovd %ecx, %xmm5
; vpsrlq %xmm5, %xmm0, %xmm0
; movq %rbp, %rsp
; popq %rbp

View File

@@ -41,7 +41,7 @@ block0(v0: i64):
; movq %rsp, %rbp
; block0:
; movl $-2147483648, %eax
; movd %eax, %xmm4
; vmovd %eax, %xmm4
; vandnps %xmm4, const(0), %xmm6
; vandps %xmm4, 0(%rdi), %xmm8
; vorps %xmm6, %xmm8, %xmm0
@@ -55,7 +55,7 @@ block0(v0: i64):
; movq %rsp, %rbp
; block1: ; offset 0x4
; movl $0x80000000, %eax
; movd %eax, %xmm4
; vmovd %eax, %xmm4
; vandnps 0x1b(%rip), %xmm4, %xmm6
; vandps (%rdi), %xmm4, %xmm8
; vorps %xmm8, %xmm6, %xmm0

View File

@@ -12,7 +12,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; uninit %xmm4
; vpxor %xmm4, %xmm4, %xmm6
; vpshufb %xmm2, %xmm6, %xmm0
@@ -25,7 +25,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpxor %xmm4, %xmm4, %xmm6
; vpshufb %xmm6, %xmm2, %xmm0
; movq %rbp, %rsp
@@ -42,7 +42,7 @@ block0(v0: i16):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpshuflw $0, %xmm2, %xmm4
; vpshufd $0, %xmm4, %xmm0
; movq %rbp, %rsp
@@ -54,7 +54,7 @@ block0(v0: i16):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpshuflw $0, %xmm2, %xmm4
; vpshufd $0, %xmm4, %xmm0
; movq %rbp, %rsp
@@ -71,7 +71,7 @@ block0(v0: i32):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpshufd $0, %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -82,7 +82,7 @@ block0(v0: i32):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpshufd $0, %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -98,7 +98,7 @@ block0(v0: i64):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %xmm2
; vmovq %rdi, %xmm2
; vmovddup %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -109,7 +109,7 @@ block0(v0: i64):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movq %rdi, %xmm2
; vmovq %rdi, %xmm2
; vmovddup %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp

View File

@@ -12,7 +12,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastb %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -23,7 +23,7 @@ block0(v0: i8):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastb %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -39,7 +39,7 @@ block0(v0: i16):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastw %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -50,7 +50,7 @@ block0(v0: i16):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastw %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -66,7 +66,7 @@ block0(v0: i32):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastd %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -77,7 +77,7 @@ block0(v0: i32):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movd %edi, %xmm2
; vmovd %edi, %xmm2
; vpbroadcastd %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -93,7 +93,7 @@ block0(v0: i64):
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rdi, %xmm2
; vmovq %rdi, %xmm2
; vmovddup %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp
@@ -104,7 +104,7 @@ block0(v0: i64):
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; movq %rdi, %xmm2
; vmovq %rdi, %xmm2
; vmovddup %xmm2, %xmm0
; movq %rbp, %rsp
; popq %rbp

View File

@@ -0,0 +1,108 @@
test compile precise-output
set enable_simd
target x86_64 has_avx
function %f1(i8x16) -> i8 {
block0(v0: i8x16):
v1 = vhigh_bits.i8 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vpmovmskb %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vpmovmskb %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; retq
function %f3(i16x8) -> i8 {
block0(v0: i16x8):
v1 = vhigh_bits.i8 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vpacksswb %xmm0, %xmm0, %xmm2
; vpmovmskb %xmm2, %eax
; shrq $8, %rax, %rax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vpacksswb %xmm0, %xmm0, %xmm2
; vpmovmskb %xmm2, %eax
; shrq $8, %rax
; movq %rbp, %rsp
; popq %rbp
; retq
function %f4(i32x4) -> i8 {
block0(v0: i32x4):
v1 = vhigh_bits.i8 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovmskps %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovmskps %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; retq
function %f5(i64x2) -> i8 {
block0(v0: i64x2):
v1 = vhigh_bits.i8 v0
return v1
}
; VCode:
; pushq %rbp
; movq %rsp, %rbp
; block0:
; vmovmskpd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; ret
;
; Disassembled:
; block0: ; offset 0x0
; pushq %rbp
; movq %rsp, %rbp
; block1: ; offset 0x4
; vmovmskpd %xmm0, %eax
; movq %rbp, %rsp
; popq %rbp
; retq