qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 29/46] tests/tcg/aarch64: add fcvt test cases


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH v3 29/46] tests/tcg/aarch64: add fcvt test cases for AArch64
Date: Wed, 25 Apr 2018 11:22:34 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

On 04/24/2018 12:23 PM, Alex Bennée wrote:
> This runs through the usual float to float conversions and crucially
> also runs with ARM Alternative Half Precision Format.
> 
> Signed-off-by: Alex Bennée <address@hidden>

tested with "tests/tcg/aarch64/Makefile.include" containing:
DOCKER_IMAGE=debian-arm64-cross
DOCKER_CROSS_COMPILER=aarch64-linux-gnu-gcc

Tested-by: Philippe Mathieu-Daudé <address@hidden>

> ---
>  tests/tcg/aarch64/Makefile.target |    8 +
>  tests/tcg/aarch64/fcvt.c          |  260 ++++++
>  tests/tcg/aarch64/fcvt.out        | 1305 +++++++++++++++++++++++++++++
>  tests/tcg/arm/Makefile.target     |    4 +-
>  4 files changed, 1576 insertions(+), 1 deletion(-)
>  create mode 100644 tests/tcg/aarch64/fcvt.c
>  create mode 100644 tests/tcg/aarch64/fcvt.out
> 
> diff --git a/tests/tcg/aarch64/Makefile.target 
> b/tests/tcg/aarch64/Makefile.target
> index 4ac8fbe73f..26be1c58ef 100644
> --- a/tests/tcg/aarch64/Makefile.target
> +++ b/tests/tcg/aarch64/Makefile.target
> @@ -2,4 +2,12 @@
>  #
>  # AArch64 specific tweaks
>  
> +AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64
> +VPATH                += $(AARCH64_SRC)
> +
> +# we don't build any of the ARM tests
> +AARCH64_TESTS=$(filter-out $(ARM_TESTS), $(TESTS))
> +AARCH64_TESTS+=fcvt
> +TESTS:=$(AARCH64_TESTS)
> +
>  fcvt: LDFLAGS+=-lm
> diff --git a/tests/tcg/aarch64/fcvt.c b/tests/tcg/aarch64/fcvt.c
> new file mode 100644
> index 0000000000..e8d322e0bd
> --- /dev/null
> +++ b/tests/tcg/aarch64/fcvt.c
> @@ -0,0 +1,260 @@
> +/*
> + * Test Floating Point Conversion
> + */
> +
> +#include <stdio.h>
> +#include <inttypes.h>
> +#include <math.h>
> +#include <float.h>
> +#include <fenv.h>
> +
> +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> +
> +static char flag_str[256];
> +
> +static char *get_flag_state(int flags)
> +{
> +    if (flags) {
> +        snprintf(flag_str, sizeof(flag_str), "%s %s %s %s %s",
> +                 flags & FE_OVERFLOW ? "OVERFLOW" : "",
> +                 flags & FE_UNDERFLOW ? "UNDERFLOW" : "",
> +                 flags & FE_DIVBYZERO ? "DIV0" : "",
> +                 flags & FE_INEXACT ? "INEXACT" : "",
> +                 flags & FE_INVALID ? "INVALID" : "");
> +    } else {
> +        snprintf(flag_str, sizeof(flag_str), "OK");
> +    }
> +
> +    return flag_str;
> +}
> +
> +static void print_double_number(int i, double num)
> +{
> +    uint64_t double_as_hex = *(uint64_t *) &num;
> +    int flags = fetestexcept(FE_ALL_EXCEPT);
> +    char *fstr = get_flag_state(flags);
> +
> +    printf("%02d DOUBLE: %02.20e / %#020lx  (%#x => %s)\n",
> +           i, num, double_as_hex, flags, fstr);
> +}
> +
> +static void print_single_number(int i, float num)
> +{
> +    uint32_t single_as_hex = *(uint32_t *) &num;
> +    int flags = fetestexcept(FE_ALL_EXCEPT);
> +    char *fstr = get_flag_state(flags);
> +
> +    printf("%02d SINGLE: %02.20e / %#010x  (%#x => %s)\n",
> +           i, num, single_as_hex, flags, fstr);
> +}
> +
> +static void print_half_number(int i, uint16_t num)
> +{
> +    int flags = fetestexcept(FE_ALL_EXCEPT);
> +    char *fstr = get_flag_state(flags);
> +
> +    printf("%02d   HALF: %#04x  (%#x => %s)\n",
> +           i, num, flags, fstr);
> +}
> +
> +float single_numbers[] = { -FLT_MAX, -FLT_MIN,
> +                           0.0,
> +                           FLT_MIN,
> +                           1.0, 2.0,
> +                           M_E, M_PI,
> +                           0x9EA82A22,
> +                           0xAB98FBA8,
> +                           FLT_MAX };
> +
> +static void convert_single_to_half(void)
> +{
> +    int i;
> +
> +    printf("Converting single-precision to half-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) {
> +        float input = single_numbers[i];
> +        uint16_t output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_single_number(i, input);
> +        asm("fcvt %h0, %d1" : "=w" (output) : "x" (input));
> +        print_half_number(i, output);
> +    }
> +}
> +
> +static void convert_single_to_double(void)
> +{
> +    int i;
> +
> +    printf("Converting single-precision to double-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) {
> +        float input = single_numbers[i];
> +        uint64_t output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_single_number(i, input);
> +        asm("fcvt %h0, %d1" : "=w" (output) : "x" (input));
> +        print_double_number(i, output);
> +    }
> +}
> +
> +double double_numbers[] = { -DBL_MAX,
> +                            -2.0, -1.0,
> +                            -DBL_MIN,
> +                            0.0,
> +                            DBL_MIN,
> +                            1.0, 2.0,
> +                            M_E, M_PI,
> +                            0x9EA82A2287680UL,
> +                            0xAB98FBA843210UL,
> +                            DBL_MAX };
> +
> +static void convert_double_to_half(void)
> +{
> +    int i;
> +
> +    printf("Converting double-precision to half-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) {
> +        double input = double_numbers[i];
> +        uint16_t output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_double_number(i, input);
> +
> +        /* as we don't have _Float16 support */
> +        asm("fcvt %h0, %d1" : "=w" (output) : "x" (input));
> +        print_half_number(i, output);
> +    }
> +}
> +
> +static void convert_double_to_single(void)
> +{
> +    int i;
> +
> +    printf("Converting double-precision to single-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) {
> +        double input = double_numbers[i];
> +        uint32_t output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_double_number(i, input);
> +
> +        asm("fcvt %s0, %d1" : "=w" (output) : "x" (input));
> +
> +        print_single_number(i, output);
> +    }
> +}
> +
> +/* no handy defines for these numbers */
> +uint16_t half_numbers[] = {
> +    0xffff, /* -NaN / AHP -Max */
> +    0xfcff, /* -NaN / AHP */
> +    0xfc01, /* -NaN / AHP */
> +    0xfc00, /* -Inf */
> +    0xfbff, /* -Max */
> +    0xc000, /* -2 */
> +    0xbc00, /* -1 */
> +    0x8001, /* -MIN subnormal */
> +    0x8000, /* -0 */
> +    0x0000, /* +0 */
> +    0x0001, /* MIN subnormal */
> +    0x3c00, /* 1 */
> +    0x7bff, /* Max */
> +    0x7c00, /* Inf */
> +    0x7c01, /* NaN / AHP */
> +    0x7cff, /* NaN / AHP */
> +    0x7fff, /* NaN / AHP +Max*/
> +};
> +
> +static void convert_half_to_double(void)
> +{
> +    int i;
> +
> +    printf("Converting half-precision to double-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(half_numbers); ++i) {
> +        uint16_t input = half_numbers[i];
> +        double output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_half_number(i, input);
> +        asm("fcvt %d0, %h1" : "=w" (output) : "x" (input));
> +        print_double_number(i, output);
> +    }
> +}
> +
> +static void convert_half_to_single(void)
> +{
> +    int i;
> +
> +    printf("Converting half-precision to single-precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(half_numbers); ++i) {
> +        uint16_t input = half_numbers[i];
> +        float output;
> +
> +        feclearexcept(FE_ALL_EXCEPT);
> +
> +        print_half_number(i, input);
> +        asm("fcvt %s0, %h1" : "=w" (output) : "x" (input));
> +        print_single_number(i, output);
> +    }
> +}
> +
> +typedef struct {
> +    int flag;
> +    char *desc;
> +} float_mapping;
> +
> +float_mapping round_flags[] = {
> +    { FE_TONEAREST, "to nearest" },
> +    { FE_UPWARD, "upwards" },
> +    { FE_DOWNWARD, "downwards" },
> +    { FE_TOWARDZERO, "to zero" }
> +};
> +
> +int main(int argc, char *argv[argc])
> +{
> +    int i;
> +
> +    for (i = 0; i < ARRAY_SIZE(round_flags); ++i) {
> +        fesetround(round_flags[i].flag);
> +        printf("### Rounding %s\n", round_flags[i].desc);
> +        convert_single_to_half();
> +        convert_single_to_double();
> +        convert_double_to_half();
> +        convert_double_to_single();
> +        convert_half_to_single();
> +        convert_half_to_double();
> +    }
> +
> +    /* And now with ARM alternative FP16 */
> +    asm("msr fpsr, x1\n\t"
> +        "orr x1, x1, %[flags]\n\t"
> +        "mrs x1, fpsr\n\t"
> +        : /* no output */ : [flags] "n" (1 << 26) : "x1" );
> +
> +    printf("#### Enabling ARM Alternative Half Precision\n");
> +
> +    for (i = 0; i < ARRAY_SIZE(round_flags); ++i) {
> +        fesetround(round_flags[i].flag);
> +        printf("### Rounding %s\n", round_flags[i].desc);
> +        convert_single_to_half();
> +        convert_single_to_double();
> +        convert_double_to_half();
> +        convert_double_to_single();
> +        convert_half_to_single();
> +        convert_half_to_double();
> +    }
> +
> +    return 0;
> +}
> diff --git a/tests/tcg/aarch64/fcvt.out b/tests/tcg/aarch64/fcvt.out
> new file mode 100644
> index 0000000000..48e62ac955
> --- /dev/null
> +++ b/tests/tcg/aarch64/fcvt.out
> @@ -0,0 +1,1305 @@
> +### Rounding to nearest
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fc00  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x00004170  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007c00  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding upwards
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fbff  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x00004170  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004249  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007c00  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518144000000000000e+09 / 0x4eb23d51  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding downwards
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fc00  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008001  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x0000416f  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007bff  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding to zero
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fbff  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x0000416f  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007bff  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +#### Enabling ARM Alternative Half Precision
> +### Rounding to nearest
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fc00  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x00004170  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007c00  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding upwards
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fbff  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x00004170  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004249  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007c00  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518144000000000000e+09 / 0x4eb23d51  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding downwards
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fc00  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008001  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x0000416f  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007bff  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +### Rounding to zero
> +Converting single-precision to half-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02   HALF: 0000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +Converting single-precision to double-precision
> +00 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
> +00 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +01 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
> +01 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +02 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +02 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +03 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
> +03 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +04 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +05 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
> +05 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +06 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
> +06 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +07 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
> +07 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +08 SINGLE: 2.66182092800000000000e+09 / 0x4f1ea82a  (0 => OK)
> +08 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +09 SINGLE: 2.87892992000000000000e+09 / 0x4f2b98fc  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +10 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
> +10 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0x18 =>  
> UNDERFLOW  INEXACT )
> +Converting double-precision to half-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00   HALF: 0x0000fbff  (0x14 => OVERFLOW   INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01   HALF: 0x0000c000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02   HALF: 0x0000bc00  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03   HALF: 0x00008000  (0x18 =>  UNDERFLOW  INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04   HALF: 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05   HALF: 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06   HALF: 0x00003c00  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07   HALF: 0x00004000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08   HALF: 0x0000416f  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09   HALF: 0x00004248  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10   HALF: 0x00007bff  (0x14 => OVERFLOW   INEXACT )
> +Converting double-precision to single-precision
> +00 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff  (0 => OK)
> +00 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   
> INEXACT )
> +01 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +01 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
> +02 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +02 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
> +03 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000  (0 => OK)
> +03 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +04 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +04 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
> +05 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000  (0 => OK)
> +05 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  
> INEXACT )
> +06 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +06 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
> +07 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000  (0 => OK)
> +07 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
> +08 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769  (0 => OK)
> +08 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
> +09 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18  (0 => OK)
> +09 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
> +10 DOUBLE: 2.79112157760473600000e+15 / 0x004323d5054450ed00  (0 => OK)
> +10 SINGLE: 1.49518131200000000000e+09 / 0x4eb23d50  (0x10 =>    INEXACT )
> +Converting half-precision to single-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> +Converting half-precision to double-precision
> +00   HALF: 0x0000ffff  (0 => OK)
> +00 DOUBLE: -nan / 0x00fffffc0000000000  (0 => OK)
> +01   HALF: 0x0000fcff  (0 => OK)
> +01 DOUBLE: -nan / 0x00fffbfc0000000000  (0x1 =>     INVALID)
> +02   HALF: 0x0000fc01  (0 => OK)
> +02 DOUBLE: -nan / 0x00fff8040000000000  (0x1 =>     INVALID)
> +03   HALF: 0x0000fc00  (0 => OK)
> +03 DOUBLE: -inf / 0x00fff0000000000000  (0 => OK)
> +04   HALF: 0x0000fbff  (0 => OK)
> +04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000  (0 => OK)
> +05   HALF: 0x0000c000  (0 => OK)
> +05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000  (0 => OK)
> +06   HALF: 0x0000bc00  (0 => OK)
> +06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000  (0 => OK)
> +07   HALF: 0x00008001  (0 => OK)
> +07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000  (0 => OK)
> +08   HALF: 0x00008000  (0 => OK)
> +08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000  (0 => OK)
> +09   HALF: 0000000000  (0 => OK)
> +09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000  (0 => OK)
> +10   HALF: 0x00000001  (0 => OK)
> +10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000  (0 => OK)
> +11   HALF: 0x00003c00  (0 => OK)
> +11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000  (0 => OK)
> +12   HALF: 0x00007bff  (0 => OK)
> +12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000  (0 => OK)
> +13   HALF: 0x00007c00  (0 => OK)
> +13 DOUBLE: inf / 0x007ff0000000000000  (0 => OK)
> +14   HALF: 0x00007c01  (0 => OK)
> +14 DOUBLE: nan / 0x007ff8040000000000  (0x1 =>     INVALID)
> +15   HALF: 0x00007cff  (0 => OK)
> +15 DOUBLE: nan / 0x007ffbfc0000000000  (0x1 =>     INVALID)
> +16   HALF: 0x00007fff  (0 => OK)
> +16 DOUBLE: nan / 0x007ffffc0000000000  (0 => OK)
> diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
> index be9d3fb4a1..f1c7ec46b5 100644
> --- a/tests/tcg/arm/Makefile.target
> +++ b/tests/tcg/arm/Makefile.target
> @@ -8,7 +8,9 @@ ARM_SRC=$(SRC_PATH)/tests/tcg/arm
>  # Set search path for all sources
>  VPATH                += $(ARM_SRC)
>  
> -TESTS += hello-arm test-arm-iwmmxt
> +ARM_TESTS=hello-arm test-arm-iwmmxt
> +
> +TESTS += $(ARM_TESTS)
>  
>  hello-arm: CFLAGS+=-marm -ffreestanding
>  hello-arm: LDFLAGS+=-nostdlib
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]