|
[Valgrind-developers] valgrind: r13313: Add test cases for VCVT.{S,
U}32.F64 D[d], D[d], #frac_bits.
From: <sv...@va...> - 2013-03-06 08:35:22
|
sewardj 2013-03-06 08:35:12 +0000 (Wed, 06 Mar 2013)
New Revision: 13313
Log:
Add test cases for VCVT.{S,U}32.F64 D[d], D[d], #frac_bits.
Pertains to #315738.
Modified files:
trunk/none/tests/arm/vcvt_fixed_float_VFP.c
trunk/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp
Modified: trunk/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp (+102 -0)
===================================================================
--- trunk/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp 2013-03-05 14:27:44 +00:00 (rev 13312)
+++ trunk/none/tests/arm/vcvt_fixed_float_VFP.stdout.exp 2013-03-06 08:35:12 +00:00 (rev 13313)
@@ -865,3 +865,105 @@
u32_to_f64_imm1: -2 -> 2.14748364700000e+09
u32_to_f64_imm32: -1 -> 9.99999999767169e-01
u32_to_f64_imm1: -1 -> 2.14748364750000e+09
+
+f64_to_s32_imm32: 0.00000000000000e+00 -> 0x0000000000000000
+f64_to_s32_imm1: 0.00000000000000e+00 -> 0x0000000000000000
+f64_to_s32_imm32: 1.00000000000000e+00 -> 0x000000007fffffff
+f64_to_s32_imm1: 1.00000000000000e+00 -> 0x0000000000000002
+f64_to_s32_imm32: -1.00000000000000e+00 -> 0xffffffff80000000
+f64_to_s32_imm1: -1.00000000000000e+00 -> 0xfffffffffffffffe
+f64_to_s32_imm32: nan -> 0x0000000000000000
+f64_to_s32_imm1: nan -> 0x0000000000000000
+f64_to_s32_imm32: -1.00000010000000e+05 -> 0xffffffff80000000
+f64_to_s32_imm1: -1.00000010000000e+05 -> 0xfffffffffffcf2c0
+f64_to_s32_imm32: -9.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -9.00000100000000e+04 -> 0xfffffffffffd40e0
+f64_to_s32_imm32: -8.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -8.00000100000000e+04 -> 0xfffffffffffd8f00
+f64_to_s32_imm32: -7.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -7.00000100000000e+04 -> 0xfffffffffffddd20
+f64_to_s32_imm32: -6.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -6.00000100000000e+04 -> 0xfffffffffffe2b40
+f64_to_s32_imm32: -5.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -5.00000100000000e+04 -> 0xfffffffffffe7960
+f64_to_s32_imm32: -4.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -4.00000100000000e+04 -> 0xfffffffffffec780
+f64_to_s32_imm32: -3.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -3.00000100000000e+04 -> 0xffffffffffff15a0
+f64_to_s32_imm32: -2.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -2.00000100000000e+04 -> 0xffffffffffff63c0
+f64_to_s32_imm32: -1.00000100000000e+04 -> 0xffffffff80000000
+f64_to_s32_imm1: -1.00000100000000e+04 -> 0xffffffffffffb1e0
+f64_to_s32_imm32: -9.99999999476131e-03 -> 0xfffffffffd70a3d8
+f64_to_s32_imm1: -9.99999999476131e-03 -> 0x0000000000000000
+f64_to_s32_imm32: 9.99999000000001e+03 -> 0x000000007fffffff
+f64_to_s32_imm1: 9.99999000000001e+03 -> 0x0000000000004e1f
+f64_to_s32_imm32: 1.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 1.99999900000000e+04 -> 0x0000000000009c3f
+f64_to_s32_imm32: 2.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 2.99999900000000e+04 -> 0x000000000000ea5f
+f64_to_s32_imm32: 3.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 3.99999900000000e+04 -> 0x000000000001387f
+f64_to_s32_imm32: 4.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 4.99999900000000e+04 -> 0x000000000001869f
+f64_to_s32_imm32: 5.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 5.99999900000000e+04 -> 0x000000000001d4bf
+f64_to_s32_imm32: 6.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 6.99999900000000e+04 -> 0x00000000000222df
+f64_to_s32_imm32: 7.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 7.99999900000000e+04 -> 0x00000000000270ff
+f64_to_s32_imm32: 8.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 8.99999900000000e+04 -> 0x000000000002bf1f
+f64_to_s32_imm32: 9.99999900000000e+04 -> 0x000000007fffffff
+f64_to_s32_imm1: 9.99999900000000e+04 -> 0x0000000000030d3f
+
+f64_to_u32_imm32: 0.00000000000000e+00 -> 0x0000000000000000
+f64_to_u32_imm1: 0.00000000000000e+00 -> 0x0000000000000000
+f64_to_u32_imm32: 1.00000000000000e+00 -> 0x00000000ffffffff
+f64_to_u32_imm1: 1.00000000000000e+00 -> 0x0000000000000002
+f64_to_u32_imm32: -1.00000000000000e+00 -> 0x0000000000000000
+f64_to_u32_imm1: -1.00000000000000e+00 -> 0x0000000000000000
+f64_to_u32_imm32: nan -> 0x0000000000000000
+f64_to_u32_imm1: nan -> 0x0000000000000000
+f64_to_u32_imm32: -1.00000010000000e+05 -> 0x0000000000000000
+f64_to_u32_imm1: -1.00000010000000e+05 -> 0x0000000000000000
+f64_to_u32_imm32: -9.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -9.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -8.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -8.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -7.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -7.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -6.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -6.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -5.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -5.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -4.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -4.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -3.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -3.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -2.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -2.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -1.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm1: -1.00000100000000e+04 -> 0x0000000000000000
+f64_to_u32_imm32: -9.99999999476131e-03 -> 0x0000000000000000
+f64_to_u32_imm1: -9.99999999476131e-03 -> 0x0000000000000000
+f64_to_u32_imm32: 9.99999000000001e+03 -> 0x00000000ffffffff
+f64_to_u32_imm1: 9.99999000000001e+03 -> 0x0000000000004e1f
+f64_to_u32_imm32: 1.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 1.99999900000000e+04 -> 0x0000000000009c3f
+f64_to_u32_imm32: 2.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 2.99999900000000e+04 -> 0x000000000000ea5f
+f64_to_u32_imm32: 3.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 3.99999900000000e+04 -> 0x000000000001387f
+f64_to_u32_imm32: 4.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 4.99999900000000e+04 -> 0x000000000001869f
+f64_to_u32_imm32: 5.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 5.99999900000000e+04 -> 0x000000000001d4bf
+f64_to_u32_imm32: 6.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 6.99999900000000e+04 -> 0x00000000000222df
+f64_to_u32_imm32: 7.99999900000000e+04 -> 0x00000000ffffffff
+f64_to_u32_imm1: 7.99999900000000e+04 -> 0x00000000000270ff
+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
Modified: trunk/none/tests/arm/vcvt_fixed_float_VFP.c (+101 -0)
===================================================================
--- trunk/none/tests/arm/vcvt_fixed_float_VFP.c 2013-03-05 14:27:44 +00:00 (rev 13312)
+++ trunk/none/tests/arm/vcvt_fixed_float_VFP.c 2013-03-06 08:35:12 +00:00 (rev 13313)
@@ -2,6 +2,8 @@
#include <stdio.h>
#include <string.h>
+typedef unsigned long long int ULong;
+
__attribute__((noinline)) float s32_to_f32_imm1(int x)
{
float y;
@@ -130,9 +132,90 @@
+__attribute__((noinline)) ULong f64_to_s32_imm1 ( double d )
+{
+ double block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = d;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr d14, [r8, #8]" "\n\t"
+ "vcvt.s32.f64 d14,d14,#1" "\n\t"
+ "vstr d14, [r8,#24]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"d14","r8","memory"
+ );
+ return *(ULong*)(&block[3]);
+}
+
+__attribute__((noinline)) ULong f64_to_s32_imm32 ( double d )
+{
+ double block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = d;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr d14, [r8, #8]" "\n\t"
+ "vcvt.s32.f64 d14,d14,#32" "\n\t"
+ "vstr d14, [r8,#24]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"d14","r8","memory"
+ );
+ return *(ULong*)(&block[3]);
+}
+
+void try_f64_to_s32 ( double d )
+{
+ ULong res = f64_to_s32_imm32(d);
+ printf("f64_to_s32_imm32: %18.14e -> 0x%016llx\n", d, res);
+ res = f64_to_s32_imm1(d);
+ printf("f64_to_s32_imm1: %18.14e -> 0x%016llx\n", d, res);
+}
+
+
+
+__attribute__((noinline)) ULong f64_to_u32_imm1 ( double d )
+{
+ double block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = d;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr d14, [r8, #8]" "\n\t"
+ "vcvt.u32.f64 d14,d14,#1" "\n\t"
+ "vstr d14, [r8,#24]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"d14","r8","memory"
+ );
+ return *(ULong*)(&block[3]);
+}
+
+__attribute__((noinline)) ULong f64_to_u32_imm32 ( double d )
+{
+ double block[5];
+ memset(block, 0x55, sizeof(block));
+ block[1] = d;
+ __asm__ __volatile__(
+ "mov r8, %0" "\n\t"
+ "vldr d14, [r8, #8]" "\n\t"
+ "vcvt.u32.f64 d14,d14,#32" "\n\t"
+ "vstr d14, [r8,#24]" "\n\t"
+ : : /*IN*/"r"(&block[0]) : /*TRASH*/"d14","r8","memory"
+ );
+ return *(ULong*)(&block[3]);
+}
+
+void try_f64_to_u32 ( double d )
+{
+ ULong res = f64_to_u32_imm32(d);
+ printf("f64_to_u32_imm32: %18.14e -> 0x%016llx\n", d, res);
+ res = f64_to_u32_imm1(d);
+ printf("f64_to_u32_imm1: %18.14e -> 0x%016llx\n", d, res);
+}
+
+
+
int main ( void )
{
int i;
+ double d;
try_s32_to_f32(0);
try_s32_to_f32(1);
@@ -188,5 +271,23 @@
try_u32_to_f64(0xFFFFFFFE);
try_u32_to_f64(0xFFFFFFFF);
+ printf("\n");
+ try_f64_to_s32(0.0);
+ try_f64_to_s32(1.0);
+ try_f64_to_s32(-1.0);
+ try_f64_to_s32(0.0 / 0.0);
+ for (d = -100000.01; d < 100000.0; d += 10000.0) {
+ try_f64_to_s32(d);
+ }
+
+ printf("\n");
+ try_f64_to_u32(0.0);
+ try_f64_to_u32(1.0);
+ try_f64_to_u32(-1.0);
+ try_f64_to_u32(0.0 / 0.0);
+ for (d = -100000.01; d < 100000.0; d += 10000.0) {
+ try_f64_to_u32(d);
+ }
+
return 0;
}
|