]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test cases for VCVT.{S,U}32.F32, S[n], S[n], #imm.
authorJulian Seward <jseward@acm.org>
Mon, 17 Aug 2015 08:23:31 +0000 (08:23 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 17 Aug 2015 08:23:31 +0000 (08:23 +0000)
Pertains to #342783.

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

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

index 5d988648b78148b13076658f699803d41b4a7ece..17a6ece402bd812c0cb11dee5bd07e67afa481da 100644 (file)
@@ -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;
 }
index 64e62af4c187d36507650f1eea5e1fdf68380294..bfc0032305f29c750582f2f390d33435bfa80728 100644 (file)
@@ -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