]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test cases for {S,U}CVTF fixedpt-to-fp.
authorJulian Seward <jseward@acm.org>
Thu, 20 Nov 2014 10:11:00 +0000 (10:11 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 20 Nov 2014 10:11:00 +0000 (10:11 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14738

none/tests/arm64/Makefile.am
none/tests/arm64/cvtf_imm.c [new file with mode: 0644]
none/tests/arm64/cvtf_imm.stderr.exp [new file with mode: 0644]
none/tests/arm64/cvtf_imm.stdout.exp [new file with mode: 0644]
none/tests/arm64/cvtf_imm.vgtest [new file with mode: 0644]

index e5a146ea007dfd3f874fd2507fc78db2be2be425..135d64fb725155f76c5313794d539b46ec7e562b 100644 (file)
@@ -4,12 +4,14 @@ include $(top_srcdir)/Makefile.tool-tests.am
 dist_noinst_SCRIPTS = filter_stderr
 
 EXTRA_DIST = \
+        cvtf_imm.stdout.exp cvtf_imm.stderr.exp cvtf_imm.vgtest \
        fp_and_simd.stdout.exp fp_and_simd.stderr.exp fp_and_simd.vgtest \
        integer.stdout.exp integer.stderr.exp integer.vgtest \
        memory.stdout.exp memory.stderr.exp memory.vgtest
 
 check_PROGRAMS = \
        allexec \
+        cvtf_imm \
        fp_and_simd \
        integer \
        memory
diff --git a/none/tests/arm64/cvtf_imm.c b/none/tests/arm64/cvtf_imm.c
new file mode 100644 (file)
index 0000000..ba58941
--- /dev/null
@@ -0,0 +1,452 @@
+
+#include <stdio.h>
+#include <assert.h>
+
+typedef    signed long long int  Long;
+typedef  unsigned long long int  ULong;
+
+typedef    signed int  Int;
+typedef  unsigned int  UInt;
+
+typedef  union { double d64; float f32[2]; unsigned long long int i64; }  U;
+
+//////////////////// D from X ////////////////////
+
+__attribute__((noinline)) double do_scvtf_d_x_imm1 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,x13,#1;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_scvtf_d_x_imm32 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,x13,#32;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_scvtf_d_x_imm64 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,x13,#64;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+
+__attribute__((noinline)) double do_ucvtf_d_x_imm1 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,x13,#1;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_ucvtf_d_x_imm32 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,x13,#32;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_ucvtf_d_x_imm64 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,x13,#64;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+
+
+//////////////////// D from W ////////////////////
+
+__attribute__((noinline)) double do_scvtf_d_w_imm1 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,w13,#1;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_scvtf_d_w_imm16 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,w13,#16;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_scvtf_d_w_imm32 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf d18,w13,#32;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+
+__attribute__((noinline)) double do_ucvtf_d_w_imm1 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,w13,#1;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_ucvtf_d_w_imm16 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,w13,#16;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+__attribute__((noinline)) double do_ucvtf_d_w_imm32 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf d18,w13,#32;  str d18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return block[1].d64;
+}
+
+
+//////////////////// S from X ////////////////////
+
+__attribute__((noinline)) double do_scvtf_s_x_imm1 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,x13,#1;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_scvtf_s_x_imm32 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,x13,#32;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_scvtf_s_x_imm64 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,x13,#64;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+
+__attribute__((noinline)) double do_ucvtf_s_x_imm1 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,x13,#1;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_ucvtf_s_x_imm32 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,x13,#32;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_ucvtf_s_x_imm64 ( Long x )
+{
+   U block[2]; block[0].i64 = x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,x13,#64;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+
+
+//////////////////// S from W ////////////////////
+
+__attribute__((noinline)) double do_scvtf_s_w_imm1 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,w13,#1;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_scvtf_s_w_imm16 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,w13,#16;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_scvtf_s_w_imm32 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  scvtf s18,w13,#32;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+
+__attribute__((noinline)) double do_ucvtf_s_w_imm1 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,w13,#1;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_ucvtf_s_w_imm16 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,w13,#16;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+__attribute__((noinline)) double do_ucvtf_s_w_imm32 ( Int x )
+{
+   U block[2]; block[0].i64 = (Long)x; block[1].i64 = 0;
+   __asm__ __volatile__(
+      "ldr x13,[%0,#0];  ucvtf s18,w13,#32;  str s18, [%0,#8]"
+      ::"r"(&block[0]) : "memory", "x13","q18");
+   return (double)block[1].f32[0];
+}
+
+
+
+
+
+int main ( void )
+{
+  assert(sizeof(U) == 8);
+
+  //////////////////// D from X ////////////////////
+#if 1
+  printf("\nscvtf_d_x_imm1\n");
+  printf("%18.12e\n", do_scvtf_d_x_imm1(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm1(0));
+  printf("%18.12e\n", do_scvtf_d_x_imm1(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm1(1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm1(-1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm1(0x8000000000000000UL));
+
+  printf("\nscvtf_d_x_imm32\n");
+  printf("%18.12e\n", do_scvtf_d_x_imm32(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm32(0));
+  printf("%18.12e\n", do_scvtf_d_x_imm32(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm32(1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm32(-1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm32(0x8000000000000000UL));
+
+  printf("\nscvtf_d_x_imm64\n");
+  printf("%18.12e\n", do_scvtf_d_x_imm64(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm64(0));
+  printf("%18.12e\n", do_scvtf_d_x_imm64(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_d_x_imm64(1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm64(-1234));
+  printf("%18.12e\n", do_scvtf_d_x_imm64(0x8000000000000000UL));
+
+  printf("\nucvtf_d_x_imm1\n");
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(0));
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(-1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm1(0x8000000000000000UL));
+
+  printf("\nucvtf_d_x_imm32\n");
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(0));
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(-1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm32(0x8000000000000000UL));
+
+  printf("\nucvtf_d_x_imm64\n");
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(0));
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(-1234));
+  printf("%18.12e\n", do_ucvtf_d_x_imm64(0x8000000000000000UL));
+
+  //////////////////// D from W ////////////////////
+
+  printf("\nscvtf_d_w_imm1\n");
+  printf("%18.12e\n", do_scvtf_d_w_imm1(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm1(0));
+  printf("%18.12e\n", do_scvtf_d_w_imm1(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm1(1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm1(-1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm1(0x80000000));
+
+  printf("\nscvtf_d_w_imm16\n");
+  printf("%18.12e\n", do_scvtf_d_w_imm16(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm16(0));
+  printf("%18.12e\n", do_scvtf_d_w_imm16(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm16(1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm16(-1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm16(0x80000000));
+
+  printf("\nscvtf_d_w_imm32\n");
+  printf("%18.12e\n", do_scvtf_d_w_imm32(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm32(0));
+  printf("%18.12e\n", do_scvtf_d_w_imm32(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_d_w_imm32(1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm32(-1234));
+  printf("%18.12e\n", do_scvtf_d_w_imm32(0x80000000));
+
+  printf("\nucvtf_d_w_imm1\n");
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(0));
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(-1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm1(0x80000000));
+
+  printf("\nucvtf_d_w_imm16\n");
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(0));
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(-1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm16(0x80000000));
+
+  printf("\nucvtf_d_w_imm32\n");
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(0));
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(-1234));
+  printf("%18.12e\n", do_ucvtf_d_w_imm32(0x80000000));
+
+  //////////////////// S from X ////////////////////
+
+  printf("\nscvtf_s_x_imm1\n");
+  printf("%18.12e\n", do_scvtf_s_x_imm1(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm1(0));
+  printf("%18.12e\n", do_scvtf_s_x_imm1(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm1(1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm1(-1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm1(0x8000000000000000UL));
+
+  printf("\nscvtf_s_x_imm32\n");
+  printf("%18.12e\n", do_scvtf_s_x_imm32(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm32(0));
+  printf("%18.12e\n", do_scvtf_s_x_imm32(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm32(1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm32(-1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm32(0x8000000000000000UL));
+
+  printf("\nscvtf_s_x_imm64\n");
+  printf("%18.12e\n", do_scvtf_s_x_imm64(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm64(0));
+  printf("%18.12e\n", do_scvtf_s_x_imm64(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_scvtf_s_x_imm64(1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm64(-1234));
+  printf("%18.12e\n", do_scvtf_s_x_imm64(0x8000000000000000UL));
+
+  printf("\nucvtf_s_x_imm1\n");
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(0));
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(-1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm1(0x8000000000000000UL));
+
+  printf("\nucvtf_s_x_imm32\n");
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(0));
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(-1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm32(0x8000000000000000UL));
+
+  printf("\nucvtf_s_x_imm64\n");
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(0xFFFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(0));
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(0x7FFFFFFFFFFFFFFFUL));
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(-1234));
+  printf("%18.12e\n", do_ucvtf_s_x_imm64(0x8000000000000000UL));
+
+  //////////////////// S from W ////////////////////
+
+  printf("\nscvtf_s_w_imm1\n");
+  printf("%18.12e\n", do_scvtf_s_w_imm1(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm1(0));
+  printf("%18.12e\n", do_scvtf_s_w_imm1(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm1(1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm1(-1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm1(0x80000000));
+
+  printf("\nscvtf_s_w_imm16\n");
+  printf("%18.12e\n", do_scvtf_s_w_imm16(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm16(0));
+  printf("%18.12e\n", do_scvtf_s_w_imm16(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm16(1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm16(-1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm16(0x80000000));
+
+  printf("\nscvtf_s_w_imm32\n");
+  printf("%18.12e\n", do_scvtf_s_w_imm32(0xFFFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm32(0));
+  printf("%18.12e\n", do_scvtf_s_w_imm32(0x7FFFFFFF));
+  printf("%18.12e\n", do_scvtf_s_w_imm32(1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm32(-1234));
+  printf("%18.12e\n", do_scvtf_s_w_imm32(0x80000000));
+
+  printf("\nucvtf_s_w_imm1\n");
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(0));
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(1234));
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(-1234));
+  printf("%18.12e\n", do_ucvtf_s_w_imm1(0x80000000));
+
+  printf("\nucvtf_s_w_imm16\n");
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(0));
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(1234));
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(-1234));
+  printf("%18.12e\n", do_ucvtf_s_w_imm16(0x80000000));
+
+  printf("\nucvtf_s_w_imm32\n");
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(0xFFFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(0));
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(0x7FFFFFFF));
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(1234));
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(-1234));
+#endif
+  printf("%18.12e\n", do_ucvtf_s_w_imm32(0x80000000));
+
+
+
+
+#if 0
+int i;
+double d = -4.90;
+for (i = 0; i < 100; i++) {
+   printf("frintx_d(%f) = %f\n", d, do_frintx_d(d));
+   d += 0.1 * (1.0 - 1.0 / 30.0);
+}
+
+float f = -4.90;
+for (i = 0; i < 100; i++) {
+   printf("frintx_s(%f) = %f\n", f, do_frintx_s(f));
+   f += 0.1 * (1.0 - 1.0 / 30.0);
+}
+#endif
+
+  return 0;
+}
diff --git a/none/tests/arm64/cvtf_imm.stderr.exp b/none/tests/arm64/cvtf_imm.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/none/tests/arm64/cvtf_imm.stdout.exp b/none/tests/arm64/cvtf_imm.stdout.exp
new file mode 100644 (file)
index 0000000..c4067f8
--- /dev/null
@@ -0,0 +1,192 @@
+
+scvtf_d_x_imm1
+-5.000000000000e-01
+0.000000000000e+00
+4.611686018427e+18
+6.170000000000e+02
+-6.170000000000e+02
+-4.611686018427e+18
+
+scvtf_d_x_imm32
+-2.328306436539e-10
+0.000000000000e+00
+2.147483648000e+09
+2.873130142689e-07
+-2.873130142689e-07
+-2.147483648000e+09
+
+scvtf_d_x_imm64
+-5.421010862428e-20
+0.000000000000e+00
+5.000000000000e-01
+6.689527404236e-17
+-6.689527404236e-17
+-5.000000000000e-01
+
+ucvtf_d_x_imm1
+9.223372036855e+18
+0.000000000000e+00
+4.611686018427e+18
+6.170000000000e+02
+9.223372036855e+18
+4.611686018427e+18
+
+ucvtf_d_x_imm32
+4.294967296000e+09
+0.000000000000e+00
+2.147483648000e+09
+2.873130142689e-07
+4.294967296000e+09
+2.147483648000e+09
+
+ucvtf_d_x_imm64
+1.000000000000e+00
+0.000000000000e+00
+5.000000000000e-01
+6.689527404236e-17
+1.000000000000e+00
+5.000000000000e-01
+
+scvtf_d_w_imm1
+-5.000000000000e-01
+0.000000000000e+00
+1.073741823500e+09
+6.170000000000e+02
+-6.170000000000e+02
+-1.073741824000e+09
+
+scvtf_d_w_imm16
+-1.525878906250e-05
+0.000000000000e+00
+3.276799998474e+04
+1.882934570312e-02
+-1.882934570312e-02
+-3.276800000000e+04
+
+scvtf_d_w_imm32
+-2.328306436539e-10
+0.000000000000e+00
+4.999999997672e-01
+2.873130142689e-07
+-2.873130142689e-07
+-5.000000000000e-01
+
+ucvtf_d_w_imm1
+2.147483647500e+09
+0.000000000000e+00
+1.073741823500e+09
+6.170000000000e+02
+2.147483031000e+09
+1.073741824000e+09
+
+ucvtf_d_w_imm16
+6.553599998474e+04
+0.000000000000e+00
+3.276799998474e+04
+1.882934570312e-02
+6.553598117065e+04
+3.276800000000e+04
+
+ucvtf_d_w_imm32
+9.999999997672e-01
+0.000000000000e+00
+4.999999997672e-01
+2.873130142689e-07
+9.999997126870e-01
+5.000000000000e-01
+
+scvtf_s_x_imm1
+-5.000000000000e-01
+0.000000000000e+00
+4.611686018427e+18
+6.170000000000e+02
+-6.170000000000e+02
+-4.611686018427e+18
+
+scvtf_s_x_imm32
+-2.328306436539e-10
+0.000000000000e+00
+2.147483648000e+09
+2.873130142689e-07
+-2.873130142689e-07
+-2.147483648000e+09
+
+scvtf_s_x_imm64
+-5.421010862428e-20
+0.000000000000e+00
+5.000000000000e-01
+6.689527404236e-17
+-6.689527404236e-17
+-5.000000000000e-01
+
+ucvtf_s_x_imm1
+9.223372036855e+18
+0.000000000000e+00
+4.611686018427e+18
+6.170000000000e+02
+9.223372036855e+18
+4.611686018427e+18
+
+ucvtf_s_x_imm32
+4.294967296000e+09
+0.000000000000e+00
+2.147483648000e+09
+2.873130142689e-07
+4.294967296000e+09
+2.147483648000e+09
+
+ucvtf_s_x_imm64
+1.000000000000e+00
+0.000000000000e+00
+5.000000000000e-01
+6.689527404236e-17
+1.000000000000e+00
+5.000000000000e-01
+
+scvtf_s_w_imm1
+-5.000000000000e-01
+0.000000000000e+00
+1.073741824000e+09
+6.170000000000e+02
+-6.170000000000e+02
+-1.073741824000e+09
+
+scvtf_s_w_imm16
+-1.525878906250e-05
+0.000000000000e+00
+3.276800000000e+04
+1.882934570312e-02
+-1.882934570312e-02
+-3.276800000000e+04
+
+scvtf_s_w_imm32
+-2.328306436539e-10
+0.000000000000e+00
+5.000000000000e-01
+2.873130142689e-07
+-2.873130142689e-07
+-5.000000000000e-01
+
+ucvtf_s_w_imm1
+2.147483648000e+09
+0.000000000000e+00
+1.073741824000e+09
+6.170000000000e+02
+2.147483008000e+09
+1.073741824000e+09
+
+ucvtf_s_w_imm16
+6.553600000000e+04
+0.000000000000e+00
+3.276800000000e+04
+1.882934570312e-02
+6.553598046875e+04
+3.276800000000e+04
+
+ucvtf_s_w_imm32
+1.000000000000e+00
+0.000000000000e+00
+5.000000000000e-01
+2.873130142689e-07
+9.999997019768e-01
+5.000000000000e-01
diff --git a/none/tests/arm64/cvtf_imm.vgtest b/none/tests/arm64/cvtf_imm.vgtest
new file mode 100644 (file)
index 0000000..8fa6566
--- /dev/null
@@ -0,0 +1,2 @@
+prog: cvtf_imm
+vgopts: -q