From: Julian Seward Date: Thu, 20 Nov 2014 10:11:00 +0000 (+0000) Subject: Add test cases for {S,U}CVTF fixedpt-to-fp. X-Git-Tag: svn/VALGRIND_3_11_0~811 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7f92b650820fc7197046cd20e8008d5b13004fe;p=thirdparty%2Fvalgrind.git Add test cases for {S,U}CVTF fixedpt-to-fp. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14738 --- diff --git a/none/tests/arm64/Makefile.am b/none/tests/arm64/Makefile.am index e5a146ea00..135d64fb72 100644 --- a/none/tests/arm64/Makefile.am +++ b/none/tests/arm64/Makefile.am @@ -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 index 0000000000..ba58941b7b --- /dev/null +++ b/none/tests/arm64/cvtf_imm.c @@ -0,0 +1,452 @@ + +#include +#include + +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 index 0000000000..e69de29bb2 diff --git a/none/tests/arm64/cvtf_imm.stdout.exp b/none/tests/arm64/cvtf_imm.stdout.exp new file mode 100644 index 0000000000..c4067f8644 --- /dev/null +++ b/none/tests/arm64/cvtf_imm.stdout.exp @@ -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 index 0000000000..8fa6566021 --- /dev/null +++ b/none/tests/arm64/cvtf_imm.vgtest @@ -0,0 +1,2 @@ +prog: cvtf_imm +vgopts: -q