diff options
author | sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2015-08-17 08:23:31 +0000 |
---|---|---|
committer | sewardj <sewardj@a5019735-40e9-0310-863c-91ae7b9d1cf9> | 2015-08-17 08:23:31 +0000 |
commit | b4737fee94376dc3e2651b8f824c6f3f24181f7a (patch) | |
tree | 523cc5b3efe769007b607bbdd7f6a5996c8e807a /none | |
parent | 5c0abb64b21793d4c80301db3a4d36b09f07336a (diff) | |
download | valgrind-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.c | 99 | ||||
-rw-r--r-- | none/tests/arm/vcvt_fixed_float_VFP.stdout.exp | 102 |
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 |