diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.c new file mode 100644 index 0000000000..26532e733b --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.c @@ -0,0 +1,188 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0xfda9b23a624082fd}; + __m128i_result = (__m128i){0x0000000001010000, 0x03574e3a62407e03}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x0014fff500000000, 0xfffd000700000000}; + __m128i_result = (__m128i){0x7f15000a7f010101, 0x7f03000780000000}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0x000000127fffffea, 0x000000060000000e}; + __m128i_result = (__m128i){0x000000127f010116, 0x7f0101070101010f}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x000000000000000b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000b, 0x000000000000000b}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + __m128i_result = (__m128i){0x387c7e0a133f2000, 0x67157b5100005000}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffbfffefffe01ff, 0xfff7fffefffa01ff}; + v2u64_op1 = (v2u64){0xfcfcfcfcfcfcfcfd, 0xfcfcfcfcfcfcfcfd}; + __m128i_result = (__m128i){0x0301030203020502, 0x0305030203020502}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5728dcc85ac760d2, 0x4ee376188658d85f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x572824385a39602e, 0x4e1d76187a58285f}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + __m128i_result = (__m128i){0x274f4f0648145f50, 0x0a545374471b7070}; + __m128i_out = __lsx_vabsd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x407c2ca3d3430357, 0x21f32eafa486fd38}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x407c2ca32cbd0357, 0x21f32eaf5b7a02c8}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003bfb4000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000003bfb4000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x0000000100010001, 0x0000000100010001}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffdf, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000100000021, 0x0000000100000001}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + v2u64_op1 = (v2u64){0x0003000000012020, 0x000700000004e000}; + __m128i_result = (__m128i){0x003c000000022021, 0x0038000000051fff}; + __m128i_out = __lsx_vabsd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbe081c963e6fee68, 0x9c9d9b9bbfaa20e9}; + v2u64_op1 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + __m128i_result = (__m128i){0x41f8e08016161198, 0x6363636463abdf17}; + __m128i_out = __lsx_vabsd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01fe0400000006, 0x0000000800000000}; + v2u64_op1 = (v2u64){0x000000000005fffa, 0x0000000000000000}; + __m128i_result = (__m128i){0x00fe01fc0005fff4, 0x0000000800000000}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000005}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x017f03000000ff00, 0x010003f00000ff00}; + v2u64_op1 = (v2u64){0x017f03000000ff00, 0x010003f00000ff00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000001fffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x000000001ffffffe}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffac0a000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffac0a000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.c new file mode 100644 index 0000000000..839c578862 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.c @@ -0,0 +1,272 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0024d8f6a494006a, 0xa8beed87bc3f2be1}; + v2u64_op1 = (v2u64){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_result = (__m128i){0xfedb27095b6bff95, 0x5641127843c0d41e}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000383ffff1fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ca354688, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000038335ca2777, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + __m128i_result = (__m128i){0x00000000fff80000, 0x00000000fff8fff8}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0002ffff00000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001fd0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001fd0, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000005}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000005}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ff08ffff}; + __m128i_result = (__m128i){0xfffffffffffffff0, 0x00000000ff08ffff}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefff00000001fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000400000, 0xffe1ffc100000000}; + __m128i_result = (__m128i){0xfefff00000401fff, 0xffe1ffc100000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff000000ff000000, 0xff000000ff000000}; + __m128i_result = (__m128i){0xff000000ff000000, 0xff000000ff000000}; + __m128i_out = __lsx_vabsd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x545cab1d7e57c415, 0x13f9c5b60028a415}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + __m128i_out = __lsx_vabsd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + v2u64_op1 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0282800002828282, 0xffffffffcfb799f1}; + v2u64_op1 = (v2u64){0xffabbeab55110140, 0x5555001400005111}; + __m128i_result = (__m128i){0xfd293eab528e7ebe, 0xaaaaffebcfb748e0}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + v2u64_op1 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xb4b8122ef4054bb3, 0x56a09e662ab46b31}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xb4b8122ef4054bb3, 0x56a09e662ab46b31}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + __m128i_result = (__m128i){0x0000000000fe00fd, 0xc39fffff007fffff}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8004000080020000, 0x8006000080020000}; + __m128i_result = (__m128i){0x8004000080020000, 0x8006000080020000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_result = (__m128i){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000400000004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff0015172b, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffb00151727, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0xfffffffbfffffff8, 0xfffffffbfffffff8}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xffffffffffffffdc}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0xfffffffbfffffff8, 0xfffffffbffffffd8}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000003, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000006, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001ffffffff, 0x000000490000004d}; + __m128i_result = (__m128i){0x00000001fffffff9, 0x000000490000004d}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4101010141010100}; + v2u64_op1 = (v2u64){0x161c0c363c200824, 0x64b680a2ae3af8c8}; + __m128i_result = (__m128i){0x161c0c363c200824, 0x23b57fa16d39f7c8}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ff0010000000000, 0x3ff0010000000000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x3fffff0000000000, 0x3fffff0000000000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf0bd80bd80bd8000, 0x1ffffffff8001000}; + __m128i_result = (__m128i){0xf0bd80bd80bd8000, 0x1ffffffff8001000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff00, 0xffffffffffffff00}; + v2u64_op1 = (v2u64){0x0020002000200020, 0x0000000000000008}; + __m128i_result = (__m128i){0xffdfffdfffdffee0, 0xfffffffffffffef8}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vabsd_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vabsd-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vadd.c b/SingleSource/UnitTests/Vector/LSX/lsx-vadd.c new file mode 100644 index 0000000000..8b2d4ba216 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vadd.c @@ -0,0 +1,284 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000201000000000b, 0x0000000b0000000b}; + v2u64_op1 = (v2u64){0x0000000000fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0002010000fc000b, 0x0000000b0000000b}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000017fda829, 0x0000000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001fffe, 0xffffffffffff0000}; + v2u64_op1 = (v2u64){0x7f0000fd7f0000fd, 0x7f7f7f7f00107f04}; + __m128i_result = (__m128i){0x7f0000fd7f01fffb, 0x7e7e7e7eff0f7f04}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + v2u64_op1 = (v2u64){0x6a1a3fbb3c90260e, 0x195f307a5d04acbb}; + __m128i_result = (__m128i){0x5ed032b06bde1ab6, 0x19df307a5d04acbb}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffabbeab55110140, 0x5555001400005111}; + v2u64_op1 = (v2u64){0xffabbeab55110140, 0x5555001400005111}; + __m128i_result = (__m128i){0xfe567c56aa220280, 0xaaaa00280000a222}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + __m128i_result = (__m128i){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001ffffffff, 0x000000490000004d}; + v2u64_op1 = (v2u64){0x000000000000002a, 0x0000000000000073}; + __m128i_result = (__m128i){0x00000001ffffff29, 0x00000049000000c0}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff0000, 0x000000000000bd3d}; + v2u64_op1 = (v2u64){0x0000000d7fff0000, 0x000000000000bd30}; + __m128i_result = (__m128i){0x0000000dfefe0000, 0x0000000000007a6d}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfefa000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfefefefefefefefe, 0xfefefefefefefefe}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003c000000022021, 0x0038000000051fff}; + v2u64_op1 = (v2u64){0x7fffffffa0204000, 0x7fff0101ffffe000}; + __m128i_result = (__m128i){0x7f3bffffa0226021, 0x7f370101ff04ffff}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1c2640b9a8e9fb49, 0x1baf8eabd26bc629}; + v2u64_op1 = (v2u64){0x00036dd1c5c15856, 0x0002dab8746acf8e}; + __m128i_result = (__m128i){0x1c29ad8a6daa539f, 0x1bb1686346d595b7}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_result = (__m128i){0xfeffffffffff0002, 0xfeffffffffffffff}; + __m128i_out = __lsx_vadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000008}; + __m128i_out = __lsx_vadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001ffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff800000c3080000, 0xff800000ff800000}; + __m128i_result = (__m128i){0xff81ffffc3080000, 0xff800000ff800000}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200001, 0x004200a000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x004200a000200001, 0x004200a000000000}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001f0000001f, 0x0000001f0000001f}; + __m128i_result = (__m128i){0x0000001f0000001f, 0x0000001f0000001f}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdbe332365392c686, 0x0029aeaca57d74e6}; + v2u64_op1 = (v2u64){0x29ca096f235819c2, 0x000056f64adb9464}; + __m128i_result = (__m128i){0x05ad3ba576eae048, 0x002a05a2f059094a}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000000}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000400, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000040d, 0x0000000000000000}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000001300000013}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001300000013, 0x0000001300000013}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000100, 0x0000000100000100}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000001000000ff, 0x0000000100000100}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100010001, 0x0000000300000001}; + v2u64_op1 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_result = (__m128i){0x000000010000fffb, 0x00000002fffffffb}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001201fe01e9, 0x000000060000000e}; + v2u64_op1 = (v2u64){0x0000001201fe01e9, 0x000000060000000e}; + __m128i_result = (__m128i){0x0000002403fc03d2, 0x0000000c0000001c}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0xfff1000100010001, 0xfff1000100010001}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_result = (__m128i){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_result = (__m128i){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001001100110068}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0001001100110067}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3789f68000000000, 0x379674c000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x3789f68000000000, 0x379674c000000000}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002580f01, 0x0000000000555889}; + v2u64_op1 = (v2u64){0x00020fbf02000fbf, 0x00060fbf02040fbf}; + __m128i_result = (__m128i){0x00020fbf04581ec0, 0x00060fbf02596848}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x006938094a013889, 0x0001388928513889}; + v2u64_op1 = (v2u64){0x006938094a013889, 0x0001388928513889}; + __m128i_result = (__m128i){0x00d2701294027112, 0x0002711250a27112}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001effae001effae, 0x001effae001effae}; + v2u64_op1 = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + __m128i_result = (__m128i){0x202544f490f2de35, 0x202544f490f2de35}; + __m128i_out = __lsx_vadd_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vadd.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vadd.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vadd.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vadda.c b/SingleSource/UnitTests/Vector/LSX/lsx-vadda.c new file mode 100644 index 0000000000..cf0d9231e7 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vadda.c @@ -0,0 +1,236 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000001fffc001f}; + __m128i_result = (__m128i){0x0101010102020202, 0x0101010202050120}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000092444, 0x00000000006a9a5c}; + v2u64_op1 = (v2u64){0x0000000000092444, 0x00000000006a9a5c}; + __m128i_result = (__m128i){0x0000000000124888, 0x0000000000d4ccb8}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000008140c80, 0x0000000000000000}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff000000b9, 0x0000fffe0000ff45}; + v2u64_op1 = (v2u64){0x343d8dc6b0ed5a08, 0xffd5002affffffff}; + __m128i_result = (__m128i){0x353e743b50135a4f, 0x012b012c01010246}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000008}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010109}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000004442403e4, 0x0000000005452505}; + v2u64_op1 = (v2u64){0x00000000ffffffe0, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000044525043c, 0x0000000005452505}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000208000002080, 0x0000208000002080}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000008000, 0x0000800000008000}; + __m128i_result = (__m128i){0x0000800000008000, 0x0000800000008000}; + __m128i_out = __lsx_vadda_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x63635c9e63692363, 0x5c9c9c9ce3636363}; + v2u64_op1 = (v2u64){0x0000a00028004000, 0xf0fd800080000000}; + __m128i_result = (__m128i){0x6363bc9e8b696363, 0x6b9fe3649c9d6363}; + __m128i_out = __lsx_vadda_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op1 = (v2u64){0x003f0000003f0000, 0x003f0000003f0000}; + __m128i_result = (__m128i){0x803e0000803e0000, 0x803e0000803e0000}; + __m128i_out = __lsx_vadda_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000008}; + __m128i_out = __lsx_vadda_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + v2u64_op1 = (v2u64){0x0000000020300000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000044470000, 0x00000000084d12ce}; + __m128i_out = __lsx_vadda_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000700020005, 0x0003000300030003}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0003000700020005, 0x0003000300030003}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f8000004f800000, 0x4f8000004f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4f8000004f800000, 0x4f8000004f800000}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111111111111111, 0x1111111111111111}; + v2u64_op1 = (v2u64){0x0000002000000020, 0x0000002000000020}; + __m128i_result = (__m128i){0x1111113111111131, 0x1111113111111131}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + v2u64_op1 = (v2u64){0xa36aca4435b8b8e1, 0x5a6f5c53ebed3faa}; + __m128i_result = (__m128i){0x7bea6962a0bfb621, 0x5a6f61865d36d3aa}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001400000000, 0x0000001400000014}; + v2u64_op1 = (v2u64){0xfffc000400000000, 0xfff9000000000000}; + __m128i_result = (__m128i){0x0004001000000000, 0x0007001400000014}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0xfefeff00fefeff00, 0xfefeff00fefeff00}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0xff01ff01ac465ca1, 0xff01ff01ac025c87}; + __m128i_result = (__m128i){0x64616462b71d06c2, 0x64616462b76106dc}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffaeffaeffaeffae, 0xffaeffaeffaeffae}; + __m128i_result = (__m128i){0x0051005200510052, 0x0051005200510052}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3bc000003a800000, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x0a0000000a000000, 0x0a0000000a000000}; + __m128i_result = (__m128i){0x45c0000044800000, 0x4480000044800000}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x6363636463636363, 0x6363636363636363}; + __m128i_out = __lsx_vadda_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_result = (__m128i){0x0003000300030004, 0x0003000300030004}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x76f424887fffffff, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x003f000000000000, 0xfff082f000000000}; + __m128i_result = (__m128i){0x773324887fffffff, 0x000f7d1000000001}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + __m128i_result = (__m128i){0x0003c853c843c87e, 0x0003c853c843c87e}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000200000002000}; + v2u64_op1 = (v2u64){0xffffffffe000ffdf, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000001fff0021, 0x0000200000002001}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + __m128i_result = (__m128i){0x0000000000000000, 0xbafebb00ffd500fe}; + __m128i_out = __lsx_vadda_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vadda.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vadda.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vadda.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.c new file mode 100644 index 0000000000..beb10832e8 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.c @@ -0,0 +1,185 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x1414141414141415, 0x1414141414141415}; + __m128i_out = __lsx_vaddi_bu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0505050504040404, 0x0505050505050505}; + __m128i_out = __lsx_vaddi_bu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + __m128i_result = (__m128i){0x1f1f1f1f27332b9f, 0x1f1f1f1f1f1f1f1f}; + __m128i_out = __lsx_vaddi_bu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0303030303030304, 0x0303030303030303}; + __m128i_out = __lsx_vaddi_bu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x8f8f8f8f8f8f8f8f, 0x8f8f8f8f8f8f8f8f}; + __m128i_out = __lsx_vaddi_bu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0018001800180018, 0x0018001800180018}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080000000000, 0x0000080000000000}; + __m128i_result = (__m128i){0x0019081900190019, 0x0019081900190019}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000ff0000, 0xffc1000000000000}; + __m128i_result = (__m128i){0x000b000b010a000b, 0xffcc000b000b000b}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x001f001f001f001f, 0x001f001f001f001f}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x001c001c001c001c, 0x001c001c001c001c}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0xc89d7f0fed582019, 0x680485c8b304b019}; + __m128i_out = __lsx_vaddi_hu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000a0000000a, 0x0000000a0000000a}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffff1fff, 0x0000000001000001}; + __m128i_result = (__m128i){0xffffe009ffff2008, 0x000000090100000a}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000300000003, 0x0000000200000002}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + __m128i_result = (__m128i){0xfe00fd14fe01fd16, 0xfc01fd13fc02fe0c}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001300000013, 0x0000001300000013}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff0000, 0x000000000000bd3d}; + __m128i_result = (__m128i){0x0000000c7fff000c, 0x0000000c0000bd49}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffe0001, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000005fffe0006, 0x0000000500000005}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000fffffeff}; + __m128i_result = (__m128i){0x0000000900000009, 0x00000009ffffff08}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaa55555655aaaaa8, 0x55aa55aa55aa55ab}; + __m128i_result = (__m128i){0xaa55556f55aaaac1, 0x55aa55c355aa55c4}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000020}; + __m128i_result = (__m128i){0x0000000e0000004e, 0x0000000e0000002e}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000400000004, 0x0000000400000004}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + __m128i_result = (__m128i){0x003f000400000003, 0x003f000400000003}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff8000010f800000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff80000a0f800009, 0x0000000900000009}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + __m128i_result = (__m128i){0x020310edc003023d, 0x30eb022002101b20}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x59f7fd7059f7fd70, 0x0000000000000000}; + __m128i_result = (__m128i){0x59f7fd8759f7fd87, 0x0000001700000017}; + __m128i_out = __lsx_vaddi_wu((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x20c4e0c4e0da647a, 0x6420e0208400c4c4}; + __m128i_result = (__m128i){0x20c4e0c4e0da6499, 0x6420e0208400c4e3}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1918171615141312, 0x21201f1e1d001b1a}; + __m128i_result = (__m128i){0x191817161514131d, 0x21201f1e1d001b25}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000014}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007770ffff9411, 0x0000004000000040}; + __m128i_result = (__m128i){0x00007770ffff941d, 0x000000400000004c}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000016, 0x0000000000000016}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000800000000}; + __m128i_result = (__m128i){0x000000000000000b, 0x000000080000000b}; + __m128i_out = __lsx_vaddi_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.c new file mode 100644 index 0000000000..c830883220 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0001000100010001, 0x000100010001007c}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003ffd000a4000, 0x3fffffff80000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + __m128i_result = (__m128i){0x0000fffd000a0000, 0xfffcffff00000000}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0800080008000800, 0x0800080008000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001ffffffff, 0x000000490000004d}; + v2u64_op1 = (v2u64){0xff00ff0000000000, 0xff000000ff00ff00}; + __m128i_result = (__m128i){0xffffff01ffffffff, 0x00000049ffffff4d}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5e695e96c396b402, 0x000000005e695e95}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x00005e96ffffb402, 0x0000000000005e94}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0101010101010101}; + v2u64_op1 = (v2u64){0xfffffffffffffffb, 0xfffffffffffffffb}; + __m128i_result = (__m128i){0x00000100000000fc, 0x00000100000000fc}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000158, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000005d5d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000005d5d, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x63635c9e63692363, 0x5c9c9c9ce3636363}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000063692363, 0xffffffffe3636363}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0202020202020203, 0x0202020202020203}; + __m128i_result = (__m128i){0x0000000002020202, 0x0000000002020202}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1615141315141312, 0x1817161517161514}; + v2u64_op1 = (v2u64){0x76f424887fffffff, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000095141311, 0x0000000017161515}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff00000000ffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x000000000000fffe}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfdfef9ff0efff900, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0001fe00f8000700, 0xfffcfd000000fb00}; + __m128i_result = (__m128i){0x0000000007000000, 0x000000000000fb01}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x807f808000000000, 0x0000000080806362}; + __m128i_result = (__m128i){0x0000000000ff00ff, 0xffffffff80806362}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ff960015, 0x0000000000010002}; + __m128i_result = (__m128i){0xffffffffff960015, 0x0000000000010002}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffb8145f50, 0x0000000047e59090}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff008ff820, 0x00bbfff7fffffff7}; + v2u64_op1 = (v2u64){0xffffffff008ff820, 0x00bbfff7fffffff7}; + __m128i_result = (__m128i){0x00000000011ff040, 0xffffffffffffffee}; + __m128i_out = __lsx_vaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x000100010001fffe, 0x0001000100010001}; + __m128i_result = (__m128i){0x000100010001fffd, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001000000010}; + v2u64_op1 = (v2u64){0x0000ffc100010001, 0xffc2ffe700000007}; + __m128i_result = (__m128i){0x0000ffc100010001, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff80df00000000}; + v2u64_op1 = (v2u64){0x00000000d46cdc13, 0x00000000dfa6e0c6}; + __m128i_result = (__m128i){0x00000000d46cdc13, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfe813f00fe813f00, 0xfe813f00fe813f00}; + __m128i_result = (__m128i){0xfe813f00fe813f00, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.c new file mode 100644 index 0000000000..fd9db9c27c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.c @@ -0,0 +1,236 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000ff000000ff}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0400040004000400, 0x0400040004000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4d6814ef9c77ce46, 0x061006100613030c}; + __m128i_result = (__m128i){0x016701ee01760145, 0x010f010f0112010b}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffac0a000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000ac00000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf589caff5605f2fa, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + __m128i_result = (__m128i){0x017400ff004500fa, 0x0000000000eb00ab}; + __m128i_out = __lsx_vaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000ff000000ff}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000016d10000012b, 0x000017d7000001e4}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0x7fffffff7fffffff, 0x0000ffff3fbfffff}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x000100fe000100fe}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff000000ff}; + __m128i_result = (__m128i){0x0001c8520001c87d, 0x0001c8520000c97d}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x0000ffac0a000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00017ea200002000, 0x000085af0000b000}; + __m128i_out = __lsx_vaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000024, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000024, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0040007fff800000, 0x00307028003f80b0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ff800000, 0x00000000003f80b0}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001f, 0x000000000000001f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001f, 0x000000000000001f}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffff80ffffff80ff, 0x8080808080808080}; + __m128i_result = (__m128i){0x00000001ffff80fe, 0x000000018080807f}; + __m128i_out = __lsx_vaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffff8000000000, 0xffffff8000000000}; + __m128i_result = (__m128i){0xffffff8000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000180100100000, 0x1000000010000000}; + v2u64_op1 = (v2u64){0x00000000b5207f80, 0x8000000000000000}; + __m128i_result = (__m128i){0x00001801b5307f80, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000001300000013}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001300000013, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff208fffffa02, 0xffffe218ffffea10}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffff208fffffa02, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000080000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + v2u64_op1 = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff7fff8007, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000014, 0x0002000000000000}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x7f8000007f800000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + v2u64_op1 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + __m128i_result = (__m128i){0xffa4fb6021a41f7e, 0x0000000000000001}; + __m128i_out = __lsx_vaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.c new file mode 100644 index 0000000000..479f1ec229 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.c @@ -0,0 +1,290 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x837cd5db43fc55d4, 0x0403cfcf01c1595e}; + v2u64_op1 = (v2u64){0x0404038383838404, 0x0404038383838404}; + __m128i_result = (__m128i){0x0080005e007f00d8, 0x0007005200440062}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a0, 0xffffffffcafff8ff}; + v2u64_op1 = (v2u64){0xe5017c2ac9ca9fd0, 0xe6d4572c8a5835bc}; + __m128i_result = (__m128i){0x0001002affca0070, 0x00d3012b015700bb}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000fea0000fffe}; + v2u64_op1 = (v2u64){0x636363ec6363636c, 0x6363771163631745}; + __m128i_result = (__m128i){0x0063ffec0063006c, 0x006300fb00630143}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000ffff}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9c9c9c9c9c9c9c9d, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00008080ffffffff, 0x8080ffffffff8080}; + __m128i_result = (__m128i){0x0000ff80ffffffff, 0xff80ffffffffff80}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01009aa4a301084b, 0x00197f26cb658837}; + v2u64_op1 = (v2u64){0x001effae001effae, 0x001effae001effae}; + __m128i_result = (__m128i){0x001e0052001ffff9, 0x0037ffd40083ffe5}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff00ffffff00ff}; + v2u64_op1 = (v2u64){0x0000090900000998, 0x0000f50000000900}; + __m128i_result = (__m128i){0x00ff000900ffff98, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0x10f881a20ffd02b0}; + __m128i_result = (__m128i){0x00000000ff800000, 0xfff8ffa2fffdffb0}; + __m128i_out = __lsx_vaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00007fff00007fff}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000000000001, 0x000000000000007b}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x1e0200001e020000}; + v2u64_op1 = (v2u64){0xfffcfffdfffcfffd, 0xfffcfffcfffcfffd}; + __m128i_result = (__m128i){0xfffffffdfffffffd, 0xfffffffcfffffffd}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff000000ff00, 0x0000ff000000ff00}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0101010101010101}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010100000101, 0x0000010100000101}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000400000004, 0x0000000400000004}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000400000004, 0x0000000400000004}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xa2f54a1ea2f54a1e, 0x8000000080000008}; + __m128i_result = (__m128i){0x00004a1e00004a1e, 0x0000000000000008}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000868686868686, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000868600008785, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e880ffffffff, 0x63636b6afe486741}; + v2u64_op1 = (v2u64){0x41f8e08016161198, 0xe363636363abdf16}; + __m128i_result = (__m128i){0x0000c90000011197, 0x0000cecd00004657}; + __m128i_out = __lsx_vaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fff1000ffffe, 0x00000001000f000e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000ffffe, 0x00000000000f000e}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3430af9effffffff, 0x0c07e181ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000049ffffffaa, 0x00060012000e002b}; + __m128i_result = (__m128i){0xffffffffffffffaa, 0x00000000000e002b}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000bfffffffe0f6, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffff7a53, 0x0000000000001f0a}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff7f80ffff7f80, 0xffff7f80ffff7f80}; + v2u64_op1 = (v2u64){0xffff7f80ffff7f80, 0xffff7f80ffff7f80}; + __m128i_result = (__m128i){0x00000000fffeff00, 0x00000000fffeff00}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0008000000000000}; + v2u64_op1 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_result = (__m128i){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080006b0000000b, 0x0080008000800080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000b, 0x0000000000800080}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_result = (__m128i){0x0000000000ff00ff, 0x0000000000ff00ff}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000455555555, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000055555555, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000400530050ffa6, 0xff7f810100001000}; + v2u64_op1 = (v2u64){0x000400530050ffa6, 0xffff007fff810001}; + __m128i_result = (__m128i){0x0000000000a1ff4c, 0xffffffffff811001}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x7fffffff7fffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000008000001e, 0x000000000000001f}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + v2u64_op1 = (v2u64){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + __m128i_result = (__m128i){0x000000013ecaadf2, 0x0000000035697d4e}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff010f, 0x00ff00ef00ff010f}; + v2u64_op1 = (v2u64){0xc1f03e1042208410, 0x0001000100010001}; + __m128i_result = (__m128i){0x00000000431f851f, 0x0000000001000110}; + __m128i_out = __lsx_vaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000030000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x000000030000003f, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + __m128i_result = (__m128i){0xffffffbfffffffbe, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8312f5424ca4a07f, 0x06b1213ef1efa299}; + v2u64_op1 = (v2u64){0x1f1f1f27332b9f00, 0x1f1f1f1f1f1f1f00}; + __m128i_result = (__m128i){0xa23214697fd03f7f, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fffffff80000000, 0x80000000ffffd860}; + __m128i_result = (__m128i){0x7fffffff80000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwev-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.c new file mode 100644 index 0000000000..2413fa13b1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.c @@ -0,0 +1,278 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000ca354688, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0404038383838404, 0x0404038383838404}; + __m128i_result = (__m128i){0x00040003ff4dffca, 0x00040003ff83ff84}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000040d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001f5400000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000014, 0x0000000000000014}; + __m128i_result = (__m128i){0x0000001f00000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000f80007, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff00000000, 0x0000ffff00000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffff0100ff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffefffefffeffff, 0xfffefffefffefffe}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6b769e690fa1e119, 0x478b478b38031779}; + v2u64_op1 = (v2u64){0x0000000001030103, 0x0000000000000000}; + __m128i_result = (__m128i){0x006bff9e0010ffe2, 0x0047004700380017}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + v2u64_op1 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xff76ffd8ffe6ffaa, 0xff80ffa2fff0ff74}; + __m128i_out = __lsx_vaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1f54e0ab00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001f5400000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_result = (__m128i){0xffffa352ffff9269, 0xffffd70b00006ea9}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_result = (__m128i){0xffffa352ffff9269, 0xffffd70b00006ea9}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe593c8c4e593c8c4, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0x9b2ee1a4034b4e34, 0x8144ffff01c820a4}; + __m128i_result = (__m128i){0xffff80c1ffffe8de, 0xffff80c400000148}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffefffffffe, 0xfffffffefffffffe}; + __m128i_out = __lsx_vaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x58bcc2013ea1cc1e, 0xa486c90f6537b8d7}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000058bcc201, 0xffffffffa486c90f}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001802041b0013, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00001802041b0014, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000003004, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff02000200, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffe000ffffe000, 0xffffe000ffffe000}; + __m128i_result = (__m128i){0xffffffffffffdfff, 0xffffffffffffdfff}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fbf83468, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fbf83468, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffc6bb97ac, 0xffffffff82bb9784}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x000000007ffffffe}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0x000000002ff9afef, 0x00000001000fbff9}; + __m128i_result = (__m128i){0x000000004f804f80, 0x000000004f804f81}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000000, 0x0000001000000010}; + v2u64_op1 = (v2u64){0x0000001000000000, 0x0000001000000010}; + __m128i_result = (__m128i){0x0000000000000020, 0x0000000000000020}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000000, 0x0000001000000010}; + v2u64_op1 = (v2u64){0x000000000000fff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000010}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe00029f9f6061, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x64e464e464e464e4, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000064e264e6, 0xfffffffffffeffff}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0301030203020502, 0x0305030203020502}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000003010302, 0x0000000003050302}; + __m128i_out = __lsx_vaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01fc020000fe0100, 0x0000ff0000ff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff0000ff0000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00a6ffceffb60052, 0xff84fff4ff84fff4}; + __m128i_result = (__m128i){0xff84fff4ff84fff4, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0x00000000fefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000fefefe6a, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000020, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6bae051ffed76001, 0x5a57bacbd7e39680}; + v2u64_op1 = (v2u64){0xf7077b934ac0e000, 0xf3e6586b60d7b152}; + __m128i_result = (__m128i){0x4e3e133738bb47d2, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000093d0000187f, 0x0000117d00007f7b}; + v2u64_op1 = (v2u64){0x7e7f7e7f027f032f, 0x7d7f027f7c7f7c79}; + __m128i_result = (__m128i){0x7d7f13fc7c7ffbf4, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.c new file mode 100644 index 0000000000..c18b00adfc --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.c @@ -0,0 +1,278 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4303c67e9b7fb213, 0x08fdc221bfdb1927}; + v2u64_op1 = (v2u64){0x4303c67e9b7fb213, 0x08fdc221bfdb1927}; + __m128i_result = (__m128i){0x0086018c01360164, 0x00100184017e0032}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe6eeef00eeeeeebf, 0xff77777807777775}; + v2u64_op1 = (v2u64){0x000000000000f00f, 0x0000000000000000}; + __m128i_result = (__m128i){0x00e600ef00ee01de, 0x00ff007700070077}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000030000003f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe22b3595efa4aa0c, 0x4429146a7b4c88b2}; + __m128i_result = (__m128i){0x0000e22b0000efa4, 0x0000442900007b4c}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000000000007, 0x0006000000040000}; + __m128i_result = (__m128i){0x0000636500006363, 0x0000000600000004}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + v2u64_op1 = (v2u64){0x00000000000000a6, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000080800000808, 0x0000080800000808}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000800000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffe0001fefc, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0001fffe0001fefc, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fff80000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff8000010f800000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000ff8000010f78, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x58bc43853ea123ed, 0xa486083e6536d81d}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000058bc4385, 0x00000000a486083e}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000000}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffc01, 0xfffffffffffffff7}; + v2u64_op1 = (v2u64){0xfffffffffffffc01, 0xfffffffffffffff7}; + __m128i_result = (__m128i){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010001fffe, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x000100010001fffe, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000020002, 0x0000000000020002}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x000000006e17bfd8, 0x000000006e17bfd8}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f000400000003, 0x003f000400000003}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0001000000010000}; + __m128i_result = (__m128i){0x00000000003f0004, 0x0000000000400004}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xecbbbbc5d5f3f3f3, 0xd1c0c0a5baf8f8d3}; + v2u64_op1 = (v2u64){0xffaefffbffaefffb, 0xffaefffbffaefffb}; + __m128i_result = (__m128i){0x00000000ec6abbc0, 0x00000000d16fc0a0}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000d00000000, 0xfffffff000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000000c, 0x00000000ffffffef}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000017f800001, 0x7f8000017f800001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000007f800001, 0x000000007f800001}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000808ff821, 0x0000000080000001}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000200000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3789f68000000000, 0x379674c000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x379674c000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001000000010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.c new file mode 100644 index 0000000000..3cc55c18e3 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.c @@ -0,0 +1,164 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x16161616a16316b0, 0x00000000a16316b0}; + __m128i_result = (__m128i){0x01150115ffa10016, 0x00ff00ffffa10016}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x7f7f7f7f7f7f7f7f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x007e007e007e007e}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000120002000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000003f, 0x0000000000200020}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x000000007fffffff}; + v2u64_op1 = (v2u64){0x7fffffff7fffffff, 0x000000007fffffff}; + __m128i_result = (__m128i){0x00fe00fe00fe00fe, 0x0000000000fe00fe}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000dfff2, 0x000000000011ffee}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000ff, 0x00000000000000ff}; + __m128i_out = __lsx_vaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00e0000000e00000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000e0000000e0, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff7100fffc}; + v2u64_op1 = (v2u64){0x01150115ffa10016, 0x00ff00ffffa10016}; + __m128i_result = (__m128i){0x00000115ffffffa1, 0x000100fe000070a1}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000fffe0000fffe, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff208fffffa02, 0xffffe218ffffea10}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000017fff00fe7f, 0x000001000f00fe00}; + __m128i_result = (__m128i){0x00000000ffffff00, 0x0000000000000f00}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04fafa9200000000, 0x04faf60009f5f092}; + v2u64_op1 = (v2u64){0xfff9fffefff9ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000004f3fffffff9, 0x000004fa000009f5}; + __m128i_out = __lsx_vaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000c2fa8000c2fa, 0x0000c2f90000bafa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000c2f90000bafa, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000003fffffffc, 0x00001fff00001fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001fff00001fff, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000800ecedee68, 0x00000807bf0a1f80}; + v2u64_op1 = (v2u64){0x110053f401e7cced, 0x5847b72626ce61ef}; + __m128i_result = (__m128i){0x5847bf2de5d8816f, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff000000000000}; + v2u64_op1 = (v2u64){0x0000000100000155, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vaddwod-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vand.c b/SingleSource/UnitTests/Vector/LSX/lsx-vand.c new file mode 100644 index 0000000000..ebdaccdf61 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vand.c @@ -0,0 +1,104 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + __m128i_result = (__m128i){0x0000000000000000, 0x03574e3a62407e03}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x001fffff001fffff, 0x001fffff001fffff}; + __m128i_result = (__m128i){0x001fffff001fffff, 0x001fffff001fffff}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0008000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + __m128i_result = (__m128i){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0313100003131000, 0x0313100003131000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0003000100010001, 0x0007000000050000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000485000004cc, 0x00007a8000000480}; + v2u64_op1 = (v2u64){0x0a0000000a000000, 0x0a0000000a000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vand_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vand.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vand.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vand.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vandi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vandi.c new file mode 100644 index 0000000000..650f1774cb --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vandi.c @@ -0,0 +1,50 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000800}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0x39); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0xbd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000b6e414157f84, 0x0000a95afc60a5c5}; + __m128i_result = (__m128i){0x0000266404046604, 0x0000204264602444}; + __m128i_out = __lsx_vandi_b((__m128)v2u64_op0, 0x66); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vandi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vandi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vandi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vandn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vandn.c new file mode 100644 index 0000000000..859d44fb0a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vandn.c @@ -0,0 +1,86 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000210011084, 0x000000017fff9000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001ffffff29, 0x00000049000000c0}; + __m128i_result = (__m128i){0x00000000ffffff29, 0x00000049000000c0}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x016700dc0176003a, 0x010f00000111fffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000010000, 0x0003000000010000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffff000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffff000, 0x8000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + __m128i_result = (__m128i){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe0004fffe0004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vandn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vandn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vandn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vandn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.c new file mode 100644 index 0000000000..96396600a1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.c @@ -0,0 +1,272 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff8fff8fff8fff8, 0xfff8fff8fff8fff8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4050000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x2028000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x0000000014155445, 0x0000000000000000}; + __m128i_result = (__m128i){0xe4c23ffb002a3a22, 0x33f5c2d7d9f5d800}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + v2u64_op1 = (v2u64){0x00000000000ffffe, 0x00000000000f000e}; + __m128i_result = (__m128i){0x000000000007ffff, 0x003fffff00070007}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000400028000}; + __m128i_result = (__m128i){0x0000000000000022, 0x000000020001c020}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000ff00, 0x08080807f5f5f5f8}; + __m128i_result = (__m128i){0x000000000000ff80, 0x04040403fafafafc}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001000010f8, 0x10f8000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000087c, 0x087c000000000000}; + __m128i_out = __lsx_vavg_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfedb27095b6bff95, 0x5641127843c0d41e}; + v2u64_op1 = (v2u64){0x0024d8f6a494006a, 0xa8beed87bc3f2be1}; + __m128i_result = (__m128i){0xff7fffffffffffff, 0xff7fffffffffffff}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00007fff, 0xffffffffffffffff}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0xffff80ff0010ff06}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0xedfaedfaedfaedfa}; + __m128i_result = (__m128i){0xc0000000bfff8000, 0xf6fd377cf705f680}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000002bfd9461, 0x3ff0000000007fff}; + v2u64_op1 = (v2u64){0x00000000ffffff00, 0x0000000000000f00}; + __m128i_result = (__m128i){0x0000000015fec9b0, 0x1ff800000000477f}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000006f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000037}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x003fffff00000000, 0x003fffff00000000}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000800000008000, 0x0000800000008000}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x34b8122ef4054bb3, 0xd6a09e662ab46b31}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1a5c0917fa02a5d9, 0xeb504f33155a3598}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + v2u64_op1 = (v2u64){0xfffffffefffff784, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff008ff820, 0x00bbfff7fffffff7}; + __m128i_out = __lsx_vavg_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001802041b0014, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000c01020d8009, 0x0000000000000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000201000000000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000200000000, 0x00000000ffff0000}; + __m128i_result = (__m128i){0x0001008100000005, 0x000000007fff8000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + v2u64_op1 = (v2u64){0x00000000fff7fc01, 0x0000000000000000}; + __m128i_result = (__m128i){0xff007e8a7ffc7e00, 0xfe00fe8980000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffff46000000ba, 0xfffffffe00000002}; + __m128i_result = (__m128i){0xffffffa30000005c, 0xffffffff00000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000007ffff, 0x0000000000070007}; + v2u64_op1 = (v2u64){0x0000000000000068, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000040033, 0x0000000000038003}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff000000000001, 0xffffffff0000ac26}; + __m128i_result = (__m128i){0x007f800000000000, 0xffffffff80005613}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000040000000, 0x0000000040000000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x3fc000005fc00000, 0x3fc000005fc00000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000020000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000010000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000200000001, 0x0000000200000000}; + __m128i_result = (__m128i){0x0001000100000000, 0x0000000100000000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffff0001fffe, 0x00000000fffe0001}; + __m128i_result = (__m128i){0xffffffff0000ffff, 0xffffffffffff0000}; + __m128i_out = __lsx_vavg_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.c new file mode 100644 index 0000000000..acfa110683 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.c @@ -0,0 +1,212 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0x7f7f7f7f7f7f7f7f}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0xfffffffffffffffe}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0x7f7f7f7f7f7f7f7f}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x37b951002d81a921, 0x0000100000001000}; + v2u64_op1 = (v2u64){0x000047404f4f040d, 0x000000400000004c}; + __m128i_result = (__m128i){0x1b5c4c203e685617, 0x0000082000000826}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + v2u64_op1 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + __m128i_result = (__m128i){0x00a975be00accf03, 0x00c2758000bccf42}; + __m128i_out = __lsx_vavg_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010000000000, 0x0100000001000100}; + v2u64_op1 = (v2u64){0xffffffffffff732a, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x807f807f7fff3995, 0x807f7fff807f807f}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000007f7f7f7f}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x353c8cc4b1ec5b09, 0x0101010101010101}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffff00000000ffff}; + __m128i_result = (__m128i){0x1a9e466258f62d84, 0x8080008000808080}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000ac, 0x0000000000000000}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000020, 0x9c9c9c9c00000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x4e4e4e4e00000000}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000868686868686, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1e1e1e1e1e1e1e1e, 0x1e1e1e1e1e1e1e1e}; + __m128i_result = (__m128i){0x0f0f525252525252, 0x0f0f0f0f0f0f0f0f}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + v2u64_op1 = (v2u64){0x00000000ffdfdc0d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0a753500950fa306, 0x000000000a752a55}; + __m128i_out = __lsx_vavg_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff00010000fff, 0xfffff00010000fff}; + v2u64_op1 = (v2u64){0xfffff00010000fff, 0xfffff00010000fff}; + __m128i_result = (__m128i){0xfffff00010000fff, 0xfffff00010000fff}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000002ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000017fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0101030100010001, 0x0101000100010001}; + __m128i_result = (__m128i){0x0080818000008000, 0x0080800000008000}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ed001a00580070, 0x0017004800c400f9}; + v2u64_op1 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + __m128i_result = (__m128i){0x0076800d802c0037, 0x800b7fe38062007b}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff76ffd8ffe6ffaa, 0xff80ffa2fff0ff74}; + v2u64_op1 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xdd9ff64ef9daeace, 0xe01ae8a3fc55dd23}; + __m128i_out = __lsx_vavg_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000007fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f80000000000000, 0x3f80000000000000}; + v2u64_op1 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x1fc07f8000007f80, 0x1fc0000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000e31d4cae8636, 0x0000000043cf26c7}; + __m128i_result = (__m128i){0x0000718ea657431b, 0x0000000021e79364}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0x7ff8000000000000, 0x7ff8000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00feff8000ff80ff, 0xffffff80ffff7e02}; + v2u64_op1 = (v2u64){0xf931fd04f832fe02, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x7d187e427c993f80, 0x80007fc000003f00}; + __m128i_out = __lsx_vavg_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavg-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.c new file mode 100644 index 0000000000..5ce84661e1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.c @@ -0,0 +1,206 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0040000000000000, 0x0040000000ff00ff}; + __m128i_result = (__m128i){0x0020c00000000000, 0x0020000000000000}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x800000005b4b1b18, 0xb9fe3640e4eb1b18}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + __m128i_result = (__m128i){0xc00000002e260e0c, 0xdcfe1b20f2f60e0c}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x111110ff11111141}; + v2u64_op1 = (v2u64){0x7bffffffffffffff, 0xfbffffffffffffff}; + __m128i_result = (__m128i){0x4608081808080810, 0x060808ff08080820}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000010}; + v2u64_op1 = (v2u64){0x000000000000fff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000008}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff80000000, 0x000000000000ac26}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000060000000000}; + __m128i_result = (__m128i){0x00000000c0000000, 0x000003000000d613}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffff2, 0xfffffffffffffff2}; + __m128i_out = __lsx_vavgr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000002a, 0x0000000000000073}; + v2u64_op1 = (v2u64){0x0000000100000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000015, 0x000000000000003a}; + __m128i_out = __lsx_vavgr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff8004000000000, 0x0000000000004000}; + __m128i_result = (__m128i){0xfffc002000000000, 0x0000000000002000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc002000000000, 0x0000000000002000}; + v2u64_op1 = (v2u64){0xfffc002000000000, 0x0000000000002000}; + __m128i_result = (__m128i){0xfffc002000000000, 0x0000000000002000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000ff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000007fff0018, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000003fff800c, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0280000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7500000075000000, 0x7500000075000000}; + __m128i_result = (__m128i){0x3bc000003a800000, 0x3a8000003a800000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007d1800007c99, 0xffff800000000000}; + v2u64_op1 = (v2u64){0x0a621b3ebe5e1c02, 0x0a0000001e000000}; + __m128i_result = (__m128i){0x05314c2bdf2f4c4e, 0x04ffc0000f000000}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000002000000000, 0x0000002000000000}; + __m128i_result = (__m128i){0x0000001000000000, 0x0000001000000001}; + __m128i_out = __lsx_vavgr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff80000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x3fc000003fc00000, 0x3fc000003fc00000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x3fffffffc0000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_result = (__m128i){0xff807f807f807f80, 0xff807f807f807f80}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000002}; + v2u64_op1 = (v2u64){0x0000000000280000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000140001, 0x0000000000000001}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff46, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0x00fe00fe00fe0045, 0x00fe00fe00fe00fe}; + __m128i_result = (__m128i){0x007f007f007effc6, 0x007f007f007f007e}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0xe4423f7b769f8ffe, 0x33f5c2d7d975d7fe}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff9dff9dff9dff9d, 0x0000000000000000}; + __m128i_result = (__m128i){0xffceffceffcf1fcb, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3bc000003a800000, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x00fe00fe7fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x1e5f007f5d400000, 0x1d4000001d400000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000800000000}; + __m128i_result = (__m128i){0x0000000000007f80, 0x0000000400000000}; + __m128i_out = __lsx_vavgr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.c new file mode 100644 index 0000000000..eab639bfd9 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.c @@ -0,0 +1,218 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + v2u64_op1 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128i_result = (__m128i){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4080808080808080, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x000000010000003f, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff00, 0x0000ffffffff0000}; + v2u64_op1 = (v2u64){0x1615141315141312, 0x1817161517161514}; + __m128i_result = (__m128i){0x8b8a8a898a8a8909, 0x0c0c8b8a8b8b0b0a}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003fff00003fff, 0x00003fff00003fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000208000002080, 0x0000208000002080}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffd60015, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x80808080806b000b, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + v2u64_op1 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xe8c7b756d76aa578, 0xc1bdceee242071db}; + __m128i_result = (__m128i){0xf463dbabebb5d2bc, 0xe0dee7779210b8ed}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff80000000000000, 0xff80000000000000}; + v2u64_op1 = (v2u64){0xff80000000000000, 0xff80000000000000}; + __m128i_result = (__m128i){0xff80000000000000, 0xff80000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000800000008}; + v2u64_op1 = (v2u64){0x000000002bfd9461, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000015ff4a31, 0x0000400400004004}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1b1c6cdfd57f5736, 0x2a7b7c9260f90ee2}; + __m128i_result = (__m128i){0x0d8e36706ac02b9b, 0x153e3e49307d0771}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2e3ab5266375e71b, 0xdd6156076967d8c9}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0x171d5a9531bb7390, 0x6eb12b0634b46c67}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000090900000998, 0x0000f50000000900}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000485000004cc, 0x00007a8000000480}; + __m128i_out = __lsx_vavgr_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffc00000000, 0x00003ff000000000}; + v2u64_op1 = (v2u64){0xfffc001fffffffff, 0x0000000000000001}; + __m128i_result = (__m128i){0x7ffe800e80000000, 0x00001ff800000001}; + __m128i_out = __lsx_vavgr_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff000001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f8000017fffca8b, 0x000000007fffa9ed}; + __m128i_out = __lsx_vavgr_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffdfffffff8, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7ffffffc, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0014ffe4ff76ffc4, 0x00000001fffeff98}; + v2u64_op1 = (v2u64){0x3131313131313131, 0x0000000000000000}; + __m128i_result = (__m128i){0x18a3188b9854187b, 0x000000017fff7fcc}; + __m128i_out = __lsx_vavgr_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001c88bf0, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x807fffff80800000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0002000000000007, 0x0006000000040000}; + __m128i_result = (__m128i){0x4040ffffc0400004, 0x8003000000020000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101000001000100, 0x0000010000010101}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x8080800000800080, 0x8000008000008080}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vavgr_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vavgr-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.c new file mode 100644 index 0000000000..2bf3691dfa --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.c @@ -0,0 +1,314 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd8248069ffe78077, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xd83c8081ffff808f, 0x85bd6b0e94d89998}; + __m128i_result = (__m128i){0xd82480697f678077, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000ffff00000000, 0x8000ffff00000000}; + v2u64_op1 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_result = (__m128i){0x0000fefe00000000, 0x0000fefe00000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000037}; + v2u64_op1 = (v2u64){0x0000000000001f0a, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000036}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfefa000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfefa000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x39d70e366f547977, 0x67b7cf643c9d636a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0002ffff00000000}; + __m128i_result = (__m128i){0x38d60e366e547876, 0x66b34f643c9c626a}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020207fff, 0x2020202020202020}; + v2u64_op1 = (v2u64){0x0000000000007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x2020202020207f7f, 0x2020202020202020}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x7ef8000000000000, 0x7ef8000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d37e80682a, 0x14ccc6320176a4d2}; + v2u64_op1 = (v2u64){0x000000007fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x685670d27e00682a, 0x14ccc6320076a4d2}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001000, 0x0000000000001000}; + v2u64_op1 = (v2u64){0x00001b4a00007808, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001000, 0x0000000000001000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010001000100, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000007fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001000100, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x5d7f5d007f6a007f}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000100000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x0001000100000000, 0x0000000100000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000077af9450, 0x00000000b81c8382}; + __m128i_result = (__m128i){0x00007efe7f7f8000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000e0000000e0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00e0000000e00000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000e0000000e0, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5ed032b06bde1ab6, 0x19df307a5d04acbb}; + v2u64_op1 = (v2u64){0x0080000000000000, 0x0080000000000000}; + __m128i_result = (__m128i){0x5ed032b06bde1ab6, 0x19de307a5d04acba}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x000000006597cc3d}; + v2u64_op1 = (v2u64){0x01010000fefe0101, 0x7505853d654185f5}; + __m128i_result = (__m128i){0x0000000000000001, 0x000000006595cc1d}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffe0000fffe0000, 0xfffe0000fffe0000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80000000fff7fc01, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000080000000, 0x0000000100000000}; + __m128i_result = (__m128i){0x80000000fff6fc00, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffff800, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000fffef800, 0x00000000fffefffe}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xf0bd80bd80bd8000, 0x1ffffffff8001000}; + __m128i_result = (__m128i){0xdfffdfffdffffffe, 0x7fff7ffffffefffe}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000fffefffe, 0x00000000fffefffe}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffefffefffefffe, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0018001800180018, 0x0018001800180018}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000001000100, 0x0000000001000100}; + __m128i_result = (__m128i){0xfffffffefffffffe, 0xfffffffefffffffe}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4101010141010100}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x4101010141010100}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x161c0c363c200824, 0x23b57fa16d39f7c8}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000000010000, 0x000100000001007c}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000077f97, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffeff7f0000, 0xfffffffefffffffe}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000000000000, 0x0001000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff8004000000000, 0x0000000000004000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x207fffff22bd04fb, 0x207fffff22bd04fb}; + v2u64_op1 = (v2u64){0x0001000002000000, 0x0001000002000000}; + __m128i_result = (__m128i){0x207fffff22bd04fa, 0x207fffff22bd04fa}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0000000000000014}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000014}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000020, 0x000000000667ae56}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000000004ff}; + __m128i_result = (__m128i){0x0000000000000020, 0x000000000667ae56}; + __m128i_out = __lsx_vbitclr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.c new file mode 100644 index 0000000000..4b194824cc --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.c @@ -0,0 +1,205 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + __m128i_result = (__m128i){0x0000d6eefefc0498, 0x7404443064403aec}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff807f807f807f80, 0xff807f807f807f80}; + __m128i_result = (__m128i){0xfb807b807b807b80, 0xfb807b807b807b80}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200000, 0x0000000000200008}; + __m128i_result = (__m128i){0x0000000000200000, 0x0000000000200008}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000001, 0x0000000200000000}; + __m128i_result = (__m128i){0x0002000200000001, 0x0000000200000000}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf}; + __m128i_out = __lsx_vbitclri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200000, 0x004200a000000000}; + __m128i_result = (__m128i){0x004200a000200000, 0x004200a000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0xbfffbfffbfffbffe}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9941d1d5f4ba9d08, 0x0000000000000000}; + __m128i_result = (__m128i){0x9941d155f43a9d08, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080638063, 0x0000000000000000}; + __m128i_result = (__m128i){0x8080808080638063, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000400040004, 0x0004000400040004}; + __m128i_result = (__m128i){0x0004000400040004, 0x0004000400040004}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000efffffff}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc2cf2471e9b7d7a4, 0x0000000000002ff5}; + __m128i_result = (__m128i){0xc2cf2471e9b7d7a4, 0x00000000000027f5}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x1000100010001000, 0x1000100010001000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffe3d7, 0xffffffffffffda6f}; + __m128i_result = (__m128i){0xfefffffffeffe3d7, 0xfefffffffeffda6f}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000800000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000201000000000b, 0x0000000b0000000b}; + __m128i_result = (__m128i){0x000201000000000b, 0x0000000b0000000b}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x161c0c363c200826, 0x64b680a2ae3af8ca}; + __m128i_result = (__m128i){0x161c0c363c200824, 0x64b680a2ae3af8c8}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfbffffffffffffff, 0xfbffffffffffffff}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + __m128i_result = (__m128i){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitclri_d((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitclri.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.c new file mode 100644 index 0000000000..492f27ce1b --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.c @@ -0,0 +1,278 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x373a13323b4cdbc1, 0x1b71a083b3dec3cd}; + __m128i_result = (__m128i){0x8004080408100802, 0x0802010808400820}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000008, 0x0000000501000002}; + v2u64_op1 = (v2u64){0x0001000100010000, 0x0000000000040100}; + __m128i_result = (__m128i){0x0103010301020109, 0x0101010400100203}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffbe6ed563, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0x9d519ee8d2d84f1d, 0xd0b1ffffffffffff}; + __m128i_result = (__m128i){0xdffdbffeba6f5543, 0xfefd7f7f7f7f7f7e}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x7da9b23a624082fd}; + __m128i_result = (__m128i){0x0101010180800101, 0x2002040404010420}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x040004000400040d, 0x0400040004000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x050105010501050c, 0x0501050105010501}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0040000000400000, 0x0040000000400000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0141010101410101, 0x0141010101410101}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe01fe01fe01fe01, 0xfe01fe01fe01fe01}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0040004000400040, 0x0040004000400040}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000001021, 0x00d3012acc56f9bb}; + __m128i_result = (__m128i){0x0101010101010102, 0x0108020410400208}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff0000ff86, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x010101fe0101fe87, 0x0101010101010101}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x343d8dc5b0ed5a08, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x353c8cc4b1ec5b09, 0x0101010101010101}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001ffff0001ffff, 0x0001ffff0101ffff}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0x0103fefd0103fefd, 0x0103fefd0303fefd}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000004e06b0890, 0x00000001ce28f9c0}; + __m128i_result = (__m128i){0xfefefeeffef7fefe, 0xfefefefdbffefdfe}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff1aff6d02834d70, 0xff1affff01001fe0}; + v2u64_op1 = (v2u64){0x0000000000000034, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe1bfe6c03824c60, 0xfe1bfefe00011ee1}; + __m128i_out = __lsx_vbitrev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x8000800080008000, 0x8000800080008000}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffe0000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001ffff0001fffe, 0x0001000100010001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x000100010001fffe, 0x0001000100010001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000e60, 0x00000021ffffffdf}; + v2u64_op1 = (v2u64){0x1ff85ffe2ae5d973, 0x0000000000000000}; + __m128i_result = (__m128i){0x0100400100200e68, 0x00010020fffeffde}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ffffff00, 0x0037ffc8d7ff2800}; + v2u64_op1 = (v2u64){0x00fffe00fffffe00, 0x0038d800ff000000}; + __m128i_result = (__m128i){0x7f00ff017fffff01, 0x0137ffc9d7fe2801}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000200000002000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001200100012001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010002}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffefffefffefffe, 0xfffefffefffefffe}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0x003ffffe00800000, 0x0000000000000001}; + __m128i_result = (__m128i){0x7f804000ff810001, 0xff810001ff810002}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41945926d8000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00007f7f00107f7f, 0x00001e5410082727}; + __m128i_result = (__m128i){0x4195d926d8018000, 0x0001001001000080}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f8100017f810001, 0x7f8100017f810001}; + __m128i_out = __lsx_vbitrev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000003f803f4, 0x0e7ffffc01fffffc}; + __m128i_result = (__m128i){0x0000000100100000, 0x1000000010000000}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffefffffffe, 0xfffffffefffffffe}; + v2u64_op1 = (v2u64){0x0000007f00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7ffffffeffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x161d0c363c200826, 0x65b780a3ae3bf8cb}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x161d0c373c200827, 0x65b780a2ae3bf8ca}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000003bfb4000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000ff00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffe7fffffff, 0xfffffffefffffffe}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x8000000010000000, 0x8000000080000000}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffdfffcfffdfffc, 0xfffdfffcfffdfffc}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x17483c07141b5971, 0x6a5d5b056f2f4978}; + __m128i_result = (__m128i){0x0000008000020000, 0x0000002001000000}; + __m128i_out = __lsx_vbitrev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitrev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitrev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x545501550001113a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xd45501550001113a, 0x8000000000000000}; + __m128i_out = __lsx_vbitrev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrev.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.c new file mode 100644 index 0000000000..34d39d3556 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.c @@ -0,0 +1,245 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0202020202020202, 0x0202020202020202}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe86ce7eb5e9ce950, 0x0000000000000000}; + __m128i_result = (__m128i){0xec68e3ef5a98ed54, 0x0404040404040404}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xefefefefefefefef, 0x1010101010101010}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4040404040404040, 0x4040404040404040}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000010000000000}; + __m128i_result = (__m128i){0x0404050404040404, 0x0404050404040404}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xbfbfbfbfbfbfbfbf, 0xbfbfbfbfbfbfbfbf}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x181b2541ffffffff, 0x441ba9fcffffffff}; + __m128i_result = (__m128i){0x1c1f2145fbfbfbfb, 0x401fadf8fbfbfbfb}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefeeffef7feff, 0xfefefefdbffefdfe}; + __m128i_result = (__m128i){0xfcfcfcedfcf5fcfd, 0xfcfcfcffbdfcfffc}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + __m128i_result = (__m128i){0x01009aa4a301084b, 0x00197f26cb658837}; + __m128i_out = __lsx_vbitrevi_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4000400040004000, 0x4000400040004000}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001008100000005, 0x000000007fff8000}; + __m128i_result = (__m128i){0x0801088108000805, 0x0800080077ff8800}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0400040004000400, 0x0400040004000400}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff02, 0x0000000000000000}; + __m128i_result = (__m128i){0x04000400fbfffb02, 0x0400040004000400}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x040004000400040d, 0x0400040004000400}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0040004000400040, 0x0040004000400040}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1918171615141312, 0x21201f1e1d1c1b1a}; + __m128i_result = (__m128i){0x3918371635143312, 0x01203f1e3d1c3b1a}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x61608654a2d4f6da, 0x7ff0000000000000}; + __m128i_result = (__m128i){0xe160065422d476da, 0xfff0800080008000}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + __m128i_result = (__m128i){0x77c0401040004000, 0x77c0401040004000}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1000100010001000, 0x1000100010001000}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x2000200020002000, 0x2000200020002000}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x34b8122ef4054bb3, 0xd6a09e662ab46b31}; + __m128i_result = (__m128i){0x34f8126ef4454bf3, 0xd6e09e262af46b71}; + __m128i_out = __lsx_vbitrevi_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003004, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000400000007004, 0x0000400000004000}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000400000204010, 0x0000400000004000}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010000000100000, 0x0010000000100000}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77c03fd640003fc6, 0x77c0404a4000403a}; + __m128i_result = (__m128i){0x75c03fd642003fc6, 0x75c0404a4200403a}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000100fffffeff, 0xfffffefffffffeff}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffefff00001000, 0xffffefff00001000}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010000000100, 0x0000010000000100}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002580f01, 0x0000000000555889}; + __m128i_result = (__m128i){0x0010000002480f01, 0x0010000000455889}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000007fffffff}; + __m128i_result = (__m128i){0x4000000040000000, 0x400000003fffffff}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffff7fffffff7f, 0xffffff7fffffff7f}; + __m128i_out = __lsx_vbitrevi_w((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000004f804f80, 0x000000004f804f81}; + __m128i_result = (__m128i){0x000000004fc04f80, 0x000000004fc04f81}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0808080808280808, 0x0808080808280808}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000040000000, 0x0000000040000000}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000020000, 0x0000000000020000}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000000000100}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000200000000, 0x0000000200000000}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000002000, 0x0000000000002000}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000200000, 0x0000000000200008}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020fbf00000fbf, 0x00060fbf00040fbf}; + __m128i_result = (__m128i){0x00020fbf02000fbf, 0x00060fbf02040fbf}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000c6c58000c6b2, 0x0000c6c60000c6c6}; + __m128i_result = (__m128i){0x8000c6c78000c6b2, 0x0000c6c40000c6c6}; + __m128i_out = __lsx_vbitrevi_d((__m128)v2u64_op0, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitrevi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.c new file mode 100644 index 0000000000..070de62610 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.c @@ -0,0 +1,76 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0505000005050505, 0x0000000005050000}; + v2u64_op1 = (v2u64){0x0000001400140014, 0x000d02540000007e}; + v2u64_op2 = (v2u64){0x03574e38e496cbc9, 0x0505050505050505}; + __m128i_result = (__m128i){0x0400001001150404, 0x0005000400000004}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080001300000013, 0x0080001300000013}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0080001300000013, 0x0080001300000013}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x43d3e0000013e000, 0x43d3e0000013e000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe0001fffe0001, 0xfffe0001fffe0001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xfffe0001fffe0001, 0xfffe0001fffe0001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + v2u64_op1 = (v2u64){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + v2u64_op2 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x1014120210280240, 0x62cbf84c02cbac00}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff59, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff59, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitsel_v((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitsel.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.c new file mode 100644 index 0000000000..5724cd56c5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.c @@ -0,0 +1,62 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x6664666466646664, 0x6664666466646664}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x66); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff7, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + __m128i_result = (__m128i){0x5d5d5d5d5d5d5d55, 0xffffffff00000001}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000000004}; + __m128i_result = (__m128i){0x5959595959595959, 0x5959595959595959}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x59); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfffd000000000000}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xaa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0b4c600000000002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0004280808080808, 0x0808080808080808}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007770ffff9411, 0x0000004000000040}; + v2u64_op1 = (v2u64){0x00007770ffff941d, 0x000000400000004c}; + __m128i_result = (__m128i){0x000047404f4f040d, 0x000000400000004c}; + __m128i_out = __lsx_vbitseli_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseli.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.c new file mode 100644 index 0000000000..9393f25472 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.c @@ -0,0 +1,254 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffffffe00000004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff01010105, 0x0101010101010101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001c00ffffe}; + __m128i_result = (__m128i){0x0101010280808040, 0x0101010201808040}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + v2u64_op1 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0909090909090909, 0x0909090909090909}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfefeff04fffd0004, 0xfefbff06fffa0004}; + __m128i_result = (__m128i){0x4040801080200110, 0x4008804080040110}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x8101010181010101, 0x8101010181010101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000020000, 0x0000000000020000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101030101, 0x0101010101030101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000100}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00feff8000ff80ff, 0xffffff80ffff7e02}; + v2u64_op1 = (v2u64){0x0280000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x04ffff8101ff81ff, 0xffffff81ffff7f03}; + __m128i_out = __lsx_vbitset_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0983e2dbf235ed87, 0xf51df8dbd6050189}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000010a000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000104000800, 0x0001000100010001}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffc3639d96, 0xffffffff994cb09c}; + v2u64_op1 = (v2u64){0x34632935195a123c, 0x20de27761210386d}; + __m128i_result = (__m128i){0xffffffffc7639d96, 0xffffffff994db09c}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0003000100010001, 0x0007000000050000}; + __m128i_result = (__m128i){0x0008000200020002, 0x0080000100200001}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x45c0000044800000, 0x4480000044800000}; + v2u64_op1 = (v2u64){0x00fe00fe7fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x45c04000c4808000, 0x4481000144810001}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3bc000003a800000, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x00fe00fe7fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x7bc04000ba808000, 0x3a8100013a810001}; + __m128i_out = __lsx_vbitset_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffffe000, 0xffffe000ffffe000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffe001ffffe001, 0xffffe001ffffe001}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000038335ca2777, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000800800000, 0x0000000100000001}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + v2u64_op1 = (v2u64){0x5d5d5d5d5d5d5d55, 0xffffffff00000001}; + __m128i_result = (__m128i){0xfe00fcfffe21fd01, 0xfc01fcfefc02fdf7}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000408, 0x0000000897957687}; + __m128i_result = (__m128i){0x0000000100000100, 0x0000010000000080}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffe0001fffe0001, 0xfffe0001fffe0001}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000081a83bea, 0x00000000545cab1d}; + v2u64_op1 = (v2u64){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + __m128i_result = (__m128i){0x2000000081a83fea, 0x00400000547cab1d}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000040033, 0x0000000000038003}; + __m128i_result = (__m128i){0x0000000100080000, 0x0000000100000008}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x01500178010000f8, 0x00a600e000a600e0}; + __m128i_result = (__m128i){0x0100000001000000, 0x0000000100000001}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00004a1e00004a1e, 0x0000000000000008}; + __m128i_result = (__m128i){0x4000000040000000, 0x0000000100000100}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000c90000011197, 0x0000cecd00004657}; + __m128i_result = (__m128i){0x0000000100800000, 0x0000200000800000}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x7f8000017f800001, 0x7f8000017f800001}; + __m128i_out = __lsx_vbitset_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fff7fc01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x80000000fff7fc01, 0x0000000000000001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x3f8000003f800001, 0x3f8000003f800001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5779108fdedda7e4, 0xd78cfd70b5f65d76}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x5779108fdedda7e5, 0xd78cfd70b5f65d77}; + __m128i_out = __lsx_vbitset_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitset.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.c new file mode 100644 index 0000000000..87c8182345 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.c @@ -0,0 +1,205 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_result = (__m128i){0x0101010101010101, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x2020202020207fff, 0x2020202020202020}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xc404040404040404, 0x0404040404040404}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00d2701294027112, 0x0002711250a27112}; + __m128i_result = (__m128i){0x08da781a9c0a791a, 0x080a791a58aa791a}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0303030303030303, 0x0303030303030303}; + __m128i_result = (__m128i){0x1313131313131313, 0x1313131313131313}; + __m128i_out = __lsx_vbitseti_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0020002000200020, 0x0020002000200020}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000c400, 0x0000000000000000}; + __m128i_result = (__m128i){0x001000100010c410, 0x0010001000100010}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x0040004017fda869, 0x0040004000400040}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1000100010001000, 0x1000100010001000}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0800080008000800, 0x0800080008000800}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x40f3fa8000800080, 0x3ff0008000800080}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0100010001000101, 0x0100010001000101}; + __m128i_out = __lsx_vbitseti_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3b2c8aefd44be966, 0x2e2b34ca59fa4c88}; + __m128i_result = (__m128i){0x3b2c8aefd44be966, 0x3e2b34ca59fa4c88}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000000010000, 0x0001000000010000}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0004000000040000, 0x0004000000040000}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000006, 0x0000000000000000}; + __m128i_result = (__m128i){0x8000000080000006, 0x8000000080000000}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x000000030000003f, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe5e5e5e5e4e4e46d, 0xe5e5e5e5e5e5e5e5}; + __m128i_result = (__m128i){0xe5e5e5e5e4e4e46d, 0xe5e5e5e5e5e5e5e5}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0100000001000000, 0x0100000001000000}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000008000000080, 0x0000008000000080}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0xfff0008000000080, 0xfff0008000000080}; + __m128i_out = __lsx_vbitseti_w((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000ff00ff}; + __m128i_result = (__m128i){0x0040000000000000, 0x0040000000ff00ff}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8024d8f6a494afcb, 0x54beed87bc3f2be1}; + __m128i_result = (__m128i){0x8064d8f6a494afcb, 0x54feed87bc3f2be1}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x800000ff000000ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x800000ff080000ff}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + __m128i_result = (__m128i){0x0982eadaf234ed87, 0xf51cf8dad6040188}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x2b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0002000000000000, 0x0002000000000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000080000000000, 0x0000080000000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x2b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000100000000}; + __m128i_result = (__m128i){0x0000000900013fa0, 0x0000000900000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x23); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000040000000000, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x2a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000040804000, 0x0000000040804000}; + __m128i_result = (__m128i){0x0000000040a04000, 0x0000000040a04000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f81e3779b97f4a8, 0xffffffff00000000}; + __m128i_result = (__m128i){0x1f81e3779b97f4a8, 0xffffffff02000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000010000000, 0x0000000010000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000000000000, 0x0001000000000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000000, 0x0000002000000000}; + __m128i_out = __lsx_vbitseti_d((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbitseti.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.c new file mode 100644 index 0000000000..fea5668f57 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.c @@ -0,0 +1,65 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00ffffff000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffff000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_result = (__m128i){0xff00000000000000, 0xff00ff00ff00ff00}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0008000000000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0a00000000000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0141010101410101, 0x0141010101410101}; + __m128i_result = (__m128i){0x0000000000000000, 0x4101010141010100}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000001580000}; + __m128i_out = __lsx_vbsll_v((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbsll.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.c b/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.c new file mode 100644 index 0000000000..7ae1b552b5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.c @@ -0,0 +1,45 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0001000100000004, 0x0000000401000001}; + __m128i_result = (__m128i){0x0001000100010000, 0x0000000000040100}; + __m128i_out = __lsx_vbsrl_v((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003fffffff, 0x000000003fffffff}; + __m128i_result = (__m128i){0x003fffffff000000, 0x0000000000000000}; + __m128i_out = __lsx_vbsrl_v((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100010001, 0x0005fe0300010101}; + __m128i_result = (__m128i){0xfe03000101010000, 0x0000000000000005}; + __m128i_out = __lsx_vbsrl_v((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vbsrl_v((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0x0000000000d3259a, 0x0000000000000000}; + __m128i_out = __lsx_vbsrl_v((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vbsrl.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vclo.c b/SingleSource/UnitTests/Vector/LSX/lsx-vclo.c new file mode 100644 index 0000000000..c6fe87d08b --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vclo.c @@ -0,0 +1,195 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000005555555554, 0x0000005555555554}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x25d666472b01d18d, 0xe2ecd48adedc7c82}; + __m128i_result = (__m128i){0x0002000000000201, 0x0303020102020001}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0x00000000fefefe6a}; + __m128i_result = (__m128i){0x0000000002010202, 0x0000000007070700}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001edde, 0x00000000007e8a60}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000001}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0010001000100010}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x0000001000000000, 0x0000001000000000}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0010001000100010}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000008, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3d3d3d3d3d3d3d3d, 0x3d3d3d3d3d3d3d3d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcd1de80217374041, 0x05d0ae6002e8748e}; + __m128i_result = (__m128i){0x0000000200000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000aaaa}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc000ffffc005, 0xffffe500ffffc085}; + __m128i_result = (__m128i){0x0000001200000012, 0x0000001300000012}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0xffc0ff80ff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000a00000009}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f7f017f9d8726d3, 0x413e276583869d79}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc090380000000000, 0xfffffffffffbfffc}; + __m128i_result = (__m128i){0x0000000200000000, 0x000000200000000d}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff4, 0xfffffffffffffff4}; + __m128i_result = (__m128i){0x000000200000001c, 0x000000200000001c}; + __m128i_out = __lsx_vclo_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000001fffff59, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fec20704, 0x0001000100010012}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclo_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vclo.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vclo.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vclo.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vclz.c b/SingleSource/UnitTests/Vector/LSX/lsx-vclz.c new file mode 100644 index 0000000000..4c70db1fe1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vclz.c @@ -0,0 +1,195 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x000b000b010a000b, 0x7f7f000b000b000b}; + __m128i_result = (__m128i){0x0804080407040804, 0x0101080408040804}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0100000008080808}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7861145d9241a14a, 0x687a8373f249bc44}; + __m128i_result = (__m128i){0x0101030100010001, 0x0101000100010001}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080700000000}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x0808080808080805, 0x0808080808080805}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vclz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010000800100008, 0x0010001000100010}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x02693fe0e7beb077, 0x000000001fc1a568}; + __m128i_result = (__m128i){0x0006000200000000, 0x0010001000030000}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010000fe01, 0x000100010000fe7c}; + __m128i_result = (__m128i){0x000f000f00100000, 0x000f000f00100000}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff003000ff00a0, 0x00ff000100ff00fe}; + __m128i_result = (__m128i){0x0008000a00080008, 0x0008000f00080008}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe813f00fe813f00, 0xfe813f00fe813f00}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0010001000000000, 0x0010001000000000}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vclz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000f0000000f, 0x0000000f0000000f}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000008000001e, 0x000000000000001f}; + __m128i_result = (__m128i){0x0000002000000000, 0x000000200000001b}; + __m128i_out = __lsx_vclz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf0bd80bd80bd8000, 0x1ffffffff8001000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000003}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + __m128i_result = (__m128i){0x0000000000000039, 0x0000000000000039}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000bffffffe}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000020}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0x00000c0c00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000014}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vclz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vclz.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vclz.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vclz.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.c new file mode 100644 index 0000000000..c25270bf2a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.c @@ -0,0 +1,206 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffb4ff, 0xffffffffffffb4ff}; + __m128i_result = (__m128i){0xc00d060000000000, 0xc110000000000000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010101010101, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101000101010001, 0x0000000000020000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffff00ffffff00ff, 0x0000000000fe0000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010100000000, 0x0101010100000000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffe79ffffba5f, 0xffff9727ffff9727}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x01010287010146a1, 0x010169d9010169d9}; + __m128i_out = __lsx_vdiv_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000408, 0x0000000897957687}; + v2u64_op1 = (v2u64){0x8001000184000be0, 0x80010001b57fc565}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000080001fffe}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc1000082b0fb585b, 0xffffffff9cf0d77b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff000000ff, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x33f5c2d7d975d7fe}; + __m128i_result = (__m128i){0x0000ff010000ff01, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + v2u64_op1 = (v2u64){0x41f8e08016161198, 0x6363636363abdf16}; + __m128i_result = (__m128i){0x0000000000030000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffc00000000, 0x00003ff000000000}; + v2u64_op1 = (v2u64){0x7ffe800e80000000, 0x00001ff800000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000200000000}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6a1a3fbb3c90260e, 0x195f307a5d04acbb}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x95e5c045c36fd9f2, 0xe6a0cf86a2fb5345}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000001}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010000000000001, 0x000fffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa2e3a36463636363, 0xa2e3a36363636363}; + v2u64_op1 = (v2u64){0x0000000700000007, 0x7f80000000000007}; + __m128i_result = (__m128i){0xf2b2ce330e32c50e, 0x000000000e32c50e}; + __m128i_out = __lsx_vdiv_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000001, 0xffffffff00000001}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + v2u64_op1 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x8000000080000000, 0x8000000080000000}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5237c1bac9eadf55, 0xe93d0bd19ff0c170}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_result = (__m128i){0x00000001084314a6, 0x00000001084314a6}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000ffef0010000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0101000001000100, 0x0000010000010101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4280000042800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xbd7fffffbd800000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000000, 0x0000002000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000000004ff}; + __m128i_result = (__m128i){0x0000000000000020, 0x000000000667ae56}; + __m128i_out = __lsx_vdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.c new file mode 100644 index 0000000000..3e82397554 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.c @@ -0,0 +1,176 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xffffffefffffffef, 0xffffffefffffffef}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe3e3e3e3e3e3e3e3, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe3e3e3e3e3e3e3e3, 0xe3e3e3e3e3e3e3e3}; + __m128i_result = (__m128i){0x0101010101010101, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010101010101, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000007, 0x0006000000040000}; + v2u64_op1 = (v2u64){0x6eee282828282829, 0x31b1777777777776}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010100000101, 0x0000010100000101}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe6004c5f64284224, 0x0effeffefdffa1e0}; + v2u64_op1 = (v2u64){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001000000010000}; + __m128i_out = __lsx_vdiv_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000002a, 0x0000000000000073}; + v2u64_op1 = (v2u64){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000014bf000019da, 0x000003f200001e01}; + v2u64_op1 = (v2u64){0x7c3650c5f79a61a3, 0x9c9c99aed5b88fcf}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0002000200020002}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080808080800008, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffd700, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000001}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffbfff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0080006b0000000b, 0x0080008000800080}; + __m128i_result = (__m128i){0x000001ff1745745c, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x14ea6a002a406a00, 0xffffffff14eb54ab}; + v2u64_op1 = (v2u64){0x0a7535006af05cf9, 0xffff80008a7555aa}; + __m128i_result = (__m128i){0x0000000200000000, 0x0000000100000000}; + __m128i_out = __lsx_vdiv_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0141010101410101, 0x0141010101410101}; + v2u64_op1 = (v2u64){0xfebffefffebffeff, 0xfebffefffebffeff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x171f0a1f6376441f, 0x6363797c63996399}; + v2u64_op1 = (v2u64){0x171f0a1f6376441f, 0x6363797c63996399}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003be14000, 0x0000000036de0000}; + v2u64_op1 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + __m128i_result = (__m128i){0x000000000001edde, 0x00000000007e8a60}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000e41b, 0x0000000015d926c7}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77c03fd640003fc6, 0x77c0404a4000403a}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffc0001fffc, 0x0042003e0042002f}; + v2u64_op1 = (v2u64){0x0001fffc0001fffc, 0x0042003e0042002f}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fd165486, 0x00000000feff2356}; + v2u64_op1 = (v2u64){0x0000000000000007, 0x0000000000000007}; + __m128i_result = (__m128i){0x000000002427c2ee, 0x00000000246d9755}; + __m128i_out = __lsx_vdiv_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vdiv-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.c new file mode 100644 index 0000000000..9c74f7385f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.c @@ -0,0 +1,250 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x007fffff00000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000f909, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4040000041410101, 0x1010111105050000}; + __m128i_result = (__m128i){0x0005000500000000, 0x0010001000110011}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000003e2}; + __m128i_result = (__m128i){0x000000000003ffe2, 0x0000000000000000}; + __m128i_out = __lsx_vexth_h_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00003ff000000000}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03c0038000000380, 0x03c0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000003c000000000}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x800000005b4b1b18, 0xb9fe3640e4eb1b18}; + __m128i_result = (__m128i){0xffffe4eb00001b18, 0xffffb9fe00003640}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfec00130014, 0x370bdfec00130014}; + __m128i_result = (__m128i){0x0000001300000014, 0x0000370bffffdfec}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe5c1a185c48004c5, 0xe500c085c000c005}; + __m128i_result = (__m128i){0xffffc000ffffc005, 0xffffe500ffffc085}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_w_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_d_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x63635c9e63692363, 0x5c9c9c9ce3636363}; + __m128i_result = (__m128i){0xffffffffe3636363, 0x000000005c9c9c9c}; + __m128i_out = __lsx_vexth_d_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x63b2ac27aa076aeb}; + __m128i_result = (__m128i){0xffffffffaa076aeb, 0x0000000063b2ac27}; + __m128i_out = __lsx_vexth_d_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x002a001a001a000b}; + __m128i_result = (__m128i){0x00000000001a000b, 0x00000000002a001a}; + __m128i_out = __lsx_vexth_d_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x012927ffff272800, 0x0028280000000000}; + __m128i_result = (__m128i){0x0028280000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff0000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x000000ff000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000020000020, 0x0000000020000020}; + __m128i_result = (__m128i){0x0000000020000020, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000fff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0xfffffffffffffffc, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000080}; + __m128i_result = (__m128i){0x0000000000000080, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0x3a8000003a800000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.c new file mode 100644 index 0000000000..2e760121ee --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.c @@ -0,0 +1,135 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x004f0080004f0080, 0x004f0080004f0080}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff007f00000000, 0xffff007f00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00ff00ff0000007f}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffa, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x002cffacffacffab, 0x007fffffffffffff}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000007f00ff00ff}; + __m128i_out = __lsx_vexth_hu_bu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000082020201}; + __m128i_result = (__m128i){0x0000820200000201, 0x0000000000000000}; + __m128i_out = __lsx_vexth_wu_hu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fec20704, 0x0001000100010012}; + __m128i_result = (__m128i){0x0000000100000012, 0x0000000100000001}; + __m128i_out = __lsx_vexth_wu_hu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vexth_du_wu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_du_wu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_du_wu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001000100, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_du_wu((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x0000000001000001, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000b5207f80, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fff7fc01, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000001fc00000000, 0x0002000000020000}; + __m128i_result = (__m128i){0x0002000000020000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080800000000, 0x00000b4a00008808}; + __m128i_result = (__m128i){0x00000b4a00008808, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bc2000007e10, 0x0000400080003fff}; + __m128i_result = (__m128i){0x0000400080003fff, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vexth_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vexth-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.c new file mode 100644 index 0000000000..c1a0496665 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.c @@ -0,0 +1,65 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff0cff78ff96ff14, 0x0000000000170014}; + __m128i_result = (__m128i){0xff0cff78ff96ff14, 0xffffffffffffffff}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc000ffffc005, 0xffffe500ffffc085}; + __m128i_result = (__m128i){0xffffc000ffffc005, 0xffffffffffffffff}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3131313131313131, 0x3131313131313131}; + __m128i_result = (__m128i){0x3131313131313131, 0x0000000000000000}; + __m128i_out = __lsx_vextl_q_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.c new file mode 100644 index 0000000000..5d46376712 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.c @@ -0,0 +1,65 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000b6fffff8095, 0x0000101fffff8b68}; + __m128i_result = (__m128i){0x00000b6fffff8095, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000104000800, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000104000800, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010000fe01, 0x000100010000fe7c}; + __m128i_result = (__m128i){0x000100010000fe01, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0xc8847ef6ed3f2000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x33f5c2d7d975d7fe}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x046a09ec009c0000, 0x0000000000000d82}; + __m128i_result = (__m128i){0x046a09ec009c0000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextl_qu_du((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextl-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.c b/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.c new file mode 100644 index 0000000000..0c0999f39b --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.c @@ -0,0 +1,326 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ffffffeffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4080808080808080, 0x0000000000000000}; + __m128i_result = (__m128i){0x7ffffffeffffffff, 0xff80ffffffffffff}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9f4fcfcfcf800000, 0x004fcfcfd01f9f9f}; + v2u64_op1 = (v2u64){0x9f4fcfcfcf800000, 0x004fcfcfd01f9f9f}; + __m128i_result = (__m128i){0x9f4fcfcfcf800000, 0x004f1fcfd01f9f9f}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xda); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x171f0a1f6376441f, 0x6363797c63996399}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x171f0a1f6376441f, 0x6363797c63990099}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x94); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000a092444, 0xffffffffbd994889}; + __m128i_result = (__m128i){0x0000890000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x58); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff000001ffff9515, 0x00000000ffff53d9}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x67); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000101010001}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xeef8227b596117b1, 0x75b043c4d17db125}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0xeef8227b4f8017b1, 0x75b043c4d17db125}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000de32400, 0x0000000000000000}; + __m128i_result = (__m128i){0x027c027c000027c0, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x77); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x35bb8d32b2625c00, 0x01ef013f01e701f8}; + __m128i_result = (__m128i){0x0000000000000000, 0x00008d3200000000}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xea); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe7e5dabf00010001, 0xbbe5560400010001}; + v2u64_op1 = (v2u64){0xe7e5dabf00010001, 0xbbe5560400010001}; + __m128i_result = (__m128i){0xe7e5dabf00010001, 0xe7e5560400010001}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000014155445, 0xfffffffffc606ec5}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x76); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x56); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe519ab7e71e33848, 0x01533b5e7489ae24}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffab7e71e33848, 0x01533b5e7489ae24}; + __m128i_out = __lsx_vextrins_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xbc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + __m128i_result = (__m128i){0x0000ffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x92); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0200020002000200, 0x0200020002000200}; + __m128i_result = (__m128i){0xffffffff02000200, 0xffffffffffffffff}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x342caf9be55700b5, 0x0c03e17edd781b11}; + v2u64_op1 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + __m128i_result = (__m128i){0x342caf9bffff1fff, 0x0c03e17edd781b11}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xcc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0xfffffffffefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000c2bac2c2, 0x00000000fefefe6a}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op1 = (v2u64){0x0000000a00000009, 0x0000000a0000000a}; + __m128i_result = (__m128i){0x000a000a000a000a, 0x000a000a0000000a}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xaf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff80000001}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x67); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x5237c1bac9eadf55, 0xe93d0bd19ff0c170}; + __m128i_result = (__m128i){0x0000000000000000, 0x5237c1baffffffff}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x71); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000002}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x24); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc1fc7941bc7e00ff, 0xffff760386bdae46}; + __m128i_result = (__m128i){0x00000000ffff7603, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff2356fe165486, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0xffff2356fe165486, 0x0000003b0000ffff}; + __m128i_out = __lsx_vextrins_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x70); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000063636363, 0x00000000a16316b0}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x16161616a16316b0}; + __m128i_result = (__m128i){0x16161616a16316b0, 0x00000000a16316b0}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_result = (__m128i){0xfffc45a851c40c18, 0xffffffffffffffff}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x48); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xcc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000005d5d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x41); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0bd80bd80bd80000, 0x0bd80bd80bdfffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0bd80bd80bd80000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x41dfbe1f41e0ffff}; + v2u64_op1 = (v2u64){0x0000ffc100010001, 0xffc2ffe000000000}; + __m128i_result = (__m128i){0x0000ffc100010001, 0x41dfbe1f41e0ffff}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xec); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000fea0000fffe}; + v2u64_op1 = (v2u64){0xff0cff78ff96ff14, 0xffffff8607db959f}; + __m128i_result = (__m128i){0xff0cff78ff96ff14, 0x00000fea0000fffe}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4040ffffc0400004, 0x8003000000020000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x8003000000020000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x64); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x74); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x82); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x1748c4f9ed1a5870, 0x975ca6046e2e4889}; + __m128i_result = (__m128i){0x1748c4f9ed1a5870, 0x8000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000024170000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000084d12ce, 0x000aa822a79308f6}; + __m128i_result = (__m128i){0x0000000024170000, 0x00000000084d12ce}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000034, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x117d7f7b093d187f, 0x01017f3c00000148}; + __m128i_result = (__m128i){0x0000000000000034, 0x117d7f7b093d187f}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x70); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vextrins_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vextrins.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.c new file mode 100644 index 0000000000..00552c48bb --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.c @@ -0,0 +1,278 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fea8ff44, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2020202020202020, 0x2020202020202020}; + v2u64_result = (v2u64){0x2020202020202020, 0x2020202020202020}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000f, 0x0000000000000000}; + v2u64_result = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0200ffff01ff, 0x0000010100fe0101}; + v2u64_op1 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + v2u64_result = (v2u64){0xffff0200ffff01ff, 0x0001010100fe0100}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffffa0204000, 0x7fff0101ffffe000}; + v2u64_op1 = (v2u64){0x7f3bffffa0226021, 0x7f370101ff04ffff}; + v2u64_result = (v2u64){0x7fffffffa0204000, 0x7fff0101ffffe000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + v2u64_op1 = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + v2u64_result = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + __m128d_out = __lsx_vfadd_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000ff000000ff, 0x000000ff000000ff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x800000ff000000ff}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + v2u64_result = (v2u64){0x80000000fff80000, 0x80000000fff8fff8}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + v2u64_op1 = (v2u64){0x4e0018eceb82c53a, 0xb55ccf30f52a6a68}; + v2u64_result = (v2u64){0xce0018eceb82c53a, 0x355ccf30f52a6a68}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009b140000917b, 0xffffffff00006c82}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x00009b140000917b, 0xffffffff00006c82}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000083b00000000, 0x0000000100000020}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5237c1bac9eadf55, 0xe93d0bd19ff0c170}; + v2u64_op1 = (v2u64){0xe5017c2ac9ca9fd0, 0xe6d4572c8a5835bc}; + v2u64_result = (v2u64){0x65017c2ac9ca9fd0, 0xe93d0bd19ff07013}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x65017c2ac9ca9fd0, 0xe93d0bd19ff07013}; + v2u64_op1 = (v2u64){0x0000f841000091aa, 0x00008bf700017052}; + v2u64_result = (v2u64){0x65017c2ac9ca9fd0, 0xe93d0bd19ff07013}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001ca02f854, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001ca02f854, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000004000000002}; + v2u64_op1 = (v2u64){0x0004455501500540, 0x5555410154551515}; + v2u64_result = (v2u64){0x8004455501500540, 0xd555410154551515}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000300a10003, 0x000300037ff000ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + v2u64_result = (v2u64){0x0003000300a10003, 0x0003000300000000}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xb4b8122ef4054bb3, 0x56a09e662ab46b31}; + v2u64_result = (v2u64){0x34b8122ef4054bb3, 0xd6a09e662ab46b31}; + __m128d_out = __lsx_vfsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001300000013, 0x0000001300000013}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100000001000, 0x0000100000000000}; + v2u64_op1 = (v2u64){0x1000100000001000, 0x0000100000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010001000100010, 0x0010001000100010}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000007000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffab7e71e33848, 0x01533b5e7489ae24}; + v2u64_op1 = (v2u64){0xffffab7e71e33848, 0x01533b5e7489ae24}; + v2u64_result = (v2u64){0xffffab7e71e33848, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x7ff8000000000000}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f0200007f020000, 0x7f4000007f040000}; + v2u64_op1 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + v2u64_result = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100007f01}; + v2u64_result = (v2u64){0x7ff8000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffefefffffffff}; + v2u64_op1 = (v2u64){0x0400000000000000, 0x0000000000000020}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffefefffffffff}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000810000, 0x00000000ff801c9e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000ffff}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x40eff02383e383e4}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000cd630000cd63, 0x0001000000010000}; + v2u64_op1 = (v2u64){0xffff00000000ffff, 0x0000000000000000}; + v2u64_result = (v2u64){0xffff00000000ffff, 0x7ff0000000000000}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x03aa558e1d37b5a1, 0x000aa822a79308f6}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffefffffffe, 0xfffffffefffffffe}; + v2u64_op1 = (v2u64){0xfffefffe011df03e, 0xfffefffefffefffe}; + v2u64_result = (v2u64){0xfffffffefffffffe, 0xfffffffefffffffe}; + __m128d_out = __lsx_vfdiv_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.c new file mode 100644 index 0000000000..c563a3b55a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.c @@ -0,0 +1,200 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x05050000, 0x00000000, 0x05050505, 0x05050505}; + v4i32_op1 = (v4i32){0xe496cbc9, 0x03574e38, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xe496cbc9, 0x03574e38, 0x05050505, 0x05050505}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000000f, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00077f88, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00077f97, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x000000ff, 0x000000ff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffecffec, 0x370bdfec, 0xffecffec, 0x370bdfec}; + v4i32_result = (v4i32){0xffecffec, 0x370bdfec, 0xffecffec, 0x370bdfec}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00ff0000, 0x0000ff00, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffff0000, 0xffff0000}; + v4i32_op1 = (v4i32){0x80200110, 0x40408010, 0x80040110, 0x40088040}; + v4i32_result = (v4i32){0x80200110, 0x40408010, 0xffff0000, 0xffff0000}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfffffffc, 0xffffffff, 0xfffffffc, 0xffffffff}; + v4i32_result = (v4i32){0xfffffffc, 0xffffffff, 0xfffffffc, 0xffffffff}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000001b, 0x0000001b, 0x0000001b, 0x0000001b}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x0000001b, 0x0000001b, 0x0000001b, 0x0000001b}; + __m128_out = __lsx_vfadd_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsub_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x81010102, 0x7fffffff, 0x81010102, 0x7fff0101}; + v4i32_op1 = (v4i32){0x20204000, 0x00001020, 0xffffe000, 0x00000fff}; + v4i32_result = (v4i32){0xa0204000, 0x7fffffff, 0xffffe000, 0x7fff0101}; + __m128_out = __lsx_vfsub_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_op1 = (v4i32){0x20204000, 0x00001020, 0xffffe000, 0x00000fff}; + v4i32_result = (v4i32){0xffffffff, 0x80001020, 0xffffffff, 0x80000fff}; + __m128_out = __lsx_vfsub_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsub_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xa494006b, 0x0124d8f6, 0x43c0d41e, 0x56411278}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0xffffffff}; + v4i32_result = (v4i32){0x80000000, 0x00000000, 0x00000000, 0xffffffff}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0501050c, 0x05010501, 0x05010501, 0x05010501}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2cbd0357, 0x407c2ca3, 0x5b7a02c8, 0x21f32eaf}; + v4i32_op1 = (v4i32){0x00010400, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffe0001, 0xfffe0001, 0xfffe0001, 0xfffe0001}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xfffe0001, 0xfffe0001, 0xfffe0001, 0xfffe0001}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00002ebf, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x01000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x1f1f1f1f, 0x1f1f1f1f, 0x1f1f1f1f, 0x00081f1f}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x21030a49, 0x030298a6, 0x49678a35, 0x021b7d24}; + v4i32_op1 = (v4i32){0x00000002, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xb8145f50, 0x27b169bb, 0x47e59090, 0xf6548a17}; + v4i32_op1 = (v4i32){0x00be00a0, 0xff700028, 0x00d2ff76, 0x004eff62}; + v4i32_result = (v4i32){0x800001b8, 0xe7a6533b, 0x093d35ab, 0xb7032c34}; + __m128_out = __lsx_vfmul_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xa494afcb, 0x8064d8f6, 0xbc3f2be1, 0x54feed87}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xff800000, 0xff800000, 0xff800000, 0x7f800000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f678077, 0xd8248069, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x7f678077, 0xd8248069, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x3f800000, 0x3f800000, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7fc00000, 0x7fc00000, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010000, 0x00030000, 0x00040000, 0x00070000}; + v4i32_op1 = (v4i32){0x00010000, 0x00030000, 0x00040000, 0x00070000}; + v4i32_result = (v4i32){0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00010001, 0x00010001, 0x0001007c, 0x00010001}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffc, 0x00000003, 0x00001fff, 0x00001fff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xfffffffc, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7fc00000, 0x7fc00000, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vfdiv_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfadd_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.c new file mode 100644 index 0000000000..fcec7c2190 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.c @@ -0,0 +1,65 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0001ffff0001ffff, 0x0001ffff0001ffff}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000000000100}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000002}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00000000000000, 0xff00ff00ff00ff00}; + __m128i_result = (__m128i){0x0000000000000008, 0x0000000000000008}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d37e80682a, 0x14ccc6320176a4d2}; + __m128i_result = (__m128i){0x0000000000000080, 0x0000000000000080}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vfclass_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.c new file mode 100644 index 0000000000..8c80d6b17a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.c @@ -0,0 +1,50 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000005, 0x00010081, 0x7fff8000, 0x00000000}; + __m128i_result = (__m128i){0x0000010000000100, 0x0000020000000002}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfe02fe02, 0xfe02fe02, 0xfe02fe02, 0xfe02fe02}; + __m128i_result = (__m128i){0x0000000800000008, 0x0000000800000008}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x10001000, 0x10001000, 0x7fff000c, 0x0000000c}; + __m128i_result = (__m128i){0x0000008000000080, 0x0000010000000002}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000020000000200, 0x0000020000000200}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000020000000200, 0x0000020000000200}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x09080706, 0x0a090807, 0x0b0a0908, 0x0c0b0a09}; + __m128i_result = (__m128i){0x0000008000000080, 0x0000008000000080}; + __m128i_out = __lsx_vfclass_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfclass_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.c new file mode 100644 index 0000000000..276bb6071a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.c @@ -0,0 +1,140 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x01010101, 0x01010101, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xec69b5f2, 0x28bf0351, 0x21fc7081, 0x7ef400ad}; + v4i32_op1 = (v4i32){0x7fc00000, 0xff800000, 0xff800000, 0xff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01000100, 0x01000100, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x64e464e4, 0x64e464e4, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000005, 0x00000000, 0xff800000, 0xffc0ff80}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xc0800000, 0xffffffff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000001b, 0x0000001b, 0x0000001b, 0x0000001b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000002, 0x00000000, 0x00000002}; + v4i32_op1 = (v4i32){0x0f3017d6, 0x34500292, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0038ff50, 0x00830029, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xe593c8c4, 0xe593d844, 0xff800001, 0xff7fff80}; + v4i32_op1 = (v4i32){0xe593c8c4, 0xe593c8c4, 0xff800000, 0xff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x8a8a8a8a, 0x8a8a8a8a, 0x8a8a8a8a, 0x8a8a8a8a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x38d60e366e547876, 0x66b34f643c9c626a}; + v2u64_op1 = (v2u64){0x38d60e366e547876, 0x66b34f643c9c626a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + v2u64_op1 = (v2u64){0x000300000000fdff, 0x000700000004fdff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xddd76c75f2f44442, 0xf2f444429d96dbe1}; + v2u64_op1 = (v2u64){0xc1f03e1042208410, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff43dfffff81fb, 0xffffbfff7fffc000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_caf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_caf.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.c new file mode 100644 index 0000000000..cb25bd0fe5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.c @@ -0,0 +1,284 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x01000000, 0x00000000, 0x00007f00, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x9b7fb213, 0x4303c67e, 0xbfdb1927, 0x08fdc221}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x0004300c, 0x0000800c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000800, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2bfd9461, 0x00000000, 0x00007fff, 0x00007fff}; + v4i32_op1 = (v4i32){0x2bfd9461, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01000000, 0x01000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xcd636363, 0xcd636363, 0xcd636363, 0xcd636363}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff800000, 0x007fffff, 0x007fffff, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00011197, 0x0000c900, 0x00004657, 0x0000cecd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x460f3b393ef4be3a, 0xc2409edab019323f}; + v2u64_op1 = (v2u64){0x0100000100010001, 0x0101010101010101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff00000000, 0x000000ff00000000}; + v2u64_op1 = (v2u64){0x00ffff0000000000, 0x00ffff0000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + v2u64_op1 = (v2u64){0x000000000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + v2u64_op1 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffff4, 0xfffffffffffffff4}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_ceq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xf235ed87, 0x0983e2db, 0xd6050189, 0xf51df8db}; + v4i32_op1 = (v4i32){0x3f6fb04d, 0xfffefffe, 0x3ea5016b, 0xffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffabff99, 0x0000ffff, 0xffa8ff9f, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ff00, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x40404040, 0x40404040, 0x40404040, 0x40404040}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x9703f605, 0xab7b3134, 0x703fa5f0, 0x3bcc5098}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfe01fd02, 0x000000ff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0001fe01, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfe01fd02, 0x000000ff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000100, 0x00000001, 0x00000100, 0x00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00800000, 0x00800000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00800000, 0x00800000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010000000000, 0x0100000001000100}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x0000c000ffffc000, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffe000ffdf, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010100000101, 0x0000010100000101}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x000000000000000b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5779108fdedda7e5, 0xd78cfd70b5f65d77}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff0000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_ceq.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.c new file mode 100644 index 0000000000..72ea78a492 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.c @@ -0,0 +1,296 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x041b0013, 0x00001802, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xc3080000, 0xff800000, 0xff800000, 0xff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x17fda829, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffff1fff, 0xffffe000, 0x00000383, 0x00000404}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x808000fe, 0x000000fe, 0x808000ff, 0x000000fe}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000020, 0x00000020}; + v4i32_op1 = (v4i32){0x00010001, 0x0000ffc1, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000004, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xe0000000, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00010001, 0x01010301, 0x00010001, 0x01010001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000001, 0x00000000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffff00, 0x00000000}; + v4i32_op1 = (v4i32){0x00000001, 0x00000001, 0x00000001, 0x00000001}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00010001, 0x00000000, 0x00000001}; + v4i32_op1 = (v4i32){0x02000fbf, 0x00020fbf, 0x02040fbf, 0x00060fbf}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x950fa306, 0x0a753500, 0x0a752a55, 0x00000000}; + v4i32_op1 = (v4i32){0xc0000000, 0x380fdfdf, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000001, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_cle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000007fff800000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001000000, 0x0000080007f80800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080800000808, 0x0000080800000808}; + v2u64_op1 = (v2u64){0xffffffff80800001, 0xffffffff80800001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x46387f95d9a68001, 0x5f675e96a8d359f5}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x11100f0e100f0e0d, 0x131211101211100f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000002a000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffff7f8c}; + v2u64_op1 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfcfcfcfcfcfc0000, 0xfcfcfcfcfcfcfcfd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffff359f358, 0xfffffffff359f358}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + v4i32_op1 = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x4f804f80, 0x00000000, 0x4f804f81, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7bfff828, 0x7ffeffff, 0xe215b122, 0x7fff0007}; + v4i32_op1 = (v4i32){0x84000bd8, 0x80010001, 0x816ac5de, 0x80010009}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0xfefa0000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x9c9c9c9c, 0x9c9c9c9c, 0x9c9c9c9c, 0x9c9c9c9c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x09080706, 0x0a090807, 0x0b0a0908, 0x0c0b0a09}; + v4i32_op1 = (v4i32){0x09080706, 0x0a090807, 0x0b0a0908, 0x0c0b0a09}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000001f, 0x0000001f, 0x00000020, 0x00000020}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x7ff80000, 0x00000000, 0x7ff80000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0xffff80ff0010ff06}; + v2u64_op1 = (v2u64){0xedfaedfaedfaedfa, 0xedfaedfaedfaedfa}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cle.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.c new file mode 100644 index 0000000000..5324eab385 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.c @@ -0,0 +1,260 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0xa494006b, 0x0124d8f6, 0x43c0d41e, 0x56411278}; + v4i32_op1 = (v4i32){0xff800000, 0xff800000, 0xff800000, 0x7f800000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xbefcb21e, 0x00000002, 0x00000000, 0x84939413}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfff80002, 0xfffefff6, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xa3a9a96a, 0xaaacac88, 0xac01015b, 0x000000c5}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff0, 0xffffffff, 0xff84fff4, 0xff84fff4}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0e000c20, 0x0f000d20, 0x10000e20, 0x11000f20}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000c00, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00bd003d, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000005, 0x00000000, 0x00000005, 0x00000000}; + v4i32_op1 = (v4i32){0xfffefffe, 0xfffefffe, 0xfffefffe, 0xfffefffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0f800000, 0xff800001, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0f800009, 0xff80000a, 0x00000009, 0x00000009}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xab7e3848, 0x3b5eae24, 0x0000ffff, 0x00000000}; + v4i32_op1 = (v4i32){0x00003f80, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xf1ef4eaa, 0x41f8e080, 0x3f3e47c1, 0x63636363}; + v4i32_op1 = (v4i32){0x00011197, 0x0000c900, 0x00004657, 0x0000cecd}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000003f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x000000003be14000, 0x0000000036de0000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x1111113111111141}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x65017c2ac9ca9fd0, 0xe93d0bd19ff07013}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x007f007f007effc6, 0x007f007f007f007e}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x0000015800000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op1 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8100017f810001, 0x7f8100017f810001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_clt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2742ba3e, 0x9e063f80, 0x0ffe354e, 0x454c2996}; + v4i32_op1 = (v4i32){0x00000000, 0x42652524, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010000, 0x00030000, 0x00050000, 0x00070000}; + v4i32_op1 = (v4i32){0x0070007c, 0xffb7005f, 0xff81007c, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x0000006f, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7bffffff, 0xffffffff, 0xfbffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0x7bffffff, 0xffffffff, 0xfbffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0002a000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0002a000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x14155445, 0x00000000, 0xfc606ec5, 0xffffffff}; + v4i32_op1 = (v4i32){0x01030103, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x02000fbf, 0x00020fbf, 0x02040fbf, 0x00060fbf}; + v4i32_op1 = (v4i32){0x10d20fbf, 0xffd27db0, 0x63636363, 0x63636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x7f800000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200001, 0x004200a000000000}; + v2u64_op1 = (v2u64){0x7fff00007fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001e, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000455555555, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000001580000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_clt.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.c new file mode 100644 index 0000000000..013f14f960 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x7ff80000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0bd80000, 0x0bd80bd8, 0x0bdfffff, 0x0bd80bd8}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00ee01de, 0x00e600ef, 0x00070077, 0x00ff0077}; + v4i32_op1 = (v4i32){0x00007fff, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00100010, 0x00100010}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfe01fd02, 0x000000ff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000fc00, 0x000000000000fc00}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000020302030, 0x0000000020302030}; + v2u64_op1 = (v2u64){0x0000000000100010, 0x0000000000100010}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7f00, 0x5d7f5d007f6a007f}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffe8081000000000, 0x7ff000ff6220c0c1}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0001fffe0001fffe, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf244b948a323ab42, 0x1c083b1f3b1f3b1f}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0xcf000000, 0x0000ffff, 0xbf800000}; + v4i32_op1 = (v4i32){0x00000000, 0x003f0000, 0x0000003f, 0x003f0000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01ff01ff, 0x01ff01ff, 0x01ff01ff, 0x01ff01ff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x20207fff, 0x20202020, 0x20202020, 0x20202020}; + v4i32_op1 = (v4i32){0x93f6b356, 0x3e081b3c, 0xcd509d13, 0x32d3f35e}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80200110, 0x40408010, 0xffff0000, 0xffff0000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xa2f54a1e, 0xa2f54a1e, 0x80000008, 0x80000000}; + v4i32_op1 = (v4i32){0xa2f54a1e, 0xa2f54a1e, 0x80000008, 0x80000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000115ffffffa1, 0x000100fe000070a1}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff01018888, 0xfffffffff8f8da00}; + v2u64_op1 = (v2u64){0xfffefefd3f7027c5, 0x000000003ea5016c}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffce, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4000000040000000, 0x400000003fffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + v2u64_op1 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cne.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.c new file mode 100644 index 0000000000..c413bd81c8 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.c @@ -0,0 +1,104 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffcff, 0xffffffff, 0xfffffeff, 0xfffffeff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2f4ef4a8, 0xf4b6f3f5, 0x00000000, 0x00800000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x08080808, 0x08080808, 0x08080808, 0x08080808}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffce, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xb0995850, 0xc0000002, 0x1cf0c569, 0xffff0001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x950fa306, 0x0a753500, 0x0a752a55, 0x00000000}; + v4i32_op1 = (v4i32){0x950fa306, 0x0a753500, 0x0a752a55, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000003}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + v2u64_op1 = (v2u64){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cor.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.c new file mode 100644 index 0000000000..a2d1ec105d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.c @@ -0,0 +1,146 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x0000fffe, 0x0000ffff, 0x0000ffff, 0x0000ffff}; + v4i32_op1 = (v4i32){0x0000fffe, 0x0000ffff, 0x0000ffff, 0x0000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00200010, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffff, 0x0000fffe, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0008, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00010001, 0x0000ffc1, 0x00000000, 0xffc2ffe0}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00200020, 0x00200020, 0x00000008, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffefffe, 0xfffefffe, 0xfffefffe, 0xfffefffe}; + v4i32_op1 = (v4i32){0x0101f002, 0xf001f001, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xfeffffff, 0xffffffff, 0xfeffffff}; + v4i32_op1 = (v4i32){0x20204000, 0x00001020, 0xffffe000, 0x00000fff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdffdbffeba6f5543, 0xfefd7f7f7f7f7f7e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ffffffe7ffff800, 0xffff3d06ffff4506}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000003bfb4000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100010100}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0000002b0995850, 0xffff00011cf0c569}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + v2u64_op1 = (v2u64){0x0000000044470000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_cun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_cun.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.c new file mode 100644 index 0000000000..214f9e37f4 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.c @@ -0,0 +1,128 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x80000000, 0xffffffff}; + v4i32_op1 = (v4i32){0x00a300a3, 0x00a300a3, 0x00a300a3, 0x00a300a3}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x343cce24, 0x6477d042, 0xfe38e64b, 0xb8ec43be}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00100010, 0x00000010}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0001, 0x00020000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x63636363, 0x63636363, 0x63636363, 0x63636363}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x0d090107, 0x03080401}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x7ff8000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0a0a0a0009090900, 0x0a0a0a000a0a0a00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x387c7e0a133f2000, 0x67157b5100005000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf359f359f359f359, 0xf359f359f359f359}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_saf_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_saf.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.c new file mode 100644 index 0000000000..d41ea5318d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.c @@ -0,0 +1,248 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xe5e5e5e5, 0xf2f2e5e5}; + v4i32_op1 = (v4i32){0xe4e4e46d, 0xe5e5e5e5, 0xe5e5e5e5, 0xe5e5e5e5}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x1f400000, 0x00000000, 0x00800000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7e00682a, 0x685670d2, 0x0076a4d2, 0x14ccc632}; + v4i32_op1 = (v4i32){0x7e00682a, 0x685670d2, 0x0076a4d2, 0x14ccc632}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xc6c6c6c6, 0x00000000, 0xc6c6c6c6, 0x00000000}; + v4i32_op1 = (v4i32){0xc6c6c6c6, 0x00000000, 0xc6c6c6c6, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffa209, 0x00000008, 0x00007fff, 0x00000006}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010001fffd, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000004fc04f80, 0x000000004fc04f81}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_seq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_seq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_seq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000001, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00fc0000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfedd0c00, 0x00020100, 0xfefdddfe, 0xfe07e5fe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffff0000, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000fffd, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000001, 0x00000000, 0xffffffff, 0x7fffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x3f80ffff, 0x00008000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xa2eb9931, 0x370bdfec, 0xffecffec, 0x370bdfec}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000040, 0x00000000, 0x00000040, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xc3040000, 0xc2fc0000, 0xc3040000, 0xc2fc0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x000200fe, 0x00fe00fe, 0x000200fe, 0x00fe00fe}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x55555555, 0x00000004, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000158, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0xffffffa8, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4ac0e000, 0xf7077b93, 0x60d7b152, 0xf3e6586b}; + v4i32_op1 = (v4i32){0xc01200e0, 0x7b370981, 0x144d0050, 0x1498507a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff600001, 0x0080005e, 0xff230027, 0xffc2007a}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sueq_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdffdbffeba6f5543, 0xfefd7f7f7f7f7f7e}; + v2u64_op1 = (v2u64){0xdffdbffeba6f5543, 0xfefd7f7f7f7f7f7e}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff700000009, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffff700000009, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4fa432d67fc00000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0141010101410101, 0x0141010101410101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffd000a0000, 0xfffcffff00000000}; + v2u64_op1 = (v2u64){0x0000a00028004000, 0xf0fd800080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff81ff81ff81ff81, 0x00820082ff81ff81}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001000000000}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x0000000120002000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000100010101, 0x0007000100040102}; + v2u64_op1 = (v2u64){0x0003000100010101, 0x0007000100040102}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sueq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_seq.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.c new file mode 100644 index 0000000000..bd1172acc3 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffdfff, 0xffffffff, 0xffffdfff, 0xffffffff}; + v4i32_op1 = (v4i32){0x01ffe200, 0xffffe000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000fe02, 0x00010002, 0x0000fe7d, 0x00010002}; + v4i32_op1 = (v4i32){0x00000001, 0x00000000, 0x0000007b, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xf15be124, 0x8e8f8626, 0x4c3b3549, 0x1223dabf}; + v4i32_op1 = (v4i32){0x94f902c0, 0x1f5533a6, 0xb6dbecac, 0xfffffacd}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x27001517, 0xfbffffff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x0000ffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff9515, 0xffff0001, 0xffff53d9, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000080, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0078007f, 0x00df020f, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x001ffff9, 0x001e0052, 0x0083ffe5, 0x0037ffd4}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefffeff7f002d06, 0xffffff0c8000c212}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00f000807000009e, 0x00f0008100800080}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffe00029f9f6061, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00067fff0002a207, 0x0000c0010000a186}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00ff00ff, 0x00ff00ff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x442403e4, 0x00000004, 0x05452505, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000101, 0x00000101, 0x00000101, 0x00000101}; + v4i32_op1 = (v4i32){0x00000002, 0x00000002, 0x00000002, 0x00000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000cd63, 0x0000cd63, 0x00010000, 0x00010000}; + v4i32_op1 = (v4i32){0xffffd765, 0xffffd765, 0xffffcd63, 0xffffcd63}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffff00ff, 0xffffffff}; + v4i32_op1 = (v4i32){0x0000ffff, 0xffffffff, 0xffff0000, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff80000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fbf3fbf00007fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc03fc03fc0ff00ff, 0x00000000013ec13e}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00018d8b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sule_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sle.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.c new file mode 100644 index 0000000000..955fd5efb6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.c @@ -0,0 +1,284 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000ffff, 0x0000ffff, 0x00000000, 0x0000ffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + v4i32_op1 = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00007f01, 0x00000001}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffff02, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0xffffffff}; + v4i32_op1 = (v4i32){0x442403e4, 0x00000004, 0x05452505, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7fff7fff, 0x7fff7fff, 0xe29a5a60, 0x5f675e96}; + v4i32_op1 = (v4i32){0xe1cb5a01, 0x5e695e95, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000000b, 0x0080006b, 0x00800080, 0x00800080}; + v4i32_op1 = (v4i32){0x806b000b, 0x80808080, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0xff800000, 0x00000000, 0xff800000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000300000003, 0x0000000200000002}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x65017c2ac9ca9fd0, 0xe93d0bd19ff07013}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001021, 0x00d3012acc56f9bb}; + v2u64_op1 = (v2u64){0xffffffffffffb4ff, 0xffffffffffffb4ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d37e80682a, 0x14ccc6320176a4d2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001000000000, 0x0000001000000010}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0080000000800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x345002920f3017d6, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_slt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffc, 0xfffefffe, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfffffffc, 0xfffefffe, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x0000ffc1, 0x00000007, 0xffc2ffe7}; + v4i32_op1 = (v4i32){0xfffff1a0, 0x00000000, 0xffffffff, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x6ac02b9b, 0x0d8e3670, 0x307d0771, 0x153e3e49}; + v4i32_op1 = (v4i32){0xd5aaaac1, 0xaa55556f, 0xd5aa55c4, 0x55aa55c3}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0015172b, 0xffffffff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfffffffe, 0xffffffff, 0xfffffffe, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffff0000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0xffffffff, 0x00000000, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x5b3159f5, 0x9611c398, 0xb164f12b, 0x86dd8341}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff0cff78ff96ff14, 0xffffff8607db959f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ef8000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d37e80682a, 0x14ccc6320176a4d2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff00000000ffff}; + v2u64_op1 = (v2u64){0xffffffee00000004, 0xffffffff00000001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sult_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_slt.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.c new file mode 100644 index 0000000000..6be8b2008c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000004, 0x00000000, 0x00003fee}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000002}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x03574e3a, 0x03574e3a}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010400, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x16de012b, 0x203e16d1, 0x2d3d01e4, 0x10f917d7}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff8095, 0x00000b6f, 0xffff8b68, 0x0000101f}; + v4i32_op1 = (v4i32){0x16de012b, 0x203e16d1, 0x2d3d01e4, 0x10f917d7}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0e000c20, 0x0f000d20, 0x10000e20, 0x11000f20}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00050005, 0x00050005, 0x00050005, 0x00050005}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000e41b, 0x00000000, 0x15d926c7, 0x00000000}; + v4i32_op1 = (v4i32){0x94f902c0, 0x1f5533a6, 0xb6dbecac, 0xfffffacd}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x04040504, 0x00000000, 0x04040504, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff1, 0x0001000d, 0xfffffff2, 0x0001000c}; + v4i32_op1 = (v4i32){0xffffad3b, 0xffff69bb, 0xffffc758, 0xffff8a17}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf474f6fef474f6fe, 0x7474f6fd7474fefe}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1615141315141312, 0x1817161517161514}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101fe8700000000, 0x0101fe870101fe87}; + v2u64_op1 = (v2u64){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000017fffca8b, 0x000000007fffa9ed}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff7603, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fffffffffffffff, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sne_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0xff800000, 0x00000000, 0xff800000}; + v4i32_op1 = (v4i32){0xffff5b88, 0xffff2896, 0xffff48aa, 0xffff1739}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000003f, 0x00000003, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000003f, 0x00000003, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x24170000, 0x00000000, 0x084d12ce, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1111113111111121, 0x1111113111111141}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff003000ff00a0, 0x00ff000100ff00fe}; + v2u64_op1 = (v2u64){0x5e695e96c396b402, 0x000000005e695e95}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0003000300a10003, 0x000300037ff000ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000008000000080, 0x0000008000000080}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffab7e71e33848, 0x01533b5e7489ae24}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sune_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sne.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.c new file mode 100644 index 0000000000..14579aaa85 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.c @@ -0,0 +1,146 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000007f, 0x0000007f, 0x0000007f, 0x0000007f}; + v4i32_op1 = (v4i32){0x00000000, 0xfffc0020, 0x00000000, 0x3ff00000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x1e8b7eff, 0x166891d5, 0x33d771a3, 0x2757de72}; + v4i32_op1 = (v4i32){0x1e8b7eff, 0x166891d5, 0x33d771a3, 0x2757de72}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00fe00ff, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffe, 0xffffffff, 0x00000001, 0x00000000}; + v4i32_op1 = (v4i32){0xffffff02, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000000d, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfffffe03, 0xffffffff, 0xfffffe03, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffd500fe, 0xbafebb00}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xbffffffe, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + v4i32_op1 = (v4i32){0x01fe000e, 0x05fafe01, 0x0000857a, 0x000000ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x81018101, 0xbf6b8101, 0x7fff7fff, 0x7fff7fff}; + v4i32_op1 = (v4i32){0x16161198, 0x41f8e080, 0x63abdf16, 0xe3636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000005d5d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4303c67e9b7fb213, 0x08fdc221bfdb1927}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7ffffffb, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000040002, 0x0000000000000002}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000d00000000, 0xfffffff000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sor_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sor.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.c new file mode 100644 index 0000000000..9af137567d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.c @@ -0,0 +1,182 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xe17fe003, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0x0000ffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00190019, 0x00190819, 0x00190019, 0x00190819}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0xfe800000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xc6bb97ac, 0x7fffffff, 0x82bb9784, 0x7fffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x7f3f0180, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7fd03f7f, 0xa2321469, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0202fe02, 0x02020202, 0x00000406, 0x00000406}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xfffffff5, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000014, 0x00000000, 0x00000014, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0xfffc0004, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xed3f2000, 0xc8847ef6, 0xb2ebb001, 0x67eb85b0}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xe67b8fc0, 0x09b50da6, 0x682de060, 0x0002de46}; + v4i32_op1 = (v4i32){0x24170000, 0x00000000, 0x084d12ce, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00ffffff, 0x00ffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x54860000, 0x0000fd16, 0x23560000, 0x0000feff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffff784, 0xfffffffe, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x011ff8bc, 0x00000000, 0xfffffff0, 0x0177fff0}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000000, 0x0002000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00ff00fe, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff7fff, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x00ff000000ff0000, 0xfffffffffffff800}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7ffe7fff3506, 0xfffebd06fffe820c}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ffffffeffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000029, 0x000000000000002f}; + v2u64_op1 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffe0001fefc, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0003000100010001, 0x0007000000050000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcmp_sun_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcmp_sun.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.c new file mode 100644 index 0000000000..9cb8b8fdb1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v4i32_result = (v4i32){0xffffe000, 0xffffe000, 0xffffe000, 0xffffe000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v4i32_result = (v4i32){0x35200000, 0x35200000, 0x35200000, 0x35200000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + v4i32_result = (v4i32){0x43494000, 0x47050000, 0xbb4a4000, 0xc6178000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v4i32_result = (v4i32){0xffe00000, 0xffe00000, 0xffe00000, 0xffe00000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v4i32_result = (v4i32){0xffffe000, 0xffffe000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvtl_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff00fe7f, 0x0000017f, 0x0f00fe00, 0x00000100}; + v2u64_result = (v2u64){0xc7e01fcfe0000000, 0x3727f00000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000020, 0x00000020, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x36f0000000000000, 0x36f0000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0a092444, 0x00000000, 0xbd994889, 0xffffffff}; + v2u64_result = (v2u64){0x3941248880000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00040004, 0x00040004, 0x00040004, 0x00040004}; + v2u64_result = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x007f7f7f, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x380fdfdfc0000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvtl_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00e0000000e00000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002a55000001, 0x0000002a55005501}; + v4i32_result = (v4i32){0x42a02000, 0x42a00000, 0x36280000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0282800002828282, 0xffffffffcfb799f1}; + v4i32_result = (v4i32){0xbb3e2000, 0xc1f6e000, 0xffffe000, 0xffffe000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000040004000100, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v4i32_result = (v4i32){0x3be14000, 0x00000000, 0x36de0000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xffffe000, 0x403be000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80808080ffffffff, 0xfffffffff7fff7ef}; + v4i32_result = (v4i32){0xc6fde000, 0xc6ffe000, 0xffffe000, 0xffffe000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000400000, 0xffe1ffc100000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xfff82000, 0xfffc2000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4195d926d8018000, 0x0001001001000080}; + v4i32_result = (v4i32){0x37000000, 0x37800000, 0x35800000, 0x33800000}; + __m128_out = __lsx_vfcvth_s_h((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2f4ef4a8, 0xf436f3f5, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x63636363, 0x63636363, 0x636316bb, 0x63637687}; + v2u64_result = (v2u64){0x446c62d760000000, 0x446c6ed0e0000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x000000ff, 0x000000ff}; + v2u64_result = (v2u64){0x371fe00000000000, 0x371fe00000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v2u64_result = (v2u64){0xffffffffe0000000, 0xffffffffe0000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000c26a, 0x00004e42, 0x000067da, 0x0000b3a6}; + v2u64_result = (v2u64){0x3789f68000000000, 0x379674c000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0000, 0x00000000, 0xffffffff, 0x00000000}; + v2u64_result = (v2u64){0xffffffffe0000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfcvth_d_s((__m128)v4i32_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.c new file mode 100644 index 0000000000..cc2c28a2c8 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.c @@ -0,0 +1,152 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00200001, 0x004200a0, 0x00000000, 0x004200a0}; + v4i32_op1 = (v4i32){0x00200000, 0x004200a0, 0x00000000, 0x004200a0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00010001, 0x00010001, 0x0001007c, 0x00010001}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x80808080, 0x80808080, 0x80808080, 0x80808080}; + __m128i_result = (__m128i){0x8000800080008000, 0x0000000000000000}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff0000ffffffff}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffc, 0xffffffff, 0xfffffffc, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000103, 0x00000000, 0x00000000, 0x00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vfcvt_h_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff29, 0x00000049000000c0}; + v2u64_op1 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000002c002400, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x28bf0351ec69b5f2, 0x7ef400ad21fc7081}; + v4i32_result = (v4i32){0x00000000, 0x7f800000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000dc300003ffb, 0x00000dc300003ffb}; + v2u64_op1 = (v2u64){0x7fffffff7fffffff, 0x0000ffff3fbfffff}; + v4i32_result = (v4i32){0x7ffffffb, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa15f3f9e8763c2b9, 0xbba0c07b51230d5c}; + v2u64_op1 = (v2u64){0xa15f3f9e8763c2b9, 0xbba0c07b51230d5c}; + v4i32_result = (v4i32){0x80000000, 0x9d0603db, 0x80000000, 0x9d0603db}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8101010181010101, 0x8101010181010101}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffc00000ff800000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v4i32_result = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0xff800000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffe80008000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xffeffff4, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x7f800000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000090, 0x0000000000000090}; + v2u64_op1 = (v2u64){0xff70002800be00a0, 0x004eff6200d2ff76}; + v4i32_result = (v4i32){0xff800000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfcvt_s_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfcvt-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.c new file mode 100644 index 0000000000..77b53baffe --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.c @@ -0,0 +1,120 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe82fe0200000000, 0xfe82fe0200000000}; + v2u64_result = (v2u64){0x0000000000000000, 0xc177d01fe0000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + v2u64_result = (v2u64){0x40f0001000000000, 0x40f0001000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000000000000}; + v2u64_result = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffe0001, 0x0000000000000000}; + v2u64_result = (v2u64){0xc0fffff000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffintl_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffffffffffff, 0x7fffffffffffffff}; + v2u64_result = (v2u64){0xbff0000000000000, 0x41dfffffffc00000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + v2u64_result = (v2u64){0x40cd120000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_result = (v2u64){0x4050000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0082000000000007, 0x0086000000040000}; + v2u64_result = (v2u64){0x4110000000000000, 0x4160c00000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff8000010f800000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000003e0000003f, 0x00000000051649b6}; + v2u64_result = (v2u64){0x41945926d8000000, 0x0000000000000000}; + __m128d_out = __lsx_vffinth_d_w((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.c new file mode 100644 index 0000000000..d3db99f2d9 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.c @@ -0,0 +1,161 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + v4i32_result = (v4i32){0x4b7f00ff, 0x4b7f00ff, 0x4b7f00ff, 0x4b7f00ff}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000004, 0x0000000401000001}; + v4i32_result = (v4i32){0x40800000, 0x47800080, 0x4b800000, 0x40800000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000800000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x47000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x76f424887fffffff, 0x0000000000000001}; + v4i32_result = (v4i32){0x4f000000, 0x4eede849, 0x3f800000, 0x00000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + v4i32_result = (v4i32){0xcedb2c3f, 0xceb95a81, 0x4edd53ea, 0xce23d33d}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x3f800000, 0x00000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + v4i32_result = (v4i32){0x467fe000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_w((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x03ff03ff03ff03ff}; + v2u64_result = (v2u64){0x0000000000000000, 0x438ff81ff81ff820}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f8000004f800000, 0x4f8000004f800000}; + v2u64_result = (v2u64){0x43d3e0000013e000, 0x43d3e0000013e000}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xbff0000000000000, 0xbff0000000000000}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfdce8003090b0906, 0x0674c8868a74fc80}; + v2u64_result = (v2u64){0xc3818bffe7b7a7b8, 0x4399d3221a29d3f2}; + __m128d_out = __lsx_vffint_d_l((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff80000000}; + v4i32_result = (v4i32){0x00000000, 0xcf000000, 0x00000000, 0xbf800000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x5eff0000, 0x5eff0000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000000e3}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0xfda9b23a624082fd}; + v4i32_result = (v4i32){0x4f7fff00, 0xdc159371, 0x00000000, 0x43630000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v4i32_result = (v4i32){0x42800000, 0x42800000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000100, 0x0000000000000100}; + v4i32_result = (v4i32){0x43800000, 0x43800000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x001effae001effae, 0x001effae001effae}; + v4i32_result = (v4i32){0x59f7fd70, 0x59f7fd70, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x000ef0000000003b, 0x0000000000000000}; + v4i32_result = (v4i32){0x596f0000, 0x00000000, 0x577fff00, 0x577fff00}; + __m128_out = __lsx_vffint_s_l((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.c new file mode 100644 index 0000000000..a20e775cd6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.c @@ -0,0 +1,70 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001600000016, 0x0000001600000016}; + v4i32_result = (v4i32){0x41b00000, 0x41b00000, 0x41b00000, 0x41b00000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v4i32_result = (v4i32){0x4f800000, 0x4f800000, 0x4f800000, 0x4f800000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0204, 0x0000442800007b50}; + v4i32_result = (v4i32){0x4f7fff02, 0x4f800000, 0x46f6a000, 0x46885000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vffint_s_wu((__m128)v2u64_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x625a7312befcb21e, 0x8493941335f5cc0c}; + v2u64_result = (v2u64){0x43d8969cc4afbf2d, 0x43e092728266beba}; + __m128d_out = __lsx_vffint_d_lu((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffint_d_lu((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffint_d_lu((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vffint_d_lu((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vffint-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.c new file mode 100644 index 0000000000..e1c91c8422 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.c @@ -0,0 +1,60 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000000}; + v2u64_result = (v2u64){0xc090c40000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000048, 0xfffffffffffbfffc}; + v2u64_result = (v2u64){0xc090380000000000, 0xfffffffffffbfffc}; + __m128d_out = __lsx_vflogb_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.c new file mode 100644 index 0000000000..3da5d5d854 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.c @@ -0,0 +1,95 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00003004, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xc3080000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0xff800000, 0xff800000, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xffffffff, 0xffffffff, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01010101, 0x01010101, 0x01010101, 0x01010101}; + v4i32_result = (v4i32){0xc2fa0000, 0xc2fa0000, 0xc2fa0000, 0xc2fa0000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01ff01ff, 0x01ff01ff, 0x01ff01ff, 0x01ff01ff}; + v4i32_result = (v4i32){0xc2f80000, 0xc2f80000, 0xc2f80000, 0xc2f80000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xd46cdc13, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7fc00000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x000200fe, 0x00fe00fe, 0x000200fe, 0x00fe00fe}; + v4i32_result = (v4i32){0xc3040000, 0xc2fc0000, 0xc3040000, 0xc2fc0000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000100, 0x01010101, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xc30d0000, 0xc2fa0000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000014, 0x00000000, 0x00000014, 0x00000000}; + v4i32_result = (v4i32){0xc3110000, 0xff800000, 0xc3110000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x38bb47d2, 0x4e3e1337, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xc1600000, 0x41e80000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xff800000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xff800000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xff800000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00003ff8, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xc3080000, 0xff800000, 0xff800000, 0xff800000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xf180f1f1, 0xf1f1f1f1, 0xf1f1f1b0, 0xf1f181a2}; + v4i32_result = (v4i32){0x7fc00000, 0x7fc00000, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vflogb_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vflogb_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.c new file mode 100644 index 0000000000..fec113d2e0 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.c @@ -0,0 +1,167 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc77c47cdc0f16549, 0x8a228acac14e440a}; + v2u64_op2 = (v2u64){0x2711bad1e8e309ed, 0xffffffffd24271c4}; + v2u64_result = (v2u64){0x2711bad1e8e309ed, 0xffffffffd24271c4}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + v2u64_op1 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + v2u64_op2 = (v2u64){0x0001000100000000, 0x0000000001000001}; + v2u64_result = (v2u64){0xffffe000ffff1fff, 0x0000000001000001}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0x00000000003f80b0}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080200000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000401000}; + v2u64_op2 = (v2u64){0x0000080000000000, 0x0000080000000000}; + v2u64_result = (v2u64){0x0000080000000000, 0x0000080000000000}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000001e, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x3fff3fff3fff3fff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + v2u64_result = (v2u64){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000009000900, 0x0000000009000900}; + v2u64_result = (v2u64){0x0000000009000900, 0x0000000009000900}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdd3b8b02563b2d7b, 0x9c83e21a22001818}; + v2u64_op1 = (v2u64){0x7f7f7f007f7f7f00, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7f7f7f007f7f7f00, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01e41ffff0ffff, 0xff00e400ff00e400}; + v2u64_op1 = (v2u64){0x5555000154100155, 0x5555000054100000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vfmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000010, 0x0000000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + v2u64_op1 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + v2u64_op2 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00fffe00fffffe00, 0x0038d800ff000000}; + v2u64_op2 = (v2u64){0x8080800000800080, 0x8000008000008080}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x0000008000008080}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff80ff00ff80ff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000900000009, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0xffffff7ffffffffe}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op2 = (v2u64){0x0000000000000103, 0x0000000100000000}; + v2u64_result = (v2u64){0x8000000000000103, 0x8000000100000000}; + __m128d_out = __lsx_vfmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.c new file mode 100644 index 0000000000..c25bb52bf3 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.c @@ -0,0 +1,153 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000002, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000002, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x01000041, 0xa000a041, 0x0028e0a1}; + v4i32_op1 = (v4i32){0x00000000, 0x00010001, 0x01000001, 0x00000000}; + v4i32_op2 = (v4i32){0xffff1fff, 0xffffe000, 0x01000001, 0x00000000}; + v4i32_result = (v4i32){0xffff1fff, 0xffffe000, 0x01000001, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + v4i32_op1 = (v4i32){0x00000003, 0x00000003, 0x00000002, 0x00000002}; + v4i32_op2 = (v4i32){0x3fc00000, 0x3fc00000, 0x3fc00000, 0x3fc00000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f020000, 0x7f020000, 0x7f040000, 0x7f400000}; + v4i32_op1 = (v4i32){0x003b0013, 0xfffefffe, 0x0014002c, 0xffffffff}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x3f6fb04d, 0xfffefffe, 0x3ea5016b, 0xffffffff}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x004f0080, 0x004f0080, 0x004f0080, 0x004f0080}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x7fff7fff, 0x7fff7fff}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x7fff7fff, 0x7fff7fff}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x3d3d3d3d, 0x3d3d3d3d, 0x3d3d3d3d, 0x3d3d3d3d}; + v4i32_op1 = (v4i32){0x00000000, 0x00100000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x0000bd3d, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00050005, 0x00050005, 0x00050005, 0x00050005}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xc48004c5, 0xe5c1a185, 0xc000c005, 0xe500c085}; + v4i32_op1 = (v4i32){0xffffc005, 0xffffc000, 0xffffffff, 0xffffffff}; + v4i32_op2 = (v4i32){0x005cffca, 0x00590013, 0x002a004b, 0xff550025}; + v4i32_result = (v4i32){0xffffc005, 0xffffc000, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x7fff7f00, 0x7fff7fff, 0x00cf005f, 0x00fe0001}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x7f6a007f, 0x5d7f5d00}; + v4i32_result = (v4i32){0x7fff7f00, 0x7fff7fff, 0x7f6a007f, 0x5d7f5d00}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xb9951901, 0xffff913b, 0xffffffda, 0x00680486}; + v4i32_op1 = (v4i32){0x01030103, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00200060, 0x00200060, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x001fed4d, 0xffff913b, 0xffffffda, 0x00000000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x001a000b, 0x001a001a, 0x001a0008, 0x001a001a}; + v4i32_op1 = (v4i32){0x0f800000, 0xff800001, 0xffffffff, 0xffffffff}; + v4i32_op2 = (v4i32){0xff800000, 0xff800000, 0xff800000, 0xff800000}; + v4i32_result = (v4i32){0xff800000, 0xffc00001, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfe01fa21, 0xfe03fe3f, 0xfe3bfe01, 0xfe3bfb01}; + v4i32_op1 = (v4i32){0xfe01fa21, 0xfe03fe3f, 0xfe3bfe01, 0xfe3bfb01}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffe001, 0xffffe001, 0xffffe001, 0xffffe001}; + v4i32_op1 = (v4i32){0x01ffe200, 0xffffe000, 0xffffffff, 0xffffffff}; + v4i32_op2 = (v4i32){0x83838404, 0x04040383, 0x83838404, 0x04040383}; + v4i32_result = (v4i32){0xffffe001, 0xffffe001, 0xffffe001, 0xffffe001}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x151d3756, 0x16151413, 0x17161514, 0x18171615}; + v4i32_op1 = (v4i32){0x80000000, 0x39412488, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x40f3fa00, 0x00000000, 0x3ff00000}; + v4i32_result = (v4i32){0x80000000, 0xc0f3fa00, 0x00000000, 0xbff00000}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000005, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x3ddc5dac, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x41f8e880, 0xfe486741, 0x63636b6a}; + v4i32_op1 = (v4i32){0x16161198, 0x41f8e080, 0x63abdf16, 0xe3636363}; + v4i32_op2 = (v4i32){0x00accf03, 0x00a975be, 0x00bccf42, 0x00c27580}; + v4i32_result = (v4i32){0xffffffff, 0x4471fb84, 0xff800000, 0xff800000}; + __m128_out = __lsx_vfmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmadd_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.c new file mode 100644 index 0000000000..8b2ffcb0f0 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.c @@ -0,0 +1,140 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0400040004000400, 0x0400040004000400}; + v2u64_result = (v2u64){0x0400040004000400, 0x0400040004000400}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01ff01ff01ff01ff, 0x01ff01ff01ff01ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x01ff01ff01ff01ff, 0x01ff01ff01ff01ff}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_result = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0xfdfef9ff0efff900, 0x0000000000000001}; + v2u64_result = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + v2u64_op1 = (v2u64){0xfffffffffffffff7, 0xfffffffffffffff7}; + v2u64_result = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc3818bffe7b7a7b8, 0x4399d3221a29d3f2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdb8f439722ec502d, 0x17c64aaef639f093}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x17c64aaef639f093}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0x10f881a20ffd02b0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x00000000ff800000, 0x10f881a20ffd02b0}; + __m128d_out = __lsx_vfmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c000ffffc000, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v2u64_result = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1748c4f9ed1a5870, 0x8000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.c new file mode 100644 index 0000000000..7c3d70e26e --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.c @@ -0,0 +1,146 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x0000ffff, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x0000ffff, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x3ef4be3a, 0x460f3b39, 0xb019323f, 0xc2409eda}; + v4i32_result = (v4i32){0x3ef4be3a, 0x460f3b39, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xba6f5543, 0xdffdbffe, 0x7f7f7f7e, 0xfefd7f7f}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x7f7f7f7e, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff0, 0xffffffff, 0xff84fff4, 0xff84fff4}; + v4i32_op1 = (v4i32){0xfffffff0, 0xffffffff, 0xff84fff4, 0xff84fff4}; + v4i32_result = (v4i32){0xfffffff0, 0xffffffff, 0xffc4fff4, 0xffc4fff4}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00007fff, 0x00007fff}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00007fff, 0x00007fff}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0xffffffff}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000001, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000001, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01010001, 0x01010001, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00020000, 0x00000000, 0x00020000, 0x00000000}; + v4i32_result = (v4i32){0x01010001, 0x01010001, 0x00020000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000001f, 0x0000001f, 0x00000020, 0x00000020}; + v4i32_result = (v4i32){0x0000001f, 0x0000001f, 0x00000020, 0x00000020}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xf3040705, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xf3040705, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xf3040705, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000004, 0x00000000, 0x00000004, 0x00000000}; + v4i32_op1 = (v4i32){0x00000004, 0x00000000, 0x00000004, 0x00000000}; + v4i32_result = (v4i32){0x00000004, 0x00000000, 0x00000004, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmax_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000fffe, 0x0000ffff, 0x0000ffff, 0x0000ffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffe5, 0xffffffff, 0xffffffe5, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x100f0e0d, 0x11100f0e, 0x1211100f, 0x13121110}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff3, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000088, 0x00000000, 0x00000008, 0x00000000}; + v4i32_result = (v4i32){0x00000088, 0x00000000, 0x00000008, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xadadadad, 0x52525252, 0xadadadad, 0x52525252}; + v4i32_op1 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_result = (v4i32){0xadadadad, 0x00000000, 0xadadadad, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffff, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000ffff, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x0000ffff, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmin_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmax_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.c new file mode 100644 index 0000000000..0ba9e9c411 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.c @@ -0,0 +1,110 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000800000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + v2u64_op1 = (v2u64){0x00000af555555555, 0x00000af555555555}; + v2u64_result = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000010000000000}; + v2u64_op1 = (v2u64){0x0000010000000000, 0x0000010000000000}; + v2u64_result = (v2u64){0x0000010000000000, 0x0000010000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x10f8000000000000}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0xfff8ffa2fffdffb0}; + v2u64_result = (v2u64){0x00000000ff800000, 0x10f8000000000000}; + __m128d_out = __lsx_vfmaxa_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000200000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000200000000}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000100000000}; + v2u64_op1 = (v2u64){0x80000000fff6fc00, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000080000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000080000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000158}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffe0004fffe0004, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x002a001a001a000b}; + v2u64_result = (v2u64){0x0000000000000000, 0x002a001a001a000b}; + __m128d_out = __lsx_vfmina_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.c new file mode 100644 index 0000000000..1488bcf48a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.c @@ -0,0 +1,104 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2f4ef4a8, 0xf436f3f5, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0xff800000, 0x00000000, 0xff800000}; + v4i32_result = (v4i32){0x2f4ef4a8, 0xff800000, 0x00000000, 0xff800000}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000800, 0x00000000, 0x00000800}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000800, 0x00000000, 0x00000800}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xc0c0c000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x0080006b, 0x00800080, 0x00800080}; + v4i32_result = (v4i32){0x00000000, 0x0080006b, 0xc0c0c000, 0x00800080}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x80000000, 0x00000000, 0x80000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmaxa_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x0000fffc, 0x00000000, 0x0000ff7d, 0xff01ff01}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xd46cdc13, 0x00000000, 0xdfa6e0c6, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0101fe87, 0x010101fe, 0x01010101, 0x01010101}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0xffff0000, 0xffff0000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfmina_s((__m128)v4i32_op0, (__m128)v4i32_op1); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfmaxa_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.c new file mode 100644 index 0000000000..f6c9bf1e89 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.c @@ -0,0 +1,132 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x9f9e7e3e9ea3ff41, 0xef0179a47c793879}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + v2u64_result = (v2u64){0x9e801ffc7fc00000, 0xffc000007fc00000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x3f8000003f800000}; + v2u64_op2 = (v2u64){0x0000ffff00000000, 0x0000ffff00000000}; + v2u64_result = (v2u64){0x8000ffff00000000, 0x8000ffff00000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + v2u64_op1 = (v2u64){0xffffffff00000001, 0x0000000008800022}; + v2u64_op2 = (v2u64){0x6477d042343cce24, 0xb8ec43befe38e64b}; + v2u64_result = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffff000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000060000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfffffffffffff000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffafffffffa, 0xfffffffafffffffa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf8f8f8f8f8f8f8f8, 0xf8f8f8f8f8f8f8f8}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000008000000080, 0x0000008000000080}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff76ffd8ffe6ffaa, 0xff80ffa2fff0ff74}; + v2u64_op1 = (v2u64){0xff76ffd8ffe6ffaa, 0xff80ffa2fff0ff74}; + v2u64_op2 = (v2u64){0x0303030303030303, 0x0303030303030303}; + v2u64_result = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128d_out = __lsx_vfnmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0xffffffff00000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0001ffff0001ffff, 0x0001ffff00000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xff800000ff800000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000000b5207f80, 0x0000000000000000}; + v2u64_result = (v2u64){0x00000000b5207f80, 0x8000000000000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_result = (v2u64){0xffffffffffffffff, 0x8000000000000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000009000900, 0x0000000009000900}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_result = (v2u64){0x00000000ffffffff, 0x8000000000000000}; + __m128d_out = __lsx_vfnmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.c new file mode 100644 index 0000000000..043d24ce40 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.c @@ -0,0 +1,153 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0xbe6ed565, 0xfffffffe, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x3c90260e, 0x6a1a3fbb, 0x5d04acbb, 0x195f307a}; + v4i32_op2 = (v4i32){0xbe6ed565, 0xfffffffe, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0x3e730941, 0xfffffffe, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff01ff01, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0xff01ff01, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0x7f01ff01, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0xffffffff, 0x00000000, 0xffffffff, 0x00000000}; + v4i32_op2 = (v4i32){0xff800000, 0x0040007f, 0x003f80b0, 0x00307028}; + v4i32_result = (v4i32){0xffffffff, 0x8040007f, 0xffffffff, 0x80307028}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x00000001, 0x0000004d, 0x00000049}; + v4i32_op1 = (v4i32){0x00000000, 0x00000001, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000001, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0xffffffff, 0x80000001, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00ff0000, 0x00ff0000, 0xffff0000, 0xffffffff}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000800, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0xfffff800, 0xffffffff}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0xfffff800, 0xffffffff}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010000, 0x00020000, 0x00010000, 0x00030000}; + v4i32_op1 = (v4i32){0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000}; + v4i32_op2 = (v4i32){0x00010000, 0x00020000, 0x00010000, 0x00030000}; + v4i32_result = (v4i32){0x80020000, 0x80040000, 0x80020000, 0x80060000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000408, 0x00000000, 0x97957687, 0x00000008}; + v4i32_op1 = (v4i32){0x00000408, 0x00000000, 0x97957687, 0x00000008}; + v4i32_op2 = (v4i32){0x04000800, 0x00010001, 0x00010001, 0x00010001}; + v4i32_result = (v4i32){0x84000800, 0x80010001, 0x80010001, 0x80010001}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x0000ffc1, 0x00000007, 0xffc2ffe7}; + v4i32_op1 = (v4i32){0x00010001, 0x0000ffc1, 0x00000007, 0xffc2ffe7}; + v4i32_op2 = (v4i32){0x00000000, 0x00201df0, 0x000ffc2f, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80201df0, 0x800ffc2f, 0xffc2ffe7}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000005, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80800008, 0x80808080, 0x80808080, 0x80808080}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x31313131, 0x31313131, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x31313131, 0x31313131, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000008, 0x00000000}; + v4i32_result = (v4i32){0xa2f54a1e, 0xa2f54a1e, 0x80000008, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmadd_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x2e635d65, 0x58bcc201, 0x157ca12e, 0xa486c90f}; + v4i32_op1 = (v4i32){0x79ffa22f, 0x8dc5a4d1, 0xf8760005, 0x6d564875}; + v4i32_op2 = (v4i32){0x5f94ab13, 0x0fa96b88, 0xd2436487, 0xffffffff}; + v4i32_result = (v4i32){0xe8e309ed, 0x2711bad1, 0xd24271c4, 0xffffffff}; + __m128_out = __lsx_vfnmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x80000000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x01400840, 0x007ffd00, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x01400840, 0x007ffd00, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0x00000000, 0x7f800000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x80000000, 0x7f800000, 0x80000000, 0x80000000}; + __m128_out = __lsx_vfnmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op1 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_op2 = (v4i32){0xcd636363, 0xcd636363, 0xcd636363, 0xcd636363}; + v4i32_result = (v4i32){0xcd636363, 0xcd636363, 0xcd636363, 0xcd636363}; + __m128_out = __lsx_vfnmsub_s((__m128)v4i32_op0, (__m128)v4i32_op1, (__m128)v4i32_op2); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfnmadd_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.c new file mode 100644 index 0000000000..b2fec16439 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.c @@ -0,0 +1,250 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe0404041e0404041, 0xe0404041e0404041}; + __m128i_result = (__m128i){0xe0404041e0404041, 0xe0404041e0404041}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080800000808, 0x0000080800000808}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000868686868686, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa2e1a2601ff01ff0, 0x98ff98ff220e220d}; + __m128i_result = (__m128i){0x8000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000004}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ccf98000, 0x00000000abba7980}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_result = (__m128i){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x110053f401e7cced, 0x5847b72626ce61ef}; + __m128i_result = (__m128i){0x0000000000000000, 0x5847b72626ce61ef}; + __m128i_out = __lsx_vfrintrz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc002000000000, 0x0000000000002000}; + __m128i_result = (__m128i){0xfffc002000000000, 0x3ff0000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x3ff0000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x0000007f00ff00ff}; + __m128i_result = (__m128i){0x3ff0000000000000, 0x3ff0000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000077af9450, 0x0000000000000000}; + __m128i_result = (__m128i){0x3ff0000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffff02fff4, 0xff02ff1bff02ff23}; + __m128i_result = (__m128i){0x0000000000000000, 0xff02ff1bff02ff23}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6a57a30ff0000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x6a57a30ff0000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f81e3779b97f4a8, 0xffffffff02000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff02000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000000000000, 0x0001000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000700020005, 0x0003000300030003}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_result = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff003000ff00a0, 0x00ff000100ff00fe}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x96198318780e32c5, 0xfd200ed2fd370775}; + v2u64_result = (v2u64){0x8000000000000000, 0xfd200ed2fd370775}; + __m128d_out = __lsx_vfrint_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.c new file mode 100644 index 0000000000..ff9a746041 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.c @@ -0,0 +1,240 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00130013, 0x00130013, 0x00130013, 0x00130013}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x20207fff, 0x20202020, 0x20202020, 0x20202020}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x01f50000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00020004, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffbfffb, 0xfffbfffb, 0xfffbfffb, 0xfffbfffb}; + __m128i_result = (__m128i){0xfffbfffbfffbfffb, 0xfffbfffbfffbfffb}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfe7f0000, 0x00000000, 0x0efc01af, 0x0ff780a1}; + __m128i_result = (__m128i){0x00000000fe7f0000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrne_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff730f, 0xffffffff, 0x3c992b2e, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffff730f, 0xffffffff00000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000016, 0x00000000, 0x00000001, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x15141312, 0x16151413, 0x17161514, 0x18171615}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x78285a4a, 0xf0bc9a52, 0x4acfaf40, 0x62cbf96e}; + __m128i_result = (__m128i){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrz_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xefffffff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000efffffff}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffff00, 0xffffffff, 0xffffff00, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff4417, 0xffff6080, 0xffff57c9, 0xffffb96b}; + __m128i_result = (__m128i){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4acfaf40, 0x62cbf96e, 0x00ff00ff, 0x00ff00ff}; + __m128i_result = (__m128i){0x62cbf96e4acfaf40, 0x3f8000003f800000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x1fe02000, 0x00000000, 0x00002000, 0x00000000}; + __m128i_result = (__m128i){0x000000003f800000, 0x000000003f800000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x16161198, 0x41f8e080, 0x63abdf16, 0x63636363}; + __m128i_result = (__m128i){0x420000003f800000, 0x6363636363abdf16}; + __m128i_out = __lsx_vfrintrp_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x54691124, 0x8003caef, 0x856ba83b, 0xa5c4c774}; + __m128i_result = (__m128i){0xbf80000054691124, 0xbf800000bf800000}; + __m128i_out = __lsx_vfrintrm_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff960015, 0xffffffff, 0x00010002, 0x00000000}; + __m128i_result = (__m128i){0xffffffffffd60015, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrintrm_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00060002, 0x00030000, 0x00100010}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00013fa0, 0x00000001, 0xca02f854, 0x00000001}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0xca02f854, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000b5f2, 0x00000351, 0x00007081, 0x000000ad}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00ff010f, 0x00ff00ff, 0x00ff010f, 0x00ff00ef}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfrint_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrint_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.c new file mode 100644 index 0000000000..5497d54d97 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.c @@ -0,0 +1,146 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0404038383838404, 0x0404038383838404}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x03ff03ff03ff03ff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000000}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000000}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000003f803f4, 0x0e7ffffc01fffffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000003f803f4, 0x0e7ffffc01fffffc}; + __m128i_result = (__m128i){0x0000001003f803f4, 0x0e7ffffc01fffffc}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000800}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000020000007d, 0x0000000200000002}; + v2u64_op1 = (v2u64){0x0000586100015567, 0x0000746400016388}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000020000007d, 0x0800000200000002}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + v2u64_op2 = (v2u64){0x61608654a2d4f6da, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ff08ffff}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000aaaa}; + v2u64_op1 = (v2u64){0x0000000081a83bea, 0x00000000545cab1d}; + v2u64_op2 = (v2u64){0x00d3007c014e00bd, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000aaaa}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bc2000007e10, 0x0000400080003fff}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000bc2000007e04, 0x0000400080003fff}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a753500950fa306, 0x000000000a752a55}; + v2u64_op1 = (v2u64){0x14ea6a002a406a00, 0xffffffff14eb54ab}; + v2u64_op2 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0a753500950fa306, 0x000000000a752a55}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010001000100010, 0x0010001000100010}; + v2u64_op2 = (v2u64){0x0000000000000155, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff100000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrstp_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020100fedd0c00, 0xfe07e5fefefdddfe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0005000501800005}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00020100fedd0008, 0xfe07e5fefefdddfe}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000010, 0x0000000000000010}; + __m128i_result = (__m128i){0xffffffffffff0008, 0xffffffffffffffff}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x36fbdfdcffdcffdc, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x1f1f1f27332b9f00, 0x1f1f1f1f1f1f1f00}; + __m128i_result = (__m128i){0x36fbdfdcffdc0008, 0x0000000000000000}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + v2u64_op1 = (v2u64){0x0000003a0000003a, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x37c0001000000008, 0x37c0001000000000}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8080808080800008, 0x8080808080808080}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f1f1f1f1f1f1f1f, 0x1f1f1f1f1f1f1f1f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x1f1f1f1f1f1f1f1f, 0x1f1f1f1f1f1f1f1f}; + __m128i_result = (__m128i){0x1f1f1f1f1f1f1f1f, 0x00081f1f1f1f1f1f}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b169bbb8145f50, 0x02b010f881a281a2}; + v2u64_op1 = (v2u64){0x27b169bbb8145f50, 0x02b010f881a281a2}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x27b169bbb8140001, 0x02b010f881a281a2}; + __m128i_out = __lsx_vfrstp_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstp.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.c new file mode 100644 index 0000000000..b0be19a1bf --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.c @@ -0,0 +1,146 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000007f00000004, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0001000100000004, 0x0000000401000001}; + __m128i_result = (__m128i){0x0000007f00000004, 0x0000000110000001}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xeef8227b4f8017b1, 0x75b043c4d17db125}; + v2u64_op1 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + __m128i_result = (__m128i){0xeef8227b4f8017b1, 0x75b043c4007db125}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x03c0038000000380, 0x03c0000000000000}; + __m128i_result = (__m128i){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5b35342c979955da, 0x0000000000000009}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x5b35342c970455da, 0x0000000000000009}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001002affca0070, 0x00d3012b015700bb}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_result = (__m128i){0x00010000ffca0070, 0x00d3012b015700bb}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001b, 0x000000000000001b}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000001b, 0x000000000000001b}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x379674c000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + __m128i_result = (__m128i){0x379674c000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x02f3030303030303, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x004d004d004d004d, 0x004d004d004d004d}; + __m128i_result = (__m128i){0x02f3030303100303, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_b((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f4300177f7a7f59, 0x0027002a00030018}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f4300177f7a7f59, 0x0027002a00080018}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000800000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000010a000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ffff000000ff00, 0x00ffff0000000000}; + __m128i_result = (__m128i){0x00000000010a000b, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0008000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffe0001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000002bb, 0x00000000000000bf}; + __m128i_result = (__m128i){0x00080000fffe0001, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff81a800003bea, 0x0000545cffffab1d}; + v2u64_op1 = (v2u64){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + __m128i_result = (__m128i){0xffff81a800003bea, 0x0000545cffff0001}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0008000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000800000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0008000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000800000000}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001a001a001a000b, 0x001a001a001a000b}; + v2u64_op1 = (v2u64){0x001a001a001a000b, 0x001a001a001a000b}; + __m128i_result = (__m128i){0x001a001a001a000b, 0x001a001a001a0008}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007770ffff941d, 0x000000400000004c}; + v2u64_op1 = (v2u64){0x00007770ffff941d, 0x000000400000004c}; + __m128i_result = (__m128i){0x00007770ffff941d, 0x000000400000004c}; + __m128i_out = __lsx_vfrstpi_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfrstpi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.c new file mode 100644 index 0000000000..71ed8e76a1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.c @@ -0,0 +1,160 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000058bcc201, 0xffffffffa486c90f}; + v2u64_result = (v2u64){0x1f52d710bf295626, 0xffffffffa486c90f}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000be00be, 0x0000000000000000}; + v2u64_result = (v2u64){0x1f1b917c9f3d5e05, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001400000000, 0xffffffff00000000}; + v2u64_result = (v2u64){0x1f81e3779b97f4a8, 0xffffffff00000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_result = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001effae001effae, 0x001effae001effae}; + v2u64_result = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + v2u64_result = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + __m128d_out = __lsx_vfsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003f8000000000, 0x00003f8000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_result = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffa0000, 0x00000000fffa0000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe593c8c4e593c8c4, 0xff800000ff800000}; + v2u64_result = (v2u64){0x9a49e11102834d70, 0x805ffffe01001fe0}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252dcdcdcdcdcdc, 0x5252525252525252}; + v2u64_result = (v2u64){0x2d8b24b936d1b24d, 0x2d8bf1f8fc7e3f20}; + __m128d_out = __lsx_vfrecip_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xffffffffffffffff}; + v2u64_result = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001ffff0001ffff, 0x0001ffff00000000}; + v2u64_result = (v2u64){0x5ff6a0a40e9da42a, 0x5ff6a0a40ea8f47c}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000f, 0x0000000000000000}; + v2u64_result = (v2u64){0x61608654a2d4f6da, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0xffff0000ffff0000}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0x00fe000100cf005f}; + v2u64_result = (v2u64){0x7fff7fff7fff7fff, 0x5f675e96e29a5a60}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_result = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128d_out = __lsx_vfrsqrt_d((__m128)v2u64_op0); + check_lsx_out(&v2u64_result, &__m128d_out, sizeof(__m128d_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_d.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.c b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.c new file mode 100644 index 0000000000..fbe3c0f7da --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.c @@ -0,0 +1,180 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2, v2u64_result; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2, v4i32_result; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0xfedd0c00, 0x00020100, 0xfefdddfe, 0xfe07e5fe}; + v4i32_result = (v4i32){0x7fc00000, 0x1e801ffc, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff00ff00, 0xff00ff00, 0xff00ff00, 0xff00ff00}; + v4i32_result = (v4i32){0x7fc00000, 0x7fc00000, 0x7fc00000, 0x7fc00000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x76208329, 0xbc84cf6f, 0x137e54af, 0x8c7fc73a}; + v4i32_result = (v4i32){0x5acab5a5, 0x7fc00000, 0x297f29fe, 0x7fc00000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffba5f, 0xfffffe79, 0xffff9727, 0xffff9727}; + v4i32_result = (v4i32){0xffffba5f, 0xfffffe79, 0xffff9727, 0xffff9727}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128_out = __lsx_vfsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000003, 0x00000003, 0x00000002, 0x00000002}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x51cfd7c0, 0x00000000, 0xf6e91c00}; + v4i32_result = (v4i32){0x7f800000, 0x2d1da85b, 0x7f800000, 0x880c91b8}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffa, 0xfffffffa, 0xfffffffa, 0xfffffffa}; + v4i32_result = (v4i32){0xfffffffa, 0xfffffffa, 0xfffffffa, 0xfffffffa}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0001, 0xffff0001, 0xffff0001, 0xffff0001}; + v4i32_result = (v4i32){0xffff0001, 0xffff0001, 0xffff0001, 0xffff0001}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0a000000, 0x0a000000, 0x0a000000, 0x0a000000}; + v4i32_result = (v4i32){0x75000000, 0x75000000, 0x75000000, 0x75000000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrecip_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfff80000, 0x00000000, 0xfff8fff8, 0x00000000}; + v4i32_result = (v4i32){0xfff80000, 0x7f800000, 0xfff8fff8, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x9f3d5e05, 0x1f1b917c, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7fc00000, 0x4fa432d6, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xb880eb98, 0x12835580, 0xffffffff, 0xffffffff}; + v4i32_result = (v4i32){0x7fc00000, 0x55fcbad1, 0xffffffff, 0xffffffff}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x03e8157e, 0x0707f8f8, 0x00000807, 0x06070607}; + v4i32_result = (v4i32){0x5d3e1e1d, 0x5bafa1dd, 0x61ff9049, 0x5c303f97}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffe01ff, 0xfffbfffe, 0xfffa01ff, 0xfff7fffe}; + v4i32_result = (v4i32){0xfffe01ff, 0xfffbfffe, 0xfffa01ff, 0xfff7fffe}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x7f800000, 0x7f800000, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x44000000, 0x00000000, 0x45000000}; + v4i32_result = (v4i32){0x7f800000, 0x3d3504f3, 0x7f800000, 0x3cb504f3}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00020002, 0x00020001, 0x00000000, 0x00000000}; + v4i32_result = (v4i32){0x607fff80, 0x607fffc0, 0x7f800000, 0x7f800000}; + __m128_out = __lsx_vfrsqrt_s((__m128)v4i32_op0); + check_lsx_out(&v4i32_result, &__m128_out, sizeof(__m128_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vfsqrt_s.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.c new file mode 100644 index 0000000000..15a6388a6d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.c @@ -0,0 +1,255 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff0000000000, 0x000000ffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000b5207f80, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff007f00000000, 0xffff007f00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0f3fa0080000000, 0xbff0000000000000}; + __m128i_result = (__m128i){0xfffffffffffec060, 0xffffffffffffffff}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000e41b, 0x0000000015d926c7}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff7777ffff7777, 0x0000777777777777}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000004000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff80ffffffff, 0xff80ffffffffff80}; + __m128i_result = (__m128i){0x0000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000040d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff000000ff0000, 0x0008000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9f4fcfcfcf800000, 0x004f1fcfd01f9f9f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e3faa293c, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_l_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.c new file mode 100644 index 0000000000..71c4ae08de --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.c @@ -0,0 +1,395 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0b6f8095, 0x101f8b68, 0x969e00f2, 0x887c8beb}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x000001fc, 0x00020000, 0x00020000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0001, 0x00020000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xa9fa0d06, 0x0a753500, 0x0a752a55, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrnel_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7ffffffe, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0xfffffffe, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7ffeffff, 0x00000001, 0x7ffeffff, 0x00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrneh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00ff00ff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffeffff, 0xfffefffe, 0xfffeffff, 0xfffefffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0a4f0000, 0x0a960e6b, 0x0bde0853, 0x0000033a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xe0da6499, 0x20c4e0c4, 0x8400c4e3, 0x6420e020}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7bffffff, 0xffffffff, 0xfbffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x15141312, 0x16151413, 0x17161514, 0x18171615}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x009c0000, 0x046a09ec, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4f4f4f4f, 0x4f4f4f4f, 0x4f4f4f4f, 0x4f4f4f4f}; + __m128i_result = (__m128i){0x00000000cf4f4f00, 0x00000000cf4f4f00}; + __m128i_out = __lsx_vftintrzh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xffffffff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x7fffffff, 0x7fffffff, 0x7fffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00140014, 0x00000014, 0x0000007e, 0x000d0254}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80000000, 0x39412488, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000014, 0x00000000, 0x00000014, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x3b000000, 0x2e34594c, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrpl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80638063, 0x80808080, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrph_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrph_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000080, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vftintrph_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrph_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7ffffffe, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x7ff000ff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrml_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x80000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrmh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrmh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4acfaf40, 0x62cbf96e, 0x00ff00ff, 0x00ff00ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrmh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00ff0000, 0x0000ac26, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrmh_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00124888, 0x00000000, 0x00d4ccb8, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0xfff00000, 0x00000000, 0xfff00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80000000, 0x7fffffff, 0xffffd860, 0x80000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00008000, 0x00000000, 0x00008000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintl_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7ffffffe, 0xffffffff, 0xff80ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4f804f80, 0x4f804f80, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x0000007b, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000600}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x3f800000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x04870ba0, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00007176, 0x00009c7c, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000020, 0x00000000, 0x0667ae56, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftinth_l_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.c new file mode 100644 index 0000000000..d675f476c4 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.c @@ -0,0 +1,638 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0x00000000, 0x42652524, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000003900000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0xff00ff7f}; + __m128i_result = (__m128i){0x0000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f800000, 0x2d1da85b, 0x7f800000, 0xffffffff}; + __m128i_result = (__m128i){0x000000007fffffff, 0x000000007fffffff}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x8040007f, 0xffffffff, 0x80307028}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x03010302, 0x00000000, 0x03050302, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x1d37b5a1, 0x03aa355e, 0xa79308f6, 0x000aa822}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0000, 0xffffffff, 0x00000000, 0xffffff00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff7, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff0, 0xffffffff, 0xff84fff4, 0xff84fff4}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x07ffc000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffff, 0xffff0000, 0xffffffff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfbd2e34b, 0x6db7da53, 0xc61e81ef, 0xf039b8c0}; + __m128i_result = (__m128i){0x7fffffff80000000, 0x80000000ffffd860}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffff0001, 0x00020000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x94027113, 0x00d57017, 0x50a27112, 0x00027113}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000007fffffff}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x7f3b7f21, 0x7f3b7f3f, 0x7e017f01, 0xff80ff80}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x000000007fffffff}; + __m128i_out = __lsx_vftintrz_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x041b0013, 0x00001802, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0x7ffffffe, 0xffffffff, 0xff80ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010001, 0x00010001, 0x00010001, 0x00010001}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xdefb5ada, 0x5f5f7bfe, 0xfedbfefe, 0xfffffadf}; + __m128i_result = (__m128i){0x7fffffff80000000, 0x0000000080000000}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x084314a6, 0x00000001, 0x084314a6, 0x00000001}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000003b, 0x000ef000, 0x3a800000, 0x3a800000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x09610001, 0x00000000, 0x10404000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0xfffffff7, 0x0000001a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00040004, 0x00040004, 0x00040004, 0x00040004}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xff00ff00, 0x00ffff00, 0xff00ff00, 0x00ffff00}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000080000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xc0ff00ff, 0xc03fc03f, 0x013ec13e, 0x00000000}; + __m128i_result = (__m128i){0xfffffffdfffffff8, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x43800000, 0x43800000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000010000000100, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000014, 0x00000000, 0x00000014, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffff, 0x0000ffff, 0x00000000, 0x0000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffe, 0x00000001, 0xfffffffe, 0x00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010000, 0x00010001, 0x00040100, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000ffff, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffffe, 0x00000001, 0xfffffffe, 0x00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00130000, 0xffd30000, 0x00130000, 0xffd30000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x4dec4089, 0xe101e001, 0x4deb2610, 0xe1000000}; + __m128i_result = (__m128i){0x800000001d881120, 0x800000001d64c200}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x80000000, 0x76f42488, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x7fffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000001f, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x003f003f, 0xffc0ffc0, 0xffc0003f, 0x003fffc0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff8000000000, 0xffffff7fffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0x00000000fefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000002bfd9461, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000004fc04f80, 0x000000004fc04f81}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001f, 0x000000000000001f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000003a0000003a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000068, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe22b3595efa4aa0c, 0x4429146a7b4c88b2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffff80000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000400000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffffff5, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x7fffffff7fffffff}; + v2u64_op1 = (v2u64){0xe7e5dabf00010001, 0xe7e5560400010001}; + __m128i_result = (__m128i){0x8000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000008ffffa209, 0x0000000600007fff}; + v2u64_op1 = (v2u64){0x046a09ec009c0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrne_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x8000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8040007fffffffff, 0x80307028ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ffeffff7bfff828, 0x7fff0007e215b122}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000011ff040, 0xffffffffffffffee}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000047fe2f0, 0x00000000047fe2f0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200000, 0x004200a000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000101fd01fe, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c2f90000bafa, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fffff800, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000000000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0804080407040804, 0x0101080408040804}; + v2u64_op1 = (v2u64){0x0804080407040804, 0x0101080408040804}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000003ffda00f3, 0x00000003ffda00f3}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x061202bffb141c38, 0xffa6ff91fdd8ef77}; + v2u64_op1 = (v2u64){0x8160cdd2f365ed0d, 0xfefffffffed08f77}; + __m128i_result = (__m128i){0x8000000000000000, 0x8000000000000001}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f801fe000000000, 0x3f413f4100000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000017fffffff}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + v2u64_op1 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_result = (__m128i){0x8000000080000000, 0x8000000080000000}; + __m128i_out = __lsx_vftintrp_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0800080008000800, 0x0800080008000800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000202fe02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff00fc0000ff02, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7ffffffb, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000ff00ff, 0x0000000000ff00ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrm_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0xfffffffffffff800}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff00000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f0080000f800, 0x0000e0180000e810}; + v2u64_op1 = (v2u64){0x0000f0080000f800, 0x0000e0180000e810}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ff8000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9c9c9c9c9c9c9c9c, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0202f5f80000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.c b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.c new file mode 100644 index 0000000000..1a5e80f2c5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.c @@ -0,0 +1,225 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v4i32_op0 = (v4i32){0xffffffff, 0xfffffffe, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00010000, 0x00002000, 0x02020202, 0x02020004}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x0000003f, 0x00000001, 0x7fff7fff, 0x7fff7fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x808000ff, 0x000000ff, 0x808000ff, 0x000000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000010, 0x00000001, 0x7f7f7f7f, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x10000000, 0x10000000, 0x00002000, 0x00002000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000001, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xed3f2000, 0xc8847ef6, 0xb2ebb000, 0x67eb85af}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080000000000000, 0x0080000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x800000001d881120, 0x800000001d64c200}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000016fff9dff, 0x00000000f0009d3c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000040a04000, 0x0000000040a04000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000800080008000, 0x8000800080008000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03fc03fc03fc03fc, 0x0001000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftintrz_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + +v4i32_op0 = (v4i32){0x00006549, 0x0000c0f1, 0x000047cd, 0x0000c77c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000001, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0xfffffff0, 0xffffffff, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000004, 0xffffffee, 0x00000001, 0xffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x0000ffff, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x00000000, 0x00000000, 0x00000000, 0x00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v4i32_op0 = (v4i32){0x63636363, 0x63636363, 0x63636363, 0x63636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vftint_wu_s((__m128)v4i32_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000400000007004, 0x0000400000004000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6a57a30ff0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f0001000000000, 0x40f0001000000000}; + __m128i_result = (__m128i){0x0000000000010001, 0x0000000000010001}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0000000000000014}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000022001818, 0x000000009c83e21a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vftint_lu_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vftint-4.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.c new file mode 100644 index 0000000000..d83ee65379 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.c @@ -0,0 +1,332 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x870968c1f56bb3cd, 0x4ee85545068f3133}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff870068fff5ffb3, 0x004e005500060031}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f000000000000, 0xfff082f000000000}; + v2u64_op1 = (v2u64){0xc000000000000001, 0xc04d600d3aded151}; + __m128i_result = (__m128i){0x0000000000000001, 0x004cff8fffde0051}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ff0000000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0x800000007fffffff, 0x800000007fffffff}; + __m128i_result = (__m128i){0x003f0000ffffffff, 0x003f0000ffffffff}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001fffc0001fffc, 0x0042003e0042002f}; + __m128i_result = (__m128i){0x0001fffc0001fffc, 0x0042003e0042002f}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000100fffffefd, 0x0000750500006541}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00ffff00, 0xffffffffff00ff00}; + v2u64_op1 = (v2u64){0xfffffffffffffff7, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffe000000f6, 0xffffffffffffff00}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4050000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000f80007, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000f8, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff80ffffffff, 0xff80ffffffffff80}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000fffffffe, 0xffffff7ffffffffe}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xce9035c49ffff570, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xce9035c49ffff574, 0x0000000000000004}; + __m128i_result = (__m128i){0x00000454ffff9573, 0x0000000000000004}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7d187e427c993f80, 0x80007fc000003f00}; + v2u64_op1 = (v2u64){0x7500000075000000, 0x7500000075000000}; + __m128i_result = (__m128i){0x00007d1800007c99, 0xffff800000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5555000154100155, 0x5555000054100000}; + __m128i_result = (__m128i){0x0000000100000155, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000200, 0x0000000000000200}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffebe6ed565, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffebe6ed565, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffbe6ed563, 0xfffffffffffffffe}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000078c00000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7d3ac60000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000007d3ac600, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fffffffc6bb97ac, 0x7fffffff82bb9784}; + __m128i_result = (__m128i){0xffffffffc6bb97ac, 0xffffffff82bb9784}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + v2u64_op1 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + __m128i_result = (__m128i){0x00000000003effff, 0x00000000003effff}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xf359f359f359f359, 0xf359f359f359f359}; + __m128i_result = (__m128i){0xfffffffff359f358, 0xfffffffff359f358}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0000000063636363, 0x00000000e2e36363}; + __m128i_out = __lsx_vhaddw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffffe000, 0xffffe000ffffe000}; + v2u64_op1 = (v2u64){0xffffffff02000200, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffe00001ffe200, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe400000003ffc001, 0x0000000000000383}; + v2u64_op1 = (v2u64){0xffffe000ffff1fff, 0x0000000001000001}; + __m128i_result = (__m128i){0xffffe000ffff2382, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010000, 0x03574e39e496cbc9}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x03574e38e496cbc9, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa9ec4882f216ea11, 0xabff54e911f71b07}; + v2u64_op1 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + __m128i_result = (__m128i){0xaa0051e90ff91808, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffe00000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000030000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x000000030000003f, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0xffff0001ffff9514, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x9c9c9c9c9c9c9c9c, 0xffffffffffffffff}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000001, 0x0000000200000000}; + v2u64_op1 = (v2u64){0x0002000200000001, 0x0000000200000000}; + __m128i_result = (__m128i){0x0002000400000001, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f3b7f3f7f3b7f21, 0xff80ff807e017f01}; + v2u64_op1 = (v2u64){0x0a000000f6000000, 0x0a0000001e000000}; + __m128i_result = (__m128i){0x0980ff8174017f01, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0x000ef0000000003b, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000011ff040, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000011ff040, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.c new file mode 100644 index 0000000000..1b17464b13 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.c @@ -0,0 +1,308 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000ff0000, 0x0000000000ff00ff}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff80000000000000, 0xff80000000000000}; + __m128i_result = (__m128i){0x0080000000000000, 0x0080000000000000}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0052005200520052, 0x0052005200520052}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000fffd, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00ff00ff000000ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000049ffffffaa, 0x00060012000e002b}; + v2u64_op1 = (v2u64){0x000000127fffffea, 0x000000060000000e}; + __m128i_result = (__m128i){0x0000001201fe01e9, 0x000000060000000e}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x007f008000ea007f}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x0000000000000000}; + __m128i_result = (__m128i){0x00009f0000009f00, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000bd3d00000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001f, 0x000000000000001f}; + v2u64_op1 = (v2u64){0xffff007f00000000, 0xffff007f00000000}; + __m128i_result = (__m128i){0x0000007f00000000, 0x0000007f00000000}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x28bf0351ec69b5f2, 0x7ef400ad21fc7081}; + __m128i_result = (__m128i){0x000003510000b5f2, 0x000000ad00007081}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xadad52525252adad, 0x5252adadadadadad}; + __m128i_result = (__m128i){0x000052520000adad, 0x0000adad0000adad}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff8000010f78, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x002a001a001a000b}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000001a0000000b}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00feff8000ff80ff, 0x7500000075007500}; + v2u64_op1 = (v2u64){0x00007d1800007c99, 0xffff800000000000}; + __m128i_result = (__m128i){0x00007e1600007d98, 0x0000f50000007500}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc1fc7941bc7e00ff, 0xffff760386bdae46}; + v2u64_op1 = (v2u64){0x0802080408060803, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ca000000c481, 0x0000ffff000086bd}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000007fff9, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5efeb3165bd7653d, 0xffff2356fe165486}; + __m128i_result = (__m128i){0x0000b31600006544, 0x0000235600005486}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdd3b8b02563b2d7b, 0x9c83e21a22001818}; + v2u64_op1 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_out = __lsx_vhaddw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0024d8f6a494006a, 0xa8beed87bc3f2be1}; + v2u64_op1 = (v2u64){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_result = (__m128i){0x000000010024d8f5, 0x00000001a8beed86}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000078c00000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6a57a30ff0000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x00000000f0000000, 0x0000000000000001}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000040d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x8000000083ff0be0, 0x80000000b57ec564}; + __m128i_result = (__m128i){0x0000000183ff0bdf, 0x00000001b57ec563}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000e2e3ffffd1d3}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x000000008000e2e3}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200010002}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0000000200010002}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000010004}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000001fffffffe}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001000000000, 0x0000001000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vhaddw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x870968c1f56bb3cd, 0x4ee85545ffffffff}; + __m128i_result = (__m128i){0x870968c1f56bb3cd, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000013d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0006000200000000, 0x0010001000030000}; + __m128i_result = (__m128i){0x0006000200000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0x0000000000000001}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001b, 0x000000000000001b}; + v2u64_op1 = (v2u64){0x00000000001b0000, 0x00000000001b0000}; + __m128i_result = (__m128i){0x00000000001b001b, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000004870ba0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000004870ba0, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000010000000, 0x0000000010000000}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + __m128i_result = (__m128i){0xff8000010f800000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x00000000000003e2}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhaddw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhaddw-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.c new file mode 100644 index 0000000000..a711d2d696 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fffffc00, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000010000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00007f8000007f80, 0x00007f8000007f80}; + __m128i_result = (__m128i){0x0000008000000080, 0x0000008000000080}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff07effffe, 0xffffffffffffff00}; + __m128i_result = (__m128i){0x0001000100110002, 0x0001000100010000}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffeff400000df4, 0x00000000ffffff01}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0xffff00650001ffb0, 0x0000ff91fffffff5}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000bfffffffe0f6, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000010001000a, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbff0000000000000, 0x41dfffffffc00000}; + v2u64_op1 = (v2u64){0x0101010101010101, 0x0008000000000000}; + __m128i_result = (__m128i){0xffbeffffffffffff, 0x0039ffffffff0000}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + __m128i_result = (__m128i){0x0037ffdfffeb007f, 0x0037ffdfffffffff}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + v2u64_op1 = (v2u64){0x4e3e133738bb47d2, 0x0000000000000000}; + __m128i_result = (__m128i){0xfff9ff4a0057000e, 0xff98007a004d0050}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000501ffff0005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000600000001, 0x0001000100010001}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020000ffff0001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000100000001, 0x0001000100010001}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001effae001effae, 0x0000ffae001effae}; + v2u64_op1 = (v2u64){0x5252525252525252, 0x5252525252525252}; + __m128i_result = (__m128i){0xffaeffadffaeffad, 0xffaeffadffaeffad}; + __m128i_out = __lsx_vhsubw_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000201000000000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000200000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffff02, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000001}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffff01, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x12755900b653f081, 0x9727b8499727b849}; + v2u64_op1 = (v2u64){0x7d7f13fc7c7ffbf4, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffe79ffffba5f, 0xffff9727ffff9727}; + __m128i_out = __lsx_vhsubw_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000100010, 0x0000000000100010}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vhsubw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000100c6ffef10c, 0x00000000000000ff}; + __m128i_result = (__m128i){0xffffffff9001a47e, 0xffffffffffffff70}; + __m128i_out = __lsx_vhsubw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000000000a6, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff59, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_out = __lsx_vhsubw_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcbc2723a4f12a5f8, 0x002affd600000001}; + __m128i_result = (__m128i){0x343d8dc5b0ed5a08, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0x0000fffe00006aea, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000455555555, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000003fe0000141e, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffc01ffffebe2, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + __m128i_result = (__m128i){0x67eb8590b2ebafe1, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xb4b8122ef4054bb3, 0x56a09e662ab46b31}; + __m128i_result = (__m128i){0x4b47edd10bfab44d, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.c new file mode 100644 index 0000000000..4267ad6cf6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.c @@ -0,0 +1,242 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + v2u64_op1 = (v2u64){0xfe00fffefe0100f6, 0xfe00fe00fe00fd01}; + __m128i_result = (__m128i){0x00ff0001ffffff0a, 0x00ff00ff0000ffff}; + __m128i_out = __lsx_vhsubw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000095141311, 0x0000000017161515}; + v2u64_op1 = (v2u64){0x76f424887fffffff, 0x0000000000000001}; + __m128i_result = (__m128i){0xff0cff78ff96ff14, 0x0000000000170014}; + __m128i_out = __lsx_vhsubw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x67eb85afb2ebb000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x67eb85afb2ebb000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff7cffd6ffc700b0, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_hu_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ffff0000000000, 0x00ffff0000000000}; + v2u64_op1 = (v2u64){0x7f80000000000000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x000000ff00000000, 0x000000ff00000000}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000020, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffff0001ffff0001, 0xffff0001ffff0001}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0101010101010101}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010100000101, 0x0000010100000101}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefeff00fefeff00, 0xfefeff00fefeff00}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x00007e7e00007e7e, 0x00007e7e00007e7e}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa2e3a36463636363, 0xa2e3a36363636363}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0000a2e300006363, 0x0000a2e300006363}; + __m128i_out = __lsx_vhsubw_wu_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000052527d7d, 0x0000000052527d7d}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002400180004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000024, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + v2u64_op1 = (v2u64){0xa5f7458b000802ff, 0xabff54f1ffffffff}; + __m128i_result = (__m128i){0x00000000fff7fc01, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0xffffffff00000002, 0xffffffff00000002}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + v2u64_op1 = (v2u64){0x0a7535006af05cf9, 0xffff80008a7555aa}; + __m128i_result = (__m128i){0xffffffffa9fb0d07, 0xffffffff758aaa56}; + __m128i_out = __lsx_vhsubw_du_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0f180000ffe00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000001ca02f854, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000004b01, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffb4ff, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00001b4a00007808, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffe4b5ffff87f8, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f7f1fd800000004, 0x3fc03fc000000003}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x3fc03fc000000004, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc080800000000000, 0xc080800000000000}; + v2u64_op1 = (v2u64){0x7efefefe82010201, 0x0000000000000000}; + __m128i_result = (__m128i){0x418181017dfefdff, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x67eb85afb2ebb000, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe593c8c4e593c8c4, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0x0000ff8000010f78, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0xff7f0080ff7ef088, 0x0000000000000000}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000155, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000f0000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffff10000, 0xffffffffffffffff}; + __m128i_out = __lsx_vhsubw_qu_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vhsubw-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.c b/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.c new file mode 100644 index 0000000000..aec8527f2f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.c @@ -0,0 +1,242 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000e0000000e, 0x0000000e0000000e}; + v2u64_op1 = (v2u64){0x0000001300000013, 0x0000001300000013}; + __m128i_result = (__m128i){0x0000000000000e13, 0x0000000000000e13}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x004f0080004f0080, 0x004f0080004f0080}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x202020202020ff20, 0x2020202020202020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x2000200020002000, 0x2000200020002000}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_out = __lsx_vilvh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaed495f03343a685, 0x8644000000000000}; + v2u64_op1 = (v2u64){0xffffffffbe6ed563, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000ffff0000fffe, 0x8644ffff0000ffff}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x0000003f0080ffc0, 0x000000ffa7f8ff81}; + __m128i_result = (__m128i){0x0000a7f87fffff81, 0x000000007fff00ff}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003f8000000000, 0x00003f8000000000}; + v2u64_op1 = (v2u64){0x8000ffff00000000, 0x8000ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000080003f80ffff}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0808ffff0808ffff, 0x0808ffff0808ffff}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000a000a00000000, 0x000a000a00000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x000000004f804f80, 0x000000004f804f80}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0008000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000157, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000200, 0x0000000000000200}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002008360500088, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000000008, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000f3040705}; + __m128i_result = (__m128i){0x00000000f3040705, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + __m128i_result = (__m128i){0x007fffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6a1a3fbb3c90260e, 0x195f307a5d04acbb}; + v2u64_op1 = (v2u64){0x8000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x195f307a5d04acbb}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0001000100010058}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001000100010058}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vilvh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vilvh.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.c b/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.c new file mode 100644 index 0000000000..63b5a87d57 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffefffefffffffc, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffcff, 0xfffffefffffffeff}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000d6eefefc0498, 0x7404443064403aec}; + v2u64_op1 = (v2u64){0x2d1da85b7f800000, 0xffffffff7f800000}; + __m128i_result = (__m128i){0xfe7ffc8004009800, 0x002d001dd6a8ee5b}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010001000100010, 0x0010001000100010}; + __m128i_result = (__m128i){0x0000001000000010, 0x0000001000000010}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000e400000001, 0x0000000001e8e1d8}; + v2u64_op1 = (v2u64){0x000000e400000001, 0x0000000001e8e1d8}; + __m128i_result = (__m128i){0x0000000000000101, 0x000000000000e4e4}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x007f800000000000, 0xffffffff80005613}; + __m128i_result = (__m128i){0x80006b0000000b00, 0x8000807f80808000}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000080808000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0080006b0000000b, 0x0080008000800080}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff010300ff0103, 0x0000000000000002}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000ff0001000300, 0x007ffff001000300}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ffffffe00000000, 0x7ffffffe00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x007f00ff00ff00fe}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000071007600, 0x000000009c007c00}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1011050040004101, 0x0000014414104505}; + v2u64_op1 = (v2u64){0x1011050040004101, 0x0000014414104505}; + __m128i_result = (__m128i){0x4040000041410101, 0x1010111105050000}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffac5cffffac5c, 0xffffac5cffffac5c}; + v2u64_op1 = (v2u64){0x01010287010146a1, 0x010169d9010169d9}; + __m128i_result = (__m128i){0xff01ff01ac465ca1, 0xff01ff01ac025c87}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffe4ffe4ffe4ffe4, 0xffe4ffe4ffe4ffe4}; + v2u64_op1 = (v2u64){0x00000000011ff040, 0x0000000000000000}; + __m128i_result = (__m128i){0xff01e41ffff0e440, 0xff00e400ff00e400}; + __m128i_out = __lsx_vilvl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffe0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffe0, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0002000000000000}; + v2u64_op1 = (v2u64){0x0014001400140000, 0x0000000000ff00ff}; + __m128i_result = (__m128i){0x0000001400000000, 0x0000001400000014}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000060002, 0x0000000000060002}; + v2u64_op1 = (v2u64){0xc001a1867fffa207, 0xe4c8b96e2560afe9}; + __m128i_result = (__m128i){0x00067fff0002a207, 0x0000c0010000a186}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf8e1a03affffe3e2, 0x00000000000eefff}; + v2u64_op1 = (v2u64){0x000000002427c2ee, 0x00000000246d9755}; + __m128i_result = (__m128i){0xffff2427e3e2c2ee, 0xf8e10000a03a0000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01e41ffff0ffff, 0xff00e400ff00e400}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0xfff00000ffff0000, 0xff01ffffe41f0000}; + __m128i_out = __lsx_vilvl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xbafebb00ffd500fe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0808000c0808000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xc080800000000000, 0xc080800000000000}; + __m128i_out = __lsx_vilvl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01ff01ac465ca1, 0xff01ff01ac025c87}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000004}; + __m128i_result = (__m128i){0xac465ca100000000, 0xff01ff0100000000}; + __m128i_out = __lsx_vilvl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000201000000000b, 0x0000000b0000000b}; + __m128i_result = (__m128i){0x000201000000000b, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000c7fff000c, 0x0000000c0000bd49}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x1000100010001000, 0x0000000c7fff000c}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00ff00ff0000007f}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0008000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0008000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000020, 0x9c9c9c9c00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000020}; + __m128i_out = __lsx_vilvl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vilvl.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.c new file mode 100644 index 0000000000..03f22771bf --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.c @@ -0,0 +1,212 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080000000000000, 0x0080000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0080000000000000, 0x0080000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5d5d5d5d5d5d5d55, 0xffffffff00000001}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x5d5d5d005d5d5d55, 0xffffffff00000001}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020202020, 0x2020202020202020}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x202020202020ff20, 0x2020202020202020}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00020006; + __m128i_result = (__m128i){0x0000000000000000, 0x0000060000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00020006; + __m128i_result = (__m128i){0x0000000000000600, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000001f1f}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x0000000000000000, 0x00ff000000001f1f}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04fafa9200000000, 0x04faf60009f5f092}; + int_op1 = 0xffffffff; + __m128i_result = (__m128i){0x04fafa9200000000, 0x04faf600fff5f092}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_b((__m128)v2u64_op0, int_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + int_op1 = 0x42652524; + __m128i_result = (__m128i){0xffff2524ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x00000000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x8000000080000000, 0x8000000080000000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0xffffffff; + __m128i_result = (__m128i){0x00000000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001000, 0x0000000000001000}; + int_op1 = 0x7ff00000; + __m128i_result = (__m128i){0x0000000000001000, 0x0000000000001000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + int_op1 = 0xffffffff; + __m128i_result = (__m128i){0xffff000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vinsgr2vr_h((__m128)v2u64_op0, int_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x42652524; + __m128i_result = (__m128i){0x4265252400000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000200000000, 0x000000017fff9000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000004}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fe01fc0005fff4, 0x0000000800000000}; + int_op1 = 0x20202020; + __m128i_result = (__m128i){0x00fe01fc0005fff4, 0x0000000820202020}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ef8000000000000, 0x7ef8000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x7ef8000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff000000ff}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x0000000000000000, 0x000000ff00000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x00000000ffffffff}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x000000ffffff0000, 0x00000000ffffffff}; + __m128i_out = __lsx_vinsgr2vr_w((__m128)v2u64_op0, int_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + long_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_d((__m128)v2u64_op0, long_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + long_op1 = 0x0000000000003a24; + __m128i_result = (__m128i){0x0000000000003a24, 0xffffffbfffffffbf}; + __m128i_out = __lsx_vinsgr2vr_d((__m128)v2u64_op0, long_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0001000100000000}; + long_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0001000100000000}; + __m128i_out = __lsx_vinsgr2vr_d((__m128)v2u64_op0, long_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + long_op1 = 0x0000000000000040; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000000}; + __m128i_out = __lsx_vinsgr2vr_d((__m128)v2u64_op0, long_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vinsgr2vr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vld.c b/SingleSource/UnitTests/Vector/LSX/lsx-vld.c new file mode 100644 index 0000000000..5b663a311e --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vld.c @@ -0,0 +1,50 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_out = __lsx_vld((unsigned long *)&v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_out = __lsx_vldx((unsigned long *)&v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0xc3c3c3c3c3c3c3c3, 0xc3c3c3c3c3c3c3c3}; + __m128i_out = __lsx_vldrepl_b((unsigned long *)&v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0xc31ac31ac31ac31a, 0xc31ac31ac31ac31a}; + __m128i_out = __lsx_vldrepl_h((unsigned long *)&v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x47a5c31a47a5c31a, 0x47a5c31a47a5c31a}; + __m128i_out = __lsx_vldrepl_w((unsigned long *)&v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x3ab7a3fc47a5c31a, 0x3ab7a3fc47a5c31a}; + __m128i_out = __lsx_vldrepl_d((unsigned long *)&v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vld.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vld.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vld.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vldi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vldi.c new file mode 100644 index 0000000000..2a6b98299a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vldi.c @@ -0,0 +1,52 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + __m128i_result = (__m128i){0x00a300a300a300a3, 0x00a300a300a300a3}; + __m128i_out = __lsx_vldi(1187); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0xfffffffffffffe15, 0xfffffffffffffe15}; + __m128i_out = __lsx_vldi(3605); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0xecececececececec, 0xecececececececec}; + __m128i_out = __lsx_vldi(1004); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0x00ffff00ff00ff00, 0x00ffff00ff00ff00}; + __m128i_out = __lsx_vldi(-1686); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0x004d004d004d004d, 0x004d004d004d004d}; + __m128i_out = __lsx_vldi(1101); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0x0a0000000a000000, 0x0a0000000a000000}; + __m128i_out = __lsx_vldi(-3318); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0x00ffff00ff00ff00, 0x00ffff00ff00ff00}; + __m128i_out = __lsx_vldi(-1686); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + __m128i_result = (__m128i){0x0a0000000a000000, 0x0a0000000a000000}; + __m128i_out = __lsx_vldi(-3318); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vldi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vldi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vldi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.c new file mode 100644 index 0000000000..5c20d3aa67 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.c @@ -0,0 +1,293 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff7f01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff7f01ff01, 0xffffffffffffffff}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x5252525252525252, 0x5252525252525252}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000020, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x00000000ff820f81, 0x0fbc1df53c1ae3f9}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000020017ef19f, 0xf144e32bc4e61d27}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01346b8d00b04c5a, 0x01ff020000ff03ff}; + v2u64_op1 = (v2u64){0xcbc2723a4f12a5f8, 0x002affd600000001}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x01346b8d00b04c5a, 0x01ff020000ff03ff}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000455555555, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000455555555, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007f00ff00ff00fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7ffffffe00000000, 0x7ffffffe00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x007f00ff00ff00fe}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020fbf00000fbf, 0x00060fbf00040fbf}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x12755900b653f081, 0x9727b8499727b849}; + __m128i_result = (__m128i){0x00020fbf00000fbf, 0x00060fbf00040fbf}; + __m128i_out = __lsx_vmadd_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000200000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000200000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000200000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf7f7f7f7f7f7fbff, 0xf7f7f7ff8e8c6d7e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xf7f7f7f7f7f7fbff, 0xf7f7f7ff8e8c6d7e}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000001000000000}; + v2u64_op2 = (v2u64){0x0000ffff0000ff00, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffefffffffff}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff0000ffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0fff0fff0fff0fff, 0x0fff0fff0fff0fff}; + __m128i_result = (__m128i){0xf001f0010101f002, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000000000001, 0x000fffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000007f41, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010000000000001, 0x000fffffffffffff}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080808000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080808000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x08ec7f7f80000000, 0xdcec560380000000}; + v2u64_op1 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + v2u64_op2 = (v2u64){0x322a52fc2ba83b96, 0x32d8f0a905b6c59b}; + __m128i_result = (__m128i){0xd6c22c8353a80d2c, 0xaa14efac3bb62636}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xff000000001f1f00}; + __m128i_result = (__m128i){0x00009c7c00007176, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfb141d31fb141d31, 0x0000021100000211}; + v2u64_op1 = (v2u64){0x001effae001effae, 0x001effae001effae}; + v2u64_op2 = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + __m128i_result = (__m128i){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0700f8ff0700f8ff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000007010701, 0x0000000007020701}; + __m128i_result = (__m128i){0x7f8000008680f1ff, 0x7f8000007f800000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffff00ff}; + v2u64_op2 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x17c64aaef639f093}; + v2u64_op2 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_result = (__m128i){0x00000000ff800000, 0x10f881a20ffd02b0}; + __m128i_out = __lsx_vmadd_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x1f52d710bf295626, 0xffffffffa486c90f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000004b01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000000a0, 0x00d3012acc56f9bb}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000004b01, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00ff000000ff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00ff000000ff0000}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e08016161198, 0x6363636463abdf17}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x41f8e08016161198, 0x6363636463abdf17}; + __m128i_out = __lsx_vmadd_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op2 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1304db85e468073a, 0xfa31dfa21672e711}; + v2u64_op2 = (v2u64){0x101f8b680b6f8095, 0x887c8beb969e00f2}; + __m128i_result = (__m128i){0x35aaa61c944f34c2, 0x7582ed22cb1c6e12}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xbfffbfffbfffbffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x4000400040004002}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe01fe01fe01fe01, 0xfe01fe01fe01fe01}; + v2u64_op1 = (v2u64){0xfe01fe01fe01fe01, 0xfe01fe01fe01fe01}; + v2u64_op2 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_result = (__m128i){0xf10cf508f904fd01, 0xf10cf508f904fd01}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffb080ffffb080, 0xffffb080ffffb080}; + v2u64_op2 = (v2u64){0x9f4fcfcfcf800000, 0x004fcfcfd01f9f9f}; + __m128i_result = (__m128i){0x4676f70fc0000000, 0x3504b5fd2dee1f80}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0808080808080808, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4040404040404040, 0x4040404040404040}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfdce8003090b0906, 0x0674c886fcba4e98}; + v2u64_op1 = (v2u64){0xffc0ffc0003f003f, 0x003fffc0ffc0003f}; + v2u64_op2 = (v2u64){0x05ad3ba576eae048, 0x002a05a2f059094a}; + __m128i_result = (__m128i){0x24b85f887e903abe, 0xd4a6cc27d02397ce}; + __m128i_out = __lsx_vmadd_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmadd.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.c new file mode 100644 index 0000000000..3b07a0f231 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.c @@ -0,0 +1,307 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000003be14000, 0x0000000036de0000}; + v2u64_op2 = (v2u64){0x00000000ffff7a53, 0x0000000000001f0a}; + __m128i_result = (__m128i){0x00000000001f0000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001f0a, 0x000000000000006f}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000cdc1, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5237c1bac9eadf55, 0xe93d0bd19ff0c170}; + v2u64_op2 = (v2u64){0xcd1de80217374041, 0x05d0ae6002e8748e}; + __m128i_result = (__m128i){0x063bff74fb46e356, 0xf490ee600180ce20}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4040404040404040, 0x4040404040404040}; + v2u64_op2 = (v2u64){0x4040404040404040, 0x4040404040404040}; + __m128i_result = (__m128i){0x0fff0fff0fff0fff, 0x0fff0fff0fff0fff}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x6363636363636363, 0x6363636363636363}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe00029f9f6061, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x3f5ec0a0feefa0b0, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x000000007fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffe00029fb060b1, 0xffff0000ffff0000}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff8, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x39c51f389c0d6112, 0x8d78336c83652b86}; + v2u64_op2 = (v2u64){0xffff0001ffff0000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x003a0037fff2fff8, 0x00000000ff9b0082}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x05fafe0101fe000e, 0x000000ff0000857a}; + v2u64_op1 = (v2u64){0x05fafe0101fe000e, 0x000000ff0000857a}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x05fafe0101fe000e, 0x000000ff0000857a}; + __m128i_out = __lsx_vmaddwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffc6bb97ac, 0xffffffff82bb9784}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7fffffffc6bb97ac, 0x7fffffff82bb9784}; + __m128i_result = (__m128i){0xffffffffc6bb97ac, 0xffffffff82bb9784}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd005e802174023d6, 0x05d0ba0002e8802e}; + v2u64_op1 = (v2u64){0xc000c000c000ff81, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0ba00ba00ba011eb, 0x0ba00ba00ba00ba0}; + __m128i_result = (__m128i){0xcd1de80217374041, 0x05d0ae6002e8748e}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00fe00ff, 0x0000000000010000}; + v2u64_op2 = (v2u64){0x00000fff00000e36, 0x0000000000000000}; + __m128i_result = (__m128i){0x000fef01000e27ca, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op2 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc89d7f0fed582019, 0x680485c8b304b019}; + v2u64_op1 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x387c7e0a133f2000, 0x67157b5100005000}; + __m128i_result = (__m128i){0xc89d7f0ff90da019, 0x680485c8b304b019}; + __m128i_out = __lsx_vmaddwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x01fc020000fe0100, 0x0000ff0000ff0000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x0000000200000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x8000000080000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x000100fe000100fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffff0000ffff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x000100fe000100fe}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xa23214697fd03f7f, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000010000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7c7c9c0000007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000000f3040705, 0x0000000000000000}; + __m128i_result = (__m128i){0x7c7c9c0000007176, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x022002101b200203, 0x022002101b200203}; + v2u64_op1 = (v2u64){0x022002101b200203, 0x022002101b200203}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x000000080c43b700}; + __m128i_result = (__m128i){0x022002101b200203, 0x036caeeca7592703}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xdd3b8b02563b2d7b, 0x9c83e21a22001818}; + v2u64_op2 = (v2u64){0x0000000022001818, 0x000000009c83e21a}; + __m128i_result = (__m128i){0x0b73e427f7cfcb88, 0xf2c97aaa7d8fa270}; + __m128i_out = __lsx_vmaddwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0006000200000000, 0x0010001000030000}; + v2u64_op1 = (v2u64){0x0100d6effefd0498, 0x7505445465593af1}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0006000200000000, 0x0010001000030000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000800}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000010000, 0x0007000000040000}; + v2u64_op1 = (v2u64){0x0000780000007800, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0003000000010000, 0x0007000000040000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xf047ef0000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff80800001, 0xffffffff80800001}; + v2u64_op1 = (v2u64){0x80808080ffffffff, 0xfffffffff7fff7ef}; + v2u64_op2 = (v2u64){0x0000080800000808, 0x0000080800000808}; + __m128i_result = (__m128i){0x080803ff807ff7f9, 0xfffffbff8888080a}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f801fe000000000, 0x3fc03fc000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7f801fe000000000, 0x3fc03fc000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x01fe01fd01fd01fd}; + v2u64_op2 = (v2u64){0x7fff7fff7fff7f00, 0x5d7f5d007f6a007f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000060000000000}; + v2u64_op1 = (v2u64){0x0000000500000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000060000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xf8f8f8f8f8f8f8f8, 0xf8f8f8f8f8f8f8f8}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.c new file mode 100644 index 0000000000..461c6fa132 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.c @@ -0,0 +1,251 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fffffff00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7fffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7e00fe0000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + v2u64_op1 = (v2u64){0xfffffffc0000fdfc, 0xfffffffbffffff85}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3941248880000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3941248880000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x76f4248880000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x000035ed0000e000, 0x0000e36400005253}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0080008000800080, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4000000040000000, 0x400000003fffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000007fffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4000000040000000, 0x400000003fffffff}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x78508ad4ec2ffcde, 0xf1f1f1f149ed7273}; + v2u64_op1 = (v2u64){0x00000000ffdfdc0d, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000000ffdfdc0d, 0x0000000000000000}; + __m128i_result = (__m128i){0x78508ad4ae70fd87, 0xf1f1f1f149ed7273}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000003b, 0x0000440efffff000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op2 = (v2u64){0x4400000000000000, 0x440ef000440ef000}; + __m128i_result = (__m128i){0x000000000000003b, 0x0000440efffff000}; + __m128i_out = __lsx_vmaddwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00201df000000000, 0x00000000000ffc2f}; + v2u64_op1 = (v2u64){0x0000ffc100010001, 0xffc2ffe700000007}; + v2u64_op2 = (v2u64){0x011f57c100201a46, 0x00010020fffeffde}; + __m128i_result = (__m128i){0x57cb857100001a46, 0x001ffce00016fb41}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0xffff0000ffff0000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7c7c9c0000007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x00ff000000001f1f}; + __m128i_result = (__m128i){0x7c7c9c0000007176, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc5c53492f25acbf2, 0xbfd10d0d7b6b6b73}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xff000000001f1f00}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xc5c53492f25acbf2, 0xbfd10d0d7b6b6b73}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd73691661e5b68b4, 0x34947b4b11684f92}; + v2u64_op1 = (v2u64){0x000016f303dff6d2, 0x000016f303dff6d2}; + v2u64_op2 = (v2u64){0x7fffffff00000001, 0x0000000000000000}; + __m128i_result = (__m128i){0xee297a731e5c5f86, 0x34947b4b11684f92}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000ffffffffffff}; + v2u64_op1 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + v2u64_op2 = (v2u64){0xffffffff008ff820, 0x00bbfff7fffffff7}; + __m128i_result = (__m128i){0x00010001f1153780, 0xffe8008fffe7008f}; + __m128i_out = __lsx_vmaddwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000021, 0x0000000100000001}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010002}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010002}; + v2u64_op2 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0001808201018081, 0x0001808281820102}; + __m128i_out = __lsx_vmaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffff0200ffff01ff, 0x0000010100fe0101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x0000000100000001}; + v2u64_op2 = (v2u64){0x00ffff0000000000, 0x00ffff0000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x007f7f80807f7f80}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000020302030, 0x0000000020302030}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x7fffffff7fffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x3fffffffc0000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000006e17bfd8, 0x000000006e17bfd8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffff0100000001, 0xffffff0100000001}; + __m128i_result = (__m128i){0x000000006e17bfd8, 0x000000006e17bfd8}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + v2u64_op2 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000004, 0x00010000fffffffc}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x000000008000e2e3}; + v2u64_op1 = (v2u64){0x0000000080000000, 0x000000008000e2e3}; + v2u64_op2 = (v2u64){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x807f808000000000, 0x0000000080806362}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8101010181010101, 0x8101010181010101}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + v2u64_op1 = (v2u64){0x0000000000000014, 0x0000000000000014}; + v2u64_op2 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000ffed00010001, 0x0001000101010015}; + __m128i_out = __lsx_vmaddwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.c new file mode 100644 index 0000000000..d84bc9897f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.c @@ -0,0 +1,251 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xc0c00c01c2cd0009, 0xc0c00000c0c00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000f7f700f7f700, 0x7f78787f00f7f700}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000400, 0x0000000000000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000400, 0x0000000000000400}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x000000000000040d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000080003f80ffff}; + v2u64_op1 = (v2u64){0x0000002000000020, 0x0000002000000020}; + v2u64_op2 = (v2u64){0x3ff0010000000000, 0x3ff0010000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000080003f80ffff}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000007b}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xff82ff810081ff81, 0xff81ff82ff810081}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffff8000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffff8000}; + v2u64_op2 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffff8000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x841f000fc28f801f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x841f000fc28f801f, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xe593c8c4e593c8c4, 0xff800000ff800000}; + __m128i_result = (__m128i){0x76ecfc8b85ac78db, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000fff3, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op2 = (v2u64){0x000000000000040d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000010400, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_result = (__m128i){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_out = __lsx_vmaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000002b0995850, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x007f800000000000, 0xffffffff80005613}; + v2u64_op2 = (v2u64){0x007f800000000000, 0xffffffff80005613}; + __m128i_result = (__m128i){0xc0000002b0995850, 0xffff00011cf0c569}; + __m128i_out = __lsx_vmaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffff00ffff7e01, 0x000000ffffff81fe}; + v2u64_op2 = (v2u64){0x000000fffe01fd02, 0x0000000000000000}; + __m128i_result = (__m128i){0x00fe00fffe86f901, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff8004000000000, 0x0000000000004000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xbfffbfffbfffbffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xbfffbfffbfffbffe}; + __m128i_result = (__m128i){0x0000000000000000, 0xbfffbfffbfffbffe}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd3000000130000, 0xffd3000000130000}; + v2u64_op1 = (v2u64){0xffd3000000130000, 0xffd3000000130000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffd3000000130000, 0xffd3000000130000}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + v2u64_op2 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_result = (__m128i){0x00000f02e1f80f04, 0x00000f02e1f80f04}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffe00000000, 0xfffefffe00000000}; + v2u64_op1 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + v2u64_op2 = (v2u64){0x6bae051ffed76001, 0x5a57bacbd7e39680}; + __m128i_result = (__m128i){0xffe9454286c0e000, 0xf3eb458161080000}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0051005200510052, 0x0051005200510052}; + v2u64_op2 = (v2u64){0xffaeffaeffaeffae, 0xffaeffaeffaeffae}; + __m128i_result = (__m128i){0xffffe65ecc1be5bc, 0xffffe65ecc1be5bc}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf1f1f1f1865e65a1, 0xf1f1f1f149ed7273}; + v2u64_op1 = (v2u64){0x00000000ffff941d, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xf1f1f1f1865e65a1, 0xf1f1f1f149ed7273}; + __m128i_result = (__m128i){0x78508ad4ec2ffcde, 0xf1f1f1f149ed7273}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + v2u64_op1 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + v2u64_op2 = (v2u64){0x0000000e0000000e, 0x000000120000000d}; + __m128i_result = (__m128i){0x0001000dfffffff1, 0x0001000cfffffff2}; + __m128i_out = __lsx_vmaddwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000001ff000001ff, 0x000001ff000001ff}; + v2u64_op1 = (v2u64){0x000001ff000001ff, 0x000001ff000001ff}; + v2u64_op2 = (v2u64){0x7ffffffeffffffff, 0xff80ffffffffffff}; + __m128i_result = (__m128i){0x7ffffe0100000000, 0x000002fe800000ff}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + v2u64_op2 = (v2u64){0xff80000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe80000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000080}; + __m128i_out = __lsx_vmaddwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwev-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.c new file mode 100644 index 0000000000..de68991f10 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.c @@ -0,0 +1,412 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000008000000080, 0x0000010000000002}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x0000000c7fff000c}; + v2u64_op2 = (v2u64){0xfffff0016fff8d3d, 0xfffff000f0008d3c}; + __m128i_result = (__m128i){0xfff0ff8006f0f950, 0x00000100f8100002}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x007ffd0001400840, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x007ffd0001400840, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000002000, 0x0000000000002000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x0000000000002000, 0x0000000000002000}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100010058}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001000100010058}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffac0a000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000002000000000, 0x000000200000001b}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffac0a000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000017fda829, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000800000000ffff, 0xff8000000000ffff}; + v2u64_op2 = (v2u64){0xd705c77a7025c899, 0x697eba2bedfa9c82}; + __m128i_result = (__m128i){0xfffeb827ffffffff, 0xffcb410000000000}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffffc00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000fffffc00, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xaaacac88a3a9a96a, 0x000000c5ac01015b}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000f, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x28bf02d1ec6a35b2, 0x7ef4002d21fc7001}; + v2u64_op1 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + v2u64_op2 = (v2u64){0xff8000007fc00000, 0xff800000ff800000}; + __m128i_result = (__m128i){0x28bf0351ec69b5f2, 0x7ef400ad21fc7081}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001200100012001}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + v2u64_op2 = (v2u64){0xcf00000000000000, 0xbf80000000000000}; + __m128i_result = (__m128i){0x0961000100000001, 0x1040400000000000}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x7da9b23a624082fd}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000001010000, 0x03574e39e496cbc9}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0400040004000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128i_result = (__m128i){0x0000000000000000, 0x0400040004000400}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000030000003f, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffc100010001, 0x3f77aab500000000}; + v2u64_op2 = (v2u64){0x0000ffc100010001, 0x3f77aab500000000}; + __m128i_result = (__m128i){0x00000000ff820f81, 0x0fbc1df53c1ae3f9}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000020000020, 0x0000000020000020}; + v2u64_op2 = (v2u64){0x0000000000810000, 0x00000000ff801c9e}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000012020, 0x000700000004e000}; + v2u64_op1 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + v2u64_op2 = (v2u64){0x000000002023dcdc, 0x00000000e00a18f5}; + __m128i_result = (__m128i){0x0003000000012020, 0x000700000004e000}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000e0000000e, 0x000000120000000d}; + v2u64_op2 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x00000000000dfff2, 0x000000000011ffee}; + __m128i_out = __lsx_vmaddwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffff8000000000, 0xffffff7fffffffff}; + v2u64_op2 = (v2u64){0xffffff8000000000, 0xffffff7fffffffff}; + __m128i_result = (__m128i){0x7ff8010000000001, 0x0000000000003fff}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ff000000ff00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000ff000000ff00}; + __m128i_result = (__m128i){0x01fc020000fe0100, 0x0000ff0000ff0000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000fff09, 0x00000000000fff08}; + v2u64_op1 = (v2u64){0xffff80000000ffff, 0xffff80ff0000ffff}; + v2u64_op2 = (v2u64){0xfffefffefffefffe, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00007f01000eff0a, 0xffff80ff0010ff06}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9d519ee8d2d84f1d, 0xfefd7f7e7f7f7f7f}; + v2u64_op2 = (v2u64){0x0000ffff0000fffe, 0x8644ffff0000ffff}; + __m128i_result = (__m128i){0xd83c8081ffff8080, 0x85bd6b0e94d89998}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001fc0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000040004000100, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001fc0000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x78c00000ff000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002010202, 0x0000000007070700}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000002010202, 0x0000000007070700}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0x00000000fefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000c2bac2c2, 0x00000000fefefe6a}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op2 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0xe009f00ee7fb0800, 0x8009700478185812}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111131, 0x1111113111111131}; + v2u64_op1 = (v2u64){0x0000000000000010, 0x0000000000000010}; + v2u64_op2 = (v2u64){0xffffffffffff0008, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x1111113111111121, 0x1111113111111141}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefefefefefefe, 0xfefefefefefefefe}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op2 = (v2u64){0x1000100012030e02, 0x0000000000000000}; + __m128i_result = (__m128i){0xfefefefefefefefe, 0xfefefefefefefefe}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000008130c7f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1f1f1f27332b9f00, 0x1f1f1f1f1f1f1f00}; + v2u64_op2 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x8312f5424ca4a07f, 0x06b1213ef1efa299}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffb00151727, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff0015172b, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000004, 0x00010000fffffffc}; + __m128i_result = (__m128i){0xfffffffb00151727, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080800000808, 0x0000080800000808}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xf8f8fd0180810907, 0x010105017878f8f6}; + __m128i_result = (__m128i){0x0000080800000808, 0x0000080800000808}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000080000000800}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0400400204004002}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000080000000800}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0xfffffffffffffffe}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0001000100010058}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000158, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000004, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffbffda, 0x0080000700000014}; + v2u64_op1 = (v2u64){0x000000000005003a, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0x00000000fffbffda, 0x0080000700000014}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + v2u64_op2 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0xb1b1b1b1b16f0670, 0x000000000042ab41}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xb1b1b1b1b16f0670, 0x000000000042ab41}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xb1b1b1b1b16f0670, 0x000000000042ab41}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3960b1a401811060, 0x328e1080889415a0}; + v2u64_op1 = (v2u64){0x3960b1a401811060, 0x328e1080889415a0}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x020310edc003023d}; + __m128i_result = (__m128i){0x2c9e5069f5d57780, 0x32f3c7a38f9f4b8b}; + __m128i_out = __lsx_vmaddwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000868686868686, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfdce8003090b0906, 0x0674c8868a74fc80}; + v2u64_op2 = (v2u64){0xfdce8003090b0906, 0x0674c8868a74fc80}; + __m128i_result = (__m128i){0xdbe332365392c686, 0x0029aeaca57d74e6}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffd0ba876d000, 0x000002bf8b062000}; + v2u64_op1 = (v2u64){0x41f8e08016161198, 0xe363636363abdf16}; + v2u64_op2 = (v2u64){0x0005847b00000000, 0x0005840100000005}; + __m128i_result = (__m128i){0xcf1225129ad22b6e, 0x0004e8f09e99b528}; + __m128i_out = __lsx_vmaddwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.c new file mode 100644 index 0000000000..36fa39f1c2 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.c @@ -0,0 +1,216 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xd8248069ffe78077, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0d0d0d0d0d0d0d0d, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xd8248069ffe78077, 0x0000000000000000}; + __m128i_result = (__m128i){0xe31c86e90cda86f7, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100400100200e68, 0x00010020fffeffde}; + v2u64_op1 = (v2u64){0x0100400100200e68, 0x00010020fffeffde}; + v2u64_op2 = (v2u64){0x1ff85ffe2ae5d973, 0x0000000000000000}; + __m128i_result = (__m128i){0x011f57c100201a46, 0x00010020fffeffde}; + __m128i_out = __lsx_vmaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xbafebb00ffd500fe}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0a09080709080706, 0x0c0b0a090b0a0908}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffc0800000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + v2u64_op1 = (v2u64){0x0020002000200020, 0x0000000000000008}; + v2u64_op2 = (v2u64){0x0020002000200020, 0x0000000000000008}; + __m128i_result = (__m128i){0x003dc288077c7cc1, 0x0000000000003a24}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffc0000000000004, 0xffc0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000455555555, 0x0000000000000000}; + __m128i_result = (__m128i){0xffc0000000000004, 0xffc0000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000053a}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000020}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x42a0000042a02001, 0x0000000036280001}; + v2u64_op1 = (v2u64){0x0000005555555554, 0x0000005555555554}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x42a0000042a02001, 0x0000000036280001}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000ff00fe, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff946b, 0x00000000ffff946c}; + v2u64_op1 = (v2u64){0xffffffffffff730f, 0xffffffff3c992b2e}; + v2u64_op2 = (v2u64){0xffffffffffff946b, 0x00000000ffff946c}; + __m128i_result = (__m128i){0xfffffffdffff946c, 0x00000000ffff946c}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080000000000, 0x0000080000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000401000}; + __m128i_result = (__m128i){0x0000080000000000, 0x0000080000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff000000ff0000, 0xfffffffffffff800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff000000ff0000, 0xfffffffffffff800}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002ffff0000ffff, 0x0006ffff0004ffff}; + v2u64_op2 = (v2u64){0xffffffff7f800000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0002fffefffd0001, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c6fde000, 0x00000000ffffe000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xe000e0006080b040, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000c6fde000, 0x00000000ffffe000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a753500950fa306, 0x000000000a752a55}; + v2u64_op1 = (v2u64){0x0000000200000000, 0x0000000100000000}; + v2u64_op2 = (v2u64){0x0a753500950fa306, 0x000000000a752a55}; + __m128i_result = (__m128i){0x0a753500a9fa0d06, 0x000000000a752a55}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_out = __lsx_vmaddwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.c new file mode 100644 index 0000000000..21309a2920 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.c @@ -0,0 +1,258 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00003fe00ffe3fe0, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000b5207f80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000b5207f80, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff208fffffa02, 0xffffe218ffffea10}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000000004}; + v2u64_op2 = (v2u64){0xfffff208fffffa02, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffff208fffffa02, 0xffffe218ffffea10}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000bd3d00000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x2020202020207f7f, 0x2020202020202020}; + __m128i_result = (__m128i){0x00000000ffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a0, 0x00d3012acc56f9bb}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000100013fa0, 0x0000000120002000}; + __m128i_result = (__m128i){0x0000000000001021, 0x00d3012acc56f9bb}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0002000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0002000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0000000000000014, 0x0002000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xc3818bffe7b7a7b8, 0x4399d3221a29d3f2}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000467fe000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000467fef81, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1e801ffc00000000, 0x7fc0000000000000}; + v2u64_op1 = (v2u64){0x0000ff020000fff4, 0x000000000000ffff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x1e801ffc00000000, 0x7fc0000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe80000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00007f7f00007f7f, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00013fff, 0x00ffffff03ffffff}; + v2u64_op1 = (v2u64){0x0001fffd00000407, 0x000088500000f6a0}; + v2u64_op2 = (v2u64){0x0000e22b0000efa4, 0x0000442900007b4c}; + __m128i_result = (__m128i){0xffffffff00013fff, 0x00ffffff03ffffff}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d37e80682a, 0x14ccc6320176a4d2}; + v2u64_op1 = (v2u64){0x000000007fffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x685670d37e80682a, 0x14ccc6320176a4d2}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xc0411fe800000000, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x601fbfbeffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffbc19ecca, 0xffffffffc105d1aa}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffff0000ffff43e6, 0xffff0000ffff3efa}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffa7, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + v2u64_op2 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + __m128i_result = (__m128i){0x00006f9100007337, 0x0000930400008a10}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x001000100010c410, 0x0010001000100010}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffff02fff4, 0xff02ff1bff02ff23}; + v2u64_op1 = (v2u64){0x0000ffffff02fff4, 0xff02ff1bff02ff23}; + v2u64_op2 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x00011e80007edff8, 0x7e44bde9b842ff23}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffeffffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000000000000}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe0dd268932a5edf9, 0xe0d56a9774f3ea31}; + v2u64_op1 = (v2u64){0xe0dd268932a5edf9, 0xe0d56a9774f3ea31}; + v2u64_op2 = (v2u64){0xd8248069ffe78077, 0x0000000000000000}; + __m128i_result = (__m128i){0xbddaa86803e33c2a, 0xe0d56a9774f3ea31}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0028280000282800, 0x0028280000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x01010000fefe0101, 0x7505853d654185f5}; + __m128i_result = (__m128i){0x012927ffff272800, 0x0028280000000000}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff007f0101017f, 0x00ffff7f00ff00ff}; + v2u64_op1 = (v2u64){0x000000183fffffe5, 0x0000000020000000}; + v2u64_op2 = (v2u64){0x000000000000002a, 0x0000000000000073}; + __m128i_result = (__m128i){0x00ff007f0101017f, 0x00ffff7f00ff00ff}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x000000002bfd9461, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x3f8000003f800001, 0x3f8000003f800001}; + __m128i_result = (__m128i){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000095896a760000}; + v2u64_op1 = (v2u64){0x006f0efe258ca851, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffff200000000000, 0xffff7fc8ffff8000}; + __m128i_result = (__m128i){0xffffff9ed2e1c000, 0x000015516a768038}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000120002000}; + v2u64_op1 = (v2u64){0x0000000000013fa0, 0x2000200000013fa0}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100013fa0, 0x0000000120002000}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080006b00000000, 0x0080008000800080}; + v2u64_op1 = (v2u64){0x001b19b1c9c6da5a, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x001b19b1c9c6da5a, 0x0000000000000000}; + __m128i_result = (__m128i){0x008003496dea0c61, 0x0080008000800080}; + __m128i_out = __lsx_vmaddwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaddwod-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.c new file mode 100644 index 0000000000..ac45fba1d1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.c @@ -0,0 +1,218 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000010000003f, 0x7f007f007f007f00}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffff00010000fff, 0xfffff00010000fff}; + __m128i_result = (__m128i){0x0000000010000f01, 0x0000000010000f00}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffdfffcfffd, 0xfffcfffcfffcfffd}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff80df00000000}; + v2u64_op1 = (v2u64){0x1000100000101000, 0x0010100000100000}; + __m128i_result = (__m128i){0x1000100000101000, 0x0010100000100000}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0040000000000000, 0x0040000000ff00ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0040000000000000, 0x0040000000ff00ff}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x0001000100000000, 0x0000000001000001}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xa1e7b475d925730f, 0xb327b9363c992b2e}; + __m128i_result = (__m128i){0xffffffffffff730f, 0xffffffff3c992b2e}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4101010141010100}; + v2u64_op1 = (v2u64){0x00000000000001ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000001ff, 0x4101010141010100}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000003d0000, 0x00000000003d0000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004001000000000, 0x0007001400000014}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000053a}; + __m128i_result = (__m128i){0x0004001000000000, 0x000700140000053a}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000034, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff80c1ffffe8de, 0xffff80c400000148}; + __m128i_result = (__m128i){0x0000000000000034, 0x0000000000000148}; + __m128i_out = __lsx_vmax_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0008000000000000}; + v2u64_op1 = (v2u64){0x00ff000000ff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff000000ff0000, 0x0008000000000000}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00004e420000c26a, 0x0000b3a6000067da}; + v2u64_op1 = (v2u64){0x5779108fdedda7e4, 0xd78cfd70b5f65d76}; + __m128i_result = (__m128i){0x5779108f0000c26a, 0x0000b3a6000067da}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + v2u64_op1 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + __m128i_result = (__m128i){0x020310edc003023d, 0x30eb022002101b20}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe3bfa3ffe3bfb21, 0xfe03fe01fe01fe01}; + v2u64_op1 = (v2u64){0x001d001d001d0000, 0x001d001d001d001d}; + __m128i_result = (__m128i){0x001d001d001d0000, 0x001d001d001d001d}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000155, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000155, 0x0000000000000000}; + __m128i_out = __lsx_vmax_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd2f005e44bb43416, 0x00000000051649b6}; + v2u64_op1 = (v2u64){0x0000003e0000003f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000003e0000003f, 0x00000000051649b6}; + __m128i_out = __lsx_vmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_result = (__m128i){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_out = __lsx_vmax_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.c new file mode 100644 index 0000000000..e32ede2a20 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.c @@ -0,0 +1,248 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff80000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff80000000}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000007f0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000007f0000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77c03fd640003fc6, 0x77c0404a4000403a}; + v2u64_op1 = (v2u64){0x0000003a0000003a, 0x0000000000000000}; + __m128i_result = (__m128i){0x77c03fd640003fc6, 0x77c0404a4000403a}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xbafebb00ffd500fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xbafebb00ffd500fe}; + __m128i_result = (__m128i){0x0000000000000000, 0xbafebb00ffd500fe}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52525252adadadad, 0x52525252adadadad}; + v2u64_op1 = (v2u64){0x5b5b5b5aa4a4a4a6, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x5b5b5b5aadadadad, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_result = (__m128i){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007e1600007d98, 0x0000f50000007500}; + v2u64_op1 = (v2u64){0x00fe00fe00fe00fe, 0x0000000000fe00fe}; + __m128i_result = (__m128i){0x00fe7efe00fe7dfe, 0x0000f50000fe75fe}; + __m128i_out = __lsx_vmax_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0101010180800101, 0x2002040404010420}; + __m128i_result = (__m128i){0x9c9c9c9c80800101, 0x2002040404010420}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff0, 0xff84fff4ff84fff4}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0xff84fff4ff84fff4}; + __m128i_result = (__m128i){0xfffffffffffffff0, 0xff84fff4ff84fff4}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffdf, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf001f0010101f002, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x685670d27e00682a, 0x14ccc6320076a4d2}; + __m128i_result = (__m128i){0x685670d27e00682a, 0x14ccc6320076a4d2}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x00000000000000ff}; + v2u64_op1 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_result = (__m128i){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_out = __lsx_vmax_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00007f01000eff0a, 0xffff80ff0010ff06}; + __m128i_result = (__m128i){0x8000000080000000, 0xffff80ff0010ff06}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000002bfd9461, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x000000002bfd9461, 0x3ff0000000007fff}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff000fffff000, 0xfffff0000000ad3d}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0xfffff000fffff000, 0xfffff00010001000}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000001f, 0x000000000000001f}; + __m128i_result = (__m128i){0x000000000000001f, 0x000000000000001f}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x7fffffffffffffff}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xc605c000aedd0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x479f64b03373df61, 0x09e8e9012fded7fd}; + __m128i_result = (__m128i){0x479f64b03373df61, 0x09e8e9012fded7fd}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x52525252adadadad, 0x52525252adadadad}; + __m128i_result = (__m128i){0x52525252adadadad, 0x52525252adadadad}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080700000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x3fff3fff3fff3fff}; + __m128i_result = (__m128i){0x0808080808080808, 0x3fff3fff3fff3fff}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000202020200}; + __m128i_out = __lsx_vmax_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmax-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.c new file mode 100644 index 0000000000..ba75fc8296 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.c @@ -0,0 +1,205 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0a0a0a0a0a0a0a0a, 0x0a0a0a0a0a0a0a0a}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x1000100010001000, 0x1000100010001000}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003be14000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000003bfb4000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0b0b0b0b0b0b0b0b, 0x0b0b0b0b0b0b0b0b}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007ffffffb, 0x0000000000000000}; + __m128i_result = (__m128i){0x010101017f010101, 0x0101010101010101}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000007f8, 0x00000000000007f8}; + __m128i_result = (__m128i){0x0b0b0b0b0b0b0b0b, 0x0b0b0b0b0b0b0b0b}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000c, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000c, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0606060606060606, 0x0606060606060606}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0fffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0fffffffffffffff}; + __m128i_out = __lsx_vmaxi_b((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + __m128i_result = (__m128i){0x027c027c000027c0, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000001fc00000000, 0x0002000000020000}; + __m128i_result = (__m128i){0x000001fc00000000, 0x0002000000020000}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000fff, 0x0000000000000fff}; + __m128i_result = (__m128i){0x0000000000000fff, 0x0000000000000fff}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000a1ff4c, 0x000000007ff000ff}; + __m128i_result = (__m128i){0x0003000300a10003, 0x000300037ff000ff}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, -2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x000b000b000b000b, 0x000b000b000b000b}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0004000400040004, 0x0004000400040004}; + __m128i_out = __lsx_vmaxi_h((__m128)v2u64_op0, 4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020100fedd0c00, 0xfe07e5fefefdddfe}; + __m128i_result = (__m128i){0x000201000000000b, 0x0000000b0000000b}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x0001000100000004, 0x0000000401000001}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + __m128i_result = (__m128i){0x0000000000001f0a, 0x000000000000006f}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000500000005, 0x000000050000007b}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000400000004, 0x0000000400000004}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001fffff001fffff, 0x001fffff001fffff}; + __m128i_result = (__m128i){0x001fffff001fffff, 0x001fffff001fffff}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000b0000000b, 0x0000000b0000000b}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000e0000000e, 0x0000000e0000000e}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000020}; + __m128i_result = (__m128i){0x0000000900000009, 0x0000000900000020}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x0000000600000006, 0x0000000600000006}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7f80000000000000}; + __m128i_result = (__m128i){0x0000000700000007, 0x7f80000000000007}; + __m128i_out = __lsx_vmaxi_w((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000002}; + __m128i_out = __lsx_vmaxi_d((__m128)v2u64_op0, 2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001000000, 0x0000000000007f00}; + __m128i_result = (__m128i){0x0000000001000000, 0x0000000000007f00}; + __m128i_out = __lsx_vmaxi_d((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_result = (__m128i){0x000000000000000a, 0x000000000000000a}; + __m128i_out = __lsx_vmaxi_d((__m128)v2u64_op0, 10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmaxi_d((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_result = (__m128i){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_out = __lsx_vmaxi_d((__m128)v2u64_op0, -2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.c new file mode 100644 index 0000000000..9e5d1e3994 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.c @@ -0,0 +1,165 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000020002, 0x0000000000020002}; + __m128i_result = (__m128i){0x0303030303030303, 0x0303030303030303}; + __m128i_out = __lsx_vmaxi_bu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1111111111111111, 0x1111111111111111}; + __m128i_out = __lsx_vmaxi_bu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1111111111111111, 0x1111111111111111}; + __m128i_out = __lsx_vmaxi_bu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0a0a0a0a0a0a0a0a, 0x0a0a0a0a0a0a0a0a}; + __m128i_out = __lsx_vmaxi_bu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0011001100110011, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_result = (__m128i){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0005000500050005, 0x0005000500050005}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000020000020, 0x0000000020000020}; + __m128i_result = (__m128i){0x001d001d20000020, 0x001d001d20000020}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00003fff00010000}; + __m128i_result = (__m128i){0x0012001200120012, 0x00123fff00120012}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x001a001a001a001a, 0x001a001a001a001a}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x001e001e001e001e, 0x001e001e001e001e}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x001d001d001d001d, 0x001d001d001d001d}; + __m128i_out = __lsx_vmaxi_hu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000800000008, 0x0000000800000008}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001600000016, 0x0000001600000016}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + __m128i_result = (__m128i){0x37c0001000000001, 0x37c0001000000001}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010001000100010, 0x0010001000100010}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vmaxi_wu((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + __m128i_result = (__m128i){0xcf00000000000000, 0xbf8000000000ffff}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000011, 0x0000000000000011}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001c, 0x000000000000001c}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000d, 0x000000000000000d}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000b, 0x000000000000000b}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x43d3e0000013e000, 0x43d3e0000013e000}; + __m128i_result = (__m128i){0x43d3e0000013e000, 0x43d3e0000013e000}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + __m128i_result = (__m128i){0x0001000100010001, 0x000100010001007c}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001d, 0x000000000000001d}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001b, 0x000000000000001b}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000004}; + __m128i_out = __lsx_vmaxi_du((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmaxi-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.c new file mode 100644 index 0000000000..1db506dd5a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.c @@ -0,0 +1,296 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3fffff0000000000, 0x3fffff0000000000}; + __m128i_result = (__m128i){0x00ffff000000ff00, 0x00ffff0000000000}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff00650001ffb0, 0x0000ff91fffffff5}; + v2u64_op1 = (v2u64){0x0000067400002685, 0x0000000000000001}; + __m128i_result = (__m128i){0xffff00650000ff85, 0x0000ff91fffffff5}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_result = (__m128i){0x00000000000000a0, 0xffffffffcafff8ff}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000008680f1ff, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xff80ffff8680f1ff, 0xff80ffffff80ffff}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01e41ffff0e440, 0xff00e400ff00e400}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffe4fffff0e4ff, 0xffffe4ffffffe4ff}; + __m128i_out = __lsx_vmin_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000063636363, 0x00000000a16316b0}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000a1630000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc0ff81000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000600000000, 0x0000002000000020}; + __m128i_result = (__m128i){0xffffc0ff81000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000401000}; + v2u64_op1 = (v2u64){0x0000080000000000, 0x0000080000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fdffffffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfe80000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe80ffffffffff02, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80ffffffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x027e0000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe80ffffffffff02, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0xffffffffe0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffe0000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + v2u64_op1 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc090380000000000, 0xfffffffffffbfffc}; + v2u64_op1 = (v2u64){0xc090380000000000, 0xfffffffffffbfffc}; + __m128i_result = (__m128i){0xc090380000000000, 0xfffffffffffbfffc}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x625a7312befcb21e, 0x8493941335f5cc0c}; + __m128i_result = (__m128i){0x00000002befcb21e, 0x8493941300000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000078c00000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000d, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + v2u64_op1 = (v2u64){0x5d5d5d5d5d5d0000, 0x5d5d5d5d5d5d5d5d}; + __m128i_result = (__m128i){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000c0000000, 0x000003000000d613}; + __m128i_result = (__m128i){0x00000000c0000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000000, 0x000000200000001b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + __m128i_result = (__m128i){0xff800000ff800000, 0xff800000ff800000}; + __m128i_out = __lsx_vmin_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + v2u64_op1 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000210011084, 0x000000017fff9000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000017f0a82, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5a5a5a5a5b5a5b5a, 0x5a5a5a5a5b5a5b5a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + __m128i_result = (__m128i){0x027c027c000027c0, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000010000000100, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcda585aebbb2836a, 0x3e25c8317394dae6}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xcda585aebbb2836a, 0x0000000000000000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + v2u64_op1 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_result = (__m128i){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000005}; + v2u64_op1 = (v2u64){0xfcfcfcfcfcfcfcfd, 0xfcfcfcfcfcfcfcfd}; + __m128i_result = (__m128i){0xfcfcfcfcfcfcfcfd, 0xfcfcfcfcfcfcfcfd}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffff00ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffff00ff}; + __m128i_out = __lsx_vmin_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.c new file mode 100644 index 0000000000..309123858c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.c @@ -0,0 +1,236 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100010001, 0x0000000300000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe0004fffe0004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + v2u64_op1 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + v2u64_op1 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_result = (__m128i){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_out = __lsx_vmin_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c63636363, 0x9c9c9c9c9c9c9c9c}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x9c9c9c9c00000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020207f7f, 0x2020202020202020}; + v2u64_op1 = (v2u64){0x7f417f417f027e03, 0x000000000000003f}; + __m128i_result = (__m128i){0x2020202020207e03, 0x000000000000003f}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00008d3200000000}; + v2u64_op1 = (v2u64){0x479f64b03373df61, 0x09e8e9012fded7fd}; + __m128i_result = (__m128i){0x0000000000000000, 0x00008d3200000000}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a09080709080706, 0x0c0b0a090b0a0908}; + v2u64_op1 = (v2u64){0x0a09080709080706, 0x0c0b0a090b0a0908}; + __m128i_result = (__m128i){0x0a09080709080706, 0x0c0b0a090b0a0908}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xaa49601e26d39860, 0xa87745dbd93e4ea1}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + __m128i_result = (__m128i){0x2006454652525252, 0x2006454652525252}; + __m128i_out = __lsx_vmin_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010000, 0x0000000000040100}; + v2u64_op1 = (v2u64){0xffffe000ffff2382, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000100010000, 0x0000000000040100}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x7da9b23a624082fd}; + __m128i_result = (__m128i){0x0000000001010000, 0x03574e3a62407e03}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000005050000, 0x0505050505050505}; + v2u64_op1 = (v2u64){0x0028280000282800, 0x0028280000000000}; + __m128i_result = (__m128i){0x0000000000282800, 0x0028280000000000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fd14fe01fd16, 0xfc01fd13fc02fe0c}; + v2u64_op1 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + __m128i_result = (__m128i){0xfe00fd1400010000, 0xfc01fd1300000001}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + v2u64_op1 = (v2u64){0x2000200020002000, 0x2000200020002000}; + __m128i_result = (__m128i){0x0000000100013fa0, 0x0000000120002000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000014, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000005003a, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + v2u64_op1 = (v2u64){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + __m128i_result = (__m128i){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + __m128i_out = __lsx_vmin_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x0000000000de0000}; + v2u64_op1 = (v2u64){0x0000006f00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001f0a, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff0cff78ff96ff14, 0x00000fea0000fffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000400530050ffa6, 0xffff007fff810001}; + v2u64_op1 = (v2u64){0x001fffc0ffffe001, 0xff7f810100001000}; + __m128i_result = (__m128i){0x000400530050ffa6, 0xff7f810100001000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007efe7f7f8000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000077af9450, 0x00000000b81c8382}; + __m128i_result = (__m128i){0x0000000077af9450, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmin_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmin-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.c new file mode 100644 index 0000000000..9cb6394706 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.c @@ -0,0 +1,295 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffefffefffffffc, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffefffefffffffc, 0x0000000000000000}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, 4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958aefff895e, 0x0000006f00002f0a}; + __m128i_result = (__m128i){0xfafa958aeffa89fa, 0xfafafafafafafafa}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, -6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000adadadad, 0x00000000adadadad}; + __m128i_result = (__m128i){0xfbfbfbfbadadadad, 0xfbfbfbfbadadadad}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000202020200}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xf1f1f1f1f1f1f1f1, 0xf1f1f1f1f1f1f1f1}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007e1600007d98, 0x0000f50000007500}; + __m128i_result = (__m128i){0x0000090900000998, 0x0000f50000000900}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, 9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0x10f881a20ffd02b0}; + __m128i_result = (__m128i){0xf1f1f1f1f180f1f1, 0xf1f181a2f1f1f1b0}; + __m128i_out = __lsx_vmini_b((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfff6fff6fff6fff6, 0xfff6fff6fff6fff6}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1514131214131211, 0x1716151416151413}; + __m128i_result = (__m128i){0xfff3fff3fff3fff3, 0xfff3fff3fff3fff3}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, -13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefefefefefefe, 0xfefefefefefefefe}; + __m128i_result = (__m128i){0xfefefefefefefefe, 0xfefefefefefefefe}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, 2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_h((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000900000009, 0x0000000900000009}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffff4fffffff4, 0xfffffff4fffffff4}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001f, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffff3fffffff3, 0xfffffff3fffffff3}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, -13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0x00000000ffefffef, 0x0000000000000000}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01fe0400000006, 0x0000000800000000}; + __m128i_result = (__m128i){0xff01fe0400000005, 0x0000000500000000}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffafffffffa, 0xfffffffafffffffa}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, -6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fbf3fbf00007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000e0000000e, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000d0000000d, 0x0000000000000000}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080008000800080, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001300000013, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000900000009, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, 8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x345002920f3017d6, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffff7fffffff7, 0xfffffff7fffffff7}; + __m128i_out = __lsx_vmini_w((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe7a6533b800001b8, 0xb7032c34093d35ab}; + __m128i_result = (__m128i){0x0000000900000009, 0x0000000900000009}; + __m128i_out = __lsx_vmini_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x03574e3a62407e03}; + __m128i_result = (__m128i){0xfffffffffffffff7, 0xfffffffffffffff7}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100100000, 0x1000000010000000}; + __m128i_result = (__m128i){0xfffffffffffffff1, 0xfffffffffffffff1}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000034, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000006, 0x0000000000000000}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000006, 0x0000000000000000}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00a6ffceffb60052, 0xff84fff4ff84fff4}; + __m128i_result = (__m128i){0xfffffffffffffff0, 0xff84fff4ff84fff4}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffff9, 0xfffffffffffffff9}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111100, 0x111110ff11111141}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaa55556fd5aaaac1, 0x55aa55c3d5aa55c4}; + __m128i_result = (__m128i){0xaa55556fd5aaaac1, 0x000000000000000c}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffff4, 0xfffffffffffffff4}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffffb, 0xfffffffffffffffb}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + __m128i_result = (__m128i){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001030103, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00017ea200002000, 0x000085af0000b000}; + __m128i_result = (__m128i){0xfffffffffffffff7, 0xfffffffffffffff7}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffff4, 0xfffffffffffffff4}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01e41ffff0ffff, 0xff00e400ff00e400}; + __m128i_result = (__m128i){0xff01e41ffff0ffff, 0xff00e400ff00e400}; + __m128i_out = __lsx_vmini_d((__m128)v2u64_op0, 14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.c new file mode 100644 index 0000000000..9d4d101b12 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.c @@ -0,0 +1,160 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000a163000016b0, 0xffff0001ffff0001}; + __m128i_result = (__m128i){0x0000030300000303, 0x0303000103030001}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd8248069ffe78077, 0x0000000000000000}; + __m128i_result = (__m128i){0x0d0d0d0d0d0d0d0d, 0x0000000000000000}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x7da9b23a624082fd}; + __m128i_result = (__m128i){0x0000000005050000, 0x0505050505050505}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000001300000013}; + __m128i_result = (__m128i){0x0000000e0000000e, 0x0000000e0000000e}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000001fffdfffdff, 0x000001fffdfffdff}; + __m128i_result = (__m128i){0x0000010101010101, 0x0000010101010101}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000071007600, 0x000000009c007c00}; + __m128i_result = (__m128i){0x0000000009000900, 0x0000000009000900}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0x0303030303030303, 0x0303030303030303}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8bff0000a7b80000, 0xd3220000d3f20000}; + __m128i_result = (__m128i){0x0909000009090000, 0x0909000009090000}; + __m128i_out = __lsx_vmini_bu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000083ff0be0, 0x80000000b57ec564}; + __m128i_result = (__m128i){0x0014000000140014, 0x0014000000140014}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x0013001300130013, 0x0013001300130013}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b169bbb8145f50, 0x02b010f881a281a2}; + __m128i_result = (__m128i){0x0002000200020002, 0x0002000200020002}; + __m128i_out = __lsx_vmini_hu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010002000000000, 0x0000040004000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00ff00ff0000007f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000004}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000005}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fe01fe00, 0x00000003fc00ff00}; + __m128i_result = (__m128i){0x000000000000000a, 0x000000000000000a}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fc000007fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x000000000000000b, 0x000000000000000b}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000014}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000005}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000084300000e55f, 0x0000d3460001518a}; + __m128i_result = (__m128i){0x0000000000000016, 0x0000000000000016}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5efeb3165bd7653d, 0xffff2356fe165486}; + __m128i_result = (__m128i){0x0000000000000007, 0x0000000000000007}; + __m128i_out = __lsx_vmini_du((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmini-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.c new file mode 100644 index 0000000000..f63b8f7822 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.c @@ -0,0 +1,176 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xc72df14afbfafdf9, 0x82c539ffffffffff}; + v2u64_op1 = (v2u64){0xc72df14afbfafdf9, 0x82c539ffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffc3639d96, 0xffffffff994cb09c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003c853c843c844, 0x0003c853c843c844}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001808201018081, 0x0001808281820102}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0001008201010081, 0x0001008281820102}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010240010202, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v2u64_op1 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000104000800, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0804080407040804, 0x0101080408040804}; + __m128i_result = (__m128i){0x0001000104000800, 0x0001000100010001}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op1 = (v2u64){0x1202120212021202, 0x1202120212021202}; + __m128i_result = (__m128i){0x1000100010001000, 0x1000100010001000}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + v2u64_op1 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000003}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + v2u64_op1 = (v2u64){0x27b169bbb8145f50, 0xf6548a1747e59090}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfeca2eb9931, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x370bdfeca2eb9931, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9a49e11102834d70, 0x805ffffe01001fe0}; + v2u64_op1 = (v2u64){0x9b2ee1a4034b4e34, 0x8144ffff01c820a4}; + __m128i_result = (__m128i){0xff1aff6d02834d70, 0xff1affff01001fe0}; + __m128i_out = __lsx_vmod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001d001d001d0000, 0x001d001d001d001d}; + v2u64_op1 = (v2u64){0x001d001d001d0000, 0x001d001d001d001d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4f8000004f800000, 0x4f8000004f800000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ffff000000ff00, 0x00ffff0000000000}; + v2u64_op1 = (v2u64){0x03c0038000000380, 0x03c0000000000000}; + __m128i_result = (__m128i){0x00ffff000000ff00, 0x00ffff0000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0d8e36706ac02b9b, 0x80000000307d0771}; + v2u64_op1 = (v2u64){0x0d8e36706ac02b9b, 0x80000000307d0771}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f7f017f9d8726d3, 0x413e276583869d79}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000dfff2, 0x000000000011ffee}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.c new file mode 100644 index 0000000000..18d7be39e6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.c @@ -0,0 +1,176 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x6363636363636363, 0x16161616a16316b0}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x16161616a16316b0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + v2u64_op1 = (v2u64){0x5a5a5a5a5b5a5b5a, 0x5a5a5a5a5b5a5b5a}; + __m128i_result = (__m128i){0x00000001494b494a, 0x00000001494b494a}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffeb, 0xffffffffffffffeb}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x68bcf93435ed25ed, 0x7f801fa06451ef11}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffdd9999da, 0x0000000022666621}; + v2u64_op1 = (v2u64){0x7f0000fd7f0000fd, 0x7f7f7f7f00107f04}; + __m128i_result = (__m128i){0x01ff00085e9900ab, 0x0000000000066621}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff0000, 0x000000000000bd3d}; + v2u64_op1 = (v2u64){0xefffdffff0009d3d, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000007fff0000, 0x000000000000bd3d}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000004870ba0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6b769e690fa1e119, 0x478b478b38031779}; + __m128i_result = (__m128i){0x0000000004870ba0, 0x0000000000000000}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + v2u64_op1 = (v2u64){0x2006454690d3de87, 0x2006454690d3de87}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200020002, 0x0002000200020002}; + v2u64_op1 = (v2u64){0x27b169bbb8145f50, 0x02b010f881a281a2}; + __m128i_result = (__m128i){0x0002000200020002, 0x0002000200020002}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff100000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010001000100010, 0x0010001000100010}; + __m128i_result = (__m128i){0x000f000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffe0000fffe, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffff00ffffff00, 0xffffff00ffffff00}; + __m128i_result = (__m128i){0x0000fffe0000fffe, 0x0000000000000000}; + __m128i_out = __lsx_vmod_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000200, 0x0000000000000200}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000101fd01fe, 0x0001000100010001}; + v2u64_op1 = (v2u64){0xff80ff8080008000, 0xff80ff80ff80ff80}; + __m128i_result = (__m128i){0x0001000101fd01fe, 0x0001000100010001}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a0, 0xffffffffcafff8ff}; + v2u64_op1 = (v2u64){0xfffeffff0035ff8f, 0xff2cfed4fea8ff44}; + __m128i_result = (__m128i){0x00000000000000a0, 0x00d3012acc56f9bb}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x37c0001000000000, 0x37c0001000000000}; + v2u64_op1 = (v2u64){0x0004000400040004, 0x0004000400040004}; + __m128i_result = (__m128i){0x0003c853c843c844, 0x0003c853c843c844}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + __m128i_result = (__m128i){0x000000003ddc5dac, 0x0000000000000000}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffefffff784, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000001000010f8, 0x10f8000100000001}; + __m128i_result = (__m128i){0x00000000011ff8bc, 0x0177fff0fffffff0}; + __m128i_out = __lsx_vmod_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmod-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.c new file mode 100644 index 0000000000..66a103c0a1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.c @@ -0,0 +1,90 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x837cd5db43fc55d4, 0x0403cfcf01c1595e}; + __m128i_result = (__m128i){0x000000000000cb4a, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff7f01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000000d, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000010000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe813f00fe813f00, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000033, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffe00006aea, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffce, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskgez_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmskgez.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.c new file mode 100644 index 0000000000..d1fc553928 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.c @@ -0,0 +1,235 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + __m128i_result = (__m128i){0x000000000000013d, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x1111113111111141}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x87e3285243051cf3, 0x9780697084f07dd7}; + __m128i_result = (__m128i){0x000000000000cdc1, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcd1de80217374041, 0x05d0ae6002e8748e}; + __m128i_result = (__m128i){0x00000000000065a0, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a0, 0x00d3012acc56f9bb}; + __m128i_result = (__m128i){0x0000000000004b01, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000020}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x0000000000003f3f, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff0018, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003ffffe00800000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000034, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000f0000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010001fffd, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1918171615141312, 0x21201f1e1d1c1b1a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000f, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000080000000}; + __m128i_result = (__m128i){0x0000000000000022, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000008080600, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000013ecaadf2, 0x0000000035697d4e}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_result = (__m128i){0x0000000000000027, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd83c8081ffff8080, 0x85bd6b0e94d89998}; + __m128i_result = (__m128i){0x000000000000000f, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001007c, 0x0000000000010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff0, 0x00000000ff08ffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5f9ccf33cf600000, 0x0000000000006de1}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc3818bffe7b7a7b8, 0x4399d3221a29d3f2}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmskltz_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmskltz.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.c new file mode 100644 index 0000000000..4a7c1f9dfa --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.c @@ -0,0 +1,80 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000000001e1f, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c63636363, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x009500b10113009c, 0x009500b10113009c}; + __m128i_result = (__m128i){0x0000000000005d5d, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffff000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000fe, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000000000001, 0x000fffffffffffff}; + __m128i_result = (__m128i){0x0000000000007f41, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0014001400140000, 0x0000000000ff00ff}; + __m128i_result = (__m128i){0x0000000000000554, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x202544f490f2de35, 0x202544f490f2de35}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6adeb5dfcb000000, 0x00000a74aa8a55ab}; + __m128i_result = (__m128i){0x0000000000003ff8, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x317fce80317fce80}; + __m128i_result = (__m128i){0x000000000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vmsknz_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmsknz.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.c new file mode 100644 index 0000000000..aa84aa73c3 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.c @@ -0,0 +1,300 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfeffffffffff0002, 0xfeffffffffffffff}; + v2u64_op2 = (v2u64){0x8024d8f6a494afcb, 0x54beed87bc3f2be1}; + __m128i_result = (__m128i){0x0024d8f6a494006a, 0xa8beed87bc3f2be1}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0001000100000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff000000ff0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffffffff800}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff000000ff0000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001400000000, 0x0000001400000014}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000053a4f452, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001400000000, 0x0000001400000014}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa1e7b475d925730f, 0xb327b9363c99d32e}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0x00000000003f80b0}; + v2u64_op2 = (v2u64){0x00007f8000007f80, 0x00007f8000007f80}; + __m128i_result = (__m128i){0xa1e7b475d925730f, 0xb327b9363c992b2e}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x7ffe7ffe7ffe7ffe}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffc3ffff003e, 0x0000003f0000ffff}; + v2u64_op2 = (v2u64){0xffffffc3ffff003e, 0x0000003f0000ffff}; + __m128i_result = (__m128i){0xfffff177fffff0fc, 0x0000f07f0000ffff}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000010000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x002584710016cc56, 0x0021b761002c593c}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000001e03, 0x0000000000000000}; + __m128i_result = (__m128i){0x002584710016ea59, 0x0021b761002c593c}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000290, 0x0000000000000290}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + v2u64_op2 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0001ffff0001ffff, 0x0001ffff00000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xfffffff0ffe04000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001fc0000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000200010, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x040004000400040d, 0x0400040004000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x040004000400040d, 0x0400040004000400}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc7e01fcfe0000000, 0x3727f00000000000}; + v2u64_op1 = (v2u64){0x39201f7120000040, 0x3727112c00000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0xc7e01fcfe0000000, 0xe5b9012c00000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0204, 0xffffffff00000004}; + v2u64_op1 = (v2u64){0x0000e22b0000efa4, 0x0000442900007b4c}; + v2u64_op2 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffff0204, 0x0000442800007b50}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffefffffffe, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000029, 0x000000000000002f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + __m128i_result = (__m128i){0x0000000000000029, 0x000000000000002f}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8f8f8f8f8f8f8f8f, 0x8f8f8f8f8f8f8f8f}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff913bfffffffd, 0x00680486ffffffda}; + v2u64_op1 = (v2u64){0xffff913bfffffffd, 0x00680486ffffffda}; + v2u64_op2 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff913bb9951901, 0x00680486ffffffda}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000100000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0x0002000400000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0003000500000001, 0x0000000100000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000400040004, 0x0004000400040004}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0004000400040004, 0x0004000400040004}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200020002, 0x0002000200020002}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op2 = (v2u64){0xe0c0c0c0d1c7d1c6, 0x000000004c7f4c7f}; + __m128i_result = (__m128i){0x4d6814ef9c77ce46, 0x061006100613030c}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000002bfd9461, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000000ffffff00, 0x0000000000000f00}; + __m128i_result = (__m128i){0x000000002bfd9461, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f8000007f800000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff0000007f800000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0fff0fff0fff0fff, 0x0fff0fff0fff0fff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0fff0fff0fff0fff, 0x0fff0fff0fff0fff}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffbfffefffc9510, 0xfffbfffefffc9510}; + v2u64_op1 = (v2u64){0x0a09080709080706, 0x0c0b0a090b0a0908}; + v2u64_op2 = (v2u64){0xfffbfffefffc9510, 0xfffbfffefffc9510}; + __m128i_result = (__m128i){0x62fb9272df7da6b0, 0x29c251319c3a5c90}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x800000007fffffff, 0x800000007fffffff}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + v2u64_op1 = (v2u64){0x001effae001effae, 0x0000ffae001effae}; + v2u64_op2 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + __m128i_result = (__m128i){0x96198318780e32c5, 0xfd200ed2fd370775}; + __m128i_out = __lsx_vmsub_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmsub.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.c new file mode 100644 index 0000000000..41561fb234 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.c @@ -0,0 +1,242 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x059a35ef139a8e00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x4040404040404040, 0x4040404040404040}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc0c00c01c2cd0009, 0xc0c00000c0c00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000ffff}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0fffff000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffe00000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff000000000001, 0xffffffff0000ac26}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff00ffff7e01, 0x000000ffffff81fe}; + v2u64_op1 = (v2u64){0x000000fffe01fd02, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000fe86, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7f7f7f7f7f7f7f7f, 0x7f7f7f7f7f7f7f7f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff8000010f800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + __m128i_result = (__m128i){0x00000000fff80000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ebdfffffddf3f40, 0xbf3efff536d5169b}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x3f5ec0a0feefa0b0, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7ffffffe, 0x7fffffff7ffffffe}; + v2u64_op1 = (v2u64){0x7fffffff7ffffffe, 0x7fffffff7ffffffe}; + __m128i_result = (__m128i){0x3fffffff3ffffffe, 0x3fffffff3ffffffe}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + v2u64_op1 = (v2u64){0x7fffffffa0204000, 0x7fff0101ffffe000}; + __m128i_result = (__m128i){0x001f7fff00000000, 0x001f7fc100000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000cd630000cd63, 0x0001000000010000}; + v2u64_op1 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + __m128i_result = (__m128i){0xffffd765ffffd765, 0xffffcd63ffffcd63}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xff7fffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0040000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff9ed2e1c000, 0x000015516a768038}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x007ffd0001400840, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x007ffd0001400840, 0x8000000080000000}; + __m128i_result = (__m128i){0x00003ffd000a4000, 0x3fffffff80000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0032000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000009c400000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0202fe02fd020102, 0x0002000200020002}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000202fe02, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000007, 0x0006000000040000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000006362ffff, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x00000000fffe0002, 0x0000000000000001}; + __m128i_out = __lsx_vmuh_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.c new file mode 100644 index 0000000000..e46308965a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.c @@ -0,0 +1,254 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000011, 0x0000000000000011}; + v2u64_op1 = (v2u64){0x0000000000000011, 0x0000000000000011}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaaacac88a3a9a96a, 0x000000c5ac01015b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001300000013, 0x0000001300000013}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000040033, 0x0000000000038003}; + v2u64_op1 = (v2u64){0x0000000080000068, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0x10f881a20ffd02b0}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000fe7f0000, 0x0ff780a10efc01af}; + __m128i_out = __lsx_vmuh_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000efffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001001100110068}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1d8000001d800000, 0x1d8000001d800000}; + v2u64_op1 = (v2u64){0x1d8000001d800000, 0x1d8000001d800000}; + __m128i_result = (__m128i){0x0366000003660000, 0x0366000003660000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x28bf0351ec69b5f2, 0x7ef400ad21fc7081}; + v2u64_op1 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_result = (__m128i){0x28bee9edec690869, 0x7ef3ddac21fc5a2c}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000200000002000}; + v2u64_op1 = (v2u64){0xffffffffe000ffdf, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00001fff00001fff}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc31b63d846ebc810, 0x000000000000214f}; + v2u64_op1 = (v2u64){0x00000000ffff941d, 0x00ff0000800000ff}; + __m128i_result = (__m128i){0x0000000046ebaa2c, 0x00000000000010a7}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000cf4f4f00, 0x00000000cf4f4f00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000005f0003e000, 0x000000000000007c}; + v2u64_op1 = (v2u64){0x0000000000000408, 0x0000000897957687}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000004bd7cdd20, 0x00000003397dd140}; + v2u64_op1 = (v2u64){0x0016ffb00016ffb0, 0x0016ffb00016ffb0}; + __m128i_result = (__m128i){0x00000000006d04bc, 0x00000000004a294b}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + v2u64_op1 = (v2u64){0x007ffe7ffe400000, 0x0000000000000000}; + __m128i_result = (__m128i){0x007ffd0001400840, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffa800000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000157, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001f2f2cab1c732a, 0x001a64b345308091}; + v2u64_op1 = (v2u64){0x1c2640b9a8e9fb49, 0x1baf8eabd26bc629}; + __m128i_result = (__m128i){0x00036dd1c5c15856, 0x0002dab8746acf8e}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000eeff1100e, 0x00003a7fc58074ff}; + __m128i_out = __lsx_vmuh_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmuh-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmul.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmul.c new file mode 100644 index 0000000000..433472af17 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmul.c @@ -0,0 +1,194 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000800800000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000800800000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000004000000000, 0x0000000100000001}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x007f008000ea007f}; + v2u64_op1 = (v2u64){0xc000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe8c7b756d76aa478, 0xc1bdceee242070db}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x3f433212dce09025}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0303030303030303, 0x0303030303030303}; + v2u64_op1 = (v2u64){0x02f3030303030303, 0x0000000000000000}; + __m128i_result = (__m128i){0x06d9090909090909, 0x0000000000000000}; + __m128i_out = __lsx_vmul_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff0074230438, 0xfffffe003c1f0077}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff0000000438, 0x0000000000000000}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff5a6fe3d7, 0xeeb1e4f43c3763f3}; + v2u64_op1 = (v2u64){0x0000718ea657431b, 0x0000000021e79364}; + __m128i_result = (__m128i){0x00008e72b5b94cad, 0x000000006ca193ec}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x467f6080467d607f, 0xffffe000ffffe000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf359f359f359f359, 0xf359f359f359f359}; + v2u64_op1 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x317fce80317fce80}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8064d8f6a494afcb, 0x54feed87bc3f2be1}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff5fff4002ffff5, 0x0001000000000000}; + v2u64_op1 = (v2u64){0x18499e2cee2cc251, 0xaa858644fb8b3d49}; + __m128i_result = (__m128i){0xaed495f03343a685, 0x8644000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc000c000c000ff81, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x5d5d5d5d5d5d0000, 0x5d5d5d5d5d5d5d5d}; + __m128i_result = (__m128i){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa91e2048938c40f0, 0xacc8c794af2caf01}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000040, 0x0000000000000040}; + __m128i_result = (__m128i){0x0000000000001000, 0x0000000000001000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffc0001fffc, 0x0042003e0042002f}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffe0004fffe0004, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + v2u64_op1 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + __m128i_result = (__m128i){0x12755900b653f081, 0x9727b8499727b849}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04ffff8101ff81ff, 0xffffff81ffff7f03}; + v2u64_op1 = (v2u64){0x0a0000000a000000, 0x0a0000000a000000}; + __m128i_result = (__m128i){0x0a000000f6000000, 0x0a0000001e000000}; + __m128i_out = __lsx_vmul_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + v2u64_op1 = (v2u64){0x0100d6effefd0498, 0x7505443065413aed}; + __m128i_result = (__m128i){0x4e17c2ffb4851a40, 0xb71289fdfbea3f69}; + __m128i_out = __lsx_vmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fcfffe01fd01, 0xfc01fcfefc02fdf7}; + v2u64_op1 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + __m128i_result = (__m128i){0xca31bf15fd010000, 0xc72ef153fc02fdf7}; + __m128i_out = __lsx_vmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmul_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmul.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmul.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmul.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.c new file mode 100644 index 0000000000..010beb0522 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.c @@ -0,0 +1,296 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000002a000, 0x001f7fc100000404}; + v2u64_op1 = (v2u64){0x7fffffffa0204000, 0x7fff0101ffffe000}; + __m128i_result = (__m128i){0x0000000000400000, 0xffe1ffc100000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000009000900, 0x0000000009000900}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffc3, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0xff9dff9dff9dff9d, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000efffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000ff0000, 0xffffe50000000000}; + v2u64_op1 = (v2u64){0x3fc00000010a000b, 0xffffffffffffe020}; + __m128i_result = (__m128i){0x0000000000000000, 0x00001b0000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffb7005f0070007c, 0x00000000ff81007c}; + v2u64_op1 = (v2u64){0x0001000104000800, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000005f0003e000, 0x000000000000007c}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4040404040404040, 0x4040404040404040}; + __m128i_result = (__m128i){0xffffbfc0ffffbfc0, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x000000ffffffffff, 0x000000ffffffffff}; + __m128i_result = (__m128i){0xffffff0100000001, 0xffffff0100000001}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000208000002080, 0x0000208000002080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000004870ba0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6b769e690fa1e119, 0x478b478b38031779}; + __m128i_result = (__m128i){0x00000000fe98c2a0, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007770ffff9411, 0x0000004000000040}; + v2u64_op1 = (v2u64){0x00007770ffff9411, 0x0000004000000040}; + __m128i_result = (__m128i){0x37b951002d81a921, 0x0000100000001000}; + __m128i_out = __lsx_vmulwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000e0000000e0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000e0000000e0, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000c400, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fffffff7fffffff}; + v2u64_op1 = (v2u64){0x000000ffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff80000001}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffb4ff, 0xffffffffffffb4ff}; + v2u64_op1 = (v2u64){0x0000000000000016, 0x0000000000000001}; + __m128i_result = (__m128i){0xfffffffffff98dea, 0xffffffffffffb4ff}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000007, 0x0006000000040000}; + v2u64_op1 = (v2u64){0x0000000000f80007, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000006c80031, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000010001, 0x0000000001010001}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + v2u64_op1 = (v2u64){0x0004280808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0000000808080800, 0x0010203030201000}; + __m128i_out = __lsx_vmulwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000b5207f80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000200200000, 0x2000000020000000}; + __m128i_result = (__m128i){0x6a57a30ff0000000, 0x0000000000000001}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff7, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0xfffffff700000009, 0xffffffffffffffff}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000104000800, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x8001000184000800, 0x8001000180010001}; + __m128i_result = (__m128i){0x9a10144000400000, 0xffff80007e028401}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000bd003d}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000000000001, 0x000fffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000077af9450, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000047404f4f040d, 0x000000400000004c}; + __m128i_result = (__m128i){0xc31b63d846ebc810, 0x000000000000214f}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000000, 0x0000002000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.c new file mode 100644 index 0000000000..c06a9e885e --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.c @@ -0,0 +1,308 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000fe01fe01, 0xfe01fe01fe01fe01}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000200020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x17483c07141b5971, 0x6a5d5b056f2f4978}; + v2u64_op1 = (v2u64){0xd4bade5e2e902836, 0x0000000000000000}; + __m128i_result = (__m128i){0x345002920f3017d6, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00067fff0002a207, 0x0000c0010000a186}; + v2u64_op1 = (v2u64){0xffffffffffff0002, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x05fafe0101fe000e, 0x000000ff0000857a}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0xc1f03e1042208410, 0x0001000100010001}; + __m128i_result = (__m128i){0x00f0001000000010, 0x0001000100010001}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf8e1a03affffe3e2, 0x00000000000eefff}; + v2u64_op1 = (v2u64){0x93f0b81a914c003b, 0x3a80613fda5dcb4a}; + __m128i_result = (__m128i){0xd2f005e44bb43416, 0x00000000051649b6}; + __m128i_out = __lsx_vmulwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fe01fe01, 0xfe01fe01fe01fe01}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffff1fff, 0x0000000001000001}; + v2u64_op1 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + __m128i_result = (__m128i){0xe400000003ffc001, 0x0000000000000383}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff00000000, 0x7fffffff7fffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000200000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001fffe00000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000006, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000006, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0029ff96005cff88, 0x001800390049ffaa}; + __m128i_result = (__m128i){0x00000000ffffff88, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff0016fff8d3d, 0xfffff000f0008d3c}; + v2u64_op1 = (v2u64){0xfffff0016fff8d3d, 0xfffff000f0008d3c}; + __m128i_result = (__m128i){0xe101e0014dec4089, 0xe10000004deb2610}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0202020202020203, 0x0202020202020203}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + v2u64_op1 = (v2u64){0xbff0000000000000, 0x41dfffffffc00000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff000100000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x11111131111116a6, 0x111110ff11111141}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2028000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff7fffffff7f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0f0f0f0f00000000, 0x0000000f0000000f}; + __m128i_result = (__m128i){0x0f07697100000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0001001100110068}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0xf4000020c4000000, 0xd400c02000002acf}; + __m128i_result = (__m128i){0x000fdec000000000, 0x6453f5e01d6e5000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + v2u64_op1 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + __m128i_result = (__m128i){0xfb141d31fb141d31, 0x0000021100000211}; + __m128i_out = __lsx_vmulwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0b73e427f7cfcb88, 0xf2c97aaa7d8fa270}; + v2u64_op1 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_result = (__m128i){0x27b1b106b8145f50, 0xf654ad7447e59090}; + __m128i_out = __lsx_vmulwev_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x837c1ae57f8012ed, 0x7f800000976801fe}; + __m128i_result = (__m128i){0x7f8012ec807fed13, 0x976801fd6897fe02}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080000000000000, 0x0000008000000080}; + v2u64_op1 = (v2u64){0x000100010001fffe, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000800080}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0002ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0x7ff8000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0909090909090909, 0x0909090900000909}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000100}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x93f0b81a914c003b, 0x3a80613fda5dcb4a}; + v2u64_op1 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + __m128i_result = (__m128i){0x2ff8fddb7ae20000, 0x1e242e4d68dc0000}; + __m128i_out = __lsx_vmulwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000060000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000060000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffe8081000000000, 0x7ff000ff6220c0c1}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.c new file mode 100644 index 0000000000..3b3757d256 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.c @@ -0,0 +1,170 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xff01ff01ff01fc10, 0xff01ff01ff01ff01}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffc0001fffc, 0x0042003e0042002f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffbeffc2ffbeffd1}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003f80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000000000000, 0x0001000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80000000fff80000, 0x0000000000000080}; + v2u64_op1 = (v2u64){0x80000000fff80000, 0x0000000000000080}; + __m128i_result = (__m128i){0xfff8004000000000, 0x0000000000004000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff0cff78ff96ff14, 0xffffff8607db959f}; + v2u64_op1 = (v2u64){0x0000008900000009, 0x0000008a0000008a}; + __m128i_result = (__m128i){0x00000008fc4ef7b4, 0x000000043c5ea7b6}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffff46, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0xffffff46000000ba, 0xfffffffe00000002}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf8f8372f752402ee, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffc0000000000000, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80044def00000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x49a210000000ff00, 0x00007f8449a19084}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fe00f8000700, 0xfffcfd000000fb00}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfdfef9ff0efff900, 0x0000000000000001}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7efefefe82010201, 0x0000000000000000}; + __m128i_result = (__m128i){0x7afafaf88a050a05, 0x0000000000000002}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcda585aebbb2836a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcda585aebbb2836a, 0x0000000000000000}; + __m128i_result = (__m128i){0x5779108fdedda7e4, 0xd78cfd70b5f65d76}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0xf4af70d0c4000000, 0xd48acbfe13102acf}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffe0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x00000000ffffff86, 0x0000000000000056}; + __m128i_result = (__m128i){0xf8e1a03affffe3e2, 0x00000000000eefff}; + __m128i_out = __lsx_vmulwev_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwev-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.c new file mode 100644 index 0000000000..a660ef2c1c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.c @@ -0,0 +1,188 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000006, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0100010000010000, 0x0100010000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vmulwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x387c7e0a133f2000, 0x67157b5100005000}; + __m128i_result = (__m128i){0x0000000004870ba0, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000155, 0xfefe000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff8001ffff8001}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x3ff0010000000000, 0x3ff0010000000000}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4400000000000000, 0x440ef000440ef000}; + v2u64_op1 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0x0003b80000000000, 0x0f8d33000f8d3300}; + __m128i_out = __lsx_vmulwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0018001800180018, 0x0018001800180018}; + v2u64_op1 = (v2u64){0xd83c8081ffff808f, 0x85bd6b0e94d89998}; + __m128i_result = (__m128i){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x161d0c373c200826, 0x3e1f321529232736}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x0001000000010001, 0x0001000000010001}; + __m128i_result = (__m128i){0x00003f8000000000, 0x00003f8000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff000000007fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x00000000c6fde000, 0x00000000ffffe000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fef01000f27ca, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0101000001000100, 0x0000010000010101}; + __m128i_result = (__m128i){0x00000ffef0010000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffe0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000044525043c, 0x0000000005452505}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x3fc03fc000000004, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffc03fc040, 0x0000000000000001}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000a, 0x000000000000000a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7f00, 0x00fe000100cf005f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000400028000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc00d060000000000, 0xc110000000000000}; + v2u64_op1 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xf047ef0000000000}; + __m128i_out = __lsx_vmulwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff100000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000f0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.c new file mode 100644 index 0000000000..a4de78542b --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.c @@ -0,0 +1,260 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff870068fff5ffb3, 0x004e005500060031}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1304db85e468073a, 0xfa31dfa21672e711}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffeffff001effff, 0x0000000000150000}; + v2u64_op1 = (v2u64){0x00000000fffff1a0, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x000000000000f00f, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe2560afe9c001a18, 0xe2560afe9c001a18}; + v2u64_op1 = (v2u64){0x05fafe0101fe000e, 0x000000ff0000857a}; + __m128i_result = (__m128i){0x046a09ec009c0000, 0x0000000000000d82}; + __m128i_out = __lsx_vmulwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80ffffffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff00000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x7f3f018000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000a00028004000, 0xf0fd800080000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff9ee000004ec, 0x0000005a00000228}; + v2u64_op1 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x1f54e0ab00000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0080810080808100, 0x00e4880080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80ff800000000000, 0xff011fb11181d8ea}; + v2u64_op1 = (v2u64){0x00fe00fe000200fe, 0x00fe00fe000200fe}; + __m128i_result = (__m128i){0x007ffd0200000000, 0x00fd02fe00002302}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffa352ffff9269, 0xffffd70b00006ea9}; + v2u64_op1 = (v2u64){0xffffa352ffff9269, 0xffffd70b00006ea9}; + __m128i_result = (__m128i){0xffff0001ffff0001, 0xffff000100000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8101010181010101, 0x8101010181010101}; + __m128i_result = (__m128i){0xc0808000c0808000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + v2u64_op1 = (v2u64){0x000300000000fdff, 0x000700000004fdff}; + __m128i_result = (__m128i){0x0002fffa00000000, 0x0006fff20003fff8}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc0000000c000c000, 0x00c0c000c0000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffd0ba876d000, 0x000002bf8b062000}; + v2u64_op1 = (v2u64){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_result = (__m128i){0x41f7be08ffff578a, 0x00000000ff110db0}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x317fce80317fce80}; + __m128i_out = __lsx_vmulwod_w_hu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffe0001fffe0001, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d27e00682a, 0x14ccc6320076a4d2}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x685670d197a98f2e, 0x14ccc631eb3339ce}; + __m128i_out = __lsx_vmulwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffc0ffc0003f003f, 0x003fffc0ffc0003f}; + v2u64_op1 = (v2u64){0x00007770ffff941d, 0x000000400000004c}; + __m128i_result = (__m128i){0x000077529b522400, 0x000000000ffff000}; + __m128i_out = __lsx_vmulwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001000000010}; + v2u64_op1 = (v2u64){0x1111113111111121, 0x1111113111111141}; + __m128i_result = (__m128i){0x2222272111111410, 0x0000000111111312}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff800000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff0015172b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffffff800000, 0x0000000000800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000600000001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x00000000c6c6c6c6, 0x00000000c6c6c6c6}; + __m128i_result = (__m128i){0x8d8d8d8d8d8cc6c6, 0x000000000000c6c7}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a0000000a000000, 0x0a0000000a000000}; + v2u64_op1 = (v2u64){0x3b42017f3a7f7f01, 0x7f7f00007f7f7500}; + __m128i_result = (__m128i){0x04fafa9200000000, 0x04faf60009f5f092}; + __m128i_out = __lsx_vmulwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.c b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.c new file mode 100644 index 0000000000..43685f4966 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.c @@ -0,0 +1,212 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + v2u64_op1 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff020000fff4, 0x000000000000ffff}; + v2u64_op1 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x00001ee100000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff7fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3f5ec0a0feefa0b0, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ff02d060, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_h_bu_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80000000fff80000, 0x80000000fff8fff8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000010, 0x0000001000000010}; + v2u64_op1 = (v2u64){0x0010001000100010, 0x0010001000100010}; + __m128i_result = (__m128i){0x0000000001000100, 0x0000000001000100}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000006d04bc, 0x00000000004a294b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaa55555655aaaaa8, 0x55aa55aa55aa55ab}; + v2u64_op1 = (v2u64){0x28bf02d1ec6a35b2, 0x7ef4002d21fc7001}; + __m128i_result = (__m128i){0x1b1c6cdfd57f5736, 0x2a7b7c9260f90ee2}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000004040504, 0x0000000004040504}; + v2u64_op1 = (v2u64){0x0000010100000101, 0x0000010100000101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_d_wu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x00feff0100000000, 0x0000000000feff01}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010102020202, 0x0101010202050120}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0ae3072529fbfe78, 0xffffffffffffffff}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000007f8, 0x00000000000007f8}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00ff000000ff0000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x030804010d090107}; + v2u64_op1 = (v2u64){0x1313131313131313, 0x1313131313131313}; + __m128i_result = (__m128i){0x6d339b4f3b439885, 0x0039d21e3229d4e8}; + __m128i_out = __lsx_vmulwod_q_du_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vmulwod-3.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vneg.c b/SingleSource/UnitTests/Vector/LSX/lsx-vneg.c new file mode 100644 index 0000000000..161d7e9372 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vneg.c @@ -0,0 +1,235 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff0001ffffff0a, 0x00ff00ff0000ffff}; + __m128i_result = (__m128i){0x000100ff010101f6, 0x0001000100000101}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010101010101, 0x0101010101010101}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff0000000000, 0xff000000ff00ff00}; + __m128i_result = (__m128i){0x0100010000000000, 0x0100000001000100}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x080803ff807ff7f9, 0xfffffbff8888080a}; + __m128i_result = (__m128i){0xf8f8fd0180810907, 0x010105017878f8f6}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000080000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000080000000}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vneg_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000fff3, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x181b2541ffffffff, 0x441ba9fcffffffff}; + __m128i_result = (__m128i){0xe7e5dabf00010001, 0xbbe5560400010001}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vneg_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000101}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000fffffeff}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100010001, 0x0000000300000001}; + __m128i_result = (__m128i){0xfffffffffffeffff, 0xfffffffdffffffff}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa70594c000000000, 0x000000000060a3db}; + __m128i_result = (__m128i){0x58fa6b4000000000, 0x00000000ff9f5c25}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000010000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffff0000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffeffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000004, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffefffefffffffc, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffff00ffffff01, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000008000001e, 0x000000000000001f}; + __m128i_result = (__m128i){0xffffffff7fffffe2, 0xffffffffffffffe1}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffc00001ff800000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x003ffffe00800000, 0x0000000000000001}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000087c, 0x087c000000000000}; + __m128i_result = (__m128i){0xfffffffffffff784, 0xf784000000000000}; + __m128i_out = __lsx_vneg_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vneg.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vneg.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vneg.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vnor.c b/SingleSource/UnitTests/Vector/LSX/lsx-vnor.c new file mode 100644 index 0000000000..36bb394be4 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vnor.c @@ -0,0 +1,74 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + v2u64_op1 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + __m128i_result = (__m128i){0xffffffff0007ffff, 0xffffffff00070007}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x63b2ac27aa076aeb, 0xce23d33e43d9736c}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x9c4d53d855f89514, 0x31dc2cc1bc268c93}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000c, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffff3, 0xffffffffffffffff}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bc2000007e04, 0x0000400080003fff}; + v2u64_op1 = (v2u64){0x0000bc2000007e04, 0x0000400080003fff}; + __m128i_result = (__m128i){0xffff43dfffff81fb, 0xffffbfff7fffc000}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + v2u64_op1 = (v2u64){0x5252525252525252, 0x5252525252525252}; + __m128i_result = (__m128i){0xacad25090caca5a4, 0xada4808924882588}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffe0000ff18, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffff000000000000}; + __m128i_result = (__m128i){0x0001000100000000, 0x0000ffffffffffff}; + __m128i_out = __lsx_vnor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vnor.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vnor.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vnor.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vnori.c b/SingleSource/UnitTests/Vector/LSX/lsx-vnori.c new file mode 100644 index 0000000000..ee32b1353a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vnori.c @@ -0,0 +1,65 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000ffff0000, 0x00000000ffff0000}; + __m128i_result = (__m128i){0xcccccccc0000cccc, 0xcccccccc0000cccc}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0x33); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0xa6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3e035e51522f0799, 0x0000000000000000}; + __m128i_result = (__m128i){0x8090808280909002, 0x9292929292929292}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0x6d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00201df000000000, 0x00000000000ffc2f}; + __m128i_result = (__m128i){0x3818200838383838, 0x3838383838300010}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0xc7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020207f7f, 0x2020202020202020}; + __m128i_result = (__m128i){0x5d5d5d5d5d5d0000, 0x5d5d5d5d5d5d5d5d}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0xa2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0x7f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x1313131313131313, 0x1313131313131313}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0xec); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x9d9d9d9d9d9d9d9d, 0x9d9d9d9d9d9d9d9d}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0x62); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00365c60317ff930, 0x00f525682ffd27f2}; + __m128i_result = (__m128i){0xe5c1a185c48004c5, 0xe500c085c000c005}; + __m128i_out = __lsx_vnori_b((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vnori.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vnori.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vnori.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vor.c b/SingleSource/UnitTests/Vector/LSX/lsx-vor.c new file mode 100644 index 0000000000..bd9a755d4f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vor.c @@ -0,0 +1,110 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00011e80007edff8, 0x7e44bde9b842ff23}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0xfffc001fffffffff, 0x0000000000000001}; + __m128i_result = (__m128i){0xfffc001fffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000200010, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3e035e51522f0799, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3e035e51522f0799, 0x0000000000000000}; + __m128i_result = (__m128i){0x3e035e51522f0799, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + v2u64_op1 = (v2u64){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + __m128i_result = (__m128i){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x81000080806b000b, 0xffffffff80005613}; + v2u64_op1 = (v2u64){0xc0000002b0995850, 0xffff00011cf0c569}; + __m128i_result = (__m128i){0xc1000082b0fb585b, 0xffffffff9cf0d77b}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffbfff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffbfffb, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0001ffff0001ffff, 0x0001ffff0101ffff}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffbc19ecca, 0xffffffffc105d1aa}; + v2u64_op1 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xffffffffffdffdfb, 0xfffffffff9bffbfb}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vor.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vor.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vor.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vori.c b/SingleSource/UnitTests/Vector/LSX/lsx-vori.c new file mode 100644 index 0000000000..9c744d6f84 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vori.c @@ -0,0 +1,85 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8282828282828282, 0x8282828282828282}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x82); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01010000fefe0101, 0x7505853d654185f5}; + __m128i_result = (__m128i){0x41414040fefe4141, 0x7545c57d6541c5f5}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x40); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000c2fa8000c2fa, 0x0000c2f90000bafa}; + __m128i_result = (__m128i){0xf474f6fef474f6fe, 0x7474f6fd7474fefe}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x74); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x3d3d3d3d3d3d3d3d, 0x3d3d3d3d3d3d3d3d}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x5f5f7bfedefb5ada, 0xfffffadffedbfefe}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x5a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xea38e0f75f6e56d1, 0x0d1202e19235e2bc}; + __m128i_result = (__m128i){0xee3ee6f77f6e76f7, 0x2f3626e7b637e6be}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + __m128i_result = (__m128i){0xd6d7ded7ded7defe, 0xd6d7ded7ded7defe}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0xd6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe0000fffe0000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff7777ffff7777, 0x7777777777777777}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x77); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x55); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128i_result = (__m128i){0xd454545454545454, 0xd454545454545454}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x54); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x4f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8a8a8a8a8a8a8a8a, 0x8a8a8a8a8a8a8a8a}; + __m128i_out = __lsx_vori_b((__m128)v2u64_op0, 0x8a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vori.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vori.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vori.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vorn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vorn.c new file mode 100644 index 0000000000..5d5cf7aa72 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vorn.c @@ -0,0 +1,74 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x000100010001fffe, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00010000ffca0070, 0x00d3012b015700bb}; + __m128i_result = (__m128i){0xfffeffff0035ff8f, 0xff2cfed4fea8ff44}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fe00fe00fe0045, 0x00fe00fe00fe00fe}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00fe00fe00fe0045, 0x00fe00fe00fe00fe}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101000001000100, 0x0000010000010101}; + v2u64_op1 = (v2u64){0x0101000001000100, 0x0000010000010101}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe4423f7b769f8ffe, 0x33f5c2d7d975d7fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x33f5c2d7d975d7fe}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f8a50000f310, 0x00050eb00000fffa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff008ff820, 0x00bbfff7fffffff7}; + v2u64_op1 = (v2u64){0x00000000ffe1ffc0, 0x0001000100010012}; + __m128i_result = (__m128i){0xffffffff009ff83f, 0xffffffffffffffff}; + __m128i_out = __lsx_vorn_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vorn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vorn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vorn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.c new file mode 100644 index 0000000000..0ba886870f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.c @@ -0,0 +1,308 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x000000ff000000ff, 0x000000ff00000000}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_result = (__m128i){0x003e00d100de002b, 0x00f900d7003d00e4}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x100f0e0d0f0e0d0c, 0x1211100f11100f0e}; + v2u64_op1 = (v2u64){0x0000002000000020, 0x0000002000000020}; + __m128i_result = (__m128i){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001c00ffffe}; + v2u64_op1 = (v2u64){0x00007f7f00007f7f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000017fff00fe7f, 0x000001000f00fe00}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000016fff9d3d, 0x00000000f0009d3c}; + v2u64_op1 = (v2u64){0xfffff0016fff8d3d, 0xfffff000f0008d3c}; + __m128i_result = (__m128i){0x00ff0101ffff3d3d, 0x00ff000000003c3c}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffefffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffefffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffefefffffffff}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002fffefffd0001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1202120212021202, 0x1202120212021202}; + __m128i_result = (__m128i){0x0202fe02fd020102, 0x0002000200020002}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000400040004, 0x0004000400040004}; + v2u64_op1 = (v2u64){0x77c03fd640003fc6, 0x77c0404a4000403a}; + __m128i_result = (__m128i){0x04c004d6040004c6, 0x04c0044a0400043a}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe593c8c4e593c8c4, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + __m128i_result = (__m128i){0x9380c4009380c400, 0x8080000080800000}; + __m128i_out = __lsx_vpackev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf8f8f008f8f8f800, 0xf8f8e018f8f8e810}; + __m128i_result = (__m128i){0x0000f0080000f800, 0x0000e0180000e810}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7ffe7ffe7ffe7ffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x00007ffe00007ffe}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa36aca4435b8b8e1, 0x5a6f5c53ebed3faa}; + v2u64_op1 = (v2u64){0xa36aca4435b8b8e1, 0x5a6f5c53ebed3faa}; + __m128i_result = (__m128i){0xca44ca44b8e1b8e1, 0x5c535c533faa3faa}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000006362ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000d0000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000dffff000d, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0000000200000002}; + __m128i_result = (__m128i){0x0002000200020002, 0x0002000200020002}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0x0000208000002080, 0x0000208000002080}; + __m128i_result = (__m128i){0x2080208020802080, 0x2080208020802080}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000b, 0x000000000000000b}; + __m128i_result = (__m128i){0x000000000000000b, 0x000000000000000b}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001b, 0x000000000000001b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000001b0000, 0x00000000001b0000}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00d2701294027112, 0x0002711250a27112}; + __m128i_result = (__m128i){0xffff7012ffff7112, 0xffff7112ffff7112}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf8e1a03affffe3e2, 0x00000000000eefff}; + v2u64_op1 = (v2u64){0xf8e1a03affffe3e2, 0x00000000000eefff}; + __m128i_result = (__m128i){0xa03aa03ae3e2e3e2, 0x00000000efffefff}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x27b169bbb8140001, 0x02b010f881a281a2}; + __m128i_result = (__m128i){0x000069bb00000001, 0x000010f8000081a2}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc2f9bafac2fac2fa, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe3b1cc6953e7db29, 0xbdf077eee7e20468}; + __m128i_result = (__m128i){0xc2fac2fa53e7db29, 0x00000000e7e20468}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001f00000000, 0x0000002000000000}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080005eff600001, 0xffc2007aff230027}; + v2u64_op1 = (v2u64){0x117d7f7b093d187f, 0x01017f3c00000148}; + __m128i_result = (__m128i){0xff600001093d187f, 0xff23002700000148}; + __m128i_out = __lsx_vpackev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001802041b0013, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00001802041b0013}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff80000000000000, 0xff80000000000000}; + v2u64_op1 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + __m128i_result = (__m128i){0xf4b6f3f52f4ef4a8, 0xff80000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe3e3e3e3e3e3e3e3, 0xe3e3e3e3e3e3e3e3}; + __m128i_result = (__m128i){0xe3e3e3e3e3e3e3e3, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x3f8000003f800000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0x0000958affff995d, 0xffff000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x00000001ca02f854}; + __m128i_result = (__m128i){0x0000000100013fa0, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000002002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000010000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000053a}; + v2u64_op1 = (v2u64){0xfffc000400000000, 0xfff9000000000000}; + __m128i_result = (__m128i){0xfffc000400000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + v2u64_op1 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + __m128i_result = (__m128i){0x020310d0c0030220, 0x020310d0c0030220}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpackev.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.c new file mode 100644 index 0000000000..53ae20d9cc --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.c @@ -0,0 +1,314 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000020, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfe80000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x00fe000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1000100000101000, 0x0010100000100000}; + __m128i_result = (__m128i){0x0010001000000010, 0x0000001000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x21201f1e19181716}; + v2u64_op1 = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + __m128i_result = (__m128i){0xff39ff37ff35ff33, 0x21011f3f193d173b}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000100000000fc, 0x00000100000000fc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000010000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000080008, 0x0000000000000002}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00ff000000ff0000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + __m128i_result = (__m128i){0x00cd006300cd0063, 0x00cd006300cd0063}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2e34594c3b000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x002e0059003b0000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0xfffc002000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x0000fffc00000000, 0x00003ff000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000001fe, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000015, 0x000000000000003a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80ffffffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff80000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfe80ff80ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f8000004f800000, 0x4f8000004f800000}; + v2u64_op1 = (v2u64){0x4f8000004f800000, 0x4f8000004f800000}; + __m128i_result = (__m128i){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + v2u64_op1 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000ffff3fbfffff}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000ff00ff, 0xffffffff80806362}; + __m128i_result = (__m128i){0x00000000000000ff, 0x0000ffff00008080}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001400000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001e001e001e001e, 0x001e001e001e001e}; + v2u64_op1 = (v2u64){0xffaeffaeffaeffae, 0xffaeffaeffaeffae}; + __m128i_result = (__m128i){0x001effae001effae, 0x001effae001effae}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000003b, 0x0000440efffff000}; + v2u64_op1 = (v2u64){0x000000000000003b, 0x0000440efffff000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c90000000000, 0x0000cecd00004657}; + v2u64_op1 = (v2u64){0x00019d9a00008cae, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000201000000000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000020100, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + v2u64_op1 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + __m128i_result = (__m128i){0x0000000000000000, 0x03574e3a03574e3a}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0f000d2000000000, 0x11000f2000000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c000ffffc000, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000c00000000000, 0x0000006f00000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ff00, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0xffdfffdfffdffee0, 0xfffffffffffffef8}; + __m128i_result = (__m128i){0x0000ffffffdfffdf, 0x0000ffffffffffff}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0404050404040404, 0x0404050404040404}; + __m128i_result = (__m128i){0x0000000004040504, 0x0000000004040504}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80006b0000000b00, 0x8000807f80808000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x80006b0080808080, 0x8000807f00000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000400000004000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffff0000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x00004000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010000, 0x0001000100000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000800000000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffefffe00000000, 0xfffefffe00000000}; + __m128i_out = __lsx_vpackod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe0404041e0404041, 0xe0404041e0404041}; + v2u64_op1 = (v2u64){0xe0404041c0404040, 0x803f800080000000}; + __m128i_result = (__m128i){0x803f800080000000, 0xe0404041e0404041}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f0001000000000, 0x40f0001000000000}; + v2u64_op1 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_result = (__m128i){0xfffcfffcfffcfffc, 0x40f0001000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2222272011111410, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x2222272011111410, 0x0000002000000020}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03aa558e1d37b5a1, 0x000aa822a79308f6}; + v2u64_op1 = (v2u64){0x0000ff80fd820000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x00000000084d12ce, 0x000aa822a79308f6}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x5efeb3165bd7653d, 0xffff2356fe165486}; + __m128i_result = (__m128i){0xffff2356fe165486, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vpackod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpackod.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.c new file mode 100644 index 0000000000..0c5468608f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.c @@ -0,0 +1,255 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x7f80000000000000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0701000000000000, 0x0701000007010000}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff00feff00, 0x807f7f8000ffff00}; + __m128i_result = (__m128i){0x0000080800070800, 0x0107070100080800}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + __m128i_result = (__m128i){0x0303030303030303, 0x0303030303030303}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0808080808080808, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fe01fe01, 0x00000000fe03fe01}; + __m128i_result = (__m128i){0x0000000007010701, 0x0000000007020701}; + __m128i_out = __lsx_vpcnt_b((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000100010, 0x0000000000100010}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000010000, 0x0007000000040000}; + __m128i_result = (__m128i){0x0002000000010000, 0x0003000000010000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x21201f1e19181716}; + __m128i_result = (__m128i){0x0010001000100010, 0x0003000900050007}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0010001000100010, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe7e5dabf00010001, 0xbbe5560400010001}; + __m128i_result = (__m128i){0x000b000c00010001, 0x000b000500010001}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000100010}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_h((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0000000800000008, 0x0000000800000008}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0ba00ba00ba011eb, 0x0ba00ba00ba00ba0}; + __m128i_result = (__m128i){0x0000000a0000000d, 0x0000000a0000000a}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe160065422d476da, 0xfff0800080008000}; + __m128i_result = (__m128i){0x0000000b00000010, 0x0000000d00000002}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000001000000000, 0x0000001000000010}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010100000101, 0x0000010100000101}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x000000200000001e, 0x000000200000001e}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000001f0000001f, 0x0000002000000020}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7f80000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000800000000}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + __m128i_result = (__m128i){0x0000000e0000000e, 0x000000120000000d}; + __m128i_out = __lsx_vpcnt_w((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0xfffffffffefefefe}; + __m128i_result = (__m128i){0x0000000000000010, 0x000000000000003c}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x803f800080000000, 0xe0404041e0404041}; + __m128i_result = (__m128i){0x0000000000000009, 0x000000000000000e}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111111111111111, 0x1111111111111111}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000010}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfbfb47fbfbfb0404, 0xfbfbfb17fbfb38ea}; + __m128i_result = (__m128i){0x0000000000000029, 0x000000000000002f}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffbfc0ffffbfc0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000032, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000002}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000040}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0103000201030002, 0x0000000000020000}; + __m128i_result = (__m128i){0x0000000000000008, 0x0000000000000001}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x0000000000000020, 0x0000000000000020}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000008ffffa209, 0x0000000600007fff}; + __m128i_result = (__m128i){0x0000000000000016, 0x0000000000000011}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000467fef81, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000013, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpcnt_d((__m128)v2u64_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpcnt.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.c new file mode 100644 index 0000000000..15a7eb8ef0 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.c @@ -0,0 +1,254 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vpickev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0xfffffffffefefefe}; + __m128i_out = __lsx_vpickev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000010000000000, 0x0000010000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8f10624016be82fd, 0x4811fda96793b23a}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffff0000, 0xfda9b23a624082fd}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xfd293eab528e7ebe, 0xaaaaffebcfb748e0}; + __m128i_result = (__m128i){0xffeb48e03eab7ebe, 0x0000000100000001}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04c004d6040004c6, 0x04c0044a0400043a}; + v2u64_op1 = (v2u64){0x0004000400040004, 0x0004000400040004}; + __m128i_result = (__m128i){0x0004000400040004, 0x044a043a04d604c6}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffff0000}; + __m128i_result = (__m128i){0xffff0000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000001000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffab7e71e33848, 0x01533b5e7489ae24}; + __m128i_result = (__m128i){0x3b5eae24ab7e3848, 0x000000000000ffff}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000022001818, 0x000000009c83e21a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000e21a00001818}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x4f4f4f4f4f4f4f4f, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0004007c00fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000fc0000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100013fa0, 0x0000000120002000}; + v2u64_op1 = (v2u64){0x0000000100013fa0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000013fa0, 0x2000200000013fa0}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x773324887fffffff, 0x000f7d1000000001}; + v2u64_op1 = (v2u64){0x0000000095141311, 0x0000000017161515}; + __m128i_result = (__m128i){0x1716151595141311, 0x000000017fffffff}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000d46cdc13, 0x00000000dfa6e0c6}; + v2u64_op1 = (v2u64){0x28bf0351ec69b5f2, 0x7ef400ad21fc7081}; + __m128i_result = (__m128i){0x21fc7081ec69b5f2, 0xdfa6e0c6d46cdc13}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffff00}; + v2u64_op1 = (v2u64){0x000103030102ffff, 0x0000000100000001}; + __m128i_result = (__m128i){0x000000010102ffff, 0xffffff00ffffffff}; + __m128i_out = __lsx_vpickev_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x460f3b393ef4be3a, 0xc2409edab019323f}; + __m128i_result = (__m128i){0x460f3b393ef4be3a, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xedfaedfaedfaedfa, 0xedfaedfaedfaedfa}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x00000000ffff0000}; + __m128i_result = (__m128i){0x00000000ffff0000, 0xedfaedfaedfaedfa}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffff7, 0xfffffffffffffff7}; + __m128i_result = (__m128i){0xfffffffffffffff7, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff00010000fff, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xfffff00010000fff, 0x0000000000000001}; + __m128i_result = (__m128i){0xfffff00010000fff, 0xfffff00010000fff}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4040404040404040, 0x4040404040404040}; + v2u64_op1 = (v2u64){0x4040404040404040, 0x4040404040404040}; + __m128i_result = (__m128i){0x4040404040404040, 0x4040404040404040}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001b4a00007808, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00001b4a00007808, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001b4a00007808, 0x00001b4a00007808}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f801fe000000000, 0x3fc03fc000000000}; + v2u64_op1 = (v2u64){0x3fc03fc000000004, 0x0000ffff00010001}; + __m128i_result = (__m128i){0x3fc03fc000000004, 0x7f801fe000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x020310edc003023d}; + __m128i_out = __lsx_vpickev_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickev.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.c new file mode 100644 index 0000000000..7035d9b08a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefffefffeff6a0c, 0xffffff0cffffff18}; + v2u64_op1 = (v2u64){0xc2f9bafac2fac2fa, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000c2bac2c2, 0xfffffffffefefe6a}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x978d95ac768d8784, 0x0000000000000805}; + v2u64_op1 = (v2u64){0x0001000104000800, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000408, 0x0000000897957687}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fc03fc000000004, 0x7f801fe000000000}; + v2u64_op1 = (v2u64){0x7f7f1fd800000004, 0x3fc03fc000000003}; + __m128i_result = (__m128i){0x3f3f00007f1f0000, 0x7f1f00003f3f0000}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1197817fd839ea3e, 0xff9f017f1fa0b199}; + v2u64_op1 = (v2u64){0x0000000000000033, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xff011fb11181d8ea}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080808000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffd6040188, 0xfffffffff51cf8da}; + v2u64_op1 = (v2u64){0x00000b6fffff8095, 0x0000101fffff8b68}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0xfffff51cffffd604}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff00650001ffb0, 0x0000ff91fffffff5}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffffffff0001}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ca02f854}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ca02f854}; + __m128i_result = (__m128i){0x0000ca0200000000, 0x0000ca0200000000}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000020000020, 0x0000000020000020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000200000002000}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000003ddc, 0x67ebb2ebc884ed3f}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_result = (__m128i){0x0000000000010000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_result = (__m128i){0x11000f200f000d20, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c6c62e8a, 0x00000000c6c6ee22}; + v2u64_op1 = (v2u64){0x00000000c6c62e8a, 0x00000000c6c6ee22}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1918171615141312, 0x21201f1e1d001b1a}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x21201f1e19181716}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0x6363636363636363, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0x00000000fffefffe}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000401000001}; + v2u64_op1 = (v2u64){0xffffe000ffff1fff, 0x0000000001000001}; + __m128i_result = (__m128i){0x0000000001000001, 0x0000000401000001}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff6fff6fff6fff6, 0xfff6fff6fff6fff6}; + v2u64_op1 = (v2u64){0xf436f3f52f4ef4a8, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfff6fff6fff6fff6}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + v2u64_op1 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + __m128i_result = (__m128i){0x0080000000000000, 0x0080000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x000000ff000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000000000007, 0x0006000000040000}; + __m128i_result = (__m128i){0x0006000000040000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000003e2}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000000003e2}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vpickod_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickod.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.c new file mode 100644 index 0000000000..d289a32bb8 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.c @@ -0,0 +1,160 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, int_result, int_out, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x000000007d3ac600, 0x0000000000000000}; + int_result = 0x0000000000000000; + int_out = __lsx_vpickve2gr_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00a6ffceffb60052, 0xff84fff4ff84fff4}; + unsigned_int_result = 0x0000000000000084; + unsigned_int_out = __lsx_vpickve2gr_bu((__m128)v2u64_op0, 0xa); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x7fffffff7fffffff}; + int_result = 0xffffffff; + int_out = __lsx_vpickve2gr_b((__m128)v2u64_op0, 0xc); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + unsigned_int_result = 0x00000000000000ff; + unsigned_int_out = __lsx_vpickve2gr_bu((__m128)v2u64_op0, 0x9); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + int_result = 0x0000000000000000; + int_out = __lsx_vpickve2gr_b((__m128)v2u64_op0, 0xe); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + unsigned_int_result = 0x00000000000000ff; + unsigned_int_out = __lsx_vpickve2gr_bu((__m128)v2u64_op0, 0xc); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0400040004000400, 0x0400040004000400}; + unsigned_int_result = 0x0000000000000400; + unsigned_int_out = __lsx_vpickve2gr_hu((__m128)v2u64_op0, 0x5); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + int_result = 0xffffffff; + int_out = __lsx_vpickve2gr_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_result = 0x0000000000000000; + int_out = __lsx_vpickve2gr_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + unsigned_int_result = 0x0000000000000000; + unsigned_int_out = __lsx_vpickve2gr_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_result = 0x0000000000000000; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + unsigned_int_result = 0x00000000ffffffff; + unsigned_int_out = __lsx_vpickve2gr_wu((__m128)v2u64_op0, 0x2); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + unsigned_int_result = 0x0000000000000000; + unsigned_int_out = __lsx_vpickve2gr_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + int_result = 0xffffffff; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000000, 0x0000000000000000}; + unsigned_int_result = 0x0000000000000000; + unsigned_int_out = __lsx_vpickve2gr_wu((__m128)v2u64_op0, 0x2); + check_lsx_out(&unsigned_int_result, &unsigned_int_out, sizeof(unsigned_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + int_result = 0x0000000000000002; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fdec000000000, 0x6453f5e01d6e5000}; + int_result = 0x000000001d6e5000; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x39c51f389c0d6112, 0x8d78336c83652b86}; + int_result = 0x9c0d6112; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfdce8003090b0906, 0x0674c8868a74fc80}; + int_result = 0x00000000090b0906; + int_out = __lsx_vpickve2gr_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&int_result, &int_out, sizeof(int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + unsigned_long_int_result = 0x0000000000000000; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + long_int_result = 0x0000000000000000; + long_int_out = __lsx_vpickve2gr_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&long_int_result, &long_int_out, sizeof(long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + unsigned_long_int_result = 0x3f8000003f800000; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + long_int_result = 0x0000000000000000; + long_int_out = __lsx_vpickve2gr_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&long_int_result, &long_int_out, sizeof(long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + unsigned_long_int_result = 0x0000000000000000; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + unsigned_long_int_result = 0x0000000000000000; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + long_int_result = 0x000000003ddc5dac; + long_int_out = __lsx_vpickve2gr_d((__m128)v2u64_op0, 0x0); + check_lsx_out(&long_int_result, &long_int_out, sizeof(long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + unsigned_long_int_result = 0x0000000000000000; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000e0000000e, 0x000000120000000d}; + unsigned_long_int_result = 0x0000000e0000000e; + unsigned_long_int_out = __lsx_vpickve2gr_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&unsigned_long_int_result, &unsigned_long_int_out, sizeof(unsigned_long_int_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vpickve2gr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.c new file mode 100644 index 0000000000..6faf46bf8d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.c @@ -0,0 +1,180 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + int_op0 = 0x0000000059815d00; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000400; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0xffffffff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000020202020; + __m128i_result = (__m128i){0x2020202020202020, 0x2020202020202020}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x00000000ffffffff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x00000000000000ff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x000000000000001e; + __m128i_result = (__m128i){0x1e1e1e1e1e1e1e1e, 0x1e1e1e1e1e1e1e1e}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_b(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000400; + __m128i_result = (__m128i){0x0400040004000400, 0x0400040004000400}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x00000000ffffffff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x000000007ff00000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x00000000000000ff; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_h(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x00000000000000ff; + __m128i_result = (__m128i){0x000000ff000000ff, 0x000000ff000000ff}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + int_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_w(int_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + long_op0 = 0x0000000000000400; + __m128i_result = (__m128i){0x0000000000000400, 0x0000000000000400}; + __m128i_out = __lsx_vreplgr2vr_d(long_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + long_op0 = 0x3f8000003f800000; + __m128i_result = (__m128i){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_out = __lsx_vreplgr2vr_d(long_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + long_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_d(long_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + long_op0 = 0x000000007ff00000; + __m128i_result = (__m128i){0x000000007ff00000, 0x000000007ff00000}; + __m128i_out = __lsx_vreplgr2vr_d(long_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + long_op0 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplgr2vr_d(long_op0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplgr2vr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.c b/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.c new file mode 100644 index 0000000000..edd69d45dc --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000080000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + int_op1 = 0xffffffff; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00020006; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff4, 0xfffffffffffffff4}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00000000090b0906; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_b((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffffffff0001}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00020006; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + int_op1 = 0x0000000000000040; + __m128i_result = (__m128i){0x0fbf0fbf0fbf0fbf, 0x0fbf0fbf0fbf0fbf}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffe011df03e, 0xfffefffefffefffe}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0xf03ef03ef03ef03e, 0xf03ef03ef03ef03e}; + __m128i_out = __lsx_vreplve_h((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0xeef14fe8; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + int_op1 = 0x00000400; + __m128i_result = (__m128i){0xff000000ff000000, 0xff000000ff000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x00000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe0404041c0404040, 0x803f800080000000}; + int_op1 = 0x00000001; + __m128i_result = (__m128i){0xe0404041e0404041, 0xe0404041e0404041}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + int_op1 = 0x3f800000; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x000000ff; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ffff00ff00ff00, 0x00ffff00ff00ff00}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000001b, 0x000000000000001b}; + int_op1 = 0x89e08000; + __m128i_result = (__m128i){0x0000001b0000001b, 0x0000001b0000001b}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefeeffef7fefe, 0xfefefefdbffefdfe}; + int_op1 = 0x9c0d6112; + __m128i_result = (__m128i){0xbffefdfebffefdfe, 0xbffefdfebffefdfe}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0xff800000ff800000, 0xff800000ff800000}; + __m128i_out = __lsx_vreplve_w((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x000000ac; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffb4ff, 0xffffffffffffffff}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0xffffffffffffb4ff, 0xffffffffffffb4ff}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x20202020; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0x7ff00000; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + int_op1 = 0xffff8a35; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000047fe2f0, 0x05dfffc3ffffffc0}; + int_op1 = 0x0000000000000000; + __m128i_result = (__m128i){0x00000000047fe2f0, 0x00000000047fe2f0}; + __m128i_out = __lsx_vreplve_d((__m128)v2u64_op0, int_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplve.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.c b/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.c new file mode 100644 index 0000000000..8ef21f1c36 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.c @@ -0,0 +1,215 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffcc9a989a, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_b((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x42a0000042a02000, 0x0000000036280000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd705c77a7025c899, 0x697eba2bedfa9c82}; + __m128i_result = (__m128i){0xedfaedfaedfaedfa, 0xedfaedfaedfaedfa}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000300000003, 0x0000000200000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5350a08000000000, 0x00000000a0a08000}; + __m128i_result = (__m128i){0x8000800080008000, 0x8000800080008000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8001000184000bd8, 0x80010009816ac5de}; + __m128i_result = (__m128i){0x0bd80bd80bd80bd8, 0x0bd80bd80bd80bd8}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a753500a9fa0d06, 0x000000000a752a55}; + __m128i_result = (__m128i){0x0d060d060d060d06, 0x0d060d060d060d06}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1149a96eb1a08000, 0x0000000000000001}; + __m128i_result = (__m128i){0xb1a08000b1a08000, 0xb1a08000b1a08000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0808080808080808, 0x0808080808080808}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000adadadad, 0x00000000adadadad}; + __m128i_result = (__m128i){0xadadadadadadadad, 0xadadadadadadadad}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vreplvei_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000005555555554, 0x0000000055555501}; + __m128i_result = (__m128i){0x0000005555555554, 0x0000005555555554}; + __m128i_out = __lsx_vreplvei_d((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_d((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3131313131313131, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vreplvei_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vreplvei.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.c new file mode 100644 index 0000000000..bd4d5d549c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.c @@ -0,0 +1,260 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff000100000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff000200000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff000000ff}; + __m128i_result = (__m128i){0x000691a6918691fc, 0x000691a6c843c8fc}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001f2f2cab1c732a, 0x001a64b345308091}; + v2u64_op1 = (v2u64){0x1011050040004101, 0x0000014414104505}; + __m128i_result = (__m128i){0x008f792cab1cb915, 0x001a323b5430048c}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffffffc, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x288b248c00010401, 0x2001240128032403}; + __m128i_result = (__m128i){0xffdfffefffff7ffe, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100100000, 0x1000000010000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000200200000, 0x2000000020000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7bffffffffffffff, 0xfbffffffffffffff}; + v2u64_op1 = (v2u64){0x7bffffffffffffff, 0xfbffffffffffffff}; + __m128i_result = (__m128i){0xf7feffffffffffff, 0xf7ffffffffffffff}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0ba00ba00ba011eb, 0x0ba00ba00ba00ba0}; + v2u64_op1 = (v2u64){0xffb9917a6e7fffff, 0xf1819b7c0732a6b6}; + __m128i_result = (__m128i){0xd005e802174023d6, 0x05d0ba0002e8802e}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000010001, 0x0000000001010001}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000000010002, 0x0000000001010002}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00020000ffff0001, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000b000b000b000b, 0x000b000b000b000b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000b000b000b000b, 0x000b000b000b000b}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0005847b00000000, 0x0005840100000005}; + v2u64_op1 = (v2u64){0x41f8e080f1ef4eaa, 0x636363633f3e47c1}; + __m128i_result = (__m128i){0x0500847b00000000, 0xa000308000008002}; + __m128i_out = __lsx_vrotr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x9f009f009f009f00, 0x9f009f009f009f00}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + v2u64_op1 = (v2u64){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_result = (__m128i){0xffefffefffefffef, 0xffefffefffefffef}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vrotr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000002727, 0x2700000000002727}; + v2u64_op1 = (v2u64){0xd705c77a7025c899, 0x697eba2bedfa9c82}; + __m128i_result = (__m128i){0x0013938000000000, 0xc9c00000000009c9}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000004fc04f80, 0x000000004fc04f81}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000004fc04f80, 0x000000004fc04f81}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000006f}; + __m128i_result = (__m128i){0x0000000000001f0a, 0x0000000000de0000}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffc3ffff003e, 0x0000003f0000ffff}; + v2u64_op1 = (v2u64){0x00000000003dffc2, 0x00000000003dffc2}; + __m128i_result = (__m128i){0xbffffff0ffffc00f, 0xc000000fc0003fff}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4e3e133738bb47d2, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x9c7c266e71768fa4, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001e03, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x001f2f2cab1c732a, 0x001a64b345308091}; + __m128i_result = (__m128i){0x0000000780c00000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vrotr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.c b/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.c new file mode 100644 index 0000000000..de5b0d4e0c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.c @@ -0,0 +1,215 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xd915e98e2d8df4d1, 0x0d1bffffffffffff}; + __m128i_result = (__m128i){0x9d519ee8d2d84f1d, 0xd0b1ffffffffffff}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0800000008000000, 0x0800000008000000}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000006f}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000007b}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001000000010}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000002000000020}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff02d060, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ff02d060, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_result = (__m128i){0x101f8b680b6f8095, 0x887c8beb969e00f2}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000c00}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffeff400000df4, 0x00000000ffffff01}; + __m128i_result = (__m128i){0xffffe9df0000e81b, 0x00000000ffff03fe}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x1111113111111141}; + __m128i_result = (__m128i){0x1111311111112111, 0x1111311111114111}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff000000000000}; + __m128i_out = __lsx_vrotri_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000800000008, 0x0000000800000008}; + __m128i_result = (__m128i){0x0002000000020000, 0x0002000000020000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80001b155b4b0000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x80001b155b4b0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0xffffffffffefffff, 0xffffffffffefffff}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffc3ffff003e, 0x0000003f0000ffff}; + __m128i_result = (__m128i){0xffffe1ffff801f7f, 0x00001f80007fff80}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x58d6bf1867ace738, 0x27b9331b8e77ead9}; + __m128i_result = (__m128i){0x5afc6163b39ce19e, 0xe4cc6c9edfab6639}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0x00012b15ffff32ba, 0x000000de00003e14}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0008000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffff800000003, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfff0000ffff0000f}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x2c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vrotri_d((__m128)v2u64_op0, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vrotri.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.c new file mode 100644 index 0000000000..b92b347713 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.c @@ -0,0 +1,188 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfefefefefefefefe, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffff730f, 0xffffffff3c992b2e}; + __m128i_result = (__m128i){0xffffffffffff730f, 0xffffffff3c992b2e}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x000000002bfd9461, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000002bfd9461, 0x00007fff00007fff}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001021, 0x00d3012acc56f9bb}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001021, 0x00d3012acc56f9bb}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001000, 0x0000000000001000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001000, 0x0000000000001000}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x80808080806b000b, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + __m128i_result = (__m128i){0xfffefffeff00feff, 0x3c5fffffff7fffff}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000008900000009, 0x0000008a0000008a}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x63637687636316bb}; + __m128i_result = (__m128i){0x636363ec6363636c, 0x6363771163631745}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000080000000, 0x0000000080000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000080000000}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0xfffffffffefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x00000000c2bac2c2, 0x00000000fefefe68}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0x028c026bfff027af, 0x001ffff0003ffff0}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000010000, 0x0007000000040000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0003000000010000, 0x0007000000040000}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + v2u64_op1 = (v2u64){0x3fffff0000000000, 0x3fffff0000000000}; + __m128i_result = (__m128i){0x7f7fff003f800000, 0x7f7fff003f800000}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fe01fc0005fff4, 0x0000000820202020}; + v2u64_op1 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + __m128i_result = (__m128i){0x013bc084078278b5, 0x0000000820205a44}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000140001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000140001, 0x0000000000000001}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0xc8847ef6ed3f2000, 0x67eb85b0b2ebb001}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + __m128i_result = (__m128i){0x14ea6a002a406a00, 0xffffffff14eb54ab}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000004}; + v2u64_op1 = (v2u64){0xce9035c49ffff570, 0x0000000000000000}; + __m128i_result = (__m128i){0xce9035c49ffff574, 0x0000000000000004}; + __m128i_out = __lsx_vsadd_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.c new file mode 100644 index 0000000000..56c911f779 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.c @@ -0,0 +1,236 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_result = (__m128i){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7ffe7fff3506, 0xfffebd06fffe820c}; + v2u64_op1 = (v2u64){0x7fff7ffe7fff3506, 0xfffebd06fffe820c}; + __m128i_result = (__m128i){0xfefffefffeff6a0c, 0xffffff0cffffff18}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff790a15db63d, 0xfffff60ca7104649}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0xfffff790a15db63e, 0xfffff60ca710464a}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff46, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0x00fe000100cf005f}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x5f675e96e29a5a60}; + __m128i_result = (__m128i){0xfefffefffefffeff, 0x5fff5e97e2ff5abf}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001000100010}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0001000100010058}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001001100110068}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x7fffffff7fffffff}; + v2u64_op1 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0xfeffffffffffffff, 0xfeffffffffffffff}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + v2u64_op1 = (v2u64){0x0000000d48eaa1a2, 0xffffffffb81a6f70}; + __m128i_result = (__m128i){0x00012c9748eaffff, 0xffffffffb81ae0bf}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000200, 0x0000000000000200}; + __m128i_result = (__m128i){0x0000000000000200, 0x0000000000000200}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000d0000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8002000000000007, 0x8006000000040000}; + __m128i_result = (__m128i){0x8002000d00000014, 0x8006000000040000}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000014, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000008ffffa209, 0x0000000600007fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000008ffffa209, 0x0000000600007fff}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e080f1ef4eaa, 0x636363633f3e47c1}; + v2u64_op1 = (v2u64){0x00000800ecedee68, 0x00000807bf0a1f80}; + __m128i_result = (__m128i){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + v2u64_op1 = (v2u64){0x00012c8a0000a58a, 0x0000ebd20000714f}; + __m128i_result = (__m128i){0x000259140000ffff, 0x0000ffff0000e29e}; + __m128i_out = __lsx_vsadd_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffeffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffeffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x342caf9be55700b5, 0x0c03e17edd781b11}; + v2u64_op1 = (v2u64){0x00040003ff4dffca, 0x00040003ff83ff84}; + __m128i_result = (__m128i){0x3430af9effffffff, 0x0c07e181ffffffff}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffffabff99, 0x00000000ffa8ff9f}; + v2u64_op1 = (v2u64){0x0001000000020001, 0x000100000002007d}; + __m128i_result = (__m128i){0x0001ffffffadff9a, 0x00010000ffab001c}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0800080008000800, 0x0800080008000800}; + __m128i_result = (__m128i){0x0800080008000800, 0x0800080008000800}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x76f424887fffffff, 0x0000000000000001}; + v2u64_op1 = (v2u64){0xc00d060000000000, 0xc110000000000000}; + __m128i_result = (__m128i){0xffffffff7fffffff, 0xc110000000000001}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000029, 0x000000000000002f}; + v2u64_op1 = (v2u64){0xfbfb47fbfbfb0404, 0xfbfbfb17fbfb38ea}; + __m128i_result = (__m128i){0xfbfb47fbfbfb042d, 0xfbfbfb17fbfb3919}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808081, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x80808080ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0012001200120012, 0x00123fff00120012}; + v2u64_op1 = (v2u64){0x000000000005003a, 0x0000000000000000}; + __m128i_result = (__m128i){0x001200120017004c, 0x00123fff00120012}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + __m128i_result = (__m128i){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000084d12ce, 0x000aa822a79308f6}; + v2u64_op1 = (v2u64){0x03aa558e1d37b5a1, 0x000aa822a79308f6}; + __m128i_result = (__m128i){0x03aa558e2584c86f, 0x00155044ffffffff}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x030298a6a1030a49, 0x021b7d24c9678a35}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000485000004cc, 0x00007a8000000480}; + v2u64_op1 = (v2u64){0x00000485000004cc, 0x00007a8000000480}; + __m128i_result = (__m128i){0x0000090a00000998, 0x0000f50000000900}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff70002800be00a0, 0x004eff6200d2ff76}; + __m128i_result = (__m128i){0xff70002800be00a0, 0x004eff6200d2ff76}; + __m128i_out = __lsx_vsadd_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsadd-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.c new file mode 100644 index 0000000000..5a009683b5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.c @@ -0,0 +1,170 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xf000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0x03fffffffc010102, 0x03ff0101fc010102}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsat_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff8383ffff7d0d, 0x0000040400000383}; + __m128i_result = (__m128i){0xffffe000ffff1fff, 0x0000040400000383}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff01018888, 0xfffffffff8f8da00}; + __m128i_result = (__m128i){0xffffffff00ffff00, 0xffffffffff00ff00}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f8000003f800001, 0x3f8000003f800001}; + __m128i_result = (__m128i){0x0001000000010001, 0x0001000000010001}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0x0000c000ffffc000, 0x0000006f00001f0a}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fffe00fffffe00, 0x0038d800ff000000}; + __m128i_result = (__m128i){0x00fffe00fffffe00, 0x0038f000ff000000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + __m128i_result = (__m128i){0x003f0000003f0000, 0x003f0000003f0000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfdce8003090b0906, 0x0674c886fcba4e98}; + __m128i_result = (__m128i){0xffc0ffc0003f003f, 0x003fffc0ffc0003f}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04e00060ffffffff, 0x04e00060ffffffff}; + __m128i_result = (__m128i){0x007fffffffffffff, 0x007fffffffffffff}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000017f0a82, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000003f, 0x0000000000000000}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8004000080020000, 0x8006000080020000}; + __m128i_result = (__m128i){0xfffffff8fffffff8, 0xfffffff8fffffff8}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000008}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd27db010d20fbf, 0x6363636363636363}; + __m128i_result = (__m128i){0xfffffff00000000f, 0x0000000f0000000f}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000003ff8, 0x0000000000000000}; + __m128i_out = __lsx_vsat_w((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_d((__m128)v2u64_op0, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.c new file mode 100644 index 0000000000..ec3af15c08 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.c @@ -0,0 +1,200 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffff2896ffff5b88, 0xffff1739ffff48aa}; + __m128i_result = (__m128i){0x3f3f283f3f3f3f3f, 0x3f3f17393f3f3f3f}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000001fc00000000, 0x0002000000020000}; + __m128i_result = (__m128i){0x0000010100000000, 0x0001000000010000}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000b000b010a000b, 0xffcc000b000b000b}; + __m128i_result = (__m128i){0x000b000b010a000b, 0x7f7f000b000b000b}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000068, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000001f, 0x0000000000000000}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffd765ffffd765, 0xffffcd63ffffcd63}; + __m128i_result = (__m128i){0x1f1f1f1f1f1f1f1f, 0x1f1f1f1f1f1f1f1f}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000e0000000e, 0x000000120000000d}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vsat_bu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + __m128i_result = (__m128i){0x003f000000000000, 0x003f00000000003f}; + __m128i_out = __lsx_vsat_hu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000007f8, 0x00000000000007f8}; + __m128i_result = (__m128i){0x00000000000000ff, 0x00000000000000ff}; + __m128i_out = __lsx_vsat_hu((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_hu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_hu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5f9ccf33cf600000, 0x0000000000006de1}; + __m128i_result = (__m128i){0x0007000700070000, 0x0000000000000007}; + __m128i_out = __lsx_vsat_hu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fff7fc01, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000f, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000003}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000bd3d00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000010000, 0x0007000000050000}; + __m128i_result = (__m128i){0x00003fff00003fff, 0x00003fff00003fff}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x008f792cab1cb915, 0x001a323b5430048c}; + __m128i_result = (__m128i){0x008f792c00ffffff, 0x001a323b00ffffff}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_wu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x20); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x7fffffffffffffff}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x3e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636389038903, 0x6363636389038903}; + __m128i_result = (__m128i){0x000000000001ffff, 0x000000000001ffff}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x22); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000001fffffff}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000101010001}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x0000000000000100, 0x000000001fffffff}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9e9e72ff9e9ff9ff, 0xa8a74bff9e9e0070}; + __m128i_result = (__m128i){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_out = __lsx_vsat_du((__m128)v2u64_op0, 0x2f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsat-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vseq.c b/SingleSource/UnitTests/Vector/LSX/lsx-vseq.c new file mode 100644 index 0000000000..30ff11a4b1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vseq.c @@ -0,0 +1,320 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c63636363, 0x9c9c9c9c9c9c9c9c}; + v2u64_op1 = (v2u64){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffe1ffffffe1, 0xffffffe1ffffffe1}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002050320, 0x0000000002050320}; + v2u64_op1 = (v2u64){0x0000000002050320, 0x0000000002050320}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f0f0f0f00000000, 0x0000000f0000000f}; + v2u64_op1 = (v2u64){0x000000fffe01fd02, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffff00ffffff00}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffff0000000000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff00, 0x000000ffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5b5b5b5aadadadad, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000052525253, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff00ffffffffff, 0xffff00ffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000044470000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0xffffffff0000ffff, 0xffffffff00000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + v2u64_op1 = (v2u64){0x0000000000000020, 0x0000000000404040}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffff0000000000}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000090900000998, 0x0000f50000000900}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffff00ffffff00ff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff01fe03ff01fe03, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000800080008000, 0x8000800080008000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1fc000001fc00000, 0x1fc000001fc00000}; + v2u64_op1 = (v2u64){0x0001000000010001, 0x0001000000010001}; + __m128i_result = (__m128i){0x0000ffff00000000, 0x0000ffff00000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000067400002685, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x87f82867431a1d08, 0x9795698585057dec}; + v2u64_op1 = (v2u64){0x1149a96eb1a08000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x21201f1e19181716}; + v2u64_op1 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x0000000000800080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffffff00000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000007600000000, 0x0000005c000000b2}; + __m128i_result = (__m128i){0xffff0000ffffffff, 0xffff0000ffff0000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000048, 0xfffffffffffbfffc}; + v2u64_op1 = (v2u64){0x0000000000000016, 0xfffffffffffeffff}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffffffff00000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f7f7f007f7f7f00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0b73e427f7cfcb88, 0xf2c97aaa7d8fa270}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff000000000000}; + __m128i_out = __lsx_vseq_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x007a007600150077, 0x00ed0008005e00a2}; + v2u64_op1 = (v2u64){0x007a007600150077, 0x00ed0008005e00a2}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2d1da85b7f800000, 0xffffffff7f800000}; + v2u64_op1 = (v2u64){0x01010000fefe0101, 0x7505853d654185f5}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0800080008000800, 0x0800080008000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff00000000ffff}; + v2u64_op1 = (v2u64){0x363d753d50155c0a, 0x0202020202020202}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c0dec4d1, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0xfda9b23a624082fd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000800080008000, 0x8000800080008000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000adadadad, 0x00000000adadadad}; + v2u64_op1 = (v2u64){0x00000000adadadad, 0x00000000adadadad}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + v2u64_op1 = (v2u64){0xe4c23ffb002a3a22, 0x33f5c2d7d9f5d800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000004870ba0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseq_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vseq.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vseq.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vseq.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.c new file mode 100644 index 0000000000..4ee524655a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.c @@ -0,0 +1,240 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000000100000, 0x0010000000100000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, -2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000fffc, 0xff01ff010000ff7d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x061202bffb141c38, 0xffa6ff91fdd8ef77}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2221201f1e1d1c1b, 0x2a29282726252423}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, -1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff80ff00ff80ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000001a0000000b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_b((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfedb27095b6bff95, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, 9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x007ffd0001400840, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000001a000b, 0x00000000002a001a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x05f5e2320605e1e2, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vseqi_h((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000017fff00fe7f, 0x000001000f00fe00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, 9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fef01000f27ca, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0313100003131000, 0x0313100003131000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0d060d060d060d06, 0x0d060d060d060d06}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5efeb3165bd7653d, 0xffff2356fe165486}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_w((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000c3080002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0404038383838404, 0x0404038383838404}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000040000000400}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vseqi_d((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vseqi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.c b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.c new file mode 100644 index 0000000000..e35673ad1a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.c @@ -0,0 +1,258 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000007f00000004, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0001000100000004, 0x0000000401000001}; + v2u64_op2 = (v2u64){0x00000000007f0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0404040404000404, 0x0404040404040404}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op2 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000029, 0x000000000000002f}; + v2u64_op1 = (v2u64){0x000000ff000000ff, 0x000000ff000000ff}; + v2u64_op2 = (v2u64){0x0000000000000029, 0x000000000000002f}; + __m128i_result = (__m128i){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7efefefe82010201, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x418181017dfefdff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff81, 0xffffffffffffffff}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x52525252adadadad, 0x52525252adadadad}; + v2u64_op2 = (v2u64){0x800000007fffffff, 0x800000007fffffff}; + __m128i_result = (__m128i){0x00adadad00000000, 0x00adadad00000000}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000005}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000005}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000005}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xedededededededed, 0xedededededededed}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + v2u64_op1 = (v2u64){0x000000000000ff80, 0x04040403fafafafc}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8080808080808080, 0x8080808080808080}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_op2 = (v2u64){0x0000000000000001, 0x0000001a0000000b}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000080000000ff}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd7ff8dffa4ff7a, 0xff6cffb5ff98ff6e}; + v2u64_op1 = (v2u64){0xee297a731e5c5f86, 0x34947b4b11684f92}; + v2u64_op2 = (v2u64){0xffc0000000000000, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000868686868686, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_b((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x000d000d000d000d, 0x000d000d000d000d}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fffffffffffffff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000002bfd9461, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000300a10003, 0x000300037ff000ff}; + v2u64_op1 = (v2u64){0x0003000300a10003, 0x000300037ff000ff}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0909000009090000, 0x0909000009090000}; + v2u64_op1 = (v2u64){0x0909000009090000, 0x0909000009090000}; + v2u64_op2 = (v2u64){0x05ad3ba576eae048, 0x002a05a2f059094a}; + __m128i_result = (__m128i){0x0909e0480909e048, 0x0909e0480909e048}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_h((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001ffffff29, 0x00000000000000c0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x00000001ffffff29, 0x00000000000000c0}; + __m128i_result = (__m128i){0x0000000100000001, 0xffffff2900000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1f54e0ab00000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x010101fe0101fe87, 0x0101010101010101}; + __m128i_result = (__m128i){0x0101fe8700000000, 0x0101fe870101fe87}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000007fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000020000020, 0x0000000020000020}; + __m128i_result = (__m128i){0x2000002020000020, 0x2000002000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000004870ba0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001000000010, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x8000000000000103, 0x8000000100000000}; + __m128i_result = (__m128i){0x0000010300000000, 0x0000010300000103}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x05fafe0101fe000e, 0x000000ff0000857a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xacad25090caca5a4, 0xada4808924882588}; + v2u64_op1 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_w((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x21fc7081ec69b5f2, 0xdfa6e0c6d46cdc13}; + v2u64_op1 = (v2u64){0x000000002c002400, 0x0000000000000000}; + v2u64_op2 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0001000100000000}; + v2u64_op2 = (v2u64){0xffffffff0015172b, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff0015172b, 0xffffffff0015172b}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf0003000f0003000, 0x0000000000002000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x030298a621030a49, 0x021b7d2449678a35}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x030298a6a1030a49, 0x021b7d24c9678a35}; + __m128i_result = (__m128i){0x0000000000000000, 0x021b7d24c9678a35}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f7f80807f7f8080, 0x7f7f00007f7f0000}; + v2u64_op1 = (v2u64){0x0000fffe0000fffe, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7f8000007f800000}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffff10000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op2 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf_d((__m128)v2u64_op0, (__m128)v2u64_op1, (__m128)v2u64_op2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.c b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.c new file mode 100644 index 0000000000..3c68b9b46d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.c @@ -0,0 +1,250 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000030000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0xc9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004007c00fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x047c0404fc00fcfc, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x8a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xff00ff7f00000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x85); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffd6040188, 0xfffffffff51cf8da}; + __m128i_result = (__m128i){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x50); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xac82aa88a972a36a, 0x007d00c50177ac5b}; + __m128i_result = (__m128i){0xaaacac88a3a9a96a, 0x000000c5ac01015b}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x7c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000a00000009, 0x0000000a0000000a}; + __m128i_result = (__m128i){0x0a0a0a0009090900, 0x0a0a0a000a0a0a00}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000001000100, 0x0000000001000100}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003f8000000000, 0x00003f8000000000}; + __m128i_result = (__m128i){0x003f800000000000, 0x003f800000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0xd2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x6c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x81); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000dffff000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000ffffff, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x6b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0x5f675e96e29a5a60}; + __m128i_result = (__m128i){0xff7f7fffff7f7fff, 0x965f5e9660e25a60}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x11100f0e100f0e0d, 0x131211101211100f}; + __m128i_result = (__m128i){0x110e1011100d0f10, 0x13101213120f1112}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0xcb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000431f851f, 0x0000000001000110}; + __m128i_result = (__m128i){0x0000000043431f1f, 0x0000000001011010}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0xf0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xecbbbbc5d5f3f3f3, 0xd1c0c0a5baf8f8d3}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0x7c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000454ffff9573, 0x0000000000000004}; + __m128i_result = (__m128i){0x00000454ffff9573, 0x0000000000000004}; + __m128i_out = __lsx_vshuf4i_b((__m128)v2u64_op0, 0xa4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0xf3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0x2c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0xd2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x007c000d00400000, 0x003f000000000000}; + __m128i_result = (__m128i){0x0000007c00000040, 0x0000003f00000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff00000000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffff00000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0xb9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ffffffe00000000, 0x7ffffffe00000000}; + __m128i_result = (__m128i){0x7fff00007fff0000, 0x7fff00007fff0000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0xcd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff00000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0x93); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000007f7f7f, 0x0000000000000000}; + __m128i_result = (__m128i){0x007f007f00007f7f, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_h((__m128)v2u64_op0, 0x58); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000010}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000001000000010}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080808000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000080808000}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x8b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_result = (__m128i){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x7e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefeeffef7fefe, 0xfefefefdbffefdfe}; + __m128i_result = (__m128i){0xfefefefdfefefeef, 0xfef7fefebffefdfe}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x2d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x002a001a001a000b}; + __m128i_result = (__m128i){0x001a000b00000000, 0x00000000002a001a}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x78); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x98); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000069bb00000001, 0x000010f8000081a2}; + __m128i_result = (__m128i){0x00000001000010f8, 0x0000000100000001}; + __m128i_out = __lsx_vshuf4i_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x44); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fffff800, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x00000000fffff800, 0x00000000fffff800}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000006f}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffe3d6, 0x00000000ffffda6e}; + v2u64_op1 = (v2u64){0x6f5edf5ada6fe3d7, 0xeeb1e4f4bc3763f3}; + __m128i_result = (__m128i){0xeeb1e4f4bc3763f3, 0x00000000ffffe3d6}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x23); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100200001, 0x0000000100200001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00001fff00001fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x63b2ac27aa076aeb, 0xce23d33e43d9736c}; + __m128i_result = (__m128i){0x0000000000000000, 0x63b2ac27aa076aeb}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000158}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xbf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77eb86788eebaf00, 0x801d5de0000559e0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x89582bf870006860, 0x89582bf870006860}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vshuf4i_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x94); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vshuf4i.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.c new file mode 100644 index 0000000000..5ddd001100 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.c @@ -0,0 +1,290 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x00003f803f800100, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fffefe0100f6, 0xfe00fe00fe00fd01}; + v2u64_op1 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + __m128i_result = (__m128i){0x0100010000010000, 0x0100010000000001}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x52525252525252cb, 0x52525252525252cb}; + __m128i_result = (__m128i){0xaeaeaeaeaeaeae35, 0xaeaeaeaeaeaeae35}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000400000004, 0x0000000400000004}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0x0000000400000004, 0x0000000400000004}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + v2u64_op1 = (v2u64){0x7750af4954c29940, 0x1ab6021f72496458}; + __m128i_result = (__m128i){0x89b051b7ac3e67c0, 0xe64afee18eb79ca8}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x181b2541ffffffff, 0x441ba9fcffffffff}; + v2u64_op1 = (v2u64){0x7fffffff7ffffffe, 0x7fffffff7ffffffe}; + __m128i_result = (__m128i){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000034, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003ffffe00800000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004001be00dc008e, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00ffff0100010001, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff9fffefff9ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x04fafa9200000000, 0x04faf60009f5f092}; + __m128i_result = (__m128i){0xfc06066e00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0xfff6fff6fff6fff6, 0xfff6fff6fff6fff6}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000810000, 0x00000000ff801c9e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x008003496dea0c61, 0x0080008000800080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010001000100010, 0x0010001000000010}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0xc8847ef6ed3f2000, 0x67eb85af0000b000}; + __m128i_out = __lsx_vsigncov_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x870968c1f56bb3cd, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6a57a30ff0000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000183fffffe5, 0x0000000020000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000400000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000400000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fffff0000000000, 0x3fffff0000000000}; + v2u64_op1 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_result = (__m128i){0x3f80000000000000, 0x3f80000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x370bdfec00130014, 0x370bdfec00130014}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x021f3b0205150600, 0x0002020002020200}; + v2u64_op1 = (v2u64){0x000100010040fffb, 0x0001000300400002}; + __m128i_result = (__m128i){0x000100010040fffb, 0x0001000300400002}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000028404044, 0x00000000045340a6}; + v2u64_op1 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vsigncov_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff8e001ff84e703, 0xf000e001bf84df83}; + v2u64_op1 = (v2u64){0x00000000ca354688, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff35cab978, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ffffffe7ffff800, 0xffff3d06ffff4506}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff8fff8fff8fff8, 0xfff8fff8fff8fff8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101030100010001, 0x0101000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000004}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000103, 0x0000000100000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffe0002, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000020, 0x000000000667ae56}; + __m128i_result = (__m128i){0x0000000000000020, 0x000000000667ae56}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000100020002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000100020002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0002000100020002, 0x0000000000000000}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffe1ffc0, 0x0001000100010012}; + v2u64_op1 = (v2u64){0x00000000ffe1ffc0, 0x0001000100010012}; + __m128i_result = (__m128i){0x00000000ffe1ffc0, 0x0001000100010012}; + __m128i_out = __lsx_vsigncov_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsigncov.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.c new file mode 100644 index 0000000000..ec875f0942 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.c @@ -0,0 +1,200 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x004200a000200000, 0x004200a000000000}; + __m128i_result = (__m128i){0xffffff00ffffffff, 0xffffff00ffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000aaab555b, 0x00000000aaaaaaaa}; + v2u64_op1 = (v2u64){0x00000000aaab555b, 0x00000000aaaaaaaa}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000408, 0x0000000897957687}; + v2u64_op1 = (v2u64){0x0000000000004080, 0x00000000000ed0e0}; + __m128i_result = (__m128i){0xffffffffffffff00, 0xffffff00ffff00ff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x004cff8fffde0051}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffff00, 0x0000ffffffff0000}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000040400000404, 0x0000040400000404}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000003e2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffff00ff}; + __m128i_out = __lsx_vsle_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100000008, 0x0000000501000002}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000800080008000, 0x8000800080008000}; + v2u64_op1 = (v2u64){0x8000800080008000, 0x8000800080008000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaa55555655aaaaa8, 0x55aa55aa55aa55ab}; + v2u64_op1 = (v2u64){0x0400040004000400, 0x0400040004000400}; + __m128i_result = (__m128i){0xffff00000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0507070805070708, 0x6b6c4beb636443e3}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffefffefffefffef, 0xffefffefffefffef}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00017ea200002000, 0x000085af0000b000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffff0000ffff0000}; + __m128i_out = __lsx_vsle_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000001b, 0x000000000000001b}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ff0000000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0x3ff0000000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100000001000000, 0x0100000001000000}; + v2u64_op1 = (v2u64){0x0040004000400040, 0x0040004000400040}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001f0000001f, 0x0000001f0000001f}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000005003a, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.c new file mode 100644 index 0000000000..fcbf56a7dd --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.c @@ -0,0 +1,302 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0400001001150404, 0x0005000400000004}; + v2u64_op1 = (v2u64){0x0400001001150404, 0x0005000400000004}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fc000007fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010000000000, 0x0100000001000100}; + v2u64_op1 = (v2u64){0x00000001ffffffff, 0x000000490000004d}; + __m128i_result = (__m128i){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000020000000200, 0x0000020000000200}; + v2u64_op1 = (v2u64){0x0000020000000200, 0x0000020000000200}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000008680f1ff, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0280000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ffffff00000000, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vsle_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x42a0000042a02000, 0x0000000036280000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff80000000ffff, 0xffff80ff0000ffff}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffff0000, 0x00000000ffff0000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffefffa8007c000f, 0xff0600d50e9ef518}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x000000001faea9ec, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000100007f01}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfbfb47fbfbfb0404, 0xfbfbfb17fbfb38ea}; + v2u64_op1 = (v2u64){0x000000000005fffa, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x000100fe000100fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000003fffffffc, 0x00001fff00001fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x0000000000800080}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000040002}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffffff00000000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000bffffffe}; + v2u64_op1 = (v2u64){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffff0000}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000007f7f7f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000011ff040, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x001000100010c410, 0x0010001000100010}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a0, 0xffffffffcafff8ff}; + v2u64_op1 = (v2u64){0x00000000000000a0, 0xffffffffcafff8ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004d004d004d004d, 0x004d004d004d004d}; + v2u64_op1 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000007f0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000007f0000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000004080, 0x00000000000ed0e0}; + v2u64_op1 = (v2u64){0x0000000000004080, 0x00000000000ed0e0}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003030000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01ff1100000048, 0xff00ff00fffbfffc}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsle_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsle-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.c new file mode 100644 index 0000000000..91d1e93764 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.c @@ -0,0 +1,190 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_b((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_b((__m128)v2u64_op0, -6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_b((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200000, 0x0000000000200008}; + __m128i_result = (__m128i){0xffffffffff00ffff, 0xffffffffff00ffff}; + __m128i_out = __lsx_vslei_b((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3a8000003a800000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ffffff00ffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_b((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x1111113111111141}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x0000ffff00008080}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000ffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c4d53d855f89514, 0x31dc2cc1bc268c93}; + __m128i_result = (__m128i){0xffff00000000ffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000001, 0x0000000200000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_h((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fc000003fc00000, 0x3fc000003fc00000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, -7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5779108fdedda7e4, 0xd78cfd70b5f65d76}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_w((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x02693fe0e7beb077, 0x000000001fc1a568}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, -6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, -4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff000000000000, 0x00ff000000ff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffb9917a6e7fffff, 0xf1819b7c0732a6b6}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ffffffffffff, 0x0037ffc8d7ff2800}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, -14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf03ef03ef03ef03e, 0xf03ef03ef03ef03e}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.c new file mode 100644 index 0000000000..9a6cfcc7c3 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.c @@ -0,0 +1,215 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd82480697f678077, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_result = (__m128i){0x000000000000ff00, 0x000000000000ff00}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0048137ef886fae0, 0x1268f057137a0267}; + __m128i_result = (__m128i){0xff00ff0000000000, 0xff000000ff00ff00}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000202fe02, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff00ff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_bu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff7a53, 0x0000000000001f0a}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffff0000}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f0001000000000, 0x40f0001000000000}; + __m128i_result = (__m128i){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ff00, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001b4a00007808, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_hu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x68bcf93435ed25ed, 0x0000000000003900}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001010000, 0x03574e3a62407e03}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000f0000000, 0x0000000000000001}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff000000000000, 0x00ff000000ff0000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_wu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff00000000, 0x000000ff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x309d2f342a5d2b34, 0x00250023001c001d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslei_du((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslei-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsll.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsll.c new file mode 100644 index 0000000000..bdffc8d929 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsll.c @@ -0,0 +1,176 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000401000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000401000}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + __m128i_result = (__m128i){0x18e2184858682868, 0x0000000000000000}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000200000001c, 0x000000200000001c}; + v2u64_op1 = (v2u64){0x000000200000001c, 0x000000200000001c}; + __m128i_result = (__m128i){0x00000020000000c0, 0x00000020000000c0}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003ffd000a4000, 0x3fffffff80000000}; + v2u64_op1 = (v2u64){0x0000fffd000a0000, 0xfffcffff00000000}; + __m128i_result = (__m128i){0x0000a00028004000, 0xf000800080000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffff7e00000081}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x8000000000008000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363bc9e8b696363, 0x6b9fe3649c9d6363}; + v2u64_op1 = (v2u64){0x6363bc9e8b696363, 0x6b9fe3649c9d6363}; + __m128i_result = (__m128i){0x800000005b4b1b18, 0xb9fe3640e4eb1b18}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80001b155b4b0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00009b140000917b, 0xffffffff00006c82}; + __m128i_result = (__m128i){0xb150000000000000, 0x80000000fffffffc}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + v2u64_op1 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0xf11e970c68000000, 0xb9884ab93b0b80a0}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100000100010001, 0x0101010101010101}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0100000100010001, 0x0101010101010101}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0040007fff800000, 0x00307028003f80b0}; + v2u64_op1 = (v2u64){0xffff008000000000, 0xffffffc0ffffff81}; + __m128i_result = (__m128i){0x0040007fff800000, 0x0060e050007f0160}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff02d060, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ff02d060, 0x0000000000000000}; + __m128i_result = (__m128i){0xff02d06000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8000000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vsll_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsll.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsll.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsll.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslli.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslli.c new file mode 100644 index 0000000000..ae0de565e0 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslli.c @@ -0,0 +1,215 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080000000000, 0x0000080000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000800000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff00, 0xffffff00ffff00ff}; + __m128i_result = (__m128i){0xfcfcfcfcfcfcfc00, 0xfcfcfc00fcfc00fc}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000060}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000f00f, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000f00f, 0x0000000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x61608654a2d4f6da, 0x7ff0000000000000}; + __m128i_result = (__m128i){0xc2c00ca844a8ecb4, 0xfee0000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff7fffffff7, 0xfffffff7fffffff7}; + __m128i_result = (__m128i){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xc0c0c0c0c0c0c0c0, 0xc0c0c0c0c0c0c0c0}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x841f000fc28f801f, 0x0000000000000000}; + __m128i_result = (__m128i){0x107c003c083c007c, 0x0000000000000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x030220020310edc0, 0x101b0330eb022002}; + __m128i_result = (__m128i){0x8000000080008000, 0x0080800080000000}; + __m128i_out = __lsx_vslli_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000040, 0x0000000000000000}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff010300ff0103, 0x0000000000000002}; + __m128i_result = (__m128i){0xf0003000f0003000, 0x0000000000002000}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x317fce80317fce80}; + __m128i_result = (__m128i){0x0000000000000000, 0xf0000000f0000000}; + __m128i_out = __lsx_vslli_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000fe00fd, 0xc39fffff007fffff}; + __m128i_result = (__m128i){0x0000000003f803f4, 0x0e7ffffc01fffffc}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000d46cdc13, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000060000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x8000000080000000, 0x8000000080000000}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe2560afe9c001a18, 0xe2560afe9c001a18}; + __m128i_result = (__m128i){0x89582bf870006860, 0x89582bf870006860}; + __m128i_out = __lsx_vslli_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfd293eab528e7ebe, 0xaaaaffebcfb748e0}; + __m128i_result = (__m128i){0x51cfd7c000000000, 0xf6e91c0000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff0ffe04000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x3c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000400040004, 0x0004000400040004}; + __m128i_result = (__m128i){0x0100000000000000, 0x0100000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x36); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff800fff01}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff001ffe02}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5779108fdedda7e4, 0xd78cfd70b5f65d76}; + __m128i_result = (__m128i){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffe79ffffba5f, 0xffff9727ffff9727}; + __m128i_result = (__m128i){0xffffba5f00000000, 0xffff972700000000}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x20); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + __m128i_result = (__m128i){0x00000000047fe2f0, 0x05dfffc3ffffffc0}; + __m128i_out = __lsx_vslli_d((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslli.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslli.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslli.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.c new file mode 100644 index 0000000000..4d3db12f51 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.c @@ -0,0 +1,180 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0020002000200020, 0x0020002000200020}; + __m128i_result = (__m128i){0x0000002000000020, 0x0000002000000020}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000e0000000e0, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000fc00, 0x000000000000fc00}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffeb48e03eab7ebe, 0x0000000100000001}; + __m128i_result = (__m128i){0x0f80eac01f80ef80, 0xffc0fac01200f800}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc2fac2fa53e7db29, 0x00000000e7e20468}; + __m128i_result = (__m128i){0x00a6ffceffb60052, 0xff84fff4ff84fff4}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x002e0059003b0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000007600000000, 0x0000005c000000b2}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2e34594c3b000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x01d8000000000000, 0x017001a002c80260}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x09e009e009e009e0, 0x09e009e009e009e0}; + __m128i_out = __lsx_vsllwil_h_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000040000000400}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0505000005050505, 0x0000000005050000}; + __m128i_result = (__m128i){0x0028280000282800, 0x0028280000000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0xfffffffffffff800}; + __m128i_result = (__m128i){0xffc0000000000000, 0xffc0000000000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffff00ffffff00, 0xffffff00ffffff00}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf10cf508f904fd01, 0xf10cf508f904fd01}; + __m128i_result = (__m128i){0xfffff208fffffa02, 0xffffe218ffffea10}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1918171615141312, 0x21201f1e1d001b1a}; + __m128i_result = (__m128i){0x0001514000013120, 0x0001918000017160}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff790a15db63d, 0xfffff60ca7104649}; + __m128i_result = (__m128i){0xfe857400fed8f400, 0xfffffc00ffde4000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1c6c80007fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00fffe00fffffe00, 0x0038d800ff000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fc000007fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x00ff800000000000, 0x00ff800000000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_w_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffe00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000007fff800000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff80000000ffff, 0xffff80ff0000ffff}; + __m128i_result = (__m128i){0x000000000001fffe, 0xffffffffffff0000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000104000800, 0x0001000100010001}; + __m128i_result = (__m128i){0x0010002000000000, 0x0000040004000000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000020}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000017fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x003fffffff800000, 0x0000000000800000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x57f160c4a1750eda, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffd0ba876d000, 0x000002bf8b062000}; + __m128i_out = __lsx_vsllwil_d_w((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.c new file mode 100644 index 0000000000..2973a2a373 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.c @@ -0,0 +1,140 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000007f7f02, 0x0000000000000000}; + __m128i_result = (__m128i){0x00003f803f800100, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0014000100000000}; + __m128i_result = (__m128i){0x7f807f807f807f80, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001030103, 0x0000000000000000}; + __m128i_result = (__m128i){0x0020006000200060, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080805, 0x0808080808080805}; + __m128i_result = (__m128i){0x0020002000200014, 0x0020002000200020}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffe0001fffe, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000201fe01fc, 0x0000000201fe01fc}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff1aff6d02834d70, 0xff1affff01001fe0}; + __m128i_result = (__m128i){0x0100418026803800, 0x7f800d007f803680}; + __m128i_out = __lsx_vsllwil_hu_bu((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3b2c8aefd44be966, 0x3e2b34ca59fa4c88}; + __m128i_result = (__m128i){0x001a8960001d2cc0, 0x0007658000115de0}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffff000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ff00, 0x0000ffff0000ff00}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020202020202fe02, 0x0000040600000406}; + __m128i_result = (__m128i){0x002020000fe02000, 0x0020200000202000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x000000001ffffffe}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3131313131313131, 0x0000000000000000}; + __m128i_result = (__m128i){0x0313100003131000, 0x0313100003131000}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000900000009, 0x0000000900000009}; + __m128i_result = (__m128i){0x0000000000000090, 0x0000000000000090}; + __m128i_out = __lsx_vsllwil_wu_hu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000020000007d, 0x0000000200000002}; + __m128i_result = (__m128i){0x000000001f400000, 0x0000000000800000}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + __m128i_result = (__m128i){0x0000000000280000, 0x0000000000000000}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fef01000e27ca, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001c4f940000, 0x0000001fde020000}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000ffffffff00, 0x000000ffffffff00}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0x0000102020204000, 0x00000fffffffe000}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000008000}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x39c51f389c0d6112, 0x8d78336c83652b86}; + __m128i_result = (__m128i){0x00000004e06b0890, 0x00000001ce28f9c0}; + __m128i_out = __lsx_vsllwil_du_wu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsllwil-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.c new file mode 100644 index 0000000000..19ab646a6d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.c @@ -0,0 +1,296 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x001a8960001d2cc0, 0x0007658000115de0}; + v2u64_op1 = (v2u64){0x9e801ffc7fc00000, 0xffc000007fc00000}; + __m128i_result = (__m128i){0x0000ff00ff0000ff, 0x000000ffff0000ff}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010000, 0x0000000000040100}; + v2u64_op1 = (v2u64){0xe3f0200004003ffd, 0x0000000000000384}; + __m128i_result = (__m128i){0x0000ff00ff00ff00, 0x000000000000ff00}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000001ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000127f010116, 0x7f0101070101010f}; + __m128i_result = (__m128i){0x000000ffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000ffef0010000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff0000ff0000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000004}; + v2u64_op1 = (v2u64){0x0000000400000004, 0x0000000400000004}; + __m128i_result = (__m128i){0x000000ff00000000, 0x000000ff00000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff02000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffff00000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001a000b00000000, 0x00000000002a001a}; + v2u64_op1 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff001a00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffc0ffc0003f003f, 0x003fffc0ffc0003f}; + __m128i_result = (__m128i){0x0000000000ff00ff, 0x00ff0000000000ff}; + __m128i_out = __lsx_vslt_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0404038383838404, 0x0404038383838404}; + v2u64_op1 = (v2u64){0x837cd5db43fc55d4, 0x0403cfcf01c1595e}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000000040000, 0x0004000000040000}; + v2u64_op1 = (v2u64){0xfff6fff6fff6fff6, 0xfff6fff6fff6fff6}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffefefffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffefefffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000080000000800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000080000000800}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + v2u64_op1 = (v2u64){0x1748c4f9ed1a5870, 0x8000000000000000}; + __m128i_result = (__m128i){0xffff00000000ffff, 0x0000ffffffffffff}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + v2u64_op1 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x00000000ffff0000, 0x00000000ffffffff}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ca000000c481, 0x0000ffff000086bd}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x00000000000003e2}; + v2u64_op1 = (v2u64){0x0000f8a50000f310, 0x00050eb00000fffa}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0xffffffff00000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000011f0000f040, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000011ff8bc, 0x0177fff0fffffff0}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffff000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0xffff000000000000}; + __m128i_out = __lsx_vslt_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001000100010c410, 0x0010001000100010}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00ffffff0000ffff, 0x800000ff000000ff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x803f800080000000, 0xe0404041e0404041}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000ff000000ff, 0x000000ff000000ff}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001f5400000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002008360500088, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000400028000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000003ff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000467fef81, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9c9c9c9c63636363, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4eede8494f000000, 0x000000003f800000}; + v2u64_op1 = (v2u64){0x1615141315141312, 0x1817161517161514}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0fff0fff7f800fff, 0x0fff0fff0fff0fff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010000000000001, 0x000fffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.c new file mode 100644 index 0000000000..dd43854f18 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.c @@ -0,0 +1,164 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x001a8960001d2cc0, 0x0007658000115de0}; + __m128i_result = (__m128i){0x0000000000ffffff, 0x00ffffff00ffffff}; + __m128i_out = __lsx_vslt_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_result = (__m128i){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_out = __lsx_vslt_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + v2u64_op1 = (v2u64){0xfffffffff359f358, 0xfffffffff359f358}; + __m128i_result = (__m128i){0xffffffffff00ff00, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x317fce80317fce80}; + v2u64_op1 = (v2u64){0x0000fffe0000fffe, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vslt_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001a8960001d2cc0, 0x0007658000115de0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80ffffffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000007730, 0x0000000000000320}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000ffff}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000101010001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4050000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000001, 0x0000000200000000}; + v2u64_op1 = (v2u64){0x6363636163636363, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslt_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000000, 0x0000001000000001}; + v2u64_op1 = (v2u64){0x0000002000000000, 0x0000002000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslt_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + v2u64_op1 = (v2u64){0x0000000300003e6e, 0x00000000000145ad}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x21201f1e19181716}; + v2u64_op1 = (v2u64){0x03f21e0114bf19da, 0x00005dcbe7e830c0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x5e695e95e1cb5a01, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0313100003131000, 0x0313100003131000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000046ebaa2c, 0x00000000000010a7}; + v2u64_op1 = (v2u64){0xf1f1f1f1865e65a1, 0xf1f1f1f149ed7273}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f8a50000f310, 0x00050eb00000fffa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslt_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslt-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.c new file mode 100644 index 0000000000..ae1eb9a818 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.c @@ -0,0 +1,240 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00feff0000000000, 0x00feff0000000000}; + __m128i_result = (__m128i){0x00ffff0000000000, 0x00ffff0000000000}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffefffff, 0xffffffffffefffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, 5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, 8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_b((__m128)v2u64_op0, -12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff00feff00, 0x807f7f8000ffff00}; + __m128i_result = (__m128i){0xffffffff0000ffff, 0xffff00000000ffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x195f307a5d04acbb}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x000000000000ffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000800}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffff0000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3a3a00003a3a0000, 0x3a3a3a3b3a3a3a3a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ff0000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_h((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5ff6a0a40e9da42a, 0x5ff6a0a40ea8f47c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200001, 0x004200a000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd82480697f678077, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffe15, 0xfffffffffffffe15}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff000100000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc000ffffc005, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, -5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00010002ffff0105, 0x0006000100040001}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0500847b00000000, 0xa000308000008002}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vslti_w((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5e695e96c396b402, 0x000000005e695e95}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0103000201030002, 0x0000000000020000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, 7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000455555555, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000008}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, 14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e880ffffffff, 0x63636b6afe486741}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_d((__m128)v2u64_op0, -13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.c new file mode 100644 index 0000000000..8ccf24afa8 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.c @@ -0,0 +1,215 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f800000000000, 0x003f800000000000}; + __m128i_result = (__m128i){0xff0000ffffffffff, 0xff0000ffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000008900000009, 0x0000008a0000008a}; + __m128i_result = (__m128i){0xffffff00ffffffff, 0xffffff00ffffff00}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x371fe00000000000, 0x371fe00000000000}; + __m128i_result = (__m128i){0x000000ffffffffff, 0x000000ffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x793636d3793636d3, 0xbe8282a0793636d3}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_bu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3b2c8aefd44be966, 0x2e2b34ca59fa4c88}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000080000, 0x0000000000100000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff0000ffff}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100d6effefd0498, 0x7505445465593af1}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001ffffffadff9a, 0x00010000ffab001c}; + __m128i_result = (__m128i){0xffff000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001a00000, 0xff7300000ca00430}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000022001818, 0x000000009c83e21a}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslti_hu((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001802041b0013, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000000010000, 0x0007000000050000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010001000100, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1748c4f9ed1a5870, 0x975ca6046e2e4889}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000b31600006544, 0x0000235600005486}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_wu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001edde, 0x00000000007e8a60}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40c7ee1f38e4c4e8, 0x0aa077b7054c9554}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0b5471b633e54fde, 0x6b75948a91407a42}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vslti_du((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vslti-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsra.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsra.c new file mode 100644 index 0000000000..8724187dc6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsra.c @@ -0,0 +1,236 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffe001ffffe001, 0xffffe001ffffe001}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000fffc00000000, 0x00003ff000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0008000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000080008, 0x0000000000000002}; + v2u64_op1 = (v2u64){0x000000fffe01fd02, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000040002, 0x0000000000000002}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0xffc0ff80ff800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0xffc0ff80ff800000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffac0a000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x77eb86788eebafe1, 0x801d5de0000559e0}; + __m128i_result = (__m128i){0x0000ffac00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x5252525252525252, 0x5252525252525252}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000047fe2f0, 0x00000000047fe2f0}; + v2u64_op1 = (v2u64){0x00000000fec20704, 0x0001000100010012}; + __m128i_result = (__m128i){0x00000000001fffff, 0x00000000043fe2fc}; + __m128i_out = __lsx_vsra_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + v2u64_op1 = (v2u64){0x007a007600150077, 0x00ed0008005e00a2}; + __m128i_result = (__m128i){0x0007007f03fe0000, 0x0003000000010000}; + __m128i_out = __lsx_vsra_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbddaa86803e33c2a, 0xe0d56a9774f3ea31}; + v2u64_op1 = (v2u64){0xbddaa86803e33c2a, 0xe0d56a9774f3ea31}; + __m128i_result = (__m128i){0xffefffa8007c000f, 0xff0600d50e9ef518}; + __m128i_out = __lsx_vsra_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff810000ff81, 0x000000820000ff81}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff810000ff81, 0x000000820000ff81}; + __m128i_out = __lsx_vsra_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff80000000000000, 0xff80000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fc000003fc00000, 0x3fc000003fc00000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x3fc000003fc00000, 0x3fc000003fc00000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffefff6fff80002, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x803f800080000000, 0xe0404041e0404041}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + v2u64_op1 = (v2u64){0x191817161514131d, 0x21201f1e1d001b25}; + __m128i_result = (__m128i){0x000000e400000001, 0x0000000001e8e1d8}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x00000c0c00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3b2c8aefd44be966, 0x2e2b34ca59fa4c88}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f8000007f800000, 0x7f8000007f800000}; + __m128i_out = __lsx_vsra_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd83c8081ffff8080, 0x85bd6b0e94d89998}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xd83c8081ffff8080, 0x85bd6b0e94d89998}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfd293eab528e7ebe, 0xaaaaffebcfb748e0}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000700ff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0010002000000000, 0x0000040004000000}; + __m128i_result = (__m128i){0x000700ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x800080007f008000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0a0aa9890a0ac5f3, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffff000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfcfcfcfcfcfc0000, 0xfcfcfcfcfcfcfcfd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0802080408060803, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001fffe0001fff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vsra_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsra.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsra.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsra.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.c new file mode 100644 index 0000000000..e835b215a6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.c @@ -0,0 +1,190 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0001ffff0001ffff, 0x0001ffff00000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff00000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0x3c600000ff800000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0f180000ffe00000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x407c2ca32cbd0357, 0x21f32eaf5b7a02c8}; + __m128i_result = (__m128i){0x203e16d116de012b, 0x10f917d72d3d01e4}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x01ff000000000000, 0x01ff000000000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + __m128i_result = (__m128i){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080808080808, 0x0808080808080808}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x3fff3fff3fff3fff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + __m128i_result = (__m128i){0xffffffc0ffff003f, 0x0000000800000007}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x51cfd7c000000000, 0xf6e91c0000000000}; + __m128i_result = (__m128i){0x0014fff500000000, 0xfffd000700000000}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40c7ee1f38e4c4e8, 0x0aa077b7054c9554}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x000000000000ffff}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00f0001000000010, 0x0001000100010001}; + __m128i_result = (__m128i){0x00f0001000000010, 0x0001000100010001}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vsrai_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0048137ef886fae0, 0x1268f057137a0267}; + __m128i_result = (__m128i){0x00000001ffffffe2, 0x000000490000004d}; + __m128i_out = __lsx_vsrai_w((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_w((__m128)v2u64_op0, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_w((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ca354688, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x2e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x3c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe80ffffffffff02, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffe80, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000049ffffffaa, 0x0000001800000039}; + __m128i_result = (__m128i){0x000000127fffffea, 0x000000060000000e}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000002ebf}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000190, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100010058}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000001000100010}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrai_d((__m128)v2u64_op0, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrai.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsran.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsran.c new file mode 100644 index 0000000000..b9a9749b98 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsran.c @@ -0,0 +1,200 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + __m128i_result = (__m128i){0x0000fffe0001fffe, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000201, 0x0303020102020001}; + v2u64_op1 = (v2u64){0xd82480697f678077, 0x0000000000000000}; + __m128i_result = (__m128i){0x0301020100000004, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ff02, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffefffeff00feff, 0x3c5fffffff7fffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff0ff8006f0f950, 0x00000100f8100002}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000002bb, 0x00000000000000bf}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000718ea657431b, 0x0000000021e79364}; + v2u64_op1 = (v2u64){0xfefffffffeffe3d7, 0xfefffffffeffda6f}; + __m128i_result = (__m128i){0x000000ff0000ff86, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000001}; + v2u64_op1 = (v2u64){0x0101fe8700000000, 0x0101fe870101fe87}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f0080000f800, 0x0000e0180000e810}; + v2u64_op1 = (v2u64){0x0000f0080000f800, 0x0000e0180000e810}; + __m128i_result = (__m128i){0x0000000000f0f800, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffff7a53, 0x0000000000001f0a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0xfffffffffffffff0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000800000000000, 0x0000800000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001e0052001ffff9, 0x0037ffd40083ffe5}; + v2u64_op1 = (v2u64){0x001effae001effae, 0x001effae001effae}; + __m128i_result = (__m128i){0x00df020f0078007f, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x06d9090909090909, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6d339b4f3b439885, 0x0039d21e3229d4e8}; + __m128i_result = (__m128i){0x000000000db24848, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff80000000}; + v2u64_op1 = (v2u64){0xfe03fe3ffe01fa21, 0xfe3bfb01fe3bfe01}; + __m128i_result = (__m128i){0xffff000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000100089bde}; + v2u64_op1 = (v2u64){0x0001000104000800, 0x0001000100010001}; + __m128i_result = (__m128i){0x80044def00000001, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x353c8cc4b1ec5b09, 0x0101010101010101}; + v2u64_op1 = (v2u64){0xcbc2723a4f12a5f8, 0x002affd600000001}; + __m128i_result = (__m128i){0x8080808000000035, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001000000ff, 0x0000000100000100}; + v2u64_op1 = (v2u64){0x00ff80ff00ff80ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffe8081000000000, 0x7ff000ff6220c0c1}; + v2u64_op1 = (v2u64){0xffe8081000000000, 0x7ff000ff6220c0c1}; + __m128i_result = (__m128i){0xb110606000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff76ffd8ffe6ffaa, 0xff80ffa2fff0ff74}; + v2u64_op1 = (v2u64){0xffffffffbc19ecca, 0xffffffffc105d1aa}; + __m128i_result = (__m128i){0xffffe03ff63ff9bf, 0x0000000000000000}; + __m128i_out = __lsx_vsran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsran.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsran.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsran.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.c new file mode 100644 index 0000000000..8d540bac64 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.c @@ -0,0 +1,170 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x000201000000000b, 0x0000000b0000000b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0005000501800005}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000009, 0x0000000000000008}; + v2u64_op1 = (v2u64){0xd705c77a7025c899, 0x697eba2bedfa9c82}; + __m128i_result = (__m128i){0x03fdfffcfefe03fe, 0x00000000ffff0000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f0001000000000, 0x40f0001000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x1e0200001e020000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2020202020207fff, 0x2020202020202020}; + __m128i_result = (__m128i){0x01010101010101ff, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03f21e0114bf19da, 0x00005dcbe7e830c0}; + v2u64_op1 = (v2u64){0x000014bf000019da, 0x000003f200001e01}; + __m128i_result = (__m128i){0x0000000100010001, 0x0005fe0300010101}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080636380806363, 0x808080e280808080}; + __m128i_result = (__m128i){0x8080808080638063, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000003020302}; + v2u64_op1 = (v2u64){0xffffffffffffff81, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0x00000c0c00000000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010000000000, 0x0100000001000100}; + v2u64_op1 = (v2u64){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + __m128i_result = (__m128i){0xffff00ff00ffffff, 0x0000010001000000}; + __m128i_out = __lsx_vsrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x57cb857100001a46, 0x001ffce00016fb41}; + v2u64_op1 = (v2u64){0x7bffffffffffffff, 0xfbffffffffffffff}; + __m128i_result = (__m128i){0xfffeffff001effff, 0x0000000000150000}; + __m128i_out = __lsx_vsrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x003f000000000000, 0xfff082f000000000}; + __m128i_result = (__m128i){0xffff000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + v2u64_op1 = (v2u64){0x1f54e0ab00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001f50000, 0xfffffb6d01f5f94f}; + __m128i_out = __lsx_vsrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0800080008000800, 0x0800080008000800}; + __m128i_result = (__m128i){0x0040004000400040, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f07697100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000076971000}; + __m128i_out = __lsx_vsrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x110053f401e7cced, 0x5847b72626ce61ef}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x5847b72626ce61ef}; + __m128i_result = (__m128i){0x0005847b00000000, 0x0005847b00011005}; + __m128i_out = __lsx_vsrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x438ff81ff81ff820}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x03ff03ff03ff03ff}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000043}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x78); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002020202, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000040000}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + v2u64_op1 = (v2u64){0xf0bc9a5278285a4a, 0x62cbf96e4acfaf40}; + __m128i_result = (__m128i){0x62cbf96e4acfaf40, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x40); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000001d, 0x000000000000001d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x63); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x58); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrani.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.c new file mode 100644 index 0000000000..90fedf134c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.c @@ -0,0 +1,242 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffff02fff4, 0xff02ff1bff02ff23}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000001300000013}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001300000013, 0x0000001300000013}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0xfffffffffefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x00000000c2bac2c2, 0xffffff0000000002}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000003f, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000010000003f, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8001000184000be0, 0x80010001b57fc565}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8001000184000be0, 0x80010001b57fc565}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0bd80bd80bd80000, 0x0bd80bd80bdfffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000080000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000080000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0fffff000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000000002bb, 0x00000000000000bf}; + __m128i_result = (__m128i){0xc0fffff000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x467f6080467d607f, 0xffffe000ffffe000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0100010001000100, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x7f7f7f7f7f7f7f7f, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff00ff00ff00ff00, 0xff00ff00ff00ff00}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000400000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000800000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000008000000080}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0xffc0ff80ff800000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x00000c0c00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffc00000ff800000}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7ffffffe, 0x7fffffff7ffffffe}; + v2u64_op1 = (v2u64){0xffffffffe4866c86, 0xffffffffe4866c86}; + __m128i_result = (__m128i){0x0001000002000000, 0x0001000002000000}; + __m128i_out = __lsx_vsrar_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0082000000000007, 0x0086000000040000}; + v2u64_op1 = (v2u64){0x00000000ffff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0082000000000007, 0x0086000000040000}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff00000000000000, 0x0037ffc8d7ff2800}; + v2u64_op1 = (v2u64){0x0101010101010101, 0x0101010101010101}; + __m128i_result = (__m128i){0xff80000000000000, 0x001bffe4ebff9400}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1748c4f9ed1a5870, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1748c4f9ed1a5870, 0x8000000000000000}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc89d7f0ff90da019, 0x680485c8b304b019}; + v2u64_op1 = (v2u64){0xc89d7f0ff90da019, 0x680485c8b304b019}; + __m128i_result = (__m128i){0xffff913bfffffffd, 0x00680486ffffffda}; + __m128i_out = __lsx_vsrar_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x4f804f804f804f80, 0x0000000000000001}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x3fbf3fbf00007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000003a0000003a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000003a0000003a, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2221201f1e1d1c1b, 0x2a29282726252423}; + v2u64_op1 = (v2u64){0x2221201f1e1d1c1b, 0x2a29282726252423}; + __m128i_result = (__m128i){0x00000004442403e4, 0x0000000005452505}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrar_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrar.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.c new file mode 100644 index 0000000000..87983cd372 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.c @@ -0,0 +1,195 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000cb4a, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000f909, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + __m128i_result = (__m128i){0x00000000000000f3, 0x00000000000000f3}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000958affff995d, 0xffff000000000000}; + __m128i_result = (__m128i){0x0000fdfc0000fd03, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001200100012001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000080000000800}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + __m128i_result = (__m128i){0xfff5fff4002ffff5, 0x0001000000000000}; + __m128i_out = __lsx_vsrari_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77c03fd640003fc6, 0x77c0404a4000403a}; + __m128i_result = (__m128i){0x00f0008000800080, 0x00f0008100800080}; + __m128i_out = __lsx_vsrari_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000a6, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_h((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc0ff81000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffff0ffe04000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff00010000fff, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x21201f1e19181716}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000109000000c9}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x0000000000000020, 0x0000000000404040}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_w((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_d((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000095141311, 0x0000000017161515}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_d((__m128)v2u64_op0, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000006c80031, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_d((__m128)v2u64_op0, 0x3c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrari_d((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004d004d004d004d, 0x004d004d004d004d}; + __m128i_result = (__m128i){0x0001340134013401, 0x0001340134013401}; + __m128i_out = __lsx_vsrari_d((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrari.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.c new file mode 100644 index 0000000000..9999386e19 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.c @@ -0,0 +1,164 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefff6fff80002, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0xff000000fefb0000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001fffc0ffffe001, 0xff7f810100001000}; + v2u64_op1 = (v2u64){0xc4dbe60354005d25, 0x0000000002259662}; + __m128i_result = (__m128i){0x7f01000000f8ff00, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffbaf4ffffb805, 0xffff6ff4ffff8db8}; + v2u64_op1 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + __m128i_result = (__m128i){0xfff4ffb800ff0080, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000044470000, 0x00000000084d12ce}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00004dce00004700, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffff1, 0xfffffffffffffff1}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000c2fa8000c2fa, 0x0000c2f90000bafa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xc2f9bafac2fac2fa, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0b4c600000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ff00, 0x08080807f5f5f5f8}; + v2u64_op1 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x0202f5f80000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0d060d060d060d06, 0x0d060d060d060d06}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0d060d060d060d06, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffefffffffef, 0xffffffefffffffef}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffefffffffef, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000200, 0x0000000000000200}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffff0204, 0xffffffff00000004}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + v2u64_op1 = (v2u64){0x000000150d707009, 0x000000000001d5d4}; + __m128i_result = (__m128i){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffefffefffeffff, 0xfffefffefffeffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000011ff040, 0xffffffffffffffee}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01fe03ff01fe03, 0xff01fe03ff01fe03}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff01fe03ff01fe03, 0x0000000000000000}; + __m128i_out = __lsx_vsrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.c new file mode 100644 index 0000000000..a8d6125f2a --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.c @@ -0,0 +1,272 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000001300000013, 0x0000001300000013}; + v2u64_op1 = (v2u64){0x0000000e0000000e, 0x0000000e0000000e}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xecec006c00000000, 0xecec006c00000000}; + v2u64_op1 = (v2u64){0xffff007f00000000, 0xffff007f00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000008fc4ef7b4, 0x000000043c5ea7b6}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000fea0000fffe}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000003e, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00fe00fe000200fe, 0x00fe00fe000200fe}; + __m128i_result = (__m128i){0xfefe02fefefe02fe, 0x000000000000003e}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000016, 0x0000000000000016}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ff020000fff4, 0x000000000000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff020000fff4, 0x000000000000ffff}; + v2u64_op1 = (v2u64){0x1e801ffc00000000, 0x7fc0000000000000}; + __m128i_result = (__m128i){0x0000000001000000, 0x0000080007f80800}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xff8000002f4ef4a8, 0xff80000000000000}; + __m128i_result = (__m128i){0x000000000000f4a8, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000800000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000800000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000003f0080ffc0, 0x000000ffa7f8ff81}; + v2u64_op1 = (v2u64){0x0000a7f87fffff81, 0x000000007fff00ff}; + __m128i_result = (__m128i){0x0000004000000040, 0x0000ffd400000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f800000000000, 0x003f800000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000080003f80ffff}; + __m128i_result = (__m128i){0x000001fc00000000, 0x0002000000020000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x479f64b03373df61, 0x09e8e9012fded7fd}; + v2u64_op1 = (v2u64){0x04c004d6040004c6, 0x04c0044a0400043a}; + __m128i_result = (__m128i){0x00890087009b0099, 0x1d20db00ec967bec}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000f0000000f, 0x0000000f0000000f}; + v2u64_op1 = (v2u64){0x0000000f0000000f, 0x0000000f0000000f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff010000ff01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + v2u64_op1 = (v2u64){0xcd636363cd636363, 0xcd636363cd636363}; + __m128i_result = (__m128i){0xf359f359f359f359, 0xf359f359f359f359}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000800ecedee68, 0x00000807bf0a1f80}; + v2u64_op1 = (v2u64){0x0005847b00000000, 0x0005840100000005}; + __m128i_result = (__m128i){0x0058000000580000, 0x0001f0a20001cedf}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x274f4f0648145f50, 0x0a545374471b7070}; + v2u64_op1 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x9e9f9e9f9e9f9e9f, 0xa8a736e19e9e28bf}; + __m128i_out = __lsx_vsrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0086018c01360164, 0x00100184017e0032}; + v2u64_op1 = (v2u64){0xfffffff33c4b1e67, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000800c0004300c}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4101010141010100}; + v2u64_op1 = (v2u64){0x00000000000001ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0020808100000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x29); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x24); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000332ae5d97330, 0x0000001ff85ffdc0}; + __m128i_result = (__m128i){0x1ff85ffe2ae5d973, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000080800000808, 0x0000080800000808}; + __m128i_result = (__m128i){0x8080000180800001, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000000010000000, 0x0000200000002000}; + v2u64_op1 = (v2u64){0x0103000201030002, 0x0000000000020000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffb1fb1000000000}; + v2u64_op1 = (v2u64){0x0b73e427f7cfcb88, 0xf2c97aaa7d8fa270}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff0000ff0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000001e5}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x5000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x66); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x64); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x028c026bfff027af, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0xffffc00a3009b000, 0x00000003fc03fc00}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff80010001, 0xffffffff80010001}; + v2u64_op1 = (v2u64){0x0bd80bd80bd80000, 0x0bd80bd80bdfffff}; + __m128i_result = (__m128i){0xf0bd80bd80bd8000, 0x1ffffffff8001000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x48); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000d46cdc13, 0x00000000dfa6e0c6}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x64); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc000400000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00003fff00010000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffab7e71e33848, 0x01533b5e7489ae24}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xce9135c49ffff570}; + __m128i_out = __lsx_vsrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x23); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrarni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.c new file mode 100644 index 0000000000..48be485176 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.c @@ -0,0 +1,266 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffefffffffef, 0xffffffefffffffef}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffefffffffef, 0xffffffefffffffef}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0101010100000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000005555555554, 0x0000005555555554}; + v2u64_op1 = (v2u64){0x0000fff1000ffffe, 0x00000001000f000e}; + __m128i_result = (__m128i){0x0000002a55000001, 0x0000002a55005501}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0004000000040000, 0x0004000000040000}; + v2u64_op1 = (v2u64){0xfff6fff6fff6fff6, 0xfff6fff6fff6fff6}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x003e00d100de002b, 0x00f900d7003d00e4}; + __m128i_result = (__m128i){0x7f0200007f020000, 0x7f4000007f040000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffe000000f6, 0xffffffffffffff00}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x01010101000000f6, 0x01010101ffffff00}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + v2u64_op1 = (v2u64){0x00000001ffffff29, 0x00000049000000c0}; + __m128i_result = (__m128i){0x00ff007f0101017f, 0x00ffff7f00ff00ff}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x5d7f5d807fea807f}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100010100}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000000, 0x0000000080000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000080000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffe0000000, 0xffffffffe0000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffe0000000, 0xffffffffe0000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000900000009, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffff7fffffff7f, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x4f8000004f7fff02, 0x4688500046f6a000}; + __m128i_result = (__m128i){0xffffffff00013fff, 0x00ffffff03ffffff}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op1 = (v2u64){0x0202fe02fd020102, 0x0002000200020002}; + __m128i_result = (__m128i){0x0400040004000400, 0x0400040004000400}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x61608654a2d4f6da, 0x7ff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff0000ff0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ff0000ff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff0000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000ff00ff, 0x0000000000ff00ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000f3040705}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000f3040705}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000200020002, 0x0002000200020002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0xffffff2900000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000401000}; + __m128i_result = (__m128i){0x0000000100000001, 0xffffff2900000000}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000007000000, 0x000000000000fb01}; + v2u64_op1 = (v2u64){0x0002000000000007, 0x0006000000040000}; + __m128i_result = (__m128i){0x00000000000e0000, 0x000000000000fb01}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff003000ff00a0, 0x00ff000100ff00fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff003000ff00a0, 0x00ff000100ff00fe}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffe7fffffff, 0xfffffffefffffffe}; + v2u64_op1 = (v2u64){0x000000000001fd02, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffe1fffffff, 0xfffffffefffffffe}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80000000fff80000, 0x80000000fff8fff8}; + v2u64_op1 = (v2u64){0x7f800000fff80000, 0x7f800000fff8fff8}; + __m128i_result = (__m128i){0x80000000fff80000, 0x0000000000000080}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000100fffffefd, 0x0000750500006541}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + v2u64_op1 = (v2u64){0xc2f9bafac2fac2fa, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000001fffffffe}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0804080407040804, 0x0101080408040804}; + v2u64_op1 = (v2u64){0x00000000010a000b, 0x0000000000000000}; + __m128i_result = (__m128i){0x000100810080e081, 0x0101080408040804}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000e60, 0x00000021ffffffdf}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101fe8700000000, 0x0101fe870101fe87}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000400530050ffa6, 0xffff007fff810001}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff800fff01}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000007ff000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + v2u64_op1 = (v2u64){0x29ca096f235819c2, 0x000056f64adb9464}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000004399d32}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_out = __lsx_vsrl_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrl.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.c new file mode 100644 index 0000000000..1e24cb78e4 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.c @@ -0,0 +1,240 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000400000204010, 0x0000400000004000}; + __m128i_result = (__m128i){0x0000020000010200, 0x0000020000000200}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000003d0000, 0x00000000003d0000}; + __m128i_result = (__m128i){0x0000000000030000, 0x0000000000030000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001000000000, 0x0000001000000010}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000001}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffbffda, 0x0080000700000014}; + __m128i_result = (__m128i){0x0000000001010101, 0x0001000000000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000290, 0x0000000000000290}; + __m128i_result = (__m128i){0x0000000000000002, 0x0000000000000002}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020000ffff0001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000003030000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000000, 0x000000200000000d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000200000000}; + __m128i_out = __lsx_vsrli_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000017f0a82, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x03ff03ff03ff03ff}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000006, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffefffff, 0xffffffffffefffff}; + __m128i_result = (__m128i){0x0007000700070007, 0x0007000700070007}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + __m128i_result = (__m128i){0x000c000c000c000c, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00fe00ff, 0x0000000000010000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd6c22c8353a80d2c, 0xaa14efac3bb62636}; + __m128i_result = (__m128i){0x0003000000010000, 0x0002000300000000}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x3fff3fff3fff3fff}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c0dec4ca, 0x0000000002345454}; + __m128i_result = (__m128i){0x0000000000060006, 0x0000000000000002}; + __m128i_out = __lsx_vsrli_h((__m128)v2u64_op0, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001ffff0001ffff, 0x0001ffff0001ffff}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x000000003fffffff, 0x000000003fffffff}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0020002000200020, 0x0000000000000000}; + __m128i_result = (__m128i){0x0020002000200020, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000400000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf8e1a03affffe3e2, 0x00000000000eefff}; + __m128i_result = (__m128i){0x0000003e0000003f, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000100, 0x0000020000000002}; + __m128i_result = (__m128i){0x0000000000080000, 0x0000000000100000}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x37); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000001000100, 0x0000000001000100}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + __m128i_result = (__m128i){0x000001fffdfffdff, 0x000001fffdfffdff}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0x001f2f2cab1c732a, 0x001a64b345308091}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0fffffffffffffff}; + __m128i_out = __lsx_vsrli_d((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrli.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.c new file mode 100644 index 0000000000..b637faba55 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.c @@ -0,0 +1,230 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x8040007fffffffff, 0x80307028ffffffff}; + __m128i_result = (__m128i){0xffff0101ff010101, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0141010101410101, 0x0141010101410101}; + v2u64_op1 = (v2u64){0x0000000100000001, 0x0000000100000001}; + __m128i_result = (__m128i){0x4180418041804180, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_result = (__m128i){0x00ff00ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff0000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000001010001, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000020002, 0x0000000000020002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3789f68000000000, 0x379674c000000000}; + v2u64_op1 = (v2u64){0xfefeff00fefeff00, 0xfefeff00fefeff00}; + __m128i_result = (__m128i){0x00c0000000800000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff35cab978, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff35cab978, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000010035, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000080000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffbfff8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000010001, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x000000017ffeffff, 0x000000017ffeffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000002427c2ee, 0x00000000246d9755}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000c0f100006549, 0x0000c77c000047cd}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffe000ffffe000, 0xffffe000ffffe000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffdfff, 0xffffffffffffdfff}; + v2u64_op1 = (v2u64){0xffffe00001ffe200, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000001ffffdfff, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000020, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000003, 0x0000000000000003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000001000100, 0x0000000001000100}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f841000091aa, 0x00008bf700017052}; + v2u64_op1 = (v2u64){0xe5017c2ac9ca9fd0, 0xe6d4572c8a5835bc}; + __m128i_result = (__m128i){0x00000000f8410000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0ed5ced7e51023e5, 0x0000100000001000}; + v2u64_op1 = (v2u64){0x0000000000010000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001000e51023e5, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000071768fa4, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffdfdc0d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3ff0000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffdfdc0d, 0x0000000000000000}; + __m128i_out = __lsx_vsrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrln.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.c new file mode 100644 index 0000000000..0a363ce07c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.c @@ -0,0 +1,194 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00ff00ff00000000}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x171f0a1f6376441f, 0x6363797c63990099}; + v2u64_op1 = (v2u64){0x171f0a1f6376441f, 0x6363797c63990099}; + __m128i_result = (__m128i){0x181e180005021811, 0x181e180005021811}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x00ff00ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002050320, 0x0000000002050320}; + v2u64_op1 = (v2u64){0x010101017f010101, 0x0101010101010101}; + __m128i_result = (__m128i){0x020202020202fe02, 0x0000040600000406}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xb1b1b1b1b16f0670, 0x000000000042ab41}; + v2u64_op1 = (v2u64){0x0000000044470000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x0000000000000100, 0x0000000202020200}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000fe00fd, 0xc39fffff007fffff}; + v2u64_op1 = (v2u64){0x78c00000ff000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000003c607f80, 0x61cf003f0000007f}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff7f01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffff7f01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffffffffffe03, 0xfffffffffffffe03}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffffffffffff, 0x0000ffffffffffff}; + __m128i_result = (__m128i){0x00003fff00003fff, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000a00028004000, 0xf0fd800080000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x000f000000000000, 0x000f000800000002}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1e801ffc7fc00000, 0x7fc000007fc00000}; + __m128i_result = (__m128i){0x00003fe00ffe3fe0, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000008, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaeaeaeaeaeaeae35, 0xaeaeaeaeaeaeae35}; + v2u64_op1 = (v2u64){0xaeaeaeaeaeaeae35, 0xaeaeaeaeaeaeae35}; + __m128i_result = (__m128i){0x0000000200000002, 0x0000000200000002}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000008140c80, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000002050320, 0x0000000002050320}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe364525335ede000, 0xffffe000ffffe000}; + __m128i_result = (__m128i){0x00000fff00000e36, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000000000001f, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff8001ffff8001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x601fbfbeffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000455555555, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000008, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7c7c000000007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000f3040705, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000001f1f}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000040001, 0x00000000000bffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc001a1867fffa207, 0xe4c8b96e2560afe9}; + v2u64_op1 = (v2u64){0xc001a1867fffa207, 0xe4c8b96e2560afe9}; + __m128i_result = (__m128i){0xe2560afe9c001a18, 0xe2560afe9c001a18}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x24); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x020310edc003023d}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000080c43b700}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x56); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + v2u64_op1 = (v2u64){0x020310edc003023d, 0x30eb022002101b20}; + __m128i_result = (__m128i){0x022002101b200203, 0x022002101b200203}; + __m128i_out = __lsx_vsrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.c new file mode 100644 index 0000000000..0c7910593d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.c @@ -0,0 +1,296 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000002, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0001000101fd01fe, 0x0001000100010001}; + __m128i_result = (__m128i){0xff80ff8080008000, 0xff80ff80ff80ff80}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000006, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x111110ff11111141}; + v2u64_op1 = (v2u64){0x000000000000f00f, 0x0000000000000000}; + __m128i_result = (__m128i){0x1111113111111100, 0x111110ff11111141}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1f54e0ab00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x363d753d50155c0a, 0x0202020202020202}; + v2u64_op1 = (v2u64){0xe5c1a185c48004c5, 0xe500c085c000c005}; + __m128i_result = (__m128i){0x021f3b0205150600, 0x0002020002020200}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00009c7c00007176, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + __m128i_result = (__m128i){0x0000000000000000, 0x084d1a0907151a3d}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff9fffefff9ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0280000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0005847b00000000, 0x0005847b00011005}; + v2u64_op1 = (v2u64){0x00000800ecedee68, 0x00000807bf0a1f80}; + __m128i_result = (__m128i){0x0005847b00000000, 0x0005840100000005}; + __m128i_out = __lsx_vsrlr_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffc001fffffffff, 0x0000000000000001}; + __m128i_result = (__m128i){0x0010000200020002, 0xffffffffffff8000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffff0ffe04000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000200010, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0982e2daf234ed87, 0xf51cf8dad6040188}; + v2u64_op1 = (v2u64){0xffffffffd6040188, 0xfffffffff51cf8da}; + __m128i_result = (__m128i){0x000000020f2300ee, 0x00020002000d0000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfeca2eb9931, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x00d3007c014e00bd, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x06e1000e00030005, 0x0000000200020002}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000158, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + v2u64_op1 = (v2u64){0x309d2f342a5d2b34, 0x00250023001c001d}; + __m128i_result = (__m128i){0x0000075c00000cf0, 0x00060eb000000006}; + __m128i_out = __lsx_vsrlr_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_result = (__m128i){0x7f8000007f800000, 0x0000000100000001}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x0040000000400000, 0x0040000000400000}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + __m128i_result = (__m128i){0x0000000200000100, 0xffffffff00000002}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0xefd32176ffe100f7, 0xffe080f6efc100f7}; + __m128i_result = (__m128i){0x0000040000000000, 0x0000040000000200}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xa352bfac9269e0aa, 0xd70b30c96ea9f4e8}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0014ffe4ff76ffc4, 0x00000001fffeff98}; + v2u64_op1 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x0000000000000010, 0x0000000000000010}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0700f8ff0700f8ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0700f8ff0700f8ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3bc000003a800000, 0x3a8000003a800000}; + v2u64_op1 = (v2u64){0x0000090a00000998, 0x0000f50000000900}; + __m128i_result = (__m128i){0x000ef0000000003b, 0x3a8000003a800000}; + __m128i_out = __lsx_vsrlr_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x43d8969cc4afbf2d, 0x43e092728266beba}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007f8000007f80, 0x00007f8000007f80}; + v2u64_op1 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + __m128i_result = (__m128i){0x00000000000003fc, 0x00000000000003fc}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0020808100000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff208fffffa02, 0xffffe218ffffea10}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffff208fffffa02, 0xffffe218ffffea10}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffe000ffdf, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000200000002000}; + __m128i_result = (__m128i){0xffffffffe000ffdf, 0xffffffffffffffff}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffdfe0200000002, 0x00000001fffdfe01}; + __m128i_result = (__m128i){0x4000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vsrlr_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlr.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.c new file mode 100644 index 0000000000..eb8d45c323 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.c @@ -0,0 +1,220 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0029ff96005cff88, 0x001800390049ffaa}; + __m128i_result = (__m128i){0x0029ff96005cff88, 0x001800390049ffaa}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200020002, 0x0002000200020002}; + __m128i_result = (__m128i){0x0002000200020002, 0x0002000200020002}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003ddc5dac, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001030103, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + __m128i_result = (__m128i){0x0000080103040000, 0x0000080801030000}; + __m128i_out = __lsx_vsrlri_b((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0200020002000200, 0x0200020002000200}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00060001fffe8003, 0x0010001000030000}; + __m128i_result = (__m128i){0x0000000000200010, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000078c00000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000078c00000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000040004000, 0x4000400000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000800000008}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03c0038000000380, 0x03c0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808000000035, 0x0000000000000000}; + __m128i_result = (__m128i){0x0002000200000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x8000800080008000, 0x8000800080008000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_h((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x0005252800052528, 0x0005252800052528}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000013fa0, 0x2000200000013fa0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000001000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_result = (__m128i){0x00000dc300003ffb, 0x00000dc300003ffb}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + __m128i_result = (__m128i){0x00018d8e00018d8e, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x045340a628404044, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + __m128i_result = (__m128i){0x002584710016cc56, 0x0021b761002c593c}; + __m128i_out = __lsx_vsrlri_w((__m128)v2u64_op0, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffc001fffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x001fff8004000000, 0x0000000000200000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc605c000aedd0000, 0xa2a2a2a3a2a2a2a3}; + __m128i_result = (__m128i){0x0000000006302e00, 0x0000000005151515}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_result = (__m128i){0x0000000020000000, 0x0000000020000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x23); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fc03fc000000004, 0x7f801fe000000000}; + __m128i_result = (__m128i){0x00000001fe01fe00, 0x00000003fc00ff00}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_result = (__m128i){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + __m128i_out = __lsx_vsrlri_d((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlri.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.c new file mode 100644 index 0000000000..e74284a3a6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.c @@ -0,0 +1,116 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001ffff0001ffff, 0x0001ffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000003fc, 0x00000000000003fc}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101030101, 0x0101010101030101}; + v2u64_op1 = (v2u64){0x00000000fffa0000, 0x00000000fffa0000}; + __m128i_result = (__m128i){0x0101000101010001, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcbc2723a4f12a5f8, 0x002affd600000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffd60001723aa5f8, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x467f6080467d607f, 0xffffe000ffffe000}; + v2u64_op1 = (v2u64){0x8080808080808081, 0x0000000000000000}; + __m128i_result = (__m128i){0xe000e0006080b040, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff80ffffffff, 0xff80ffffffffff80}; + v2u64_op1 = (v2u64){0x17483c07141b5971, 0x6a5d5b056f2f4978}; + __m128i_result = (__m128i){0x0800010001ff8000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff01ff01ac465ca1, 0xff01ff01ac025c87}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000efffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffe000ffff1fff, 0x0000040400000383}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000383ffff1fff, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.c new file mode 100644 index 0000000000..566fc6940f --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.c @@ -0,0 +1,464 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x000400c600700153, 0x000c0002000c0002}; + v2u64_op1 = (v2u64){0x000400c600700153, 0x000c0002000c0002}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fdfd0404, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x3fffffff3fffffff, 0x3fffffff3fffffff}; + __m128i_result = (__m128i){0x8000800080008000, 0x000000000000fc08}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3f7477f8ff4e2152, 0xf58df7841423142a}; + __m128i_result = (__m128i){0x3d3e0505101e4008, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000adf0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001e00, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0040000000400040, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000020002020}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x1010101010101010, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0xffffffe5c8000000}; + v2u64_op1 = (v2u64){0x99d1ffff0101ff01, 0x91f80badc162a0c4}; + __m128i_result = (__m128i){0x905d0b06cf0008f8, 0x00ff400000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000418200000008e, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000002100047, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff40ff83, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x1010101010101010}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000002408beb26c8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000706e, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000070, 0x0000000000028c27}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000101080001010, 0x80000b0b80000b0b}; + v2u64_op1 = (v2u64){0xffffefefffffeff0, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000fe00fe, 0x0061006100020002}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000078087f08, 0x0000000078087f08}; + __m128i_result = (__m128i){0x0000e0fc0000e0fc, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001e0000001e, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000f08, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x2020202020202020, 0x0000000000000002}; + __m128i_out = __lsx_vsrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0000d688ffffbd95, 0xffff8969ffffd7e2}; + __m128i_result = (__m128i){0xf12dfafc1ad1f7b3, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000001515151500, 0x0000001515151500}; + __m128i_result = (__m128i){0x0001515000015150, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffff7fff}; + v2u64_op1 = (v2u64){0xe2bb5ff00e20aceb, 0xe2bb5ff00e20aceb}; + __m128i_result = (__m128i){0x00e3000e00e3000e, 0x0100010000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1010101010101010, 0x1010101010101010}; + __m128i_result = (__m128i){0x8081808180818081, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808102, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000001010102}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03fc03fc03fc03fc, 0x001000100010000b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x04000400ff01ff01}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x1204900f62f72565}; + __m128i_result = (__m128i){0x4901725600000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000400000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000040804080}; + __m128i_result = (__m128i){0x0000020100000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636362, 0x6363636363636362}; + v2u64_op1 = (v2u64){0x6363636363636362, 0x6363636363636362}; + __m128i_result = (__m128i){0x0032003200320032, 0x0032003200320032}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ffdf87f0b0c7f7f, 0xffffffff01010102}; + v2u64_op1 = (v2u64){0x363953e42b56432e, 0xf6b3eb63f6b3f6b3}; + __m128i_result = (__m128i){0x00f700f70036002b, 0x010000010080000b}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000003030103, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000003030103, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000006060, 0x0000000000006060}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff00ffffff, 0x000000ff00ff0000}; + v2u64_op1 = (v2u64){0x0000828282828282, 0x8282828282828282}; + __m128i_result = (__m128i){0x0008000800000008, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41afddcb1c000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe82f7c27bb0778af, 0xd09e1bd99a2c6eb1}; + __m128i_result = (__m128i){0x000d000a000f000c, 0x0000000000040002}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffafff0fff9ff01, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0000000200000002}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000d800cff8}; + __m128i_out = __lsx_vsrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000fffe, 0x000000010000007f}; + __m128i_result = (__m128i){0x0800000400000800, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfc0203fccbedbba7, 0x2bd5d429e34a1efb}; + v2u64_op1 = (v2u64){0x89fed7c07fdf5d00, 0xc9f66947f077afd0}; + __m128i_result = (__m128i){0xa3f83bd8e03fefaf, 0x14f1a50ffe65f6de}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000010600000106, 0x6ed694e00e0355db}; + __m128i_result = (__m128i){0xe00e035606000001, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbb9013bd049bc9ec, 0xe739e7ade77ae725}; + v2u64_op1 = (v2u64){0x56aca41400000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000041400000, 0x7ade77ae3bd049bd}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0080808080c04040, 0x0020202020202020}; + v2u64_op1 = (v2u64){0x0101010001808080, 0x0101010101010101}; + __m128i_result = (__m128i){0x0001010100010101, 0x0000202000008081}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000000000000, 0xfff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00fff00000001000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001ed68, 0x0000fff800000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x1ff6a09e667f3bd8}; + __m128i_result = (__m128i){0x999fcef600000000, 0x0000000000007b5a}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3802f4fd025800f7, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x91ff40fffff8ff50, 0xc8ff0bffff00ffae}; + __m128i_result = (__m128i){0x0000192000001240, 0x0000200000000700}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x33); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd9743eb5fb4deb3a, 0xbb7743ca4c78461f}; + v2u64_op1 = (v2u64){0x1b43e8a30a570a63, 0x22445e1ad9c3e4f0}; + __m128i_result = (__m128i){0x45e1ad9c3e8a30a5, 0x743ca4c843eb5fb5}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000300000003, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x6c72a7c856ac865c, 0xed67d6c7ed67ed67}; + __m128i_result = (__m128i){0x0000000700000003, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x33); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00f7000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000005150, 0x0000000000005150}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000000f7000}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x24); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffdff0, 0x00000000ffff8000}; + v2u64_op1 = (v2u64){0x0144329880000000, 0x8000000080000000}; + __m128i_result = (__m128i){0x004000004c400000, 0x007fffc0007ffff0}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000300000ff1, 0x00000002000007d7}; + __m128i_result = (__m128i){0x000007d700000ff1, 0x0000000000000001}; + __m128i_out = __lsx_vsrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000002000000020, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000200000002000, 0x0000200000002000}; + __m128i_result = (__m128i){0x0000010000000100, 0x0000000000000001}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000800080008000, 0x000000000000fc08}; + v2u64_op1 = (v2u64){0x0000000000000001, 0xffffffffba420000}; + __m128i_result = (__m128i){0xfdd2100000000000, 0x000007e044000400}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3f3f3f0e00000000, 0x0000081e003f3f3f}; + v2u64_op1 = (v2u64){0x3f3f3f0e00000000, 0x0000081e003f3f3f}; + __m128i_result = (__m128i){0x00000103c007e7e8, 0x00000103c007e7e8}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x43); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0202ff3f02022212, 0x0202022302023212}; + v2u64_op1 = (v2u64){0x0000ff3f00002010, 0x0000002100003010}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x79); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000006ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0037f80000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x69); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff0ffc0001, 0xffffffff0ffd0ffd}; + v2u64_op1 = (v2u64){0xd9743eb5fb4deb3a, 0xbb7743ca4c78461f}; + __m128i_result = (__m128i){0x002eddd0f2931e12, 0x003fffffffc3ff44}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3f3f3f7fbf3fffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x47); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffa, 0xffffffe8ffff28fc}; + v2u64_op1 = (v2u64){0x00000006ffff81e1, 0x00007fff0000803e}; + __m128i_result = (__m128i){0x000007fff0000804, 0x0ffffffe8ffff290}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x44); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ff0bff76}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x75); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fc000007fc00000, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0xffffff00ffffffff, 0xffffff00ffffffff}; + __m128i_result = (__m128i){0x0000000000001000, 0x0000000000000ff8}; + __m128i_out = __lsx_vsrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x74); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsrlrni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssran.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssran.c new file mode 100644 index 0000000000..886c19b281 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssran.c @@ -0,0 +1,266 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffcff, 0xfffffefffffffeff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f80000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x800080007f008000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x00010000fffffffc}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x00010000fffffffc}; + __m128i_result = (__m128i){0x0000ffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f4f4f4f4f4f0000, 0x4f4f4f4f4f4f0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f7f7f007f7f7f00, 0x0000000000000000}; + __m128i_out = __lsx_vssran_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100000000, 0x0000000001000001}; + v2u64_op1 = (v2u64){0xffffffc000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x000000007fff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x02b504f305a5c091, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x02b504f305a5c091, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000005602d2, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0040007fff800000, 0x0060e050007f0160}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000006f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000006f00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000810000, 0x00000000ff801c9e}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0x40eff02383e383e4}; + __m128i_result = (__m128i){0x0000800000007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0x00000c0c00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6adeb5dfcb000000, 0x00000a74aa8a55ab}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0a7480007fff8000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128i_result = (__m128i){0x8000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffd000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fe00fe00fe00fe, 0x0000000000fe00fe}; + v2u64_op1 = (v2u64){0x00007e1600007d98, 0x0000f50000007500}; + __m128i_result = (__m128i){0x00fe00fe7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssran_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x003f000000000000, 0x003f00000000003f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ffffffffff, 0x00ffffff00ff00ff}; + v2u64_op1 = (v2u64){0x0048137ef886fae0, 0x1268f057137a0267}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4040404040404040, 0x4040404040404040}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0fff0fff0fff0fff, 0x0fff0fff0fff0fff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000010}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000074f20000d272, 0x0000695d00009b8f}; + v2u64_op1 = (v2u64){0x00001f5400000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff000000ff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff8000000000000, 0xfffb00fdfdf7ffff}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0x00000000003f80b0}; + v2u64_op1 = (v2u64){0xa1e7b475d925730f, 0xb327b9363c992b2e}; + __m128i_result = (__m128i){0x000000000001ff00, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0141010101410101, 0x0141010101410101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0xeef8227b4f8017b1, 0x75b043c4d17db125}; + __m128i_result = (__m128i){0x027c027c000027c0, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffc7639d96, 0xffffffff994db09c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6eee282828282829, 0x31b1777777777776}; + v2u64_op1 = (v2u64){0x000000006362ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssran_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssran.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssran.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssran.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.c new file mode 100644 index 0000000000..ee7e7fa517 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.c @@ -0,0 +1,458 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00001802041b0013, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000007f7f02, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffffffc, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x00000000ffffffff}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v2u64_op1 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + __m128i_result = (__m128i){0x8080000180800100, 0x7f0000007f000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fefefe6a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000fbf9}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x007b01ec007b3a9e, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff39ff37ff35ff33, 0x21011f3f193d173b}; + v2u64_op1 = (v2u64){0x000000000000e41b, 0x0000000015d926c7}; + __m128i_result = (__m128i){0x00000000000000ff, 0x00000000ffffffff}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000007f7f7f7f}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffe0, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000fff0, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0xffc0ff80ff800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffff0000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e3faa293c, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000f3040705}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x084d1a0907151a3d}; + v2u64_op1 = (v2u64){0x000007d07fffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000010000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000007fff}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000004000000040}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff1aff6d48ce567f, 0xff1afffefec0ec85}; + v2u64_op1 = (v2u64){0xffff80c1ffffe8de, 0xffff80c400000148}; + __m128i_result = (__m128i){0xffff0000ffffffff, 0xffe3ffd8ffe30919}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f0000fd7f0000fd, 0x7f7f7f7f00107f04}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000fe00fd, 0xc39fffff007fffff}; + __m128i_result = (__m128i){0xfffff0e700000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001ffffff29, 0x00000000000000c0}; + __m128i_result = (__m128i){0x000000183fffffe5, 0x0000000020000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c0c0c0c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0014000100000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00005e96ffffb402, 0x0000000000005e94}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x00fe000100cf005f}; + __m128i_result = (__m128i){0x0001fc0000fffeff, 0x00000000000000bd}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0002000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000ffff00000000}; + __m128i_result = (__m128i){0x0007fff800000000, 0x0010000000000000}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9611c3985b3159f5, 0x86dd8341b164f12b}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xff86dd83ff9611c3}; + __m128i_out = __lsx_vssrani_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff7fffffffffffff, 0xff7fffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfffffffffff7ffff}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x64); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x47); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fff7fc01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc72df14afbfafdf9, 0x82c539ffffffffff}; + __m128i_result = (__m128i){0x8000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x23); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffff0000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a000a000a000a00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff46, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff7777ffff7777, 0x0000777777777777}; + __m128i_result = (__m128i){0x000003bbbbbbbbbb, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x45); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + v2u64_op1 = (v2u64){0x377b810912c0e000, 0x98147a504d145000}; + __m128i_result = (__m128i){0x8000000000000000, 0x8000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x14eb6a002a406a00, 0x0000000014eb54ab}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0xe0001fffffffffff}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0x8000000080000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff80000000}; + __m128i_out = __lsx_vssrani_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x60); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000301de01fe01fe, 0x00cf01fe01fe01fe}; + v2u64_op1 = (v2u64){0xfffc002000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0x0f00000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000080000000000, 0x0000080000000000}; + __m128i_result = (__m128i){0x00ff000000ff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000080000068, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000040033, 0x0000000000038003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff913bb9951901, 0x00680486ffffffda}; + v2u64_op1 = (v2u64){0x387c7e0a133f2000, 0x67157b5100005000}; + __m128i_result = (__m128i){0x0c0f000a070f0204, 0x0000000000000003}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3b2c8aefd44be966, 0x2e2b34ca59fa4c88}; + __m128i_result = (__m128i){0x2e34594c3b000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffff000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0xffffff0000010000, 0xffffffff00000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7f007f007f007f00}; + v2u64_op1 = (v2u64){0x000000030000003f, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0xffffffff0003003f, 0xffffffff00000000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x17483c07141b5971, 0x6a5d5b056f2f4978}; + __m128i_result = (__m128i){0xd4bade5e2e902836, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010001000100010, 0x0010001000000010}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x1000000010001000}; + __m128i_out = __lsx_vssrani_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0004007c00fc0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00003f80000000ff, 0x00000000000000ff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffee00000004, 0xffffffff00000001}; + v2u64_op1 = (v2u64){0x3a3a00003a3a0000, 0x3a3a3a3b3a3a3a3a}; + __m128i_result = (__m128i){0x0000003a0000003a, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + v2u64_op1 = (v2u64){0x4040000041410101, 0x1010111105050000}; + __m128i_result = (__m128i){0x0000808000020200, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1313131313131313, 0x1313131313131313}; + v2u64_op1 = (v2u64){0xd73691661e5b68b4, 0x34947b4b11684f92}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000f8a40000f310, 0xfffaf1500000fffa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000000003e2}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe31c86e90cda86f7, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000000000e3}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00ff00ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000000007f8}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000001fff9fffa, 0x00000001fff9fff9}; + __m128i_result = (__m128i){0x007ffe7ffe400000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc485edbcc0000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000010000, 0x000000000000c485}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00001fff00001fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000007ffc000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x00fe000100cf005f}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000fffb, 0x00000002fffffffb}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000bffffffe}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x42); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000158, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x79); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ff800000, 0xfff8ffa2fffdffb0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrani_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x50); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrani.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.c new file mode 100644 index 0000000000..66fd4dffef --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.c @@ -0,0 +1,452 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000002010, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x0000000000000004}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffff0000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff00, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc2fc0000c3040000, 0xc2fc0000c3040000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000005, 0xffc0ff80ff800000}; + __m128i_result = (__m128i){0xffffffffffffff00, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x000000ff0000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x837cd5db43fc55d4, 0x0403cfcf01c1595e}; + v2u64_op1 = (v2u64){0x0404038383838404, 0x0404038383838404}; + __m128i_result = (__m128i){0x7fff7fff80007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ffffff000000ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe8c7b756d76aa478, 0xc1bdceee242070db}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000000000f0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0bd80bd80bd80000, 0x0bd80bd80bdfffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000f00f, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020207f7f, 0x2020202020202020}; + v2u64_op1 = (v2u64){0x0000000000007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff7fff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2020202020207fff, 0x2020202020202020}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fea8ff44, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fea8ff44, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000008000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0000000000000014}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001400000014, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000052520000adad, 0x0000adad0000adad}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00008e5680008685, 0x0000000000008686}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00007fff7fff8000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc7f100004000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000c7f14000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2711bad1e8e309ed, 0xffffffffd24271c4}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff00000000}; + v2u64_op1 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffeb827ffffffff, 0xffcb410000000000}; + v2u64_op1 = (v2u64){0x0000000800000008, 0x0000000800000008}; + __m128i_result = (__m128i){0x8000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000035ed0001e000, 0x0000e36400015253}; + v2u64_op1 = (v2u64){0x000035ed0001e000, 0x0000e36400015253}; + __m128i_result = (__m128i){0x1c6c80007fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000500000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080808080808080, 0x8080808080808080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x002584710016cc56, 0x0021b761002c593c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x004001be00dc008e, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2e1135681fa8d951, 0x1f3f06d4fcba4e98}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + __m128i_result = (__m128i){0x000007d07fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcf00000000000000, 0xbf8000000000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xdffdbffeba6f5543, 0xfefd7f7f7f7f7f7e}; + v2u64_op1 = (v2u64){0x0080000000000000, 0x0080000000000000}; + __m128i_result = (__m128i){0x00ffffff000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff00000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000003fffff00, 0x000000003fffff00}; + v2u64_op1 = (v2u64){0x3f8000003f800000, 0x3f8000003f800000}; + __m128i_result = (__m128i){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000007ae567a3e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000700ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x006f0efe258ca851, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffff00010000fff, 0xfffff00010000fff}; + __m128i_result = (__m128i){0x0000000000ffff00, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f417f417f027e03, 0x000000000000003f}; + v2u64_op1 = (v2u64){0x87e3285243051cf3, 0x9780697084f07dd7}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0008000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0008000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0080006b00000000, 0x0080008000800080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7efefefe82010201, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ff0000ff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x34b8122ef4054bb3, 0xd6a09e662ab46b31}; + v2u64_op1 = (v2u64){0x3513f2e3a1774d2c, 0x9c9c9c9b509be72f}; + __m128i_result = (__m128i){0x00000501ffff0005, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4400000000000000, 0x4500000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xff000000ff000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xe8c7b756d76aa478, 0xc1bdceee242070db}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111311111110000, 0x1111311111114111}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + v2u64_op1 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d197a98f2e, 0x14ccc631eb3339ce}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000010000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff0000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000060000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000060000000000}; + __m128i_result = (__m128i){0x0600000100000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff010300ff0103, 0x0000000000000002}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000002ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff800000ff800000, 0xff800000ff800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000200000001, 0x0000000200000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00020000ffff0001, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + v2u64_op1 = (v2u64){0x545cab1d81a83bea, 0x13f9c5b60028a415}; + __m128i_result = (__m128i){0xffffffff0015172b, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0808080800000000, 0x00000b4a00008808}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000028404044, 0x00000000045340a6}; + v2u64_op1 = (v2u64){0x0000102020204000, 0x00000fffffffe000}; + __m128i_result = (__m128i){0x045340a628404044, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8a8a8a8a8a8a8a8a, 0x8a8a8a8a8a8a8a8a}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.c new file mode 100644 index 0000000000..2f4bd146cb --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.c @@ -0,0 +1,572 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f8000007f800000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x000000020f2300ee, 0x00020002000d0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0400040004000400}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4026f4ffbc175bff, 0x2ea268972ea2966a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x5d7f5d807fea807f}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80808080806b000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000c0c0c000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xff86dd83ff9611c3}; + v2u64_op1 = (v2u64){0x000000013ecaadf2, 0x0000000035697d4e}; + __m128i_result = (__m128i){0x00007f7f00007f80, 0xe280e67f00000000}; + __m128i_out = __lsx_vssrarni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0101010100000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000001}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000000000f0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000000000f0}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffe0001fffe0001, 0xfffe0001fffe0001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000003}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc0fffff000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffe00000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010001000000010, 0x0000001000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000080000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100080000, 0x0000000100000008}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002008300500088, 0x0000000000000008}; + v2u64_op1 = (v2u64){0x0000000000000088, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000008000000080, 0x0000008000000080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc1fc0d3bf55c4000, 0xda4643d5301c4000}; + v2u64_op1 = (v2u64){0x01010000fefe0101, 0x7505853d654185f5}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x8000000080000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000010000002b, 0x0000000000000073}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000400000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000065a0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000200000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x9941d155f43a9d08, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x29); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x000100fe000100fe}; + v2u64_op1 = (v2u64){0x0000000000002000, 0x0000000000002000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000100000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000200000002, 0x0400400204004002}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf9796558e39953fd, 0xd3259a2984048c23}; + __m128i_result = (__m128i){0x8000000080000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x37b951002d81a921, 0x0000100000001000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000071e48cca, 0x0000000075dbe982}; + v2u64_op1 = (v2u64){0x0001000000000000, 0x0001000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0ebb7d300e3c9199}; + __m128i_out = __lsx_vssrarni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x79); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x01ff01ff01ff01ff, 0x01ff01ff01ff01ff}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x59); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0029ff96005cff88, 0x001800390049ffaa}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0bef0b880bd80bd8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0bd80bd80bd80000, 0x0bd80bd80bdfffff}; + __m128i_result = (__m128i){0x000000017b017b01, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x51); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x004d004d004d004d, 0x004d004d004d004d}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x06d9090909090909, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x48); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6d339b4f3b439885, 0x0039d21e3229d4e8}; + v2u64_op1 = (v2u64){0x0000000d00000000, 0xfffffff000000000}; + __m128i_result = (__m128i){0xffc0000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrarni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0020002000200020, 0x0020002000200020}; + v2u64_op1 = (v2u64){0x0fa96b88d9944d42, 0xffffffff60090958}; + __m128i_result = (__m128i){0x00001802041b0013, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0002000000020000, 0x0002000000020000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xf0800320fff1fa20}; + __m128i_result = (__m128i){0x0032000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xea38e0f75f6e56d1, 0x0d1202e19235e2bc}; + v2u64_op1 = (v2u64){0xffffc000ffffc005, 0xffffe500ffffc085}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff00000000ffff}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000004442403e4, 0x0000000005452505}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x03fc03fc03fc03fc}; + __m128i_result = (__m128i){0x0808080800000000, 0x00000b4a00008808}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff0fffffff09515, 0xfff0fffffff00001}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0x000000ff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000bfffffff, 0x000003000000d612}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0x0000000500000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000020000}; + __m128i_result = (__m128i){0x0000010000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c6c6c6c6, 0x00000000c6c6c6c6}; + v2u64_op1 = (v2u64){0x0014ffe4ff76ffc4, 0x00000001fffeff98}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000016, 0x0000000000000011}; + v2u64_op1 = (v2u64){0x0000000000000016, 0x0000000000000011}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020fbf04581ec0, 0x00060fbf02596848}; + v2u64_op1 = (v2u64){0x01010287010146a1, 0x010169d9010169d9}; + __m128i_result = (__m128i){0x0002000200000001, 0x0000000200000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfff00000ffff0000, 0xff01ffffe41f0000}; + v2u64_op1 = (v2u64){0x0000000100000155, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000002b, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0200020002000200, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000f, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x03c0038000000380, 0x03c0000000000000}; + __m128i_result = (__m128i){0x0f0000000f000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111113111111121, 0x1111113111111141}; + v2u64_op1 = (v2u64){0x0032000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffff0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100000000, 0x0000000100000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffe1fffffff, 0xfffffffefffffffe}; + v2u64_op1 = (v2u64){0x7fffffff7ffffffb, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000080008, 0x0000000000000002}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7750af4954c29940, 0x1ab6021f72496458}; + v2u64_op1 = (v2u64){0x7750af4954c29940, 0x1ab6021f72496458}; + __m128i_result = (__m128i){0x6ad8ffffffffffff, 0x6ad8ffffffffffff}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x1200091212121212, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0002000200020002}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00006f9100007337, 0x0000930400008a10}; + v2u64_op1 = (v2u64){0x00a975be00accf03, 0x00c2758000bccf42}; + __m128i_result = (__m128i){0x309d2f342a5d2b34, 0x00250023001c001d}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfee1f6f18800ff7f, 0xff00e400ff00e400}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff8000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000001}; + __m128i_out = __lsx_vssrarni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8b8a8a898a8a8909, 0x0c0c8b8a8b8b0b0a}; + v2u64_op1 = (v2u64){0x1615141315141312, 0x1817161517161514}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000000}; + __m128i_out = __lsx_vssrarni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xefd32176ffe100f7, 0xffe080f6efc100f7}; + v2u64_op1 = (v2u64){0xefd32176ffe100f7, 0xffe080f6efc100f7}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01d8000000000000, 0x017001a002c80260}; + v2u64_op1 = (v2u64){0x2e34594c3b000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrarni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x72); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x30); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f417f417f027e03, 0x000000000000003f}; + v2u64_op1 = (v2u64){0x5237c1bac9eadf55, 0xe93d0bd19ff0c170}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x60); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x58); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x7ff0000000000000, 0xffff0000ffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x71); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrarni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrarni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.c new file mode 100644 index 0000000000..94c282fa5d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.c @@ -0,0 +1,368 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffe5, 0xffffffffffffffe5}; + __m128i_result = (__m128i){0x0101017f0101017f, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf10cf508f904fd01, 0xf10cf508f904fd01}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c9c9c9c9c9c9c9c, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000000c6c6c6c6, 0x00000000c6c6c6c6}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00007fff7fff8000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000007f7f7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fffc00000000, 0x00003ff000000000}; + v2u64_op1 = (v2u64){0x0000ffff0000fffe, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x161d0c373c200827, 0x65b780a2ae3bf8ca}; + __m128i_result = (__m128i){0x00000000000001ff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf8f8f008f8f8f800, 0xf8f8e018f8f8e810}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000c7fff000c, 0x0000000c0000bd49}; + v2u64_op1 = (v2u64){0x000000016fff9d3d, 0x00000000f0009d3c}; + __m128i_result = (__m128i){0x000c000000060003, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003dbe88077c78c1, 0x0000000000003a24}; + v2u64_op1 = (v2u64){0x00000000fffe0001, 0x0000000000000000}; + __m128i_result = (__m128i){0x00003a247fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffe000ffdf, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000001b, 0x000000000000001b}; + __m128i_result = (__m128i){0x000000007fff0018, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0000000c000c000, 0x00c0c000c0000000}; + v2u64_op1 = (v2u64){0xc0000000c000c000, 0x00c0c000c0000000}; + __m128i_result = (__m128i){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001e001e001e001e, 0x001e001e001e001e}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + v2u64_op1 = (v2u64){0x59f7fd8759f7fd87, 0x0000001700000017}; + __m128i_result = (__m128i){0x000000007fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000001afffffff7}; + v2u64_op1 = (v2u64){0x00000100fffffefd, 0x0000750500006541}; + __m128i_result = (__m128i){0x7fffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00007fff00007fff}; + v2u64_op1 = (v2u64){0x00000000ffffff00, 0x0000000000000f00}; + __m128i_result = (__m128i){0x7fffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffbffda, 0x0080000700000014}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + v2u64_op1 = (v2u64){0x000000ac00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffc0000000000000, 0x7fffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff00000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6adeb5dfcb000000, 0x00000a74aa8a55ab}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080000080800000, 0x8080808000008080}; + __m128i_result = (__m128i){0x00000000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x5ff6a0a40e9da42a, 0x5ff6a0a40ea8f47c}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80000000fff6fc00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8080000180800100, 0x7f0000007f000000}; + __m128i_result = (__m128i){0x00000000ff00ffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffefff6fff80002, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00005b5a00005b5a, 0x00005a5a00005a5a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0101010101010101, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + v2u64_op1 = (v2u64){0x00000000ffefffef, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000fff00000e36, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x000000000fff0e36, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xcda585aebbb2836a, 0x3e25c8317394dae6}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7ff8, 0x000000003fbf3fbf}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x3fbf3fbf00007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffefffefffefffef, 0xffefffefffefffef}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x64616462b71d06c2, 0x64616462b76106dc}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf589caff5605f2fa, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x7f8000007f800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrln_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrln.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.c new file mode 100644 index 0000000000..609f2de529 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.c @@ -0,0 +1,452 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000001fe01, 0x000000000001fe01}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0f0f0f0f00000000, 0x0000000f0000000f}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001000000, 0x0000080007f80800}; + __m128i_result = (__m128i){0x00047fff00007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x342caf9bffff1fff, 0x0c03e17edd781b11}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000040000000400}; + __m128i_result = (__m128i){0x0000000000000000, 0x0c037fff342c7fff}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + __m128i_result = (__m128i){0x0a000a000a000a00, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3918371635143312, 0x01203f1e3d1c3b1a}; + v2u64_op1 = (v2u64){0x1918171615141312, 0x21201f1e1d1c1b1a}; + __m128i_result = (__m128i){0x7fff7fff7fff7fff, 0x480f7fff7fff7fff}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000007f41, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000002002}; + v2u64_op1 = (v2u64){0x2221201f1e1d1c1b, 0x2a29282726252423}; + __m128i_result = (__m128i){0x00a8009800880078, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x80006b0080808080, 0x8000807f00000000}; + __m128i_result = (__m128i){0x7fff00007fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xe907b754d7eaa478, 0xc1bdceee242070dc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vssrlni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff80000000}; + __m128i_result = (__m128i){0x0001ffff00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffff100fffc}; + __m128i_result = (__m128i){0x7fffffff00000000, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000800080}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffff7, 0xf2f2e5e5e5e5e5dc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0101010101010101, 0x0008000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + __m128i_result = (__m128i){0x0000083b00000000, 0x0000000100000020}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x33); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000006302e00, 0x0000000005151515}; + v2u64_op1 = (v2u64){0x7f417f417f027e03, 0x000000000000003f}; + __m128i_result = (__m128i){0x0000000000001fd0, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x32); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03fffffffc010102, 0x03ff0101fc010102}; + v2u64_op1 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000053a4f452, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x000000000000053a}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8d8d8d8d8d8cc6c6, 0x000000000000c6c7}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000008}; + __m128i_out = __lsx_vssrlni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x01fc020000fe0100, 0x0000ff0000ff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000003fc0003}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x56); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000080000000, 0xfffffffffffff800}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x001fffffffffffff}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000003, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffbfffffffbf, 0xffffffbfffffffbf}; + __m128i_result = (__m128i){0x00000001ffffff7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffcfffdfffc, 0xfffdfffcfffdfffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00004e420000c26a, 0x0000b3a6000067da}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xc8847ef6ed3f2000, 0x67eb85afb2ebb000}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x38); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffc00300000220, 0x00000203000010d0}; + v2u64_op1 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000090900000998, 0x0000f50000000900}; + v2u64_op1 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x7fffffffffffffff}; + __m128i_out = __lsx_vssrlni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x20); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffffffff100fffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xfffffffff100fffc}; + __m128i_result = (__m128i){0xffffffff00000000, 0xffffffff00000000}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000020, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x685670d27e00682a, 0x14ccc6320076a4d2}; + v2u64_op1 = (v2u64){0x685670d27e00682a, 0x14ccc6320076a4d2}; + __m128i_result = (__m128i){0x0001000100000000, 0x0001000100000000}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000001010101}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff010300ff0103, 0x0000000000000002}; + v2u64_op1 = (v2u64){0x555500adfffc5cab, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0101010100000100, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000007070707}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000100, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000080}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000001000010f8, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0xfff8ffa2fffdffb0}; + __m128i_result = (__m128i){0x0f0f0f0f00000f00, 0x0000000000000001}; + __m128i_out = __lsx_vssrlni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff870068fff5ffb3, 0x004e005500060031}; + v2u64_op1 = (v2u64){0xff870068fff5ffb3, 0x004e005500060031}; + __m128i_result = (__m128i){0x04e00060ffffffff, 0x04e00060ffffffff}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000202fe02, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000101}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03aa558ec8546eb6, 0x000aa822a8228222}; + v2u64_op1 = (v2u64){0x001f2f2cab1c732a, 0x001a64b345308091}; + __m128i_result = (__m128i){0x034cffff03e5ffff, 0x0155ffff754affff}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52527d7d52527d7d, 0x52527d7d52527d7d}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080000080800000, 0x8080808000008080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001010100010100}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000fff80000, 0x00000000fff8fff8}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x37); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000003fc0, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x22); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1ff85ffe2ae5d973, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x403be000ffffe000}; + __m128i_result = (__m128i){0x00201df000000000, 0x00000000000ffc2f}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x29); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbffffff0ffffc00f, 0xc000000fc0003fff}; + v2u64_op1 = (v2u64){0xffffffc3ffff003e, 0x0000003f0000ffff}; + __m128i_result = (__m128i){0x0000000000ffffff, 0x00c0000000bfffff}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + v2u64_op1 = (v2u64){0x0003000300a10003, 0x000300037ff000ff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000017fda829, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x35); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00005dcbe7e830c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + __m128i_result = (__m128i){0x000000001fffff59, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x63); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000040, 0x0000000000000040}; + v2u64_op1 = (v2u64){0x0000000000000040, 0x0000000000000040}; + __m128i_result = (__m128i){0x0000000000002000, 0x0000000000002000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x39); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x808080010080007f, 0x800000810000807f}; + v2u64_op1 = (v2u64){0x808080010080007f, 0x800000810000807f}; + __m128i_result = (__m128i){0x0000000020000020, 0x0000000020000020}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x62); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0400400204004002}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000002002}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2221201f1e1d1c1b, 0x2a29282726252423}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x45); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7c7c000000007176, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000000}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00d5701794027113, 0x0002711350a27112}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.c new file mode 100644 index 0000000000..ada81b47e6 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.c @@ -0,0 +1,320 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffefffefffffffc, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000002020202, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000fbf9}; + v2u64_op1 = (v2u64){0x0000001000000010, 0x0000001000000010}; + __m128i_result = (__m128i){0x0000007f00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000004fc04f80, 0x000000004fc04f81}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00007f7f00007f7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000d46cdc13, 0x00000000dfa6e0c6}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffff80df00000000}; + __m128i_result = (__m128i){0x00007f7f00007f7f, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff7fffffff, 0x0000ffff3fbfffff}; + v2u64_op1 = (v2u64){0x3fbf3fbf00007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x007f7f7f01027f02, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000040a04000, 0x0000000040a04000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0012001200120012, 0x00123fff00120012}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00003fff00010000}; + __m128i_result = (__m128i){0x1200091212121212, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_b_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0002000200020002, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200001, 0x004200a000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff00007fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0100010000000000, 0x0100000001000100}; + v2u64_op1 = (v2u64){0xffffffffffff732a, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000ff0000, 0xffc1000000000000}; + v2u64_op1 = (v2u64){0x0000000000ff0000, 0xffc1000000000000}; + __m128i_result = (__m128i){0x7fff000000007fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000bd3d00000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfffff000fffff000, 0xfffff0000000ad3d}; + __m128i_result = (__m128i){0x000000007fff0000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x7f801fe000000000, 0x3f413f4100000000}; + __m128i_result = (__m128i){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x2e9028362e902836, 0x2e9028362e902836}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_h_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0002000000000007, 0x0006000000040000}; + v2u64_op1 = (v2u64){0xffffffffffff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0x33f5c2d7d975d7fe}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_w_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000003, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00040003ff4dffca, 0x00040003ff83ff84}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffbe6ed563, 0xfffffffffffffffe}; + v2u64_op1 = (v2u64){0x0080000000000000, 0x0080000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffe0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0a09080709080706, 0x0c0b0a090b0a0908}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0800010001ff8000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000024170000, 0x00000000084d12ce}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00d5701794027113, 0x0002711350a27112}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001fffe0001ffde, 0x0001fffe00014b41}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0002000100020002, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf001f0010101f002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000010000000000, 0x0000010000000000}; + v2u64_op1 = (v2u64){0x00000100000000fc, 0x00000100000000fc}; + __m128i_result = (__m128i){0x0100000001000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x4399d3221a29d3f2}; + v2u64_op1 = (v2u64){0xfdce8003090b0906, 0x0674c886fcba4e98}; + __m128i_result = (__m128i){0xffff001a00000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000010, 0x0000000000000010}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000001000000010, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000008, 0x0000000000000008}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000a000a000a000a, 0x000a000a000a000a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xfffffffffffffffe, 0xfffffffffffffffe}; + __m128i_result = (__m128i){0x0000000400000004, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + v2u64_op1 = (v2u64){0xfffffffffffffffc, 0xfffffffffffffffc}; + __m128i_result = (__m128i){0x0000001000000010, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrn_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrn.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.c new file mode 100644 index 0000000000..13d272ab5e --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.c @@ -0,0 +1,404 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x8080000080800000, 0x8080808000008080}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001fffff001fffff, 0x001fffff001fffff}; + v2u64_op1 = (v2u64){0x1918171615141312, 0x21201f1e1d1c1b1a}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x10ff10ff10ff10ff}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x5252525252525252, 0x5252525252525252}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffff0000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffff000000000000}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000f1384, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x00000000000004ff}; + __m128i_out = __lsx_vssrlrni_bu_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000040000}; + __m128i_result = (__m128i){0x0000080000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000d0000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000dffff000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000007ffff, 0x0000000000070007}; + __m128i_out = __lsx_vssrlrni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000800000000, 0x0000800c00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x52525252adadadad, 0x52525252adadadad}; + v2u64_op1 = (v2u64){0x800000007fffffff, 0x800000007fffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlrni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + v2u64_op1 = (v2u64){0xfcfcfcdcfcfcfcdc, 0xfcfcfcdcfcfcfcdc}; + __m128i_result = (__m128i){0x0010001000100010, 0x0010001000000010}; + __m128i_out = __lsx_vssrlrni_hu_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000000, 0x0000000080000000}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff7fff, 0x7fff7fff7fff7fff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffff0000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffff00000080}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x7fffffffffffffff}; + __m128i_result = (__m128i){0x0000080000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x34); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x29); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x061202bffb141c38, 0xffa6ff91fdd8ef77}; + v2u64_op1 = (v2u64){0x010101fe0101fe87, 0x0101010101010101}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000004000000002}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0xffc0ff80ff800000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vssrlrni_wu_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x56); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x41); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff0000ffff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x43); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffb7005f0070007c, 0x00000000ff81007c}; + v2u64_op1 = (v2u64){0x9a10144000400000, 0xffff80007e028401}; + __m128i_result = (__m128i){0x0000001ffff00010, 0x0000000000000020}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x5b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff0100ff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0707f8f803e8157e, 0x0607060700000807}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x31); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x21); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ffffffe00000000, 0x7ffffffe00000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000001f0000001f, 0x0000002000000020}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x4000000040000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x27); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_du_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x26); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0103010301020109, 0x0101010400100203}; + v2u64_op1 = (v2u64){0x0000007f00000004, 0x0000000110000001}; + __m128i_result = (__m128i){0x0000200000010000, 0x0202000402020202}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000400, 0x0000000000000400}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffd60001723aa5f8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x7f7f7f7f7f7f7f7f, 0x000000007f007f7f}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xc); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffc0800000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000008080600, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000034, 0x117d7f7b093d187f}; + v2u64_op1 = (v2u64){0xfe1bfe6c03824c60, 0xfe1bfefe00011ee1}; + __m128i_result = (__m128i){0x7f7f017f7f7f7f7f, 0x7f7f7f7f0000001a}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffb3c3ffff51ba, 0xffff3a81ffff89fd}; + __m128i_result = (__m128i){0x0802080408060803, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0xd); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003e0021009a009a, 0x0000000000760151}; + v2u64_op1 = (v2u64){0x0000003e2427c2ee, 0x00000000246d9755}; + __m128i_result = (__m128i){0x00007f7f00107f7f, 0x00001e5410082727}; + __m128i_out = __lsx_vssrlrni_b_h((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0001000100000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x7fff000000000000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000007f0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100000004, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001000000, 0x0000000000007f00}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000001f807b89, 0x03574e3b94f2ca31}; + v2u64_op1 = (v2u64){0x0505000005050505, 0x0000000005050000}; + __m128i_result = (__m128i){0x0000001400140014, 0x000d02540000007e}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00005555aaabfffe, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003fffffff000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000000ff, 0x00000000000000ab}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x18); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00ff000000ff0000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000007fff7fff, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x027c027c000027c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000004f804f80, 0x000000004f804f81}; + __m128i_result = (__m128i){0x0000001400000014, 0x0000000000010000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffff9cfebd, 0xffffffffff9cff05}; + v2u64_op1 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000002, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080636380806363, 0x808080e280808080}; + v2u64_op1 = (v2u64){0x8080636380806363, 0x808080e280808080}; + __m128i_result = (__m128i){0x0004000400040004, 0x0004000400040004}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000007fff7fff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc0808000c0808000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000003020302}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x16); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x4000400040004000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x12); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x10f8000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_h_w((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x3d); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0010000400020004, 0xffff0001ffff8002}; + v2u64_op1 = (v2u64){0xfffc0020ffffffff, 0x00000000ffff20ff}; + __m128i_result = (__m128i){0x0000000007ffe001, 0x07fff80000008000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xb4b8122ef4054bb3, 0x56a09e662ab46b31}; + __m128i_result = (__m128i){0x02b504f305a5c091, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x37); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000d000d000d000d, 0x000d000d000d000d}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000680000006800}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x25); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000002, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xf77edf9cffffffff, 0xff7ffffef77fffdd}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x003ec0fc0fbfe001, 0x003ef89df07f0000}; + v2u64_op1 = (v2u64){0xfff40408ece0e0de, 0x3ff800ff2fe6c00d}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xa); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffa500010003, 0x0000ff960001005b}; + v2u64_op1 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + __m128i_result = (__m128i){0x0020000000000000, 0x0000002000000020}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x2b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0x28); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0000ffff0000, 0xffff00ffffff00ff}; + v2u64_op1 = (v2u64){0x00ff000900ffff98, 0x00ff00ff00ff00ff}; + __m128i_result = (__m128i){0x7fffffff7fffffff, 0x7fffffff7fffffff}; + __m128i_out = __lsx_vssrlrni_w_d((__m128)v2u64_op0, (__m128)v2u64_op1, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x7c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x1748c4f9ed1a5870, 0x8000000000000000}; + __m128i_result = (__m128i){0x7fffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3a8000003a800000, 0x0000000056000056}; + v2u64_op1 = (v2u64){0xa03aa03ae3e2e3e2, 0x00000000efffefff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssrlrni_d_q((__m128)v2u64_op0, (__m128)v2u64_op1, 0x75); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssrlrni.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.c new file mode 100644 index 0000000000..3794a5d12c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.c @@ -0,0 +1,74 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000002000000020, 0x0000002000000020}; + __m128i_result = (__m128i){0xffffffdfffffffe0, 0xffffffdfffffffe0}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c2f90000bafa, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000c2fa8000c2fa, 0x0000c2f90000bafa}; + __m128i_result = (__m128i){0x7ffffffe7ffff800, 0xffff3d06ffff4506}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffff3fffffff3, 0xfffffff3fffffff3}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffff3fffffff4, 0xfffffff3fffffff4}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x7ef8000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x8108000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffaa076aeb, 0x0000000063b2ac27}; + v2u64_op1 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_result = (__m128i){0x0000fffdaa07d5d6, 0xffffffff63b3584e}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffff81, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000005, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffff7c, 0xffffffffffffffff}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff7cffd6ffc700b0, 0x0000000000000000}; + __m128i_result = (__m128i){0x008300290038ff50, 0x0000000000000000}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000c0dec4d1, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff3f213b2f, 0x0000000000000000}; + __m128i_out = __lsx_vssub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.c new file mode 100644 index 0000000000..6aeec5cfa1 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.c @@ -0,0 +1,476 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x68bcf93435ed25ed, 0x7f801fa06451ef11}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffb64c}; + __m128i_result = (__m128i){0x68bcf93435ed25ed, 0x0000000000003900}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x460f3b393ef4be3a, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffff00000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x04e00060ffffffff, 0x04e00060ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x04e00060ffffffff, 0x04e00060ffffffff}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x004200a000200001, 0x004200a000000000}; + v2u64_op1 = (v2u64){0x000000000000001c, 0x000000000000001c}; + __m128i_result = (__m128i){0x004200a000200000, 0x004200a000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x342caf9be5579ebe, 0x0c03e17edd781b11}; + v2u64_op1 = (v2u64){0x000000000000f909, 0x0000000000000000}; + __m128i_result = (__m128i){0x342caf9be55700b5, 0x0c03e17edd781b11}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000200010, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000200010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001801f0307f80, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00001801f0307f80, 0x0000000000000000}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + __m128i_result = (__m128i){0x01010101ffff7878, 0x0101010108082626}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00fe000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfe80000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x027e0000000000ff, 0x0000000000000000}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0f000d200e000c20, 0x11000f2010000e20}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0f000d200e000c20, 0x11000f2010000e20}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000fffefffefffef, 0x001ffff0003ffff0}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000fffefffefffef, 0x001ffff0003ffff0}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffffffffff98dea, 0xffffffffffffb4ff}; + v2u64_op1 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + __m128i_result = (__m128i){0xbf0c05fffff98dea, 0xc00fffffffffb4ff}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000029, 0x000000000000002f}; + v2u64_op1 = (v2u64){0xffffffffffffff00, 0xffffffffffffff00}; + __m128i_result = (__m128i){0x0101010101010129, 0x010101010101012f}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op1 = (v2u64){0xfefefefefefefefe, 0xfefefefefefefefe}; + __m128i_result = (__m128i){0x1202120212021202, 0x1202120212021202}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000014, 0x0000000000000014}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x00ff00ff00ff00ff, 0x00ff00ff00ff00ff}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000005}; + v2u64_op1 = (v2u64){0x4e3e13368c17f6e6, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000005}; + __m128i_out = __lsx_vssub_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0fffffffffffffff}; + v2u64_op1 = (v2u64){0x41957fff7fff7fff, 0x8000800080008000}; + __m128i_result = (__m128i){0xbf6b810181018101, 0x7fff7fff7fff7fff}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ff800000, 0xfff8ffa2fffdffb0}; + __m128i_result = (__m128i){0x00000000017f0000, 0x0108015e01030150}; + __m128i_out = __lsx_vssub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x007fffff00000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x007fffff00000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xf436f3f52f4ef4a8, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xff80000000000000, 0xff80000000000000}; + __m128i_result = (__m128i){0xf4b6f3f52f4ef4a8, 0x0080000000000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000101fd01fe, 0x0001000100010001}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0040004000400040, 0x0040004000400040}; + __m128i_result = (__m128i){0xffc0ffc0ffc0ffc0, 0xffc0ffc0ffc0ffc0}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111311111112111, 0x1111311111114111}; + v2u64_op1 = (v2u64){0x0000000000007fff, 0x0000000000000000}; + __m128i_result = (__m128i){0x1111311111110000, 0x1111311111114111}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfefefefefefefefe, 0xfefefefefefefefe}; + v2u64_op1 = (v2u64){0x0202fe02fd020102, 0x0002000200020002}; + __m128i_result = (__m128i){0xfcfc00fc01fcfdfc, 0xfefcfefcfefcfefc}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00004000ffffffff, 0x00000000ffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fffffff81010102, 0x7fff010181010102}; + v2u64_op1 = (v2u64){0x003f0000ffffffff, 0x003f0000ffffffff}; + __m128i_result = (__m128i){0x7fc0ffff81020103, 0x7fc0010181020103}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc5c53492f25acbf2, 0xbfd10d0d7b6b6b73}; + v2u64_op1 = (v2u64){0x00000000f3040705, 0x0000000000000000}; + __m128i_result = (__m128i){0xc5c534920000c4ed, 0xbfd10d0d7b6b6b73}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001e03, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000011e04, 0x0000000000000000}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x41f8e08016161198, 0x6363636363abdf16}; + v2u64_op1 = (v2u64){0x000000002427c2ee, 0x00000000246d9755}; + __m128i_result = (__m128i){0x41f8e080f1ef4eaa, 0x636363633f3e47c1}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001fffe0001ffde, 0x0001fffe00014b41}; + __m128i_result = (__m128i){0xffff0002ffff0022, 0xffff0002ffffb4bf}; + __m128i_out = __lsx_vssub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001fc0000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000002010, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000001fbdff0, 0x0000000000000000}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000200, 0x0000000000000200}; + v2u64_op1 = (v2u64){0x00ff000000ff0000, 0xffffffffffff0000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff000000ff, 0x00ff00ff00ff00ff}; + v2u64_op1 = (v2u64){0x000000ff000000ff, 0x000000ff000000ff}; + __m128i_result = (__m128i){0x00ff000000000000, 0x00ff000000ff0000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000ea000010fa101, 0xc14eef7fc14ea000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000007fff0000, 0x000000000000bd3d}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x0000000c7fff000c}; + __m128i_result = (__m128i){0x000000006ffef000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ffc100010001, 0xffc2ffe700000007}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x41dfffff00000000}; + __m128i_result = (__m128i){0x0000ffc100010001, 0xbde2ffe800000007}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x03f1e3d28b1a8a1a, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000150d707009, 0x000000000001d5d4}; + __m128i_result = (__m128i){0x03f1e3bd80000000, 0x00000000fffe2a2c}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x343d8dc6b0ed5a08, 0xffd5002affffffff}; + __m128i_result = (__m128i){0xcbc2723a4f12a5f8, 0x002affd600000001}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000001, 0x0000000100000001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000001, 0x0000000100000001}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + v2u64_op1 = (v2u64){0x00000000fffffffe, 0xffffff7ffffffffe}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000f3040705}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000f3040705}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0500847b00000000, 0xa000308000008002}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000ff000000ff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x3fffff0000000000, 0x3fffff0000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x006f0efe258ca851, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000958affff995d, 0x0000006f00001f0a}; + __m128i_result = (__m128i){0x006e7973258d0ef4, 0xffffff90ffffe0f5}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000ca02f854}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000d0000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x6363635663636356, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000080}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000080}; + __m128i_out = __lsx_vssub_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vssub-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vst.c b/SingleSource/UnitTests/Vector/LSX/lsx-vst.c new file mode 100644 index 0000000000..9cdae8bccb --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vst.c @@ -0,0 +1,54 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x0, 0x0}; + __lsx_vst((__m128)v2u64_op0, (unsigned long *)&__m128i_result, 0x0); + check_lsx_out(&v2u64_op0, &__m128i_result, sizeof(__m128i_result), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x0, 0x0}; + __lsx_vstx((__m128)v2u64_op0, (unsigned long *)&__m128i_result, 0x0); + check_lsx_out(&v2u64_op0, &__m128i_result, sizeof(__m128i_result), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x05, 0x0}; + __m128i_out = (__m128i){0x0, 0x0}; + __lsx_vstelm_b((__m128)v2u64_op0, (unsigned long *)&__m128i_out, 0x0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x5c05, 0x0}; + __m128i_out = (__m128i){0x0, 0x0}; + __lsx_vstelm_h((__m128)v2u64_op0, (unsigned long *)&__m128i_out, 0x0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0xc9d85c05, 0x0}; + __m128i_out = (__m128i){0x0, 0x0}; + __lsx_vstelm_w((__m128)v2u64_op0, (unsigned long *)&__m128i_out, 0x0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3ab7a3fc47a5c31a, 0x1dcc4255c9d85c05}; + __m128i_result = (__m128i){0x1dcc4255c9d85c05, 0x0}; + __m128i_out = (__m128i){0x0, 0x0}; + __lsx_vstelm_d((__m128)v2u64_op0, (unsigned long *)&__m128i_out, 0x0, 0x1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vst.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vst.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vst.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsub.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsub.c new file mode 100644 index 0000000000..d2a196eb3d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsub.c @@ -0,0 +1,260 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000ff02, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000000001fe, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xc6ffe000c6fde000, 0xffffe000ffffe000}; + v2u64_op1 = (v2u64){0x8080808080808081, 0x0000000000000000}; + __m128i_result = (__m128i){0x467f6080467d607f, 0xffffe000ffffe000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00fe00ff, 0x0000000000010000}; + v2u64_op1 = (v2u64){0x0000000100000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00ff00fe00fe00ff, 0x0000000000010000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff00007fff0000, 0x7fff00007fff0000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x7fff00007fff0000, 0x7fff00007fff0000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000000000ff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000c0dec4d1, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000040223c2e, 0x0000000000000000}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x96198318780e32c5, 0xfd200ed2fd370775}; + v2u64_op1 = (v2u64){0xffffe65ecc1be5bc, 0xffffe65ecc1be5bc}; + __m128i_result = (__m128i){0x971a9dbaacf34d09, 0xfe212874311c22b9}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x4f4f4f4f4f4f4f4f, 0x4f4f4f4f4f4f4f4f}; + __m128i_out = __lsx_vsub_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0404038383838404, 0x0404038383838404}; + v2u64_op1 = (v2u64){0xfff8e001ff84e703, 0xf000e001bf84df83}; + __m128i_result = (__m128i){0x040c238283ff9d01, 0x14042382c3ffa481}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0141010101410101, 0x0141010101410101}; + __m128i_result = (__m128i){0xfebffefffebffeff, 0xfebffefffebffeff}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1111111111111111, 0x1111111111111111}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x1111111111111111, 0x1111111111111111}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefffefffefffe, 0xfffefffefffefffe}; + v2u64_op1 = (v2u64){0x000300000000fdff, 0x000700000004fdff}; + __m128i_result = (__m128i){0xfffbfffefffe01ff, 0xfff7fffefffa01ff}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000cd630000cd63, 0x0001000000010000}; + __m128i_result = (__m128i){0x0000329d0000329d, 0xffff0000ffff0000}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x08080807f7f7f7f8}; + v2u64_op1 = (v2u64){0x0000000000000100, 0x0000000202020200}; + __m128i_result = (__m128i){0x000000000000ff00, 0x08080805f5f5f5f8}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000075c00000cf0, 0x00060eb000000006}; + __m128i_result = (__m128i){0x0000f8a40000f310, 0xfffaf1500000fffa}; + __m128i_out = __lsx_vsub_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xfffffffff100fffc}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000200000000}; + __m128i_result = (__m128i){0x0000000000000000, 0xfffffffdf100fffc}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000007f7f7f7f}; + v2u64_op1 = (v2u64){0xfffffffffffffff0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000010, 0x000000007f7f7f7f}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000800000000000, 0x0000800000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000800000000000, 0x0000800000000000}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00001802041b0013, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00001802041b0014, 0x0000000000000001}; + __m128i_out = __lsx_vsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x773324887fffffff, 0x000f7d1000000001}; + __m128i_result = (__m128i){0x88cbdb7780000001, 0xfff082efffffffff}; + __m128i_out = __lsx_vsub_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000001f50000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffe0b0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000001, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xfff0000000000000, 0xfff0000000000000}; + __m128i_result = (__m128i){0x0010000000000001, 0x000fffffffffffff}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000b, 0x0000000000800080}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000b, 0x0000000000800080}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffeb, 0xffffffffffffffeb}; + __m128i_result = (__m128i){0x0000000000000015, 0x0000000000000014}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003000100010001, 0x0007000000050000}; + v2u64_op1 = (v2u64){0x0001fffe0001fefc, 0x0000ffff0000ffff}; + __m128i_result = (__m128i){0x00010002ffff0105, 0x0006000100040001}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000003fffffffd, 0x00000003fffffffd}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00000003fffffffd, 0x00000003fffffffe}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000fd1654860000, 0x0000feff23560000}; + v2u64_op1 = (v2u64){0x41f8e08016161198, 0x6363636363abdf16}; + __m128i_result = (__m128i){0xbe081c963e6fee68, 0x9c9d9b9bbfaa20e9}; + __m128i_out = __lsx_vsub_q((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsub.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsub.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsub.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.c new file mode 100644 index 0000000000..f8e316a245 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.c @@ -0,0 +1,240 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0xfffc45a851c40c18, 0xfff489b693120950}; + __m128i_result = (__m128i){0xe0dd268932a5edf9, 0xe0d56a9774f3ea31}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffffff88, 0x0000000000000000}; + __m128i_result = (__m128i){0xe5e5e5e5e4e4e46d, 0xe5e5e5e5e5e5e5e5}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000408, 0x0000000897957687}; + __m128i_result = (__m128i){0xf7f7f7f7f7f7fbff, 0xf7f7f7ff8e8c6d7e}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xe6e6e6e6e6e6e6e6, 0xe6e6e6e6e6e6e6e6}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xf8f8f8f8f8f8f8f8, 0xf8f8f8f8f8f8f8f8}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x8); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2e34594c3b000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x171d423524e9e9e9, 0xe9e9e9e9e9e9e9e9}; + __m128i_out = __lsx_vsubi_bu((__m128)v2u64_op0, 0x17); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffe2ffe2ffe2ffe2, 0xffe2ffe2ffe2ffe2}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x87f82867431a1d08, 0x9795698585057dec}; + __m128i_result = (__m128i){0x87e3285243051cf3, 0x9780697084f07dd7}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffcfffcfffcfffc, 0xfffcfffcfffcfffc}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000101}; + __m128i_result = (__m128i){0xfffcfffcfffcfffc, 0xfffcfffcfffc00fd}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x371fe00000000000, 0x371fe00000000000}; + __m128i_result = (__m128i){0x370bdfecffecffec, 0x370bdfecffecffec}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x14); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020202020202fe02, 0x0000040600000406}; + __m128i_result = (__m128i){0x01f701f701f7fdf7, 0xfff503fbfff503fb}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x2); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x803e0000803e0000, 0x803e0000803e0000}; + __m128i_result = (__m128i){0x803bfffd803bfffd, 0x803bfffd803bfffd}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffdfffdfffdfffd, 0xfffdfffdfffdfffd}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffedffedffedffed, 0xffedffedffedffed}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x13); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffe4ffe4ffe4ffe4, 0xffe4ffe4ffe4ffe4}; + __m128i_out = __lsx_vsubi_hu((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffefffffffef, 0xffffffefffffffef}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x11); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffe6ffffffe6, 0xffffffe6ffffffe6}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x19); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffff1fffffff1, 0xfffffff1fffffff1}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xfffffff6fffffff6, 0xfffffff6fffffff6}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffe4ffffffe4, 0xffffffe4ffffffe4}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x1c); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffe1ffffffe1, 0xffffffe1ffffffe1}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffff1fffffff1, 0xfffffff1fffffff1}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffab7e71e33848, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffab5f71e33829, 0xffffffe1ffffffe1}; + __m128i_out = __lsx_vsubi_wu((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0024d8f6a494006a, 0xa8beed87bc3f2be1}; + __m128i_result = (__m128i){0x0024d8f6a494005c, 0xa8beed87bc3f2bd3}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0xe); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffeb, 0xffffffffffffffeb}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffe1, 0xffffffffffffffe1}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x1f); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffff7, 0xfffffffffffffff7}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffe5, 0xffffffffffffffe5}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xf2f2e5e5e5e5e5e5}; + __m128i_result = (__m128i){0xfffffffffffffff7, 0xf2f2e5e5e5e5e5dc}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x9); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fffff0000000000, 0x3fffff0000000000}; + __m128i_result = (__m128i){0x3ffffeffffffffe5, 0x3ffffeffffffffe5}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x1b); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0xfffffffffffffff5, 0x0000000000000070}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0xb); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffff0, 0xfffffffffffffff0}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x10); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffe6, 0xffffffffffffffe6}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x1a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0x000100010000fffb, 0x000100010000fffb}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffeb, 0xffffffffffffffeb}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x15); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffffffffa, 0xfffffffffffffffa}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x6); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffdfffe80008000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffdfffe80007fe2, 0xffffffffffffffe2}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x1e); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x001a001a001a001a, 0x001a001a001a001a}; + __m128i_result = (__m128i){0x001a001a001a000b, 0x001a001a001a000b}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0xf); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c0dec4d1, 0x000000000234545b}; + __m128i_result = (__m128i){0x00000000c0dec4ca, 0x0000000002345454}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x7); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0003b80000000000, 0x0f8d33000f8d3300}; + __m128i_result = (__m128i){0x0003b7fffffffffd, 0x0f8d33000f8d32fd}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubi_du((__m128)v2u64_op0, 0x0); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubi.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.c new file mode 100644 index 0000000000..8ef854ce52 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x43d3e0000013e000, 0x43d3e0000013e000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffd3000000130000, 0xffd3000000130000}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff0001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000200000016, 0x000100010000ffda}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffbfbfbfc0, 0xffffffffbfbfbfc0}; + v2u64_op1 = (v2u64){0x4040404040404040, 0x4040404040404040}; + __m128i_result = (__m128i){0xffbfffbfff7fff80, 0xffbfffbfff7fff80}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0001000100010001}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000808000020200, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ff8000020000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7f7f017f9d8726d3, 0x413e276583869d79}; + v2u64_op1 = (v2u64){0x82ffd2210127add2, 0x7c7cd2eb63637c52}; + __m128i_result = (__m128i){0x0080005eff600001, 0xffc2007aff230027}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000011ff040, 0xffffffffffffffee}; + __m128i_result = (__m128i){0x00000000ffe1ffc0, 0x0001000100010012}; + __m128i_out = __lsx_vsubwev_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000004000000000, 0x0000000100000001}; + __m128i_result = (__m128i){0xffffffc000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000000d, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000ffff00, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000100c6ffef10c, 0x00000000000000ff}; + __m128i_result = (__m128i){0xffffeff400000df4, 0x00000000ffffff01}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000002050320, 0x0000000002050320}; + v2u64_op1 = (v2u64){0x0000000001c88bf0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000007730, 0x0000000000000320}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x00000000ffffffff}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000005, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000005, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001030103, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffff00000000}; + __m128i_result = (__m128i){0x0000000000000103, 0x0000000100000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xaa472d26fe867091, 0x33eac9fdca42f660}; + v2u64_op1 = (v2u64){0xaa472d26fe867091, 0x33eac9fdca42f660}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000208000002080, 0x0000208000002080}; + v2u64_op1 = (v2u64){0x0000208000002080, 0x0000208000002080}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000004, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000004, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x05fafe0101fe000e, 0x000000ff0000857a}; + __m128i_result = (__m128i){0xfffffffffe01fff2, 0xffffffffffff7a86}; + __m128i_out = __lsx_vsubwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x27b1b106b8145f50, 0xf654ad7447e59090}; + __m128i_result = (__m128i){0x0000000047eba0b0, 0xffffffffb81a6f70}; + __m128i_out = __lsx_vsubwev_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000c01020d8009, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000003004, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000c01020d5005, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffff01ff01, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000000d, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000000d, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x4f804f804f804f80, 0x4f804f804f804f80}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x7fff7fff7fff7fff}; + __m128i_result = (__m128i){0x4f804f804f804f80, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x800000005b4b1b18, 0xb9fe3640e4eb1b18}; + v2u64_op1 = (v2u64){0xffffe4eb00001b18, 0xffffb9fe00003640}; + __m128i_result = (__m128i){0x80001b155b4b0000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000100080000, 0x0000000100000008}; + __m128i_result = (__m128i){0xfffffffefff80000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x3fc03fc000000004, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x7f7f1fd800000004, 0x3fc03fc000000003}; + __m128i_result = (__m128i){0xc0411fe800000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff01e41ffff0e440, 0xff00e400ff00e400}; + v2u64_op1 = (v2u64){0xfffffffefffffffe, 0xfffffffefffffffe}; + __m128i_result = (__m128i){0xff01e420fff0e442, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.c new file mode 100644 index 0000000000..b277d3485c --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.c @@ -0,0 +1,284 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000004, 0x00ff00ff00000083}; + __m128i_result = (__m128i){0x000000000000fffc, 0xff01ff010000ff7d}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1000100010001000, 0x1000100010001000}; + v2u64_op1 = (v2u64){0xffff00fc0000ff02, 0x0000000000000001}; + __m128i_result = (__m128i){0xff01ff040000fffe, 0x000000000000ffff}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x1f5533a694f902c0, 0xfffffacdb6dbecac}; + v2u64_op1 = (v2u64){0xff39ff37ff35ff33, 0x21011f3f193d173b}; + __m128i_result = (__m128i){0x001c006f00c4008d, 0x00fe008e009e0071}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xd1b09480f2123460, 0x9c9ca19d509ae734}; + v2u64_op1 = (v2u64){0x9c9c9c9c9c9c9c9c, 0x9c9c9c9c9c9c9c9c}; + __m128i_result = (__m128i){0x0014ffe4ff76ffc4, 0x00000001fffeff98}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xee297a731e5c5f86, 0x34947b4b11684f92}; + __m128i_result = (__m128i){0xffd7ff8dffa4ff7a, 0xff6cffb5ff98ff6e}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffff01018888, 0xfffffffff8f8dada}; + v2u64_op1 = (v2u64){0xfffefffe3f6fb04d, 0xffffffff3ea5016b}; + __m128i_result = (__m128i){0x00000001ffffd83b, 0x000000000000d96f}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000016fff9d3d, 0x00000000f0009d3c}; + v2u64_op1 = (v2u64){0x00000000000007f0, 0x0000000000000bd0}; + __m128i_result = (__m128i){0x000000010000954d, 0x000000000000916c}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000100010000fe01, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000500000005, 0x000000050000007b}; + __m128i_result = (__m128i){0xfffffffc0000fdfc, 0xfffffffbffffff85}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000032, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000032, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffff80df00000000}; + v2u64_op1 = (v2u64){0x2a569f8081c3bbe9, 0xa5c4c774856ba837}; + __m128i_result = (__m128i){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffaa076aeb, 0x0000000063b2ac27}; + __m128i_result = (__m128i){0xffff0001ffff9515, 0x00000000ffff53d9}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000ffff0000ffff, 0x0000ffff0000ffff}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00020fbf00000fbf, 0x00060fbf00040fbf}; + v2u64_op1 = (v2u64){0x6363636363636363, 0x6363636363636363}; + __m128i_result = (__m128i){0xffffac5cffffac5c, 0xffffac5cffffac5c}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000ffff, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffaefffbffaefffb, 0xffaefffbffaefffb}; + __m128i_result = (__m128i){0xffff000500000004, 0xffff0005ffff0005}; + __m128i_out = __lsx_vsubwev_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x00000000a1630000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x00000000a1630000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x00000001fffffffe, 0x00000001fffffffe}; + __m128i_result = (__m128i){0x0000000000000001, 0x0000000000000001}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000001fd0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000001fd0, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xf77edf9cffffffff, 0xff7ffffef77fffdd}; + __m128i_result = (__m128i){0xffffffff00000001, 0x0000000008800022}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffe3d7, 0xffffffffffffda6f}; + v2u64_op1 = (v2u64){0x0000000000000001, 0x0000000000000001}; + __m128i_result = (__m128i){0x00000000ffffe3d6, 0x00000000ffffda6e}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x003fffff00000000, 0x003fffff00000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x80006b0080808080, 0x8000807f00000000}; + v2u64_op1 = (v2u64){0xc0000002b0995850, 0xffff00011cf0c569}; + __m128i_result = (__m128i){0xffffffffcfe72830, 0xffffffffe30f3a97}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x58fa6b4000000000, 0x00000000ff9f5c25}; + v2u64_op1 = (v2u64){0x58fa6b4000000000, 0x00000000ff9f5c25}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8080808080808080, 0x8080808080808080}; + v2u64_op1 = (v2u64){0xcda585aebbb2836a, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffc4cdfd16, 0x0000000080808080}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x77eb15638eeb5fc2, 0x801dd5cb0004e058}; + v2u64_op1 = (v2u64){0x0000002000000000, 0x000000200000001b}; + __m128i_result = (__m128i){0x000000008eeb5fc2, 0x000000000004e03d}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000001, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000c7fff000c, 0x0000000c0000bd49}; + v2u64_op1 = (v2u64){0xfffff00010000fff, 0x0000000000000001}; + __m128i_result = (__m128i){0x0000100c6ffef00d, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000c00000000000, 0x0000006f00000000}; + v2u64_op1 = (v2u64){0x0000000000001f0a, 0x000000000000006f}; + __m128i_result = (__m128i){0x0000bfffffffe0f6, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffcfffdfffcfffd, 0xfffcfffcfffcfffd}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffcfffdfffcfffd, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffff7e00000081}; + v2u64_op1 = (v2u64){0x0000000000000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0a0a0a0a0a0a0a0a, 0x0a0a0a0a0a0a0a0a}; + v2u64_op1 = (v2u64){0xffff6080ffff4417, 0xffffb96bffff57c9}; + __m128i_result = (__m128i){0x0a0aa9890a0ac5f3, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x370bdfecffecffec, 0x370bdfecffecffec}; + v2u64_op1 = (v2u64){0x0010001000100010, 0x0010001000100010}; + __m128i_result = (__m128i){0x36fbdfdcffdcffdc, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000100000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0001000100010001, 0x0001000100010001}; + __m128i_result = (__m128i){0xfffefffefffeffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffff000000000000, 0xffffffff00000000}; + v2u64_op1 = (v2u64){0x0a753500a9fa0d06, 0x000000000a752a55}; + __m128i_result = (__m128i){0xf589caff5605f2fa, 0x0000000000000000}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000000000087c, 0x087c000000000000}; + v2u64_op1 = (v2u64){0x00000001000010f8, 0x10f8000100000001}; + __m128i_result = (__m128i){0xfffffffefffff784, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffff000000000000, 0xffff000000000000}; + __m128i_result = (__m128i){0x0001000000000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwev_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwev-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.c new file mode 100644 index 0000000000..8dcc2833f7 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.c @@ -0,0 +1,224 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000001}; + v2u64_op1 = (v2u64){0xc485edbcc0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x007c000d00400000, 0x003f000000000000}; + __m128i_out = __lsx_vsubwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x841f000fc28f801f, 0x0000000000000000}; + __m128i_result = (__m128i){0x007c0000003e0080, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0001000100010001, 0x0001000100010001}; + __m128i_out = __lsx_vsubwod_h_b((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffff00000000, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000001}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000210011084, 0x000000017fff9000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000001001, 0x0000000000007fff}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff80000000000000, 0xff80000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffff8000000000, 0xffffff8000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000c2bac2c2, 0xfffffffffefefe6a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffc2ba, 0xfffffffffffffefe}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000027f000000fe, 0x000000ff000000ff}; + v2u64_op1 = (v2u64){0xfe80000000000001, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000018000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000ffff7a53, 0x0000000000001f0a}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000ffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000ff0000ff86, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x061202bffb141c38, 0xffa6ff91fdd8ef77}; + __m128i_result = (__m128i){0xfffff9ee000004ec, 0x0000005a00000228}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x000000001fe02000, 0x0000000000002000}; + v2u64_op1 = (v2u64){0x000000001fe02000, 0x0000000000002000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x020310d0c0030220, 0x30eb020302101b03}; + v2u64_op1 = (v2u64){0x00000000c0dec4ca, 0x0000000002345454}; + __m128i_result = (__m128i){0x00000203ffffff25, 0x000030ebffffffdc}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x380fdfdfc0000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffc7f100004000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_h((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00005dcbe7e830c0, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x000000000000e41b, 0x0000000015d926c7}; + __m128i_result = (__m128i){0x0000000000005dcb, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000014, 0x0000000000000014}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00f000807000009e, 0x00f0008100800080}; + v2u64_op1 = (v2u64){0x0003c853c843c87e, 0x0003c853c843c87e}; + __m128i_result = (__m128i){0x0000000000ec382d, 0x0000000000ec382e}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfcfcfcfcfcfc0000, 0xfcfcfcfcfcfcfcfd}; + v2u64_op1 = (v2u64){0x00009c7c00007176, 0x0000000000000000}; + __m128i_result = (__m128i){0xfffffffffcfc6080, 0xfffffffffcfcfcfc}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xbbc8ecc5f3ced5f3, 0xc0b4d1a5f8babad3}; + v2u64_op1 = (v2u64){0xffaefffbffaefffb, 0xffaefffbffaefffb}; + __m128i_result = (__m128i){0xffffffffbc19ecca, 0xffffffffc105d1aa}; + __m128i_out = __lsx_vsubwod_d_w((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000101fd01fe, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000fe00ff, 0x0000000000000000}; + __m128i_result = (__m128i){0x0001000100010001, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffff000fffff000, 0xfffff0000000ad3d}; + v2u64_op1 = (v2u64){0x1000100010001000, 0x1000100010001000}; + __m128i_result = (__m128i){0xefffdffff0009d3d, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000ff0000000000, 0x000000ff000000ff}; + __m128i_result = (__m128i){0xffffff00ffffff01, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x000100010001007c}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000100010001007c, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7fff7fff7fff7fff, 0x5f675e96e29a5a60}; + v2u64_op1 = (v2u64){0x7fff7fff7fff7fff, 0x00fe000100cf005f}; + __m128i_result = (__m128i){0x5e695e95e1cb5a01, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7efefefe82010201, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_d((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-1.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.c b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.c new file mode 100644 index 0000000000..251bb569e5 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.c @@ -0,0 +1,212 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000010000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00020100fedd0c00, 0xfe07e5fefefdddfe}; + __m128i_result = (__m128i){0x0000ffffff02fff4, 0xff02ff1bff02ff23}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfffefff6fff80002, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xc72ef153fc02fdf7, 0x82c53a0000000000}; + __m128i_result = (__m128i){0x0038000e0003ff03, 0x007d00c500ff00ff}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000100010001, 0x0001000100010001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x000000000000007b}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x7ff0000000000000, 0x7ff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x007f000000000000, 0x007f000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_h_bu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000040000000400}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x8000000000000010, 0x0000000000000000}; + __m128i_result = (__m128i){0xffff800000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + v2u64_op1 = (v2u64){0xfe00fd1400010000, 0xfc01fd1300000001}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000000fffff800, 0x00000000ffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000000000ffff, 0x000000000000ffff}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000200000002, 0x0000000200000002}; + v2u64_op1 = (v2u64){0xfe813f00fe813f00, 0xfe813f00fe813f00}; + __m128i_result = (__m128i){0xffff017fffff017f, 0xffff017fffff017f}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9c7c266e71768fa4, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x00009c7c00007176, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0001000000000000, 0x0001000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000100000000, 0x0000000100000000}; + __m128i_out = __lsx_vsubwod_w_hu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000800000008, 0x0000000800000008}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffff00000009, 0x0000000000000008}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000408, 0x0000000897957687}; + v2u64_op1 = (v2u64){0x7ffeffff7bfff828, 0x7fff0007e215b122}; + __m128i_result = (__m128i){0xffffffff80010001, 0xffffffff80010001}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00000af555555555, 0x00000af555555555}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000af5, 0x0000000000000af5}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x8000000000000000, 0x8000000000000000}; + v2u64_op1 = (v2u64){0x8000000000000000, 0x8000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x2e34594c3b000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x000000002e34594c, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_d_wu((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xffffffffffffffff, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x42a0000042a02001, 0x0000000036280001}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000036280001, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x9d519ee8d2d84f1d, 0xd0b1ffffffffffff}; + v2u64_op1 = (v2u64){0x0000ffff0000fffe, 0x8644ffff0000ffff}; + __m128i_result = (__m128i){0x4a6d0000ffff0000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + v2u64_op1 = (v2u64){0xc72df14afbfafdf9, 0x82c539ffffffffff}; + __m128i_result = (__m128i){0x7d3ac60000000000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x00ff00ff00fe00ff, 0x0000000000010000}; + v2u64_op1 = (v2u64){0x0000000100000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000010000, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xfeffffffffffffff, 0xfeffffffffffffff}; + v2u64_op1 = (v2u64){0x0000102020204000, 0x00000fffffffe000}; + __m128i_result = (__m128i){0xfefff00000001fff, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0003000300a10003, 0x0003000300000000}; + __m128i_result = (__m128i){0xfffcfffd00000000, 0xffffffffffffffff}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x6363636363636363, 0x6363636363636363}; + v2u64_op1 = (v2u64){0x0002000200000001, 0x0000000200000000}; + __m128i_result = (__m128i){0x6363636163636363, 0x0000000000000000}; + __m128i_out = __lsx_vsubwod_q_du((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vsubwod-2.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vxor.c b/SingleSource/UnitTests/Vector/LSX/lsx-vxor.c new file mode 100644 index 0000000000..f88bcc2366 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vxor.c @@ -0,0 +1,56 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x00000000f4012ceb, 0x0000000000000000}; + __m128i_result = (__m128i){0x00000000f4012ceb, 0x0000000000000000}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_result = (__m128i){0xffffffffffffffff, 0xffffffffffffffff}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000000000000, 0x0000000000000000}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x40f3fa0000000000, 0x3ff0000000000000}; + v2u64_op1 = (v2u64){0x0000000000000000, 0x0000000000000001}; + __m128i_result = (__m128i){0x40f3fa0000000000, 0x3ff0000000000001}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + v2u64_op1 = (v2u64){0x0000000080000068, 0x0000000000000000}; + __m128i_result = (__m128i){0x0000000080000068, 0x0000000000000000}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0xff000001ffff9515, 0x00000000ffff53d9}; + v2u64_op1 = (v2u64){0xffff0001ffff9514, 0xffffffffffffffff}; + __m128i_result = (__m128i){0x00ff000000000001, 0xffffffff0000ac26}; + __m128i_out = __lsx_vxor_v((__m128)v2u64_op0, (__m128)v2u64_op1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vxor.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vxor.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vxor.reference_output @@ -0,0 +1 @@ +exit 0 diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vxori.c b/SingleSource/UnitTests/Vector/LSX/lsx-vxori.c new file mode 100644 index 0000000000..928a79ea28 --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vxori.c @@ -0,0 +1,50 @@ +#include "lsx_test_util.h" +#include + +int +main () +{ + __m128i __m128i_out, __m128i_result; + __m128 __m128_out, __m128_result; + __m128d __m128d_out, __m128d_result; + v2u64 v2u64_op0, v2u64_op1, v2u64_op2; + v4i32 v4i32_op0, v4i32_op1, v4i32_op2; + + int int_op0, int_op1, i = 1, fail; + long int long_op0, long_op1; + long int long_int_out, long_int_result; + unsigned int unsigned_int_out, unsigned_int_result; + unsigned long int unsigned_long_int_out, unsigned_long_int_result; + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x0404040404040404, 0x0404040404040404}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0x4); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000001000100, 0x0000000001000100}; + __m128i_result = (__m128i){0x5a5a5a5a5b5a5b5a, 0x5a5a5a5a5b5a5b5a}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0x5a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0xe3e3e3e3e3e3e3e3, 0xe3e3e3e3e3e3e3e3}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0xe3); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0020002000200020, 0x0000000000000000}; + __m128i_result = (__m128i){0x9aba9aba9aba9aba, 0x9a9a9a9a9a9a9a9a}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0x9a); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000000000000, 0x0000000000000000}; + __m128i_result = (__m128i){0x9090909090909090, 0x9090909090909090}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0x90); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + v2u64_op0 = (v2u64){0x0000000077af9450, 0x00000000b81c8382}; + __m128i_result = (__m128i){0xf1f1f1f1865e65a1, 0xf1f1f1f149ed7273}; + __m128i_out = __lsx_vxori_b((__m128)v2u64_op0, 0xf1); + check_lsx_out(&__m128i_result, &__m128i_out, sizeof(__m128i_out), __FILE__, __LINE__); + + return 0; +} diff --git a/SingleSource/UnitTests/Vector/LSX/lsx-vxori.reference_output b/SingleSource/UnitTests/Vector/LSX/lsx-vxori.reference_output new file mode 100644 index 0000000000..ca916d098d --- /dev/null +++ b/SingleSource/UnitTests/Vector/LSX/lsx-vxori.reference_output @@ -0,0 +1 @@ +exit 0