]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test cases for VCVT.{S,U}32.F64 D[d], D[d], #frac_bits.
authorJulian Seward <jseward@acm.org>
Wed, 6 Mar 2013 08:35:12 +0000 (08:35 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 6 Mar 2013 08:35:12 +0000 (08:35 +0000)
Pertains to #315738.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13313

none/tests/arm/vcvt_fixed_float_VFP.c
none/tests/arm/vcvt_fixed_float_VFP.stdout.exp

index d9aaeb5ee61941d1a0b7b49814e15011cb0ea58e..5d988648b78148b13076658f699803d41b4a7ece 100644 (file)
@@ -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 @@ void try_u32_to_f64 ( int x )
 
 
 
+__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 @@ int main ( void  )
   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;
 }
index 92973d20d0c2acd4923d63095bab5cd17e9b2c6e..64e62af4c187d36507650f1eea5e1fdf68380294 100644 (file)
@@ -865,3 +865,105 @@ u32_to_f64_imm32:           -2  ->  9.99999999534339e-01
 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