Merge pull request #3290 from dheaton-arm/implement-ssatarith

Implement `SaddSat` and `SsubSat` for the Cranelift interpreter
This commit is contained in:
Chris Fallin
2021-09-03 09:48:34 -07:00
committed by GitHub
7 changed files with 93 additions and 3 deletions

View File

@@ -0,0 +1,17 @@
test interpret
test run
target aarch64
function %saddsat_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
v2 = sadd_sat v0, v1
return v2
}
; run: %saddsat_i32x4([256 -2147483000 2147483000 2147483000], [256 -1000 1000 1000]) == [512 -2147483648 2147483647 2147483647]
function %saddsat_i64x2(i64x2, i64x2) -> i64x2 {
block0(v0: i64x2, v1: i64x2):
v2 = sadd_sat v0, v1
return v2
}
; run: %saddsat_i64x2([-9223372036854775000 9223372036854775000], [-1000 1000]) == [-9223372036854775808 9223372036854775807]

View File

@@ -0,0 +1,19 @@
test interpret
test run
target aarch64
set enable_simd
target x86_64
function %saddsat_i8x16(i8x16, i8x16) -> i8x16 {
block0(v0: i8x16, v1: i8x16):
v2 = sadd_sat v0, v1
return v2
}
; run: %saddsat_i8x16([1 100 100 100 100 100 100 100 -100 -100 -100 -100 -100 -100 -100 -100], [1 100 100 100 100 100 100 100 -100 -100 -100 -100 -100 -100 -100 -100]) == [2 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128]
function %saddsat_i16x8(i16x8, i16x8) -> i16x8 {
block0(v0: i16x8, v1: i16x8):
v2 = sadd_sat v0, v1
return v2
}
; run: %saddsat_i16x8([1 -32000 -32000 -32000 32000 32000 32000 32000], [1 -1000 -1000 -1000 1000 1000 1000 1000]) == [2 -32768 -32768 -32768 32767 32767 32767 32767]

View File

@@ -0,0 +1,17 @@
test interpret
test run
target aarch64
function %ssubsat_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0: i32x4, v1: i32x4):
v2 = ssub_sat v0, v1
return v2
}
; run: %ssubsat_i32x4([256 -2147483000 2147483000 2147483000], [256 1000 -1000 -1000]) == [0 -2147483648 2147483647 2147483647]
function %ssubsat_i64x2(i64x2, i64x2) -> i64x2 {
block0(v0: i64x2, v1: i64x2):
v2 = ssub_sat v0, v1
return v2
}
; run: %ssubsat_i64x2([-9223372036854775000 9223372036854775000], [1000 -1000]) == [-9223372036854775808 9223372036854775807]

View File

@@ -0,0 +1,19 @@
test interpret
test run
target aarch64
set enable_simd
target x86_64
function %ssubsat_i8x16(i8x16, i8x16) -> i8x16 {
block0(v0: i8x16, v1: i8x16):
v2 = ssub_sat v0, v1
return v2
}
; run: %ssubsat_i8x16([1 100 100 100 100 100 100 100 -100 -100 -100 -100 -100 -100 -100 -100], [1 -100 -100 -100 -100 -100 -100 -100 100 100 100 100 100 100 100 100]) == [0 127 127 127 127 127 127 127 -128 -128 -128 -128 -128 -128 -128 -128]
function %ssubsat_i16x8(i16x8, i16x8) -> i16x8 {
block0(v0: i16x8, v1: i16x8):
v2 = ssub_sat v0, v1
return v2
}
; run: %ssubsat_i16x8([1 -32000 -32000 -32000 32000 32000 32000 32000], [1 1000 1000 1000 -1000 -1000 -1000 -1000]) == [0 -32768 -32768 -32768 32767 32767 32767 32767]