86 lines
3.4 KiB
Plaintext
86 lines
3.4 KiB
Plaintext
test binemit
|
|
set enable_simd
|
|
target x86_64 skylake
|
|
|
|
function %load_store_simple(i64) {
|
|
block0(v0: i64 [%rax]):
|
|
[-, %xmm0] v10 = load.i32x4 v0 ; bin: heap_oob 0f 10 00
|
|
[-] store v10, v0 ; bin: heap_oob 0f 11 00
|
|
|
|
; use REX prefix
|
|
[-, %xmm8] v12 = load.i8x16 v0 ; bin: heap_oob 44 0f 10 00
|
|
[-] store v12, v0 ; bin: heap_oob 44 0f 11 00
|
|
|
|
return
|
|
}
|
|
|
|
function %load_store_with_displacement(i64) {
|
|
block0(v0: i64 [%rax]):
|
|
; use 8-bit displacement
|
|
[-, %xmm0] v1 = load.f32x4 v0+42 ; bin: heap_oob 0f 10 40 2a
|
|
[-] store v1, v0+42 ; bin: heap_oob 0f 11 40 2a
|
|
|
|
; use 8-bit displacement with REX prefix
|
|
[-, %xmm8] v2 = load.i8x16 v0 ; bin: heap_oob 44 0f 10 00
|
|
[-] store v2, v0 ; bin: heap_oob 44 0f 11 00
|
|
|
|
; use 32-bit displacement
|
|
[-, %xmm0] v3 = load.f32x4 v0+256 ; bin: heap_oob 0f 10 80 00000100
|
|
[-] store v3, v0+256 ; bin: heap_oob 0f 11 80 00000100
|
|
|
|
; use 32-bit displacement with REX prefix
|
|
[-, %xmm8] v4 = load.f32x4 v0+256 ; bin: heap_oob 44 0f 10 80 00000100
|
|
[-] store v4, v0+256 ; bin: heap_oob 44 0f 11 80 00000100
|
|
|
|
return
|
|
}
|
|
|
|
function %load_store_complex(i64, i64) {
|
|
block0(v0: i64 [%rax], v1: i64 [%rbx]):
|
|
; %xmm1 corresponds to ModR/M 0x04; the 0b100 in the R/M slot indicates a SIB byte follows
|
|
; %rax and %rbx form the SIB 0x18
|
|
[-, %xmm1] v10 = load_complex.f64x2 v0+v1 ; bin: heap_oob 40 0f 10 0c 18
|
|
; enabling bit 6 of the ModR/M byte indicates a disp8 follows
|
|
[-] store_complex v10, v0+v1+5 ; bin: heap_oob 40 0f 11 4c 18 05
|
|
|
|
return
|
|
}
|
|
|
|
function %copy_to_ssa() {
|
|
block0:
|
|
[-, %xmm1] v0 = copy_to_ssa.i64x2 %xmm3 ; bin: 40 0f 28 cb
|
|
[-, %xmm2] v1 = copy_to_ssa.i64x2 %xmm15 ; bin: 41 0f 28 d7
|
|
|
|
return
|
|
}
|
|
|
|
function %uload_extend() {
|
|
block0:
|
|
[-,%rdx] v1 = iconst.i64 0x0123_4567_89ab_cdef
|
|
[-,%xmm2] v3 = uload8x8 v1+0 ; bin: heap_oob 66 0f 38 30 12
|
|
[-,%xmm2] v4 = uload8x8 v1+20 ; bin: heap_oob 66 0f 38 30 52 14
|
|
[-,%xmm2] v5 = uload8x8 v1+256 ; bin: heap_oob 66 0f 38 30 92 00000100
|
|
[-,%xmm2] v6 = uload16x4 v1+0 ; bin: heap_oob 66 0f 38 33 12
|
|
[-,%xmm2] v7 = uload16x4 v1+20 ; bin: heap_oob 66 0f 38 33 52 14
|
|
[-,%xmm2] v8 = uload16x4 v1+256 ; bin: heap_oob 66 0f 38 33 92 00000100
|
|
[-,%xmm10] v9 = uload32x2 v1+0 ; bin: heap_oob 66 44 0f 38 35 12
|
|
[-,%xmm10] v10 = uload32x2 v1+20 ; bin: heap_oob 66 44 0f 38 35 52 14
|
|
[-,%xmm10] v11 = uload32x2 v1+256 ; bin: heap_oob 66 44 0f 38 35 92 00000100
|
|
return
|
|
}
|
|
|
|
function %sload_extend() {
|
|
block0:
|
|
[-,%rdx] v1 = iconst.i64 0x0123_4567_89ab_cdef
|
|
[-,%xmm2] v3 = sload8x8 v1+0 ; bin: heap_oob 66 0f 38 20 12
|
|
[-,%xmm2] v4 = sload8x8 v1+20 ; bin: heap_oob 66 0f 38 20 52 14
|
|
[-,%xmm2] v5 = sload8x8 v1+256 ; bin: heap_oob 66 0f 38 20 92 00000100
|
|
[-,%xmm10] v6 = sload16x4 v1+0 ; bin: heap_oob 66 44 0f 38 23 12
|
|
[-,%xmm10] v7 = sload16x4 v1+20 ; bin: heap_oob 66 44 0f 38 23 52 14
|
|
[-,%xmm10] v8 = sload16x4 v1+256 ; bin: heap_oob 66 44 0f 38 23 92 00000100
|
|
[-,%xmm2] v9 = sload32x2 v1+0 ; bin: heap_oob 66 0f 38 25 12
|
|
[-,%xmm2] v10 = sload32x2 v1+20 ; bin: heap_oob 66 0f 38 25 52 14
|
|
[-,%xmm2] v11 = sload32x2 v1+256 ; bin: heap_oob 66 0f 38 25 92 00000100
|
|
return
|
|
}
|