Add x86 implemention for SIMD iadd

This commit is contained in:
Andrew Brown
2019-09-11 10:58:21 -07:00
parent cd426cb7bc
commit 766cf8ddfd
3 changed files with 65 additions and 4 deletions

View File

@@ -0,0 +1,50 @@
test run
test binemit
set enable_simd
target x86_64 skylake
function %iadd_i32x4() -> b1 {
ebb0:
[-, %xmm0] v0 = vconst.i32x4 [1 1 1 1]
[-, %xmm1] v1 = vconst.i32x4 [1 2 3 4]
[-, %xmm0] v2 = iadd v0, v1 ; bin: 66 0f fe c1
v3 = extractlane v2, 0
v4 = icmp_imm eq v3, 2
v5 = extractlane v2, 3
v6 = icmp_imm eq v5, 5
; TODO replace extractlanes with vector comparison
v7 = band v4, v6
return v7
}
; run
function %iadd_i8x16_with_overflow() -> b1 {
ebb0:
[-, %xmm0] v0 = vconst.i8x16 [255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]
[-, %xmm7] v1 = vconst.i8x16 [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
[-, %xmm0] v2 = iadd v0, v1 ; bin: 66 0f fc c7
v3 = extractlane v2, 0
v4 = icmp_imm eq v3, 1
; TODO replace extractlane with vector comparison
return v4
}
; run
function %iadd_i16x8(i16x8, i16x8) -> i16x8 {
ebb0(v0: i16x8 [%xmm1], v1: i16x8 [%xmm2]):
[-, %xmm1] v2 = iadd v0, v1 ; bin: 66 0f fd ca
return v2
}
function %iadd_i64x2(i64x2, i64x2) -> i64x2 {
ebb0(v0: i64x2 [%xmm3], v1: i64x2 [%xmm4]):
[-, %xmm3] v2 = iadd v0, v1 ; bin: 66 0f d4 dc
return v2
}