blob: ba58941b7b49290f91fe264dce99b4de1d666fe0 [file] [log] [blame]
#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;
}