aboutsummaryrefslogtreecommitdiff
path: root/none
diff options
context:
space:
mode:
authorsewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2015-08-17 08:23:31 +0000
committersewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9>2015-08-17 08:23:31 +0000
commitb4737fee94376dc3e2651b8f824c6f3f24181f7a (patch)
tree523cc5b3efe769007b607bbdd7f6a5996c8e807a /none
parent5c0abb64b21793d4c80301db3a4d36b09f07336a (diff)
downloadvalgrind-b4737fee94376dc3e2651b8f824c6f3f24181f7a.tar.gz
Add test cases for VCVT.{S,U}32.F32, S[n], S[n], #imm.
Pertains to #342783. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15559 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'none')
-rw-r--r--none/tests/arm/vcvt_fixed_float_VFP.c99
-rw-r--r--none/tests/arm/vcvt_fixed_float_VFP.stdout.exp102
2 files changed, 201 insertions, 0 deletions
diff --git a/none/tests/arm/vcvt_fixed_float_VFP.c b/none/tests/arm/vcvt_fixed_float_VFP.c
index 5d988648b..17a6ece40 100644
--- a/none/tests/arm/vcvt_fixed_float_VFP.c
+++ b/none/tests/arm/vcvt_fixed_float_VFP.c
@@ -3,6 +3,7 @@
#include <string.h>
typedef unsigned long long int ULong;
+typedef unsigned int UInt;
__attribute__((noinline)) float s32_to_f32_imm1(int x)
{
@@ -212,6 +213,86 @@ void try_f64_to_u32 ( double d )
+__attribute__((noinline)) UInt f32_to_s32_imm1 ( float f )
+{
+ float block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = f;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr s14, [r8, #4]" "\n\t"
+ "vcvt.s32.f32 s14,s14,#1" "\n\t"
+ "vstr s14, [r8,#12]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+ );
+ return *(UInt*)(&block[3]);
+}
+
+__attribute__((noinline)) UInt f32_to_s32_imm32 ( float f )
+{
+ float block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = f;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr s14, [r8, #4]" "\n\t"
+ "vcvt.s32.f32 s14,s14,#32" "\n\t"
+ "vstr s14, [r8,#12]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+ );
+ return *(UInt*)(&block[3]);
+}
+
+void try_f32_to_s32 ( float f )
+{
+ UInt res = f32_to_s32_imm32(f);
+ printf("f32_to_s32_imm32: %18.14e -> 0x%08x\n", (double)f, res);
+ res = f32_to_s32_imm1(f);
+ printf("f32_to_s32_imm1: %18.14e -> 0x%08x\n", (double)f, res);
+}
+
+
+
+__attribute__((noinline)) UInt f32_to_u32_imm1 ( float f )
+{
+ float block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = f;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr s14, [r8, #4]" "\n\t"
+ "vcvt.u32.f32 s14,s14,#1" "\n\t"
+ "vstr s14, [r8,#12]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+ );
+ return *(UInt*)(&block[3]);
+}
+
+__attribute__((noinline)) UInt f32_to_u32_imm32 ( float f )
+{
+ float block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = f;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr s14, [r8, #4]" "\n\t"
+ "vcvt.u32.f32 s14,s14,#32" "\n\t"
+ "vstr s14, [r8,#12]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"s14","r8","memory"
+ );
+ return *(UInt*)(&block[3]);
+}
+
+void try_f32_to_u32 ( float f )
+{
+ UInt res = f32_to_u32_imm32(f);
+ printf("f32_to_u32_imm32: %18.14e -> 0x%08x\n", (double)f, res);
+ res = f32_to_u32_imm1(f);
+ printf("f32_to_u32_imm1: %18.14e -> 0x%08x\n", (double)f, res);
+}
+
+
+
int main ( void )
{
int i;
@@ -289,5 +370,23 @@ int main ( void )
try_f64_to_u32(d);
}
+ printf("\n");
+ try_f32_to_s32(0.0);
+ try_f32_to_s32(1.0);
+ try_f32_to_s32(-1.0);
+ try_f32_to_s32(0.0 / 0.0);
+ for (d = -100000.01; d < 100000.0; d += 10000.0) {
+ try_f32_to_s32((float)d);
+ }
+
+ printf("\n");
+ try_f32_to_u32(0.0);
+ try_f32_to_u32(1.0);
+ try_f32_to_u32(-1.0);
+ try_f32_to_u32(0.0 / 0.0);
+ for (d = -100000.01; d < 100000.0; d += 10000.0) {
+ try_f32_to_u32((float)d);
+ }
+
return 0;
}
diff --git a/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp b/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
index 64e62af4c..bfc003230 100644
--- a/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
+++ b/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
@@ -967,3 +967,105 @@ f64_to_u32_imm32: 8.99999900000000e+04 -> 0x00000000ffffffff
f64_to_u32_imm1: 8.99999900000000e+04 -> 0x000000000002bf1f
f64_to_u32_imm32: 9.99999900000000e+04 -> 0x00000000ffffffff
f64_to_u32_imm1: 9.99999900000000e+04 -> 0x0000000000030d3f
+
+f32_to_s32_imm32: 0.00000000000000e+00 -> 0x00000000
+f32_to_s32_imm1: 0.00000000000000e+00 -> 0x00000000
+f32_to_s32_imm32: 1.00000000000000e+00 -> 0x7fffffff
+f32_to_s32_imm1: 1.00000000000000e+00 -> 0x00000002
+f32_to_s32_imm32: -1.00000000000000e+00 -> 0x80000000
+f32_to_s32_imm1: -1.00000000000000e+00 -> 0xfffffffe
+f32_to_s32_imm32: nan -> 0x00000000
+f32_to_s32_imm1: nan -> 0x00000000
+f32_to_s32_imm32: -1.00000007812500e+05 -> 0x80000000
+f32_to_s32_imm1: -1.00000007812500e+05 -> 0xfffcf2c0
+f32_to_s32_imm32: -9.00000078125000e+04 -> 0x80000000
+f32_to_s32_imm1: -9.00000078125000e+04 -> 0xfffd40e0
+f32_to_s32_imm32: -8.00000078125000e+04 -> 0x80000000
+f32_to_s32_imm1: -8.00000078125000e+04 -> 0xfffd8f00
+f32_to_s32_imm32: -7.00000078125000e+04 -> 0x80000000
+f32_to_s32_imm1: -7.00000078125000e+04 -> 0xfffddd20
+f32_to_s32_imm32: -6.00000117187500e+04 -> 0x80000000
+f32_to_s32_imm1: -6.00000117187500e+04 -> 0xfffe2b40
+f32_to_s32_imm32: -5.00000117187500e+04 -> 0x80000000
+f32_to_s32_imm1: -5.00000117187500e+04 -> 0xfffe7960
+f32_to_s32_imm32: -4.00000117187500e+04 -> 0x80000000
+f32_to_s32_imm1: -4.00000117187500e+04 -> 0xfffec780
+f32_to_s32_imm32: -3.00000097656250e+04 -> 0x80000000
+f32_to_s32_imm1: -3.00000097656250e+04 -> 0xffff15a0
+f32_to_s32_imm32: -2.00000097656250e+04 -> 0x80000000
+f32_to_s32_imm1: -2.00000097656250e+04 -> 0xffff63c0
+f32_to_s32_imm32: -1.00000097656250e+04 -> 0x80000000
+f32_to_s32_imm1: -1.00000097656250e+04 -> 0xffffb1e0
+f32_to_s32_imm32: -9.99999977648258e-03 -> 0xfd70a3d8
+f32_to_s32_imm1: -9.99999977648258e-03 -> 0x00000000
+f32_to_s32_imm32: 9.99999023437500e+03 -> 0x7fffffff
+f32_to_s32_imm1: 9.99999023437500e+03 -> 0x00004e1f
+f32_to_s32_imm32: 1.99999902343750e+04 -> 0x7fffffff
+f32_to_s32_imm1: 1.99999902343750e+04 -> 0x00009c3f
+f32_to_s32_imm32: 2.99999902343750e+04 -> 0x7fffffff
+f32_to_s32_imm1: 2.99999902343750e+04 -> 0x0000ea5f
+f32_to_s32_imm32: 3.99999882812500e+04 -> 0x7fffffff
+f32_to_s32_imm1: 3.99999882812500e+04 -> 0x0001387f
+f32_to_s32_imm32: 4.99999882812500e+04 -> 0x7fffffff
+f32_to_s32_imm1: 4.99999882812500e+04 -> 0x0001869f
+f32_to_s32_imm32: 5.99999882812500e+04 -> 0x7fffffff
+f32_to_s32_imm1: 5.99999882812500e+04 -> 0x0001d4bf
+f32_to_s32_imm32: 6.99999921875000e+04 -> 0x7fffffff
+f32_to_s32_imm1: 6.99999921875000e+04 -> 0x000222df
+f32_to_s32_imm32: 7.99999921875000e+04 -> 0x7fffffff
+f32_to_s32_imm1: 7.99999921875000e+04 -> 0x000270ff
+f32_to_s32_imm32: 8.99999921875000e+04 -> 0x7fffffff
+f32_to_s32_imm1: 8.99999921875000e+04 -> 0x0002bf1f
+f32_to_s32_imm32: 9.99999921875000e+04 -> 0x7fffffff
+f32_to_s32_imm1: 9.99999921875000e+04 -> 0x00030d3f
+
+f32_to_u32_imm32: 0.00000000000000e+00 -> 0x00000000
+f32_to_u32_imm1: 0.00000000000000e+00 -> 0x00000000
+f32_to_u32_imm32: 1.00000000000000e+00 -> 0xffffffff
+f32_to_u32_imm1: 1.00000000000000e+00 -> 0x00000002
+f32_to_u32_imm32: -1.00000000000000e+00 -> 0x00000000
+f32_to_u32_imm1: -1.00000000000000e+00 -> 0x00000000
+f32_to_u32_imm32: nan -> 0x00000000
+f32_to_u32_imm1: nan -> 0x00000000
+f32_to_u32_imm32: -1.00000007812500e+05 -> 0x00000000
+f32_to_u32_imm1: -1.00000007812500e+05 -> 0x00000000
+f32_to_u32_imm32: -9.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm1: -9.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm32: -8.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm1: -8.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm32: -7.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm1: -7.00000078125000e+04 -> 0x00000000
+f32_to_u32_imm32: -6.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm1: -6.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm32: -5.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm1: -5.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm32: -4.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm1: -4.00000117187500e+04 -> 0x00000000
+f32_to_u32_imm32: -3.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm1: -3.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm32: -2.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm1: -2.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm32: -1.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm1: -1.00000097656250e+04 -> 0x00000000
+f32_to_u32_imm32: -9.99999977648258e-03 -> 0x00000000
+f32_to_u32_imm1: -9.99999977648258e-03 -> 0x00000000
+f32_to_u32_imm32: 9.99999023437500e+03 -> 0xffffffff
+f32_to_u32_imm1: 9.99999023437500e+03 -> 0x00004e1f
+f32_to_u32_imm32: 1.99999902343750e+04 -> 0xffffffff
+f32_to_u32_imm1: 1.99999902343750e+04 -> 0x00009c3f
+f32_to_u32_imm32: 2.99999902343750e+04 -> 0xffffffff
+f32_to_u32_imm1: 2.99999902343750e+04 -> 0x0000ea5f
+f32_to_u32_imm32: 3.99999882812500e+04 -> 0xffffffff
+f32_to_u32_imm1: 3.99999882812500e+04 -> 0x0001387f
+f32_to_u32_imm32: 4.99999882812500e+04 -> 0xffffffff
+f32_to_u32_imm1: 4.99999882812500e+04 -> 0x0001869f
+f32_to_u32_imm32: 5.99999882812500e+04 -> 0xffffffff
+f32_to_u32_imm1: 5.99999882812500e+04 -> 0x0001d4bf
+f32_to_u32_imm32: 6.99999921875000e+04 -> 0xffffffff
+f32_to_u32_imm1: 6.99999921875000e+04 -> 0x000222df
+f32_to_u32_imm32: 7.99999921875000e+04 -> 0xffffffff
+f32_to_u32_imm1: 7.99999921875000e+04 -> 0x000270ff
+f32_to_u32_imm32: 8.99999921875000e+04 -> 0xffffffff
+f32_to_u32_imm1: 8.99999921875000e+04 -> 0x0002bf1f
+f32_to_u32_imm32: 9.99999921875000e+04 -> 0xffffffff
+f32_to_u32_imm1: 9.99999921875000e+04 -> 0x00030d3f