All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
@ 2018-06-19 15:43 Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO Alex Bennée
                   ` (57 more replies)
  0 siblings, 58 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:

  Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)

are available in the Git repository at:

  https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1

for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:

  .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)

----------------------------------------------------------------
Add check-tcg machinary

This restores the ability to run TCG smoke tests by using our docker
infrastructure to support cross building simple tests. It represents
the first step to making better cross-architecture testing available
straight from the source tree ;-)

----------------------------------------------------------------
Alex Bennée (54):
      configure: add support for --cross-cc-FOO
      configure: move i386_cc to cross_cc_i386
      configure: allow user to specify --cross-cc-cflags-foo=
      configure: set cross_cc_FOO for host compiler
      docker: Add "cc" subcommand
      docker: extend "cc" command to accept compiler
      docker: allow "cc" command to run in user context
      docker: Makefile.include introduce DOCKER_SCRIPT
      tests/tcg: move architecture independent tests into subdir
      tests/tcg/multiarch: enable additional linux-test tests
      tests/tcg/multiarch: don't hard code paths/ports for linux-test
      tests/tcg/multiarch: move most output to stdout
      tests/tcg: move i386 specific tests into subdir
      tests/tcg: enable building for i386
      tests/tcg/i386: fix test-i386
      tests/tcg/i386: add runner for test-i386-fprem
      tests/tcg/x86_64: add Makefile.target
      tests/tcg/i386/test-i386: use modern vector_size attributes
      tests/tcg/i386/test-i386: fix printf format
      tests/tcg: move ARM specific tests into subdir
      tests/tcg: enable building for ARM
      tests/tcg/arm: fix up test-arm-iwmmxt test
      tests/tcg: enable building for AArch64
      tests/tcg/arm: add fcvt test cases for AArch32/64
      tests/tcg: move MIPS specific tests into subdir
      tests/tcg: enable building for MIPS
      tests/docker/Makefile.include: fix mipsel-cross dependancy
      tests/tcg/mips: include common mips hello-mips
      tests/tcg: enable building for s390x
      tests/tcg: enable building for ppc64
      tests/tcg: enable building for Alpha
      tests/tcg/alpha: add Alpha specific tests
      tests/tcg: enable building for HPPA
      tests/tcg: enable building for m68k
      tests/tcg: enable building for sh4
      tests/tcg: enable building for sparc64
      tests/tcg: enable building for mips64
      tests/tcg: enable building for RISCV64
      docker: move debian-powerpc-cross to sid based build
      tests/tcg: enable building for PowerPC
      tests/tcg/Makefile: update to be called from Makefile.target
      Makefile.target: add (clean-/build-)guest-tests targets
      tests/Makefile.include: add [build|clean|check]-tcg targets
      tests/tcg: add run, diff, and skip helper macros
      tests/tcg: override runners for broken tests
      tests/tcg/i386: extend timeout for runcom test
      tests: add top-level make dependency for docker builds
      docker: docker.py use "version" to probe usage
      docker: docker.py don't conflate checksums for extra_files
      docker: docker.py add check sub-command
      tests/Makefile: call sub-makes with SKIP_DOCKER_BUILD=1
      docker: docker.py adding age check command
      tests/docker/Makefile.include: only force SID to NOCACHE if old
      .travis.yml: add check-tcg test

Fam Zheng (2):
      tests/tcg/multiarch: Build fix for linux-test
      tests/tcg/i386: Build fix for hello-i386

 .travis.yml                                        |    8 +
 MAINTAINERS                                        |   15 +
 Makefile.target                                    |    5 +
 configure                                          |  134 +-
 tests/Makefile.include                             |   41 +-
 tests/docker/Makefile.include                      |   47 +-
 tests/docker/docker.py                             |  107 +-
 tests/docker/dockerfiles/debian-alpha-cross.docker |   12 +
 tests/docker/dockerfiles/debian-apt-fake.sh        |   46 -
 tests/docker/dockerfiles/debian-hppa-cross.docker  |   12 +
 tests/docker/dockerfiles/debian-m68k-cross.docker  |   12 +
 .../docker/dockerfiles/debian-mips64-cross.docker  |   12 +
 .../docker/dockerfiles/debian-powerpc-cross.docker |   39 +-
 .../docker/dockerfiles/debian-riscv64-cross.docker |   12 +
 tests/docker/dockerfiles/debian-sh4-cross.docker   |   12 +
 tests/docker/dockerfiles/debian-sid.docker         |   32 +
 .../docker/dockerfiles/debian-sparc64-cross.docker |   12 +
 tests/docker/dockerfiles/debian8.docker            |    3 -
 tests/tcg/Makefile                                 |  219 +-
 tests/tcg/Makefile.include                         |   88 +
 tests/tcg/Makefile.probe                           |   31 +
 tests/tcg/README                                   |   69 +-
 tests/tcg/aarch64/Makefile.include                 |    8 +
 tests/tcg/aarch64/Makefile.target                  |   17 +
 tests/tcg/aarch64/fcvt.ref                         | 3268 ++++++++++++++++++++
 tests/tcg/alpha/Makefile                           |   35 -
 tests/tcg/alpha/Makefile.include                   |    2 +
 tests/tcg/alpha/Makefile.target                    |   18 +
 tests/tcg/alpha/crt.s                              |   26 -
 tests/tcg/alpha/hello-alpha.c                      |    2 +
 tests/tcg/alpha/test-cond.c                        |    1 +
 tests/tcg/alpha/test-ovf.c                         |    2 +
 tests/tcg/arm/Makefile.include                     |    8 +
 tests/tcg/arm/Makefile.target                      |   32 +
 tests/tcg/arm/README                               |   11 +
 tests/tcg/arm/fcvt.c                               |  458 +++
 tests/tcg/arm/fcvt.ref                             | 3268 ++++++++++++++++++++
 tests/tcg/{ => arm}/hello-arm.c                    |    0
 .../{test-arm-iwmmxt.s => arm/test-arm-iwmmxt.S}   |    0
 tests/tcg/hppa/Makefile.include                    |    2 +
 tests/tcg/hppa/Makefile.target                     |    6 +
 tests/tcg/i386/Makefile.include                    |    9 +
 tests/tcg/i386/Makefile.target                     |   52 +
 tests/tcg/i386/README                              |   38 +
 tests/tcg/{ => i386}/hello-i386.c                  |    1 +
 tests/tcg/{ => i386}/pi_10.com                     |  Bin
 tests/tcg/{ => i386}/runcom.c                      |    0
 tests/tcg/{ => i386}/test-i386-code16.S            |    0
 tests/tcg/{ => i386}/test-i386-fprem.c             |   12 +-
 tests/tcg/{ => i386}/test-i386-muldiv.h            |    0
 tests/tcg/{ => i386}/test-i386-shift.h             |    0
 tests/tcg/{ => i386}/test-i386-ssse3.c             |    0
 tests/tcg/{ => i386}/test-i386-vm86.S              |    0
 tests/tcg/{ => i386}/test-i386.c                   |    7 +-
 tests/tcg/{ => i386}/test-i386.h                   |    0
 tests/tcg/m68k/Makefile.include                    |    2 +
 tests/tcg/m68k/Makefile.target                     |    7 +
 tests/tcg/mips/Makefile.include                    |   20 +
 tests/tcg/mips/Makefile.target                     |   22 +
 tests/tcg/mips/README                              |    7 +
 tests/tcg/{ => mips}/hello-mips.c                  |    0
 tests/tcg/multiarch/Makefile.target                |   36 +
 tests/tcg/multiarch/README                         |    1 +
 tests/tcg/{ => multiarch}/linux-test.c             |  150 +-
 tests/tcg/{ => multiarch}/sha1.c                   |    0
 tests/tcg/{ => multiarch}/test-mmap.c              |   40 +-
 tests/tcg/{ => multiarch}/testthread.c             |    0
 tests/tcg/ppc/Makefile.include                     |    7 +
 tests/tcg/ppc/Makefile.target                      |   12 +
 tests/tcg/riscv/Makefile.include                   |   10 +
 tests/tcg/s390x/Makefile.include                   |    2 +
 tests/tcg/sh4/Makefile.include                     |    4 +
 tests/tcg/sh4/Makefile.target                      |    7 +
 tests/tcg/sparc64/Makefile.include                 |    2 +
 tests/tcg/sparc64/Makefile.target                  |   11 +
 tests/tcg/test_path.c                              |  157 -
 tests/tcg/x86_64/Makefile.target                   |   15 +
 77 files changed, 8136 insertions(+), 627 deletions(-)
 create mode 100644 tests/docker/dockerfiles/debian-alpha-cross.docker
 delete mode 100755 tests/docker/dockerfiles/debian-apt-fake.sh
 create mode 100644 tests/docker/dockerfiles/debian-hppa-cross.docker
 create mode 100644 tests/docker/dockerfiles/debian-m68k-cross.docker
 create mode 100644 tests/docker/dockerfiles/debian-mips64-cross.docker
 create mode 100644 tests/docker/dockerfiles/debian-riscv64-cross.docker
 create mode 100644 tests/docker/dockerfiles/debian-sh4-cross.docker
 create mode 100644 tests/docker/dockerfiles/debian-sid.docker
 create mode 100644 tests/docker/dockerfiles/debian-sparc64-cross.docker
 create mode 100644 tests/tcg/Makefile.include
 create mode 100644 tests/tcg/Makefile.probe
 create mode 100644 tests/tcg/aarch64/Makefile.include
 create mode 100644 tests/tcg/aarch64/Makefile.target
 create mode 100644 tests/tcg/aarch64/fcvt.ref
 delete mode 100644 tests/tcg/alpha/Makefile
 create mode 100644 tests/tcg/alpha/Makefile.include
 create mode 100644 tests/tcg/alpha/Makefile.target
 delete mode 100644 tests/tcg/alpha/crt.s
 create mode 100644 tests/tcg/arm/Makefile.include
 create mode 100644 tests/tcg/arm/Makefile.target
 create mode 100644 tests/tcg/arm/README
 create mode 100644 tests/tcg/arm/fcvt.c
 create mode 100644 tests/tcg/arm/fcvt.ref
 rename tests/tcg/{ => arm}/hello-arm.c (100%)
 rename tests/tcg/{test-arm-iwmmxt.s => arm/test-arm-iwmmxt.S} (100%)
 create mode 100644 tests/tcg/hppa/Makefile.include
 create mode 100644 tests/tcg/hppa/Makefile.target
 create mode 100644 tests/tcg/i386/Makefile.include
 create mode 100644 tests/tcg/i386/Makefile.target
 create mode 100644 tests/tcg/i386/README
 rename tests/tcg/{ => i386}/hello-i386.c (96%)
 rename tests/tcg/{ => i386}/pi_10.com (100%)
 rename tests/tcg/{ => i386}/runcom.c (100%)
 rename tests/tcg/{ => i386}/test-i386-code16.S (100%)
 rename tests/tcg/{ => i386}/test-i386-fprem.c (97%)
 rename tests/tcg/{ => i386}/test-i386-muldiv.h (100%)
 rename tests/tcg/{ => i386}/test-i386-shift.h (100%)
 rename tests/tcg/{ => i386}/test-i386-ssse3.c (100%)
 rename tests/tcg/{ => i386}/test-i386-vm86.S (100%)
 rename tests/tcg/{ => i386}/test-i386.c (99%)
 rename tests/tcg/{ => i386}/test-i386.h (100%)
 create mode 100644 tests/tcg/m68k/Makefile.include
 create mode 100644 tests/tcg/m68k/Makefile.target
 create mode 100644 tests/tcg/mips/Makefile.include
 create mode 100644 tests/tcg/mips/Makefile.target
 create mode 100644 tests/tcg/mips/README
 rename tests/tcg/{ => mips}/hello-mips.c (100%)
 create mode 100644 tests/tcg/multiarch/Makefile.target
 create mode 100644 tests/tcg/multiarch/README
 rename tests/tcg/{ => multiarch}/linux-test.c (81%)
 rename tests/tcg/{ => multiarch}/sha1.c (100%)
 rename tests/tcg/{ => multiarch}/test-mmap.c (93%)
 rename tests/tcg/{ => multiarch}/testthread.c (100%)
 create mode 100644 tests/tcg/ppc/Makefile.include
 create mode 100644 tests/tcg/ppc/Makefile.target
 create mode 100644 tests/tcg/riscv/Makefile.include
 create mode 100644 tests/tcg/s390x/Makefile.include
 create mode 100644 tests/tcg/sh4/Makefile.include
 create mode 100644 tests/tcg/sh4/Makefile.target
 create mode 100644 tests/tcg/sparc64/Makefile.include
 create mode 100644 tests/tcg/sparc64/Makefile.target
 delete mode 100644 tests/tcg/test_path.c
 create mode 100644 tests/tcg/x86_64/Makefile.target

--
2.17.1

^ permalink raw reply	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-20 15:22   ` Peter Maydell
  2018-06-19 15:43 ` [Qemu-devel] [PULL 02/56] configure: move i386_cc to cross_cc_i386 Alex Bennée
                   ` (56 subsequent siblings)
  57 siblings, 1 reply; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This allows us to specify cross compilers for our guests. This is
useful for building test images/programs. Currently we re-run the
compile test for each target. I couldn't think of a way to cache the
value for a given arch without getting messier configure code.

The cross compiler for the guest is visible to each target as
CROSS_CC_GUEST in config-target.mak.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v3
  - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit...
  - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
  - add remaining target_compiler definitions
v4
  - also set cross_cc_$cpu=$host_cc
  - try a non-static build if static fails
  - use write_c_skeleton
  - add doc string in help

diff --git a/configure b/configure
index a8c4094c87..089de03918 100755
--- a/configure
+++ b/configure
@@ -458,6 +458,13 @@ vxhs=""
 libxml2=""
 docker="no"
 
+# cross compilers defaults, can be overridden with --cross-cc-ARCH
+cross_cc_aarch64="aarch64-linux-gnu-gcc"
+cross_cc_arm="arm-linux-gnueabihf-gcc"
+cross_cc_powerpc="powerpc-linux-gnu-gcc"
+
+enabled_cross_compilers=""
+
 supported_cpu="no"
 supported_os="no"
 bogus_os="no"
@@ -488,6 +495,11 @@ for opt do
   ;;
   --disable-debug-info) debug_info="no"
   ;;
+  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
+  ;;
+  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
+                eval "cross_cc_${cc_arch}=\$optarg"
+  ;;
   esac
 done
 # OS specific
@@ -676,30 +688,37 @@ case "$cpu" in
   ppc|ppc64|s390|s390x|sparc64|x32)
     cpu="$cpu"
     supported_cpu="yes"
+    eval "cross_cc_${cpu}=\$host_cc"
   ;;
   i386|i486|i586|i686|i86pc|BePC)
     cpu="i386"
     supported_cpu="yes"
+    cross_cc_i386=$host_cc
   ;;
   x86_64|amd64)
     cpu="x86_64"
     supported_cpu="yes"
+    cross_cc_x86_64=$host_cc
   ;;
   armv*b|armv*l|arm)
     cpu="arm"
     supported_cpu="yes"
+    cross_cc_arm=$host_cc
   ;;
   aarch64)
     cpu="aarch64"
     supported_cpu="yes"
+    cross_cc_aarch64=$host_cc
   ;;
   mips*)
     cpu="mips"
     supported_cpu="yes"
+    cross_cc_mips=$host_cc
   ;;
   sparc|sun4[cdmuv])
     cpu="sparc"
     supported_cpu="yes"
+    cross_cc_sparc=$host_cc
   ;;
   *)
     # This will result in either an error or falling back to TCI later
@@ -917,6 +936,8 @@ for opt do
   ;;
   --disable-debug-info)
   ;;
+  --cross-cc-*)
+  ;;
   --enable-modules)
       modules="yes"
   ;;
@@ -1501,6 +1522,7 @@ Advanced options (experts only):
   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
+  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
   --make=MAKE              use specified make [$make]
   --install=INSTALL        use specified install [$install]
   --python=PYTHON          use specified python [$python]
@@ -6820,6 +6842,9 @@ case "$target" in
     ;;
 esac
 
+target_compiler=""
+target_compiler_static=""
+
 mkdir -p $target_dir
 echo "# Automatically generated by configure - do not modify" > $config_target_mak
 
@@ -6835,19 +6860,23 @@ TARGET_ABI_DIR=""
 case "$target_name" in
   i386)
     gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
+    target_compiler=$cross_cc_i386
   ;;
   x86_64)
     TARGET_BASE_ARCH=i386
     gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
+    target_compiler=$cross_cc_x86_64
   ;;
   alpha)
     mttcg="yes"
+    target_compiler=$cross_cc_alpha
   ;;
   arm|armeb)
     TARGET_ARCH=arm
     bflt="yes"
     mttcg="yes"
     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
+    target_compiler=$cross_cc_arm
   ;;
   aarch64|aarch64_be)
     TARGET_ARCH=aarch64
@@ -6855,59 +6884,74 @@ case "$target_name" in
     bflt="yes"
     mttcg="yes"
     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
+    target_compiler=$cross_cc_aarch64
   ;;
   cris)
+    target_compiler=$cross_cc_cris
   ;;
   hppa)
     mttcg="yes"
+    target_compiler=$cross_cc_hppa
   ;;
   lm32)
+    target_compiler=$cross_cc_lm32
   ;;
   m68k)
     bflt="yes"
     gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
+    target_compiler=$cross_cc_m68k
   ;;
   microblaze|microblazeel)
     TARGET_ARCH=microblaze
     bflt="yes"
     echo "TARGET_ABI32=y" >> $config_target_mak
+    target_compiler=$cross_cc_microblaze
   ;;
   mips|mipsel)
     TARGET_ARCH=mips
+    target_compiler=$cross_cc_mips
     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
   ;;
   mipsn32|mipsn32el)
     TARGET_ARCH=mips64
     TARGET_BASE_ARCH=mips
+    target_compiler=$cross_cc_mipsn32
     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
     echo "TARGET_ABI32=y" >> $config_target_mak
   ;;
   mips64|mips64el)
     TARGET_ARCH=mips64
     TARGET_BASE_ARCH=mips
+    target_compiler=$cross_cc_mips64
     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
   ;;
   moxie)
+    target_compiler=$cross_cc_moxie
   ;;
   nios2)
+    target_compiler=$cross_cc_nios2
   ;;
   or1k)
+    target_compiler=$cross_cc_or1k
     TARGET_ARCH=openrisc
     TARGET_BASE_ARCH=openrisc
   ;;
   ppc)
     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
+    target_compiler=$cross_cc_powerpc
   ;;
   ppcemb)
     TARGET_BASE_ARCH=ppc
     TARGET_ABI_DIR=ppc
     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
+    target_compiler=$cross_cc_ppcemb
   ;;
   ppc64)
     TARGET_BASE_ARCH=ppc
     TARGET_ABI_DIR=ppc
     mttcg=yes
     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+    target_compiler=$cross_cc_ppc64
   ;;
   ppc64le)
     TARGET_ARCH=ppc64
@@ -6915,6 +6959,7 @@ case "$target_name" in
     TARGET_ABI_DIR=ppc
     mttcg=yes
     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+    target_compiler=$cross_cc_ppc64le
   ;;
   ppc64abi32)
     TARGET_ARCH=ppc64
@@ -6922,45 +6967,57 @@ case "$target_name" in
     TARGET_ABI_DIR=ppc
     echo "TARGET_ABI32=y" >> $config_target_mak
     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+    target_compiler=$cross_cc_ppc64abi32
   ;;
   riscv32)
     TARGET_BASE_ARCH=riscv
     TARGET_ABI_DIR=riscv
     mttcg=yes
+    target_compiler=$cross_cc_riscv32
   ;;
   riscv64)
     TARGET_BASE_ARCH=riscv
     TARGET_ABI_DIR=riscv
     mttcg=yes
+    target_compiler=$cross_cc_riscv64
   ;;
   sh4|sh4eb)
     TARGET_ARCH=sh4
     bflt="yes"
+    target_compiler=$cross_cc_sh4
   ;;
   sparc)
+    target_compiler=$cross_cc_sparc
   ;;
   sparc64)
     TARGET_BASE_ARCH=sparc
+    target_compiler=$cross_cc_sparc64
   ;;
   sparc32plus)
     TARGET_ARCH=sparc64
     TARGET_BASE_ARCH=sparc
     TARGET_ABI_DIR=sparc
+    target_compiler=$cross_cc_sparc32plus
     echo "TARGET_ABI32=y" >> $config_target_mak
   ;;
   s390x)
     mttcg=yes
     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
+    target_compiler=$cross_cc_s390x
   ;;
   tilegx)
+    target_compiler=$cross_cc_tilegx
   ;;
   tricore)
+    target_compiler=$cross_cc_tricore
   ;;
   unicore32)
+    target_compiler=$cross_cc_unicore32
   ;;
   xtensa|xtensaeb)
     TARGET_ARCH=xtensa
     mttcg="yes"
+    target_compiler=$cross_cc_xtensa
   ;;
   *)
     error_exit "Unsupported target CPU"
@@ -6971,6 +7028,27 @@ if [ "$TARGET_BASE_ARCH" = "" ]; then
   TARGET_BASE_ARCH=$TARGET_ARCH
 fi
 
+# Do we have a cross compiler for this target?
+if has $target_compiler; then
+
+    write_c_skeleton
+
+    if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then
+        # For host systems we might get away with building without -static
+        if ! do_compiler $target_compiler -o $TMPE $TMPC ; then
+            target_compiler=""
+        else
+            enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}"
+            target_compiler_static="n"
+        fi
+    else
+        enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}"
+        target_compiler_static="y"
+    fi
+else
+    target_compiler=""
+fi
+
 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
 
 upper() {
@@ -7044,6 +7122,14 @@ if test "$target_bsd_user" = "yes" ; then
   echo "CONFIG_BSD_USER=y" >> $config_target_mak
 fi
 
+if test -n "$target_compiler"; then
+  echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
+
+  if test -n "$target_compiler_static"; then
+      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
+  fi
+fi
+
 # generate QEMU_CFLAGS/LDFLAGS for targets
 
 cflags=""
@@ -7166,6 +7252,12 @@ echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
 
 done # for target in $targets
 
+if test -n "$enabled_cross_compilers"; then
+    echo
+    echo "NOTE: cross-compilers enabled:"
+    printf '%s\n' $enabled_cross_compilers | sort -u
+fi
+
 if [ "$fdt" = "git" ]; then
   echo "config-host.h: subdir-dtc" >> $config_host_mak
 fi
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 02/56] configure: move i386_cc to cross_cc_i386
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 03/56] configure: allow user to specify --cross-cc-cflags-foo= Alex Bennée
                   ` (55 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Also dont assume x86_64 compiler can build i386 binaries.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v2
  - drop using system x86_64 compiler for i386 compiles
v3
  - fix cross_cc_i386 when on i386
v4
  - fix merge conflicts
  - sort cross_cc defines

diff --git a/configure b/configure
index 089de03918..6e33dbbe10 100755
--- a/configure
+++ b/configure
@@ -289,7 +289,6 @@ libs_softmmu=""
 libs_tools=""
 audio_pt_int=""
 audio_win_int=""
-cc_i386=i386-pc-linux-gnu-gcc
 libs_qga=""
 debug_info="yes"
 stack_protector=""
@@ -461,6 +460,8 @@ docker="no"
 # cross compilers defaults, can be overridden with --cross-cc-ARCH
 cross_cc_aarch64="aarch64-linux-gnu-gcc"
 cross_cc_arm="arm-linux-gnueabihf-gcc"
+cross_cc_i386="i386-pc-linux-gnu-gcc"
+cross_cc_cflags_i386=""
 cross_cc_powerpc="powerpc-linux-gnu-gcc"
 
 enabled_cross_compilers=""
@@ -1447,7 +1448,8 @@ case "$cpu" in
     i386)
            CPU_CFLAGS="-m32"
            LDFLAGS="-m32 $LDFLAGS"
-           cc_i386='$(CC) -m32'
+           cross_cc_i386=$cc
+           cross_cc_cflags_i386=$CPU_CFLAGS
            ;;
     x86_64)
            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
@@ -1455,12 +1457,14 @@ case "$cpu" in
            # runtime and generate the fallback to serial emulation.
            CPU_CFLAGS="-m64 -mcx16"
            LDFLAGS="-m64 $LDFLAGS"
-           cc_i386='$(CC) -m32'
+           cross_cc_x86_64=$cc
+           cross_cc_cflags_x86_64=$CPU_CFLAGS
            ;;
     x32)
            CPU_CFLAGS="-mx32"
            LDFLAGS="-mx32 $LDFLAGS"
-           cc_i386='$(CC) -m32'
+           cross_cc_i386=$cc
+           cross_cc_cflags_i386="-m32"
            ;;
     # No special flags required for other host CPUs
 esac
@@ -6723,7 +6727,6 @@ echo "CC=$cc" >> $config_host_mak
 if $iasl -h > /dev/null 2>&1; then
   echo "IASL=$iasl" >> $config_host_mak
 fi
-echo "CC_I386=$cc_i386" >> $config_host_mak
 echo "HOST_CC=$host_cc" >> $config_host_mak
 echo "CXX=$cxx" >> $config_host_mak
 echo "OBJCC=$objcc" >> $config_host_mak
@@ -6844,6 +6847,7 @@ esac
 
 target_compiler=""
 target_compiler_static=""
+target_compiler_cflags=""
 
 mkdir -p $target_dir
 echo "# Automatically generated by configure - do not modify" > $config_target_mak
@@ -6861,6 +6865,7 @@ case "$target_name" in
   i386)
     gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
     target_compiler=$cross_cc_i386
+    target_compiler_cflags=$cross_cc_ccflags_i386
   ;;
   x86_64)
     TARGET_BASE_ARCH=i386
@@ -7033,9 +7038,9 @@ if has $target_compiler; then
 
     write_c_skeleton
 
-    if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then
+    if ! do_compiler $target_compiler $target_compiler_cflags -o $TMPE $TMPC -static ; then
         # For host systems we might get away with building without -static
-        if ! do_compiler $target_compiler -o $TMPE $TMPC ; then
+        if ! do_compiler $target_compiler $target_compiler_cflags -o $TMPE $TMPC ; then
             target_compiler=""
         else
             enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}"
@@ -7128,8 +7133,13 @@ if test -n "$target_compiler"; then
   if test -n "$target_compiler_static"; then
       echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
   fi
+
+  if test -n "$target_compiler_cflags"; then
+      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
+  fi
 fi
 
+
 # generate QEMU_CFLAGS/LDFLAGS for targets
 
 cflags=""
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 03/56] configure: allow user to specify --cross-cc-cflags-foo=
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 02/56] configure: move i386_cc to cross_cc_i386 Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 04/56] configure: set cross_cc_FOO for host compiler Alex Bennée
                   ` (54 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As an individual compiler may be able to support several targets with
the appropriate flags we need to expose this to the user as well.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v3
  - fix up the cross-cc
v4
  - add --help text
  - sort cross_cc_foo lines

diff --git a/configure b/configure
index 6e33dbbe10..b96017b423 100755
--- a/configure
+++ b/configure
@@ -459,10 +459,14 @@ docker="no"
 
 # cross compilers defaults, can be overridden with --cross-cc-ARCH
 cross_cc_aarch64="aarch64-linux-gnu-gcc"
+cross_cc_aarch64_be="$cross_cc_aarch64"
+cross_cc_cflags_aarch64_be="-mbig-endian"
 cross_cc_arm="arm-linux-gnueabihf-gcc"
+cross_cc_cflags_armeb="-mbig-endian"
 cross_cc_i386="i386-pc-linux-gnu-gcc"
 cross_cc_cflags_i386=""
 cross_cc_powerpc="powerpc-linux-gnu-gcc"
+cross_cc_powerpc="powerpc-linux-gnu-gcc"
 
 enabled_cross_compilers=""
 
@@ -498,6 +502,9 @@ for opt do
   ;;
   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
   ;;
+  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
+                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
+  ;;
   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
                 eval "cross_cc_${cc_arch}=\$optarg"
   ;;
@@ -1527,6 +1534,7 @@ Advanced options (experts only):
   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
+  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
   --make=MAKE              use specified make [$make]
   --install=INSTALL        use specified install [$install]
   --python=PYTHON          use specified python [$python]
@@ -6882,6 +6890,7 @@ case "$target_name" in
     mttcg="yes"
     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
     target_compiler=$cross_cc_arm
+    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
   ;;
   aarch64|aarch64_be)
     TARGET_ARCH=aarch64
@@ -6890,6 +6899,7 @@ case "$target_name" in
     mttcg="yes"
     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
     target_compiler=$cross_cc_aarch64
+    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
   ;;
   cris)
     target_compiler=$cross_cc_cris
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 04/56] configure: set cross_cc_FOO for host compiler
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (2 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 03/56] configure: allow user to specify --cross-cc-cflags-foo= Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 05/56] docker: Add "cc" subcommand Alex Bennée
                   ` (53 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

We can build tests for the host system with the compiler that we have
selected.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

diff --git a/configure b/configure
index b96017b423..069219e9ae 100755
--- a/configure
+++ b/configure
@@ -1431,26 +1431,38 @@ case "$cpu" in
     ppc)
            CPU_CFLAGS="-m32"
            LDFLAGS="-m32 $LDFLAGS"
+           cross_cc_powerpc=$cc
+           cross_cc_cflags_powerpc=$CPU_CFLAGS
            ;;
     ppc64)
            CPU_CFLAGS="-m64"
            LDFLAGS="-m64 $LDFLAGS"
+           cross_cc_ppc64=$cc
+           cross_cc_cflags_ppc64=$CPU_CFLAGS
            ;;
     sparc)
            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
            LDFLAGS="-m32 -mv8plus $LDFLAGS"
+           cross_cc_sparc=$cc
+           cross_cc_cflags_sparc=$CPU_CFLAGS
            ;;
     sparc64)
            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
            LDFLAGS="-m64 $LDFLAGS"
+           cross_cc_sparc64=$cc
+           cross_cc_cflags_sparc64=$CPU_CFLAGS
            ;;
     s390)
            CPU_CFLAGS="-m31"
            LDFLAGS="-m31 $LDFLAGS"
+           cross_cc_s390=$cc
+           cross_cc_cflags_s390=$CPU_CFLAGS
            ;;
     s390x)
            CPU_CFLAGS="-m64"
            LDFLAGS="-m64 $LDFLAGS"
+           cross_cc_s390x=$cc
+           cross_cc_cflags_s390x=$CPU_CFLAGS
            ;;
     i386)
            CPU_CFLAGS="-m32"
@@ -1471,7 +1483,7 @@ case "$cpu" in
            CPU_CFLAGS="-mx32"
            LDFLAGS="-mx32 $LDFLAGS"
            cross_cc_i386=$cc
-           cross_cc_cflags_i386="-m32"
+           cross_cc_cflags_i386=$CPU_CFLAGS
            ;;
     # No special flags required for other host CPUs
 esac
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 05/56] docker: Add "cc" subcommand
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (3 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 04/56] configure: set cross_cc_FOO for host compiler Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 06/56] docker: extend "cc" command to accept compiler Alex Bennée
                   ` (52 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Signed-off-by: Fam Zheng <famz@redhat.com>
[AJB: add if args.paths check]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v2
  - add if args.paths check to avoid iterating null argument

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 306e14cf69..4cd6f9b8ec 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -409,6 +409,31 @@ class ProbeCommand(SubCommand):
         return
 
 
+class CcCommand(SubCommand):
+    """Compile sources with cc in images"""
+    name = "cc"
+
+    def args(self, parser):
+        parser.add_argument("--image", "-i", required=True,
+                            help="The docker image in which to run cc")
+        parser.add_argument("--source-path", "-s", nargs="*", dest="paths",
+                            help="""Extra paths to (ro) mount into container for
+                            reading sources""")
+
+    def run(self, args, argv):
+        if argv and argv[0] == "--":
+            argv = argv[1:]
+        cwd = os.getcwd()
+        cmd = ["--rm", "-w", cwd,
+               "-v", "%s:%s:rw" % (cwd, cwd)]
+        if args.paths:
+            for p in args.paths:
+                cmd += ["-v", "%s:%s:ro,z" % (p, p)]
+        cmd += [args.image, "cc"]
+        cmd += argv
+        return Docker().command("run", cmd, args.quiet)
+
+
 def main():
     parser = argparse.ArgumentParser(description="A Docker helper",
             usage="%s <subcommand> ..." % os.path.basename(sys.argv[0]))
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 06/56] docker: extend "cc" command to accept compiler
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (4 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 05/56] docker: Add "cc" subcommand Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 07/56] docker: allow "cc" command to run in user context Alex Bennée
                   ` (51 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

When calling our cross-compilation images we want to call something
other than the default cc.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Fam Zheng <famz@redhat.com>
---
v2
  - use arg.cc default to simplify logic

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 4cd6f9b8ec..663dfcba4b 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -416,6 +416,8 @@ class CcCommand(SubCommand):
     def args(self, parser):
         parser.add_argument("--image", "-i", required=True,
                             help="The docker image in which to run cc")
+        parser.add_argument("--cc", default="cc",
+                            help="The compiler executable to call")
         parser.add_argument("--source-path", "-s", nargs="*", dest="paths",
                             help="""Extra paths to (ro) mount into container for
                             reading sources""")
@@ -429,7 +431,7 @@ class CcCommand(SubCommand):
         if args.paths:
             for p in args.paths:
                 cmd += ["-v", "%s:%s:ro,z" % (p, p)]
-        cmd += [args.image, "cc"]
+        cmd += [args.image, args.cc]
         cmd += argv
         return Docker().command("run", cmd, args.quiet)
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 07/56] docker: allow "cc" command to run in user context
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (5 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 06/56] docker: extend "cc" command to accept compiler Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 08/56] docker: Makefile.include introduce DOCKER_SCRIPT Alex Bennée
                   ` (50 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 663dfcba4b..c83fd89985 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -418,6 +418,8 @@ class CcCommand(SubCommand):
                             help="The docker image in which to run cc")
         parser.add_argument("--cc", default="cc",
                             help="The compiler executable to call")
+        parser.add_argument("--user",
+                            help="The user-id to run under")
         parser.add_argument("--source-path", "-s", nargs="*", dest="paths",
                             help="""Extra paths to (ro) mount into container for
                             reading sources""")
@@ -431,6 +433,8 @@ class CcCommand(SubCommand):
         if args.paths:
             for p in args.paths:
                 cmd += ["-v", "%s:%s:ro,z" % (p, p)]
+        if args.user:
+            cmd += ["-u", args.user]
         cmd += [args.image, args.cc]
         cmd += argv
         return Docker().command("run", cmd, args.quiet)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 08/56] docker: Makefile.include introduce DOCKER_SCRIPT
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (6 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 07/56] docker: allow "cc" command to run in user context Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 09/56] tests/tcg: move architecture independent tests into subdir Alex Bennée
                   ` (49 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Define this in one place to make it easy to re-use.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 74fd51c22c..8afb383478 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -15,6 +15,8 @@ DOCKER_TESTS := $(notdir $(shell \
 
 DOCKER_TOOLS := travis
 
+DOCKER_SCRIPT=$(SRC_PATH)/tests/docker/docker.py
+
 TESTS ?= %
 IMAGES ?= %
 
@@ -38,7 +40,7 @@ docker-image-%: $(DOCKER_FILES_DIR)/%.docker
 		echo WARNING: EXECUTABLE is not set, debootstrap may fail. 2>&1 ; \
 	fi
 	$(call quiet-command,\
-		$(SRC_PATH)/tests/docker/docker.py build qemu:$* $< \
+		$(DOCKER_SCRIPT) build qemu:$* $< \
 		$(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \
 		$(if $(NOUSER),,--add-current-user) \
 		$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES))\
@@ -133,11 +135,11 @@ docker-run: docker-qemu-src
 	fi
 	$(if $(EXECUTABLE),						\
 		$(call quiet-command,					\
-			$(SRC_PATH)/tests/docker/docker.py update 	\
+			$(DOCKER_SCRIPT) update 			\
 			$(IMAGE) $(EXECUTABLE),				\
 			"  COPYING $(EXECUTABLE) to $(IMAGE)"))
 	$(call quiet-command,						\
-		$(SRC_PATH)/tests/docker/docker.py run 			\
+		$(DOCKER_SCRIPT) run 					\
 			$(if $(NOUSER),,-u $(shell id -u)) 		\
 			--security-opt seccomp=unconfined		\
 			$(if $V,,--rm) 					\
@@ -167,4 +169,4 @@ docker-run-%:
 	@$(MAKE) docker-run TEST=$(CMD) IMAGE=qemu:$(IMAGE)
 
 docker-clean:
-	$(call quiet-command, $(SRC_PATH)/tests/docker/docker.py clean)
+	$(call quiet-command, $(DOCKER_SCRIPT) clean)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 09/56] tests/tcg: move architecture independent tests into subdir
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (7 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 08/56] docker: Makefile.include introduce DOCKER_SCRIPT Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 10/56] tests/tcg/multiarch: Build fix for linux-test Alex Bennée
                   ` (48 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

We will want to build these for all supported guest architectures so
lets move them all into one place. We also drop test_path at this
point because it needs qemu utils and glib bits which is hard to
support for cross compiling.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v2
  - move VPATH and TESTs setup into multiarch/Makefile.target
  - remove moved bits from tests/tcg/Makefile
v3
  - use LDFLAGS+= for testthread linking
v4
  - make myself MAINTAINER for tests/tcg/multiarch
v5
  - split test-mmap into run-test-mmap and run-test-mmap-%

diff --git a/MAINTAINERS b/MAINTAINERS
index 0fb5f38f9f..eccd81e8e7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -303,6 +303,10 @@ F: target/tricore/
 F: hw/tricore/
 F: include/hw/tricore/
 
+Multiarch Linux User Tests
+M: Alex Bennée <alex.bennee@linaro.org>
+F: tests/tcg/multiarch/
+
 Guest CPU Cores (KVM):
 ----------------------
 
diff --git a/tests/tcg/Makefile b/tests/tcg/Makefile
index 89e3342f3d..e12395117a 100644
--- a/tests/tcg/Makefile
+++ b/tests/tcg/Makefile
@@ -18,12 +18,9 @@ LDFLAGS=
 # also, pi_10.com runs indefinitely
 
 I386_TESTS=hello-i386 \
-	   linux-test \
-	   testthread \
 	   sha1-i386 \
 	   test-i386 \
 	   test-i386-fprem \
-	   test-mmap \
 	   # runcom
 
 # native i386 compilers sometimes are not biarch.  assume cross-compilers are
@@ -47,8 +44,6 @@ run-%: %
 	-$(QEMU) ./$*
 
 run-hello-i386: hello-i386
-run-linux-test: linux-test
-run-testthread: testthread
 run-sha1-i386: sha1-i386
 
 run-test-i386: test-i386
@@ -66,11 +61,6 @@ run-test-x86_64: test-x86_64
 	-$(QEMU_X86_64) test-x86_64 > test-x86_64.out
 	@if diff -u test-x86_64.ref test-x86_64.out ; then echo "Auto Test OK"; fi
 
-run-test-mmap: test-mmap
-	-$(QEMU) ./test-mmap
-	-$(QEMU) -p 8192 ./test-mmap 8192
-	-$(QEMU) -p 16384 ./test-mmap 16384
-	-$(QEMU) -p 32768 ./test-mmap 32768
 
 run-runcom: runcom
 	-$(QEMU) ./runcom $(SRC_PATH)/tests/pi_10.com
@@ -80,17 +70,10 @@ run-test_path: test_path
 
 # rules to compile tests
 
-test_path: test_path.o
-
-test_path.o: test_path.c
-
 hello-i386: hello-i386.c
 	$(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
 	strip $@
 
-testthread: testthread.c
-	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $< -lpthread
-
 # i386/x86_64 emulation test (test various opcodes) */
 test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \
            test-i386.h test-i386-shift.h test-i386-muldiv.h
@@ -104,28 +87,14 @@ test-x86_64: test-i386.c \
            test-i386.h test-i386-shift.h test-i386-muldiv.h
 	$(CC_X86_64) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ $(<D)/test-i386.c -lm
 
-# generic Linux and CPU test
-linux-test: linux-test.c
-	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $< -lm
-
 # vm86 test
 runcom: runcom.c
 	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
 
-test-mmap: test-mmap.c
-	$(CC_I386) -m32 $(CFLAGS) -Wall -O2 $(LDFLAGS) -o $@ $<
-
 # speed test
 sha1-i386: sha1.c
 	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
 
-sha1: sha1.c
-	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
-
-speed: sha1 sha1-i386
-	time ./sha1
-	time $(QEMU) ./sha1-i386
-
 # arm test
 hello-arm: hello-arm.o
 	arm-linux-ld -o $@ $<
diff --git a/tests/tcg/README b/tests/tcg/README
index 5dcfb4852b..0890044cf0 100644
--- a/tests/tcg/README
+++ b/tests/tcg/README
@@ -1,9 +1,7 @@
-This directory contains various interesting programs for
-regression testing.
-
-The target "make test" runs the programs and, if applicable,
-runs "diff" to detect mismatches between output on the host and
-output on QEMU.
+This directory contains various interesting guest programs for
+regression testing. Tests are either multi-arch, meaning they can be
+built for all guest architectures that support linux-user executable,
+or they are architecture specific.
 
 i386
 ====
diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
new file mode 100644
index 0000000000..90e45a881e
--- /dev/null
+++ b/tests/tcg/multiarch/Makefile.target
@@ -0,0 +1,36 @@
+# -*- Mode: makefile -*-
+#
+# Multiarch Tests - included from tests/tcg/Makefile.target
+#
+# These tests are plain C and built without any architecture specific code.
+#
+
+MULTIARCH_SRC=$(SRC_PATH)/tests/tcg/multiarch
+
+# Set search path for all sources
+VPATH 		+= $(MULTIARCH_SRC)
+MULTIARCH_SRCS   =$(notdir $(wildcard $(MULTIARCH_SRC)/*.c))
+MULTIARCH_TESTS  =$(MULTIARCH_SRCS:.c=)
+
+# Update TESTS
+TESTS		+=$(MULTIARCH_TESTS)
+
+#
+# The following are any additional rules needed to build things
+#
+
+testthread: LDFLAGS+=-lpthread
+
+# We define the runner for test-mmap after the individual
+# architectures have defined their supported pages sizes. If no
+# additional page sizes are defined we only run the default test.
+
+# default case (host page size)
+run-test-mmap: test-mmap
+	$(call quiet-command, $(QEMU) $< > test-mmap.out, "TEST", \
+		"$< (default) on $(TARGET_NAME)")
+
+# additional page sizes (defined by each architecture adding to EXTRA_RUNS)
+run-test-mmap-%: test-mmap
+	$(call quiet-command, $(QEMU) -p $* $< > test-mmap-$*.out, "TEST", \
+		"$< ($* byte pages) on $(TARGET_NAME)")
diff --git a/tests/tcg/multiarch/README b/tests/tcg/multiarch/README
new file mode 100644
index 0000000000..522c9d2ea3
--- /dev/null
+++ b/tests/tcg/multiarch/README
@@ -0,0 +1 @@
+Multi-architecture linux-user tests
diff --git a/tests/tcg/linux-test.c b/tests/tcg/multiarch/linux-test.c
similarity index 100%
rename from tests/tcg/linux-test.c
rename to tests/tcg/multiarch/linux-test.c
diff --git a/tests/tcg/sha1.c b/tests/tcg/multiarch/sha1.c
similarity index 100%
rename from tests/tcg/sha1.c
rename to tests/tcg/multiarch/sha1.c
diff --git a/tests/tcg/test-mmap.c b/tests/tcg/multiarch/test-mmap.c
similarity index 100%
rename from tests/tcg/test-mmap.c
rename to tests/tcg/multiarch/test-mmap.c
diff --git a/tests/tcg/testthread.c b/tests/tcg/multiarch/testthread.c
similarity index 100%
rename from tests/tcg/testthread.c
rename to tests/tcg/multiarch/testthread.c
diff --git a/tests/tcg/test_path.c b/tests/tcg/test_path.c
deleted file mode 100644
index 1c29bce263..0000000000
--- a/tests/tcg/test_path.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Test path override code */
-#include "config-host.h"
-#include "util/cutils.c"
-#include "util/hexdump.c"
-#include "util/iov.c"
-#include "util/path.c"
-#include "util/qemu-timer-common.c"
-#include <stdarg.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-void qemu_log(const char *fmt, ...);
-
-/* Any log message kills the test. */
-void qemu_log(const char *fmt, ...)
-{
-    va_list ap;
-
-    fprintf(stderr, "FATAL: ");
-    va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
-    va_end(ap);
-    exit(1);
-}
-
-#define NO_CHANGE(_path)						\
-	do {								\
-	    if (strcmp(path(_path), _path) != 0) return __LINE__;	\
-	} while(0)
-
-#define CHANGE_TO(_path, _newpath)					\
-	do {								\
-	    if (strcmp(path(_path), _newpath) != 0) return __LINE__;	\
-	} while(0)
-
-static void cleanup(void)
-{
-    unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE2");
-    unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE3");
-    unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE4");
-    unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE5");
-    rmdir("/tmp/qemu-test_path/DIR1/DIR2");
-    rmdir("/tmp/qemu-test_path/DIR1/DIR3");
-    rmdir("/tmp/qemu-test_path/DIR1");
-    rmdir("/tmp/qemu-test_path");
-}
-
-static unsigned int do_test(void)
-{
-    if (mkdir("/tmp/qemu-test_path", 0700) != 0)
-	return __LINE__;
-
-    if (mkdir("/tmp/qemu-test_path/DIR1", 0700) != 0)
-	return __LINE__;
-
-    if (mkdir("/tmp/qemu-test_path/DIR1/DIR2", 0700) != 0)
-	return __LINE__;
-
-    if (mkdir("/tmp/qemu-test_path/DIR1/DIR3", 0700) != 0)
-	return __LINE__;
-
-    if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE", 0600)) != 0)
-	return __LINE__;
-
-    if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE2", 0600)) != 0)
-	return __LINE__;
-
-    if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE3", 0600)) != 0)
-	return __LINE__;
-
-    if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE4", 0600)) != 0)
-	return __LINE__;
-
-    if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE5", 0600)) != 0)
-	return __LINE__;
-
-    init_paths("/tmp/qemu-test_path");
-
-    NO_CHANGE("/tmp");
-    NO_CHANGE("/tmp/");
-    NO_CHANGE("/tmp/qemu-test_path");
-    NO_CHANGE("/tmp/qemu-test_path/");
-    NO_CHANGE("/tmp/qemu-test_path/D");
-    NO_CHANGE("/tmp/qemu-test_path/DI");
-    NO_CHANGE("/tmp/qemu-test_path/DIR");
-    NO_CHANGE("/tmp/qemu-test_path/DIR1");
-    NO_CHANGE("/tmp/qemu-test_path/DIR1/");
-
-    NO_CHANGE("/D");
-    NO_CHANGE("/DI");
-    NO_CHANGE("/DIR");
-    NO_CHANGE("/DIR2");
-    NO_CHANGE("/DIR1.");
-
-    CHANGE_TO("/DIR1", "/tmp/qemu-test_path/DIR1");
-    CHANGE_TO("/DIR1/", "/tmp/qemu-test_path/DIR1");
-
-    NO_CHANGE("/DIR1/D");
-    NO_CHANGE("/DIR1/DI");
-    NO_CHANGE("/DIR1/DIR");
-    NO_CHANGE("/DIR1/DIR1");
-
-    CHANGE_TO("/DIR1/DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
-    CHANGE_TO("/DIR1/DIR2/", "/tmp/qemu-test_path/DIR1/DIR2");
-
-    CHANGE_TO("/DIR1/DIR3", "/tmp/qemu-test_path/DIR1/DIR3");
-    CHANGE_TO("/DIR1/DIR3/", "/tmp/qemu-test_path/DIR1/DIR3");
-
-    NO_CHANGE("/DIR1/DIR2/F");
-    NO_CHANGE("/DIR1/DIR2/FI");
-    NO_CHANGE("/DIR1/DIR2/FIL");
-    NO_CHANGE("/DIR1/DIR2/FIL.");
-
-    CHANGE_TO("/DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/DIR2/FILE2", "/tmp/qemu-test_path/DIR1/DIR2/FILE2");
-    CHANGE_TO("/DIR1/DIR2/FILE3", "/tmp/qemu-test_path/DIR1/DIR2/FILE3");
-    CHANGE_TO("/DIR1/DIR2/FILE4", "/tmp/qemu-test_path/DIR1/DIR2/FILE4");
-    CHANGE_TO("/DIR1/DIR2/FILE5", "/tmp/qemu-test_path/DIR1/DIR2/FILE5");
-
-    NO_CHANGE("/DIR1/DIR2/FILE6");
-    NO_CHANGE("/DIR1/DIR2/FILE/X");
-
-    CHANGE_TO("/DIR1/../DIR1", "/tmp/qemu-test_path/DIR1");
-    CHANGE_TO("/DIR1/../DIR1/", "/tmp/qemu-test_path/DIR1");
-    CHANGE_TO("/../DIR1", "/tmp/qemu-test_path/DIR1");
-    CHANGE_TO("/../DIR1/", "/tmp/qemu-test_path/DIR1");
-    CHANGE_TO("/DIR1/DIR2/../DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
-    CHANGE_TO("/DIR1/DIR2/../DIR2/../../DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/DIR2/../DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-
-    NO_CHANGE("/DIR1/DIR2/../DIR1");
-    NO_CHANGE("/DIR1/DIR2/../FILE");
-
-    CHANGE_TO("/./DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/././DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/./DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/././DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/DIR1/DIR2/././FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-    CHANGE_TO("/./DIR1/./DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
-
-    return 0;
-}
-
-int main(int argc, char *argv[])
-{
-    int ret;
-
-    ret = do_test();
-    cleanup();
-    if (ret) {
-	fprintf(stderr, "test_path: failed on line %i\n", ret);
-	return 1;
-    }
-    return 0;
-}
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 10/56] tests/tcg/multiarch: Build fix for linux-test
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (8 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 09/56] tests/tcg: move architecture independent tests into subdir Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 11/56] tests/tcg/multiarch: enable additional linux-test tests Alex Bennée
                   ` (47 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

From: Fam Zheng <famz@redhat.com>

To keep the compiler happy, and to fit in our buildsys flags:

- Make local functions "static"
- #ifdef out unused functions
- drop cutils/osdep dependencies

Signed-off-by: Fam Zheng <famz@redhat.com>
[AJB: drop cutils/osdep dependencies]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

diff --git a/tests/tcg/multiarch/linux-test.c b/tests/tcg/multiarch/linux-test.c
index 5070d31446..4457bd04ba 100644
--- a/tests/tcg/multiarch/linux-test.c
+++ b/tests/tcg/multiarch/linux-test.c
@@ -16,7 +16,6 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
-#define _GNU_SOURCE
 #include <stdarg.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -31,6 +30,7 @@
 #include <utime.h>
 #include <time.h>
 #include <sys/time.h>
+#include <sys/resource.h>
 #include <sys/uio.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -39,13 +39,12 @@
 #include <dirent.h>
 #include <setjmp.h>
 #include <sys/shm.h>
-#include "qemu/cutils.h"
 
 #define TESTPATH "/tmp/linux-test.tmp"
 #define TESTPORT 7654
 #define STACK_SIZE 16384
 
-void error1(const char *filename, int line, const char *fmt, ...)
+static void error1(const char *filename, int line, const char *fmt, ...)
 {
     va_list ap;
     va_start(ap, fmt);
@@ -56,7 +55,7 @@ void error1(const char *filename, int line, const char *fmt, ...)
     exit(1);
 }
 
-int __chk_error(const char *filename, int line, int ret)
+static int __chk_error(const char *filename, int line, int ret)
 {
     if (ret < 0) {
         error1(filename, line, "%m (ret=%d, errno=%d)",
@@ -73,7 +72,7 @@ int __chk_error(const char *filename, int line, int ret)
 
 #define FILE_BUF_SIZE 300
 
-void test_file(void)
+static void test_file(void)
 {
     int fd, i, len, ret;
     uint8_t buf[FILE_BUF_SIZE];
@@ -210,7 +209,7 @@ void test_file(void)
     chk_error(rmdir(TESTPATH));
 }
 
-void test_fork(void)
+static void test_fork(void)
 {
     int pid, status;
 
@@ -224,7 +223,7 @@ void test_fork(void)
         error("waitpid status=0x%x", status);
 }
 
-void test_time(void)
+static void test_time(void)
 {
     struct timeval tv, tv2;
     struct timespec ts, rem;
@@ -251,34 +250,7 @@ void test_time(void)
         error("getrusage");
 }
 
-void pstrcpy(char *buf, int buf_size, const char *str)
-{
-    int c;
-    char *q = buf;
-
-    if (buf_size <= 0)
-        return;
-
-    for(;;) {
-        c = *str++;
-        if (c == 0 || q >= buf + buf_size - 1)
-            break;
-        *q++ = c;
-    }
-    *q = '\0';
-}
-
-/* strcat and truncate. */
-char *pstrcat(char *buf, int buf_size, const char *s)
-{
-    int len;
-    len = strlen(buf);
-    if (len < buf_size)
-        pstrcpy(buf + len, buf_size - len, s);
-    return buf;
-}
-
-int server_socket(void)
+static int server_socket(void)
 {
     int val, fd;
     struct sockaddr_in sockaddr;
@@ -298,7 +270,7 @@ int server_socket(void)
 
 }
 
-int client_socket(void)
+static int client_socket(void)
 {
     int fd;
     struct sockaddr_in sockaddr;
@@ -312,9 +284,9 @@ int client_socket(void)
     return fd;
 }
 
-const char socket_msg[] = "hello socket\n";
+static const char socket_msg[] = "hello socket\n";
 
-void test_socket(void)
+static void test_socket(void)
 {
     int server_fd, client_fd, fd, pid, ret, val;
     struct sockaddr_in sockaddr;
@@ -348,9 +320,10 @@ void test_socket(void)
     chk_error(close(server_fd));
 }
 
+#if 0
 #define WCOUNT_MAX 512
 
-void test_pipe(void)
+static void test_pipe(void)
 {
     fd_set rfds, wfds;
     int fds[2], fd_max, ret;
@@ -391,10 +364,10 @@ void test_pipe(void)
     chk_error(close(fds[1]));
 }
 
-int thread1_res;
-int thread2_res;
+static int thread1_res;
+static int thread2_res;
 
-int thread1_func(void *arg)
+static int thread1_func(void *arg)
 {
     int i;
     for(i=0;i<5;i++) {
@@ -404,7 +377,7 @@ int thread1_func(void *arg)
     return 0;
 }
 
-int thread2_func(void *arg)
+static int thread2_func(void *arg)
 {
     int i;
     for(i=0;i<6;i++) {
@@ -435,27 +408,28 @@ void test_clone(void)
         thread2_res != 6)
         error("clone");
 }
+#endif
 
 /***********************************/
 
 volatile int alarm_count;
 jmp_buf jmp_env;
 
-void sig_alarm(int sig)
+static void sig_alarm(int sig)
 {
     if (sig != SIGALRM)
         error("signal");
     alarm_count++;
 }
 
-void sig_segv(int sig, siginfo_t *info, void *puc)
+static void sig_segv(int sig, siginfo_t *info, void *puc)
 {
     if (sig != SIGSEGV)
         error("signal");
     longjmp(jmp_env, 1);
 }
 
-void test_signal(void)
+static void test_signal(void)
 {
     struct sigaction act;
     struct itimerval it, oit;
@@ -510,7 +484,7 @@ void test_signal(void)
 
 #define SHM_SIZE 32768
 
-void test_shm(void)
+static void test_shm(void)
 {
     void *ptr;
     int shmid;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 11/56] tests/tcg/multiarch: enable additional linux-test tests
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (9 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 10/56] tests/tcg/multiarch: Build fix for linux-test Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 12/56] tests/tcg/multiarch: don't hard code paths/ports for linux-test Alex Bennée
                   ` (46 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Un-comment the remaining tests.

I removed the itimer value tests because I'm fairly sure a re-arming
timer will always have a different value in it when you grab it.

I've also fixed up the clone thread flags as QEMU will only allow a
clone to use flags which match glibc. However the test is still racey
so it remains disabled by default - it can be run by passing any
additional parameters on the command line.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v3
  - make clone flags match CLONE_THREAD_FLAGS
v4
  - disable test_clone for default case

diff --git a/tests/tcg/multiarch/linux-test.c b/tests/tcg/multiarch/linux-test.c
index 4457bd04ba..6f2c531474 100644
--- a/tests/tcg/multiarch/linux-test.c
+++ b/tests/tcg/multiarch/linux-test.c
@@ -16,6 +16,7 @@
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
+#define _GNU_SOURCE
 #include <stdarg.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -58,8 +59,8 @@ static void error1(const char *filename, int line, const char *fmt, ...)
 static int __chk_error(const char *filename, int line, int ret)
 {
     if (ret < 0) {
-        error1(filename, line, "%m (ret=%d, errno=%d)",
-               ret, errno);
+        error1(filename, line, "%m (ret=%d, errno=%d/%s)",
+               ret, errno, strerror(errno));
     }
     return ret;
 }
@@ -216,6 +217,7 @@ static void test_fork(void)
     pid = chk_error(fork());
     if (pid == 0) {
         /* child */
+        sleep(2);
         exit(2);
     }
     chk_error(waitpid(pid, &status, 0));
@@ -320,7 +322,6 @@ static void test_socket(void)
     chk_error(close(server_fd));
 }
 
-#if 0
 #define WCOUNT_MAX 512
 
 static void test_pipe(void)
@@ -355,7 +356,7 @@ static void test_pipe(void)
             }
             if (FD_ISSET(fds[1], &wfds)) {
                 ch = 'a';
-                chk_error(write(fds[0], &ch, 1));
+                chk_error(write(fds[1], &ch, 1));
                 wcount++;
             }
         }
@@ -387,28 +388,41 @@ static int thread2_func(void *arg)
     return 0;
 }
 
-void test_clone(void)
+static void wait_for_child(pid_t pid)
+{
+    int status;
+    chk_error(waitpid(pid, &status, 0));
+}
+
+/* For test_clone we must match the clone flags used by glibc, see
+ * CLONE_THREAD_FLAGS in the QEMU source code.
+ */
+static void test_clone(void)
 {
     uint8_t *stack1, *stack2;
-    int pid1, pid2, status1, status2;
+    pid_t pid1, pid2;
 
     stack1 = malloc(STACK_SIZE);
     pid1 = chk_error(clone(thread1_func, stack1 + STACK_SIZE,
-                           CLONE_VM | CLONE_FS | CLONE_FILES | SIGCHLD, "hello1"));
+                           CLONE_VM | CLONE_FS | CLONE_FILES |
+                           CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM,
+                            "hello1"));
 
     stack2 = malloc(STACK_SIZE);
     pid2 = chk_error(clone(thread2_func, stack2 + STACK_SIZE,
-                           CLONE_VM | CLONE_FS | CLONE_FILES | SIGCHLD, "hello2"));
+                           CLONE_VM | CLONE_FS | CLONE_FILES |
+                           CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM,
+                           "hello2"));
 
-    while (waitpid(pid1, &status1, 0) != pid1);
+    wait_for_child(pid1);
     free(stack1);
-    while (waitpid(pid2, &status2, 0) != pid2);
+    wait_for_child(pid2);
     free(stack2);
+
     if (thread1_res != 5 ||
         thread2_res != 6)
         error("clone");
 }
-#endif
 
 /***********************************/
 
@@ -449,12 +463,10 @@ static void test_signal(void)
     it.it_value.tv_usec = 10 * 1000;
     chk_error(setitimer(ITIMER_REAL, &it, NULL));
     chk_error(getitimer(ITIMER_REAL, &oit));
-    if (oit.it_value.tv_sec != it.it_value.tv_sec ||
-        oit.it_value.tv_usec != it.it_value.tv_usec)
-        error("itimer");
 
     while (alarm_count < 5) {
         usleep(10 * 1000);
+        getitimer(ITIMER_REAL, &oit);
     }
 
     it.it_interval.tv_sec = 0;
@@ -463,9 +475,6 @@ static void test_signal(void)
     it.it_value.tv_usec = 0;
     memset(&oit, 0xff, sizeof(oit));
     chk_error(setitimer(ITIMER_REAL, &it, &oit));
-    if (oit.it_value.tv_sec != 0 ||
-        oit.it_value.tv_usec != 10 * 1000)
-        error("setitimer");
 
     /* SIGSEGV test */
     act.sa_sigaction = sig_segv;
@@ -503,10 +512,16 @@ static void test_shm(void)
 int main(int argc, char **argv)
 {
     test_file();
+    test_pipe();
     test_fork();
     test_time();
     test_socket();
-    //    test_clone();
+
+    if (argc > 1) {
+        printf("test_clone still considered buggy\n");
+        test_clone();
+    }
+
     test_signal();
     test_shm();
     return 0;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 12/56] tests/tcg/multiarch: don't hard code paths/ports for linux-test
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (10 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 11/56] tests/tcg/multiarch: enable additional linux-test tests Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 13/56] tests/tcg/multiarch: move most output to stdout Alex Bennée
                   ` (45 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

The fixed path and ports get in the way of running our tests and
builds in parallel. Instead of using TESTPATH we use mkdtemp() and
instead of a fixed port we allow the kernel to assign one and query it
afterwards.

Ideally test directory creation should be common functionally across
all TCG tests but this could complicate an already huge patch series
so we mark it as a TODO for next time.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
v7
  - chk_error(strlen(tmpdir)) -> assert(tmpdir)
  - mark common tempdir as a TODO

diff --git a/tests/tcg/multiarch/linux-test.c b/tests/tcg/multiarch/linux-test.c
index 6f2c531474..e80eccc0ce 100644
--- a/tests/tcg/multiarch/linux-test.c
+++ b/tests/tcg/multiarch/linux-test.c
@@ -40,9 +40,8 @@
 #include <dirent.h>
 #include <setjmp.h>
 #include <sys/shm.h>
+#include <assert.h>
 
-#define TESTPATH "/tmp/linux-test.tmp"
-#define TESTPORT 7654
 #define STACK_SIZE 16384
 
 static void error1(const char *filename, int line, const char *fmt, ...)
@@ -85,19 +84,16 @@ static void test_file(void)
     struct iovec vecs[2];
     DIR *dir;
     struct dirent *de;
+    /* TODO: make common tempdir creation for tcg tests */
+    char template[] = "/tmp/linux-test-XXXXXX";
+    char *tmpdir = mkdtemp(template);
 
-    /* clean up, just in case */
-    unlink(TESTPATH "/file1");
-    unlink(TESTPATH "/file2");
-    unlink(TESTPATH "/file3");
-    rmdir(TESTPATH);
+    assert(tmpdir);
 
     if (getcwd(cur_dir, sizeof(cur_dir)) == NULL)
         error("getcwd");
 
-    chk_error(mkdir(TESTPATH, 0755));
-
-    chk_error(chdir(TESTPATH));
+    chk_error(chdir(tmpdir));
 
     /* open/read/write/close/readv/writev/lseek */
 
@@ -163,7 +159,7 @@ static void test_file(void)
         st.st_mtime != 1000)
         error("stat time");
 
-    chk_error(stat(TESTPATH, &st));
+    chk_error(stat(tmpdir, &st));
     if (!S_ISDIR(st.st_mode))
         error("stat mode");
 
@@ -185,7 +181,7 @@ static void test_file(void)
         error("stat mode");
 
     /* getdents */
-    dir = opendir(TESTPATH);
+    dir = opendir(tmpdir);
     if (!dir)
         error("opendir");
     len = 0;
@@ -207,7 +203,7 @@ static void test_file(void)
     chk_error(unlink("file3"));
     chk_error(unlink("file2"));
     chk_error(chdir(cur_dir));
-    chk_error(rmdir(TESTPATH));
+    chk_error(rmdir(tmpdir));
 }
 
 static void test_fork(void)
@@ -264,7 +260,7 @@ static int server_socket(void)
     chk_error(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)));
 
     sockaddr.sin_family = AF_INET;
-    sockaddr.sin_port = htons(TESTPORT);
+    sockaddr.sin_port = htons(0); /* choose random ephemeral port) */
     sockaddr.sin_addr.s_addr = 0;
     chk_error(bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
     chk_error(listen(fd, 0));
@@ -272,7 +268,7 @@ static int server_socket(void)
 
 }
 
-static int client_socket(void)
+static int client_socket(uint16_t port)
 {
     int fd;
     struct sockaddr_in sockaddr;
@@ -280,7 +276,7 @@ static int client_socket(void)
     /* server socket */
     fd = chk_error(socket(PF_INET, SOCK_STREAM, 0));
     sockaddr.sin_family = AF_INET;
-    sockaddr.sin_port = htons(TESTPORT);
+    sockaddr.sin_port = htons(port);
     inet_aton("127.0.0.1", &sockaddr.sin_addr);
     chk_error(connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)));
     return fd;
@@ -292,10 +288,17 @@ static void test_socket(void)
 {
     int server_fd, client_fd, fd, pid, ret, val;
     struct sockaddr_in sockaddr;
-    socklen_t len;
+    struct sockaddr_in server_addr;
+    socklen_t len, socklen;
+    uint16_t server_port;
     char buf[512];
 
     server_fd = server_socket();
+    /* find out what port we got */
+    socklen = sizeof(server_addr);
+    ret = getsockname(server_fd, &server_addr, &socklen);
+    chk_error(ret);
+    server_port = ntohs(server_addr.sin_port);
 
     /* test a few socket options */
     len = sizeof(val);
@@ -305,7 +308,7 @@ static void test_socket(void)
 
     pid = chk_error(fork());
     if (pid == 0) {
-        client_fd = client_socket();
+        client_fd = client_socket(server_port);
         send(client_fd, socket_msg, sizeof(socket_msg), 0);
         close(client_fd);
         exit(0);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 13/56] tests/tcg/multiarch: move most output to stdout
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (11 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 12/56] tests/tcg/multiarch: don't hard code paths/ports for linux-test Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 14/56] tests/tcg: move i386 specific tests into subdir Alex Bennée
                   ` (44 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

The default test run outputs to stdout so it can be re-directed.
Errors are still reported to stderr.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
v4
  - remove space in fprintf () to keep checkpatch happy

diff --git a/tests/tcg/multiarch/test-mmap.c b/tests/tcg/multiarch/test-mmap.c
index cdefadfa4c..5c0afe6e49 100644
--- a/tests/tcg/multiarch/test-mmap.c
+++ b/tests/tcg/multiarch/test-mmap.c
@@ -36,7 +36,7 @@
 do                                                             \
 {                                                              \
   if (!(x)) {                                                  \
-    fprintf (stderr, "FAILED at %s:%d\n", __FILE__, __LINE__); \
+    fprintf(stderr, "FAILED at %s:%d\n", __FILE__, __LINE__); \
     exit (EXIT_FAILURE);                                       \
   }                                                            \
 } while (0)
@@ -57,7 +57,7 @@ void check_aligned_anonymous_unfixed_mmaps(void)
 	uintptr_t p;
 	int i;
 
-	fprintf (stderr, "%s", __func__);
+	fprintf(stdout, "%s", __func__);
 	for (i = 0; i < 0x1fff; i++)
 	{
 		size_t len;
@@ -106,7 +106,7 @@ void check_aligned_anonymous_unfixed_mmaps(void)
 		munmap (p4, len);
 		munmap (p5, len);
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_large_anonymous_unfixed_mmap(void)
@@ -115,7 +115,7 @@ void check_large_anonymous_unfixed_mmap(void)
 	uintptr_t p;
 	size_t len;
 
-	fprintf (stderr, "%s", __func__);
+	fprintf(stdout, "%s", __func__);
 
 	len = 0x02000000;
 	p1 = mmap(NULL, len, PROT_READ, 
@@ -130,7 +130,7 @@ void check_large_anonymous_unfixed_mmap(void)
 	/* Make sure we can read from the entire area.  */
 	memcpy (dummybuf, p1, pagesize);
 	munmap (p1, len);
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_aligned_anonymous_unfixed_colliding_mmaps(void)
@@ -141,7 +141,7 @@ void check_aligned_anonymous_unfixed_colliding_mmaps(void)
 	uintptr_t p;
 	int i;
 
-	fprintf (stderr, "%s", __func__);
+	fprintf(stdout, "%s", __func__);
 	for (i = 0; i < 0x2fff; i++)
 	{
 		int nlen;
@@ -180,7 +180,7 @@ void check_aligned_anonymous_unfixed_colliding_mmaps(void)
 		munmap (p2, pagesize);
 		munmap (p3, nlen);
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_aligned_anonymous_fixed_mmaps(void)
@@ -194,7 +194,7 @@ void check_aligned_anonymous_fixed_mmaps(void)
 	addr = mmap(NULL, pagesize * 40, PROT_READ | PROT_WRITE, 
 		    MAP_PRIVATE | MAP_ANONYMOUS,
 		    -1, 0);
-	fprintf (stderr, "%s addr=%p", __func__, addr);
+	fprintf(stdout, "%s addr=%p", __func__, addr);
 	fail_unless (addr != MAP_FAILED);
 
 	for (i = 0; i < 40; i++)
@@ -212,7 +212,7 @@ void check_aligned_anonymous_fixed_mmaps(void)
 		munmap (p1, pagesize);
 		addr += pagesize;
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_aligned_anonymous_fixed_mmaps_collide_with_host(void)
@@ -225,8 +225,8 @@ void check_aligned_anonymous_fixed_mmaps_collide_with_host(void)
 	/* Find a suitable address to start with.  Right were the x86 hosts
 	 stack is.  */
 	addr = ((void *)0x80000000);
-	fprintf (stderr, "%s addr=%p", __func__, addr);
-	fprintf (stderr, "FIXME: QEMU fails to track pages used by the host.");
+	fprintf(stdout, "%s addr=%p", __func__, addr);
+	fprintf(stdout, "FIXME: QEMU fails to track pages used by the host.");
 
 	for (i = 0; i < 20; i++)
 	{
@@ -243,7 +243,7 @@ void check_aligned_anonymous_fixed_mmaps_collide_with_host(void)
 		munmap (p1, pagesize);
 		addr += pagesize;
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_file_unfixed_mmaps(void)
@@ -252,7 +252,7 @@ void check_file_unfixed_mmaps(void)
 	uintptr_t p;
 	int i;
 
-	fprintf (stderr, "%s", __func__);
+	fprintf(stdout, "%s", __func__);
 	for (i = 0; i < 0x10; i++)
 	{
 		size_t len;
@@ -294,7 +294,7 @@ void check_file_unfixed_mmaps(void)
 		munmap (p2, len);
 		munmap (p3, len);
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_file_unfixed_eof_mmaps(void)
@@ -304,7 +304,7 @@ void check_file_unfixed_eof_mmaps(void)
 	uintptr_t p;
 	int i;
 
-	fprintf (stderr, "%s", __func__);
+	fprintf(stdout, "%s", __func__);
 	for (i = 0; i < 0x10; i++)
 	{
 		p1 = mmap(NULL, pagesize, PROT_READ, 
@@ -327,7 +327,7 @@ void check_file_unfixed_eof_mmaps(void)
 		fail_unless (cp[pagesize - 4] == 0);
 		munmap (p1, pagesize);
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_file_fixed_eof_mmaps(void)
@@ -343,7 +343,7 @@ void check_file_fixed_eof_mmaps(void)
 		    MAP_PRIVATE | MAP_ANONYMOUS,
 		    -1, 0);
 
-	fprintf (stderr, "%s addr=%p", __func__, (void *)addr);
+	fprintf(stdout, "%s addr=%p", __func__, (void *)addr);
 	fail_unless (addr != MAP_FAILED);
 
 	for (i = 0; i < 0x10; i++)
@@ -371,7 +371,7 @@ void check_file_fixed_eof_mmaps(void)
 		munmap (p1, pagesize);
 		addr += pagesize;
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void check_file_fixed_mmaps(void)
@@ -384,7 +384,7 @@ void check_file_fixed_mmaps(void)
 	addr = mmap(NULL, pagesize * 40 * 4, PROT_READ, 
 		    MAP_PRIVATE | MAP_ANONYMOUS,
 		    -1, 0);
-	fprintf (stderr, "%s addr=%p", __func__, (void *)addr);
+	fprintf(stdout, "%s addr=%p", __func__, (void *)addr);
 	fail_unless (addr != MAP_FAILED);
 
 	for (i = 0; i < 40; i++)
@@ -426,7 +426,7 @@ void check_file_fixed_mmaps(void)
 		munmap (p4, pagesize);
 		addr += pagesize * 4;
 	}
-	fprintf (stderr, " passed\n");
+	fprintf(stdout, " passed\n");
 }
 
 void checked_write(int fd, const void *buf, size_t count)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 14/56] tests/tcg: move i386 specific tests into subdir
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (12 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 13/56] tests/tcg/multiarch: move most output to stdout Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 15/56] tests/tcg: enable building for i386 Alex Bennée
                   ` (43 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

These only need to be built for i386 guests. This includes a stub
tests/tcg/i386/Makfile.target which absorbs some of what was in
tests/tcg/Makefile.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
v2
  - move VPATH and TESTs setup into i386/Makefile.target
  - set CFLAGS+=-m32 for cross building
v4
  - update MAINATINERS

diff --git a/MAINTAINERS b/MAINTAINERS
index eccd81e8e7..ea298cc910 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -283,6 +283,7 @@ M: Richard Henderson <rth@twiddle.net>
 M: Eduardo Habkost <ehabkost@redhat.com>
 S: Maintained
 F: target/i386/
+F: tests/tcg/i386/
 F: hw/i386/
 F: disas/i386.c
 T: git git://github.com/ehabkost/qemu.git x86-next
diff --git a/tests/tcg/README b/tests/tcg/README
index 0890044cf0..469504c4cb 100644
--- a/tests/tcg/README
+++ b/tests/tcg/README
@@ -3,45 +3,6 @@ regression testing. Tests are either multi-arch, meaning they can be
 built for all guest architectures that support linux-user executable,
 or they are architecture specific.
 
-i386
-====
-
-test-i386
----------
-
-This program executes most of the 16 bit and 32 bit x86 instructions and
-generates a text output, for comparison with the output obtained with
-a real CPU or another emulator.
-
-The Linux system call modify_ldt() is used to create x86 selectors
-to test some 16 bit addressing and 32 bit with segmentation cases.
-
-The Linux system call vm86() is used to test vm86 emulation.
-
-Various exceptions are raised to test most of the x86 user space
-exception reporting.
-
-linux-test
-----------
-
-This program tests various Linux system calls. It is used to verify
-that the system call parameters are correctly converted between target
-and host CPUs.
-
-test-i386-fprem
----------------
-
-runcom
-------
-
-test-mmap
----------
-
-sha1
-----
-
-hello-i386
-----------
 
 
 ARM
diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
new file mode 100644
index 0000000000..2f27b65e2d
--- /dev/null
+++ b/tests/tcg/i386/Makefile.target
@@ -0,0 +1,30 @@
+# i386 cross compile notes
+
+I386_SRC=$(SRC_PATH)/tests/tcg/i386
+
+# Set search path for all sources
+VPATH 		+= $(I386_SRC)
+
+I386_SRCS=$(notdir $(wildcard $(I386_SRC)/*.c))
+I386_TESTS=$(I386_SRCS:.c=)
+
+# Update TESTS
+TESTS+=$(I386_TESTS)
+
+ifneq ($(TARGET_NAME),x86_64)
+CFLAGS+=-m32
+endif
+
+#
+# hello-i386 is a barebones app
+#
+hello-i386: CFLAGS+=-ffreestanding
+hello-i386: LDFLAGS+=-nostdlib
+
+#
+# test-386 includes a couple of additional objects that need to be linked together
+#
+
+test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S test-i386.h test-i386-shift.h test-i386-muldiv.h
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
+	   $(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
diff --git a/tests/tcg/i386/README b/tests/tcg/i386/README
new file mode 100644
index 0000000000..7a0a47bf27
--- /dev/null
+++ b/tests/tcg/i386/README
@@ -0,0 +1,38 @@
+These are i386 specific guest programs
+
+test-i386
+---------
+
+This program executes most of the 16 bit and 32 bit x86 instructions and
+generates a text output, for comparison with the output obtained with
+a real CPU or another emulator.
+
+The Linux system call modify_ldt() is used to create x86 selectors
+to test some 16 bit addressing and 32 bit with segmentation cases.
+
+The Linux system call vm86() is used to test vm86 emulation.
+
+Various exceptions are raised to test most of the x86 user space
+exception reporting.
+
+linux-test
+----------
+
+This program tests various Linux system calls. It is used to verify
+that the system call parameters are correctly converted between target
+and host CPUs.
+
+test-i386-fprem
+---------------
+
+runcom
+------
+
+test-mmap
+---------
+
+sha1
+----
+
+hello-i386
+----------
diff --git a/tests/tcg/hello-i386.c b/tests/tcg/i386/hello-i386.c
similarity index 100%
rename from tests/tcg/hello-i386.c
rename to tests/tcg/i386/hello-i386.c
diff --git a/tests/tcg/pi_10.com b/tests/tcg/i386/pi_10.com
similarity index 100%
rename from tests/tcg/pi_10.com
rename to tests/tcg/i386/pi_10.com
diff --git a/tests/tcg/runcom.c b/tests/tcg/i386/runcom.c
similarity index 100%
rename from tests/tcg/runcom.c
rename to tests/tcg/i386/runcom.c
diff --git a/tests/tcg/test-i386-code16.S b/tests/tcg/i386/test-i386-code16.S
similarity index 100%
rename from tests/tcg/test-i386-code16.S
rename to tests/tcg/i386/test-i386-code16.S
diff --git a/tests/tcg/test-i386-fprem.c b/tests/tcg/i386/test-i386-fprem.c
similarity index 100%
rename from tests/tcg/test-i386-fprem.c
rename to tests/tcg/i386/test-i386-fprem.c
diff --git a/tests/tcg/test-i386-muldiv.h b/tests/tcg/i386/test-i386-muldiv.h
similarity index 100%
rename from tests/tcg/test-i386-muldiv.h
rename to tests/tcg/i386/test-i386-muldiv.h
diff --git a/tests/tcg/test-i386-shift.h b/tests/tcg/i386/test-i386-shift.h
similarity index 100%
rename from tests/tcg/test-i386-shift.h
rename to tests/tcg/i386/test-i386-shift.h
diff --git a/tests/tcg/test-i386-ssse3.c b/tests/tcg/i386/test-i386-ssse3.c
similarity index 100%
rename from tests/tcg/test-i386-ssse3.c
rename to tests/tcg/i386/test-i386-ssse3.c
diff --git a/tests/tcg/test-i386-vm86.S b/tests/tcg/i386/test-i386-vm86.S
similarity index 100%
rename from tests/tcg/test-i386-vm86.S
rename to tests/tcg/i386/test-i386-vm86.S
diff --git a/tests/tcg/test-i386.c b/tests/tcg/i386/test-i386.c
similarity index 100%
rename from tests/tcg/test-i386.c
rename to tests/tcg/i386/test-i386.c
diff --git a/tests/tcg/test-i386.h b/tests/tcg/i386/test-i386.h
similarity index 100%
rename from tests/tcg/test-i386.h
rename to tests/tcg/i386/test-i386.h
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 15/56] tests/tcg: enable building for i386
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (13 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 14/56] tests/tcg: move i386 specific tests into subdir Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 16/56] tests/tcg/i386: Build fix for hello-i386 Alex Bennée
                   ` (42 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

While you can construct a compile command that does work using the
x86_64 host compiler that most people use this is flakey. Different
distros handle this is different ways so we default to using a known
good i386 compiler via docker.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v3
  - add runner for runcom
v4
  - runcom pi10.com directly from SRC_DIR
v5
  - define extra test-mmap runs

diff --git a/tests/tcg/i386/Makefile.include b/tests/tcg/i386/Makefile.include
new file mode 100644
index 0000000000..be1c3008dd
--- /dev/null
+++ b/tests/tcg/i386/Makefile.include
@@ -0,0 +1,9 @@
+#
+# Makefile.include for all i386
+#
+# There is enough brokeness in x86_64 compilers that we don't default
+# to using the x86_64 system compiler for i386 binaries.
+#
+
+DOCKER_IMAGE=fedora-i386-cross
+DOCKER_CROSS_COMPILER=gcc
diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
index 2f27b65e2d..8b46cc021e 100644
--- a/tests/tcg/i386/Makefile.target
+++ b/tests/tcg/i386/Makefile.target
@@ -28,3 +28,10 @@ hello-i386: LDFLAGS+=-nostdlib
 test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S test-i386.h test-i386-shift.h test-i386-muldiv.h
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
 	   $(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
+
+# Specialist test runners
+run-runcom: runcom pi_10.com
+	$(call quiet-command, $(QEMU) ./runcom $(I386_SRC)/pi_10.com > runcom.out, "TEST", "$< on $(TARGET_NAME)")
+
+# On i386 and x86_64 Linux only supports 4k pages (large pages are a different hack)
+EXTRA_RUNS+=run-test-mmap-4096
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 16/56] tests/tcg/i386: Build fix for hello-i386
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (14 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 15/56] tests/tcg: enable building for i386 Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 17/56] tests/tcg/i386: fix test-i386 Alex Bennée
                   ` (41 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

From: Fam Zheng <famz@redhat.com>

We have -Werror=missing-prototype, add a dummy prototype to avoid that
warning.

Signed-off-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/tcg/i386/hello-i386.c b/tests/tcg/i386/hello-i386.c
index fa00380de2..cfeb24b2f5 100644
--- a/tests/tcg/i386/hello-i386.c
+++ b/tests/tcg/i386/hello-i386.c
@@ -20,6 +20,7 @@ static inline int write(int fd, const char * buf, int len)
   return status;
 }
 
+void _start(void);
 void _start(void)
 {
     write(1, "Hello World\n", 12);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 17/56] tests/tcg/i386: fix test-i386
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (15 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 16/56] tests/tcg/i386: Build fix for hello-i386 Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 18/56] tests/tcg/i386: add runner for test-i386-fprem Alex Bennée
                   ` (40 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

We don't include anything from qemu itself for the build.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
v4
  - reword commit message to be more accurate

diff --git a/tests/tcg/i386/test-i386.c b/tests/tcg/i386/test-i386.c
index 9599204895..cae6a7773a 100644
--- a/tests/tcg/i386/test-i386.c
+++ b/tests/tcg/i386/test-i386.c
@@ -17,7 +17,6 @@
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 #define _GNU_SOURCE
-#include "qemu/compiler.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 18/56] tests/tcg/i386: add runner for test-i386-fprem
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (16 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 17/56] tests/tcg/i386: fix test-i386 Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 19/56] tests/tcg/x86_64: add Makefile.target Alex Bennée
                   ` (39 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

The runner needs to compare against a reference run. We also only run
this test when SPEED=slow as it takes a while.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
  - include test-i386-fprem.ref
v5.1
  - remove the 69Mb test-i386-fprem.ref
  - generate test-i386-fprem.ref on developers machine
  - add TIMEOUT=60

diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
index 8b46cc021e..64d241cfdf 100644
--- a/tests/tcg/i386/Makefile.target
+++ b/tests/tcg/i386/Makefile.target
@@ -33,5 +33,21 @@ test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S test-i386.h test-i386
 run-runcom: runcom pi_10.com
 	$(call quiet-command, $(QEMU) ./runcom $(I386_SRC)/pi_10.com > runcom.out, "TEST", "$< on $(TARGET_NAME)")
 
+ifeq ($(SPEED), slow)
+
+test-i386-fprem.ref: test-i386-fprem
+	$(call quiet-command, ./$< > $@,"GENREF","generating $@")
+
+run-test-i386-fprem: TIMEOUT=60
+run-test-i386-fprem: test-i386-fprem
+	$(call quiet-command, \
+		$(QEMU) $< > $<.out && \
+		diff -u $(I386_SRC)/$<.ref $<.out, \
+		"TEST", "$< (default) on $(TARGET_NAME)")
+else
+run-test-i386-fprem: test-i386-fprem
+	$(call quiet-command, /bin/true, "SLOW TEST", "$< SKIPPED on $(TARGET_NAME)")
+endif
+
 # On i386 and x86_64 Linux only supports 4k pages (large pages are a different hack)
 EXTRA_RUNS+=run-test-mmap-4096
diff --git a/tests/tcg/i386/test-i386-fprem.c b/tests/tcg/i386/test-i386-fprem.c
index 1a71623204..66f5a9657d 100644
--- a/tests/tcg/i386/test-i386-fprem.c
+++ b/tests/tcg/i386/test-i386-fprem.c
@@ -23,7 +23,10 @@
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "qemu/osdep.h"
+#include <stdio.h>
+#include <stdint.h>
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 
 /*
  * Inspired by <ieee754.h>'s union ieee854_long_double, but with single
@@ -39,7 +42,7 @@ union float80u {
         unsigned int exponent:15;
         unsigned int negative:1;
         unsigned int empty:16;
-    } QEMU_PACKED ieee;
+    } __attribute__((packed)) ieee;
 
     /* This is for NaNs in the IEEE 854 double-extended-precision format.  */
     struct {
@@ -49,7 +52,7 @@ union float80u {
         unsigned int exponent:15;
         unsigned int negative:1;
         unsigned int empty:16;
-    } QEMU_PACKED ieee_nan;
+    } __attribute__((packed)) ieee_nan;
 };
 
 #define IEEE854_LONG_DOUBLE_BIAS 0x3fff
@@ -229,6 +232,7 @@ static void test_fprem_cases(void)
     do_fprem_stack_underflow();
 
     printf("= invalid operation =\n");
+    do_fprem(q_nan.d, 1.0);
     do_fprem(s_nan.d, 1.0);
     do_fprem(1.0, 0.0);
     do_fprem(pos_inf.d, 1.0);
@@ -238,6 +242,8 @@ static void test_fprem_cases(void)
     do_fprem(pos_denorm.d, 1.0);
     do_fprem(1.0, pos_denorm.d);
 
+    do_fprem(smallest_positive_norm.d, smallest_positive_norm.d);
+
     /* printf("= underflow =\n"); */
     /* TODO: Is there a case where FPREM raises underflow? */
 }
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 19/56] tests/tcg/x86_64: add Makefile.target
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (17 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 18/56] tests/tcg/i386: add runner for test-i386-fprem Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:43 ` [Qemu-devel] [PULL 20/56] tests/tcg/i386/test-i386: use modern vector_size attributes Alex Bennée
                   ` (38 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

The sources for x86_64 are shared in the i386 directory which will be
included thanks to TARGET_BASE_ARCH. However not all sources build so
we need to filter out the ones we can't build in the 64 bit world and
those that can't be built for 32 bit.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v4
  - update MAINTAINERS
v5
  - merge with disable i386 version of test-i386-ssse

diff --git a/MAINTAINERS b/MAINTAINERS
index ea298cc910..57c828644f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -284,6 +284,7 @@ M: Eduardo Habkost <ehabkost@redhat.com>
 S: Maintained
 F: target/i386/
 F: tests/tcg/i386/
+F: tests/tcg/x86_64/
 F: hw/i386/
 F: disas/i386.c
 T: git git://github.com/ehabkost/qemu.git x86-next
diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
index 64d241cfdf..cd173363ee 100644
--- a/tests/tcg/i386/Makefile.target
+++ b/tests/tcg/i386/Makefile.target
@@ -7,9 +7,9 @@ VPATH 		+= $(I386_SRC)
 
 I386_SRCS=$(notdir $(wildcard $(I386_SRC)/*.c))
 I386_TESTS=$(I386_SRCS:.c=)
-
+I386_ONLY_TESTS=$(filter-out test-i386-ssse3, $(I386_TESTS))
 # Update TESTS
-TESTS+=$(I386_TESTS)
+TESTS+=$(I386_ONLY_TESTS)
 
 ifneq ($(TARGET_NAME),x86_64)
 CFLAGS+=-m32
diff --git a/tests/tcg/x86_64/Makefile.target b/tests/tcg/x86_64/Makefile.target
new file mode 100644
index 0000000000..74f170b9ed
--- /dev/null
+++ b/tests/tcg/x86_64/Makefile.target
@@ -0,0 +1,15 @@
+# -*- Mode: makefile -*-
+#
+# x86_64 tests - included from tests/tcg/Makefile.target
+#
+# Currently we only build test-x86_64 and test-i386-ssse3 from
+# $(SRC)/tests/tcg/i386/
+#
+
+X86_64_TESTS=$(filter-out $(I386_ONLY_TESTS), $(TESTS))
+X86_64_TESTS+=test-x86_64
+TESTS:=$(X86_64_TESTS)
+
+test-x86_64: LDFLAGS+=-lm -lc
+test-x86_64: test-i386.c test-i386.h test-i386-shift.h test-i386-muldiv.h
+	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 20/56] tests/tcg/i386/test-i386: use modern vector_size attributes
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (18 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 19/56] tests/tcg/x86_64: add Makefile.target Alex Bennée
@ 2018-06-19 15:43 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 21/56] tests/tcg/i386/test-i386: fix printf format Alex Bennée
                   ` (37 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:43 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

The compiler complains about the old __mode__ style attributes.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/i386/test-i386.c b/tests/tcg/i386/test-i386.c
index cae6a7773a..caef4da176 100644
--- a/tests/tcg/i386/test-i386.c
+++ b/tests/tcg/i386/test-i386.c
@@ -2106,8 +2106,8 @@ static void test_enter(void)
 
 #ifdef TEST_SSE
 
-typedef int __m64 __attribute__ ((__mode__ (__V2SI__)));
-typedef float __m128 __attribute__ ((__mode__(__V4SF__)));
+typedef int __m64 __attribute__ ((vector_size(8)));
+typedef float __m128 __attribute__ ((vector_size(16)));
 
 typedef union {
     double d[2];
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 21/56] tests/tcg/i386/test-i386: fix printf format
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (19 preceding siblings ...)
  2018-06-19 15:43 ` [Qemu-devel] [PULL 20/56] tests/tcg/i386/test-i386: use modern vector_size attributes Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 22/56] tests/tcg: move ARM specific tests into subdir Alex Bennée
                   ` (36 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/i386/test-i386.c b/tests/tcg/i386/test-i386.c
index caef4da176..a29b41e764 100644
--- a/tests/tcg/i386/test-i386.c
+++ b/tests/tcg/i386/test-i386.c
@@ -2258,7 +2258,7 @@ SSE_OP(a ## sd);
         "pop %0\n"\
         : "=rm" (eflags)\
         : "x" (a.dq), "x" (b.dq));\
-    printf("%-9s: a=%f b=%f cc=%04x\n",\
+    printf("%-9s: a=%f b=%f cc=%04lx\n",\
            #op, a1, b1,\
            eflags & (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A));\
 }
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 22/56] tests/tcg: move ARM specific tests into subdir
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (20 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 21/56] tests/tcg/i386/test-i386: fix printf format Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 23/56] tests/tcg: enable building for ARM Alex Bennée
                   ` (35 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, open list:ARM

These only need to be built for ARM guests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
v2
  - do VPATH manipulation in tests/tcg/arm/Makefile.target
  - merge with fix hello-arm test
v4
  - update MAINTAINERS

diff --git a/MAINTAINERS b/MAINTAINERS
index 57c828644f..75a163f557 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -135,6 +135,7 @@ M: Peter Maydell <peter.maydell@linaro.org>
 L: qemu-arm@nongnu.org
 S: Maintained
 F: target/arm/
+F: tests/tcg/arm/
 F: hw/arm/
 F: hw/cpu/a*mpcore.c
 F: include/hw/cpu/a*mpcore.h
diff --git a/tests/tcg/README b/tests/tcg/README
index 469504c4cb..625f2326e6 100644
--- a/tests/tcg/README
+++ b/tests/tcg/README
@@ -5,15 +5,6 @@ or they are architecture specific.
 
 
 
-ARM
-===
-
-hello-arm
----------
-
-test-arm-iwmmxt
----------------
-
 MIPS
 ====
 
diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
new file mode 100644
index 0000000000..bc6962ecc6
--- /dev/null
+++ b/tests/tcg/arm/Makefile.target
@@ -0,0 +1,13 @@
+# -*- Mode: makefile -*-
+#
+# ARM - included from tests/tcg/Makefile.target
+#
+
+ARM_SRC=$(SRC_PATH)/tests/tcg/arm
+
+# Set search path for all sources
+VPATH 		+= $(ARM_SRC)
+
+
+hello-arm: CFLAGS+=-marm -ffreestanding
+hello-arm: LDFLAGS+=-nostdlib
diff --git a/tests/tcg/arm/README b/tests/tcg/arm/README
new file mode 100644
index 0000000000..e6307116e2
--- /dev/null
+++ b/tests/tcg/arm/README
@@ -0,0 +1,11 @@
+These are ARM specific guest programs
+
+hello-arm
+---------
+
+A very simple inline assembly, write syscall based hello world
+
+test-arm-iwmmxt
+---------------
+
+A simple test case for older iwmmxt extended ARMs
diff --git a/tests/tcg/hello-arm.c b/tests/tcg/arm/hello-arm.c
similarity index 100%
rename from tests/tcg/hello-arm.c
rename to tests/tcg/arm/hello-arm.c
diff --git a/tests/tcg/test-arm-iwmmxt.s b/tests/tcg/arm/test-arm-iwmmxt.s
similarity index 100%
rename from tests/tcg/test-arm-iwmmxt.s
rename to tests/tcg/arm/test-arm-iwmmxt.s
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 23/56] tests/tcg: enable building for ARM
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (21 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 22/56] tests/tcg: move ARM specific tests into subdir Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 24/56] tests/tcg/arm: fix up test-arm-iwmmxt test Alex Bennée
                   ` (34 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, open list:ARM

This allows us to use the docker cross compiler image to build these
tests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
  - add EXTRA_RUNS for mmap tests

diff --git a/tests/tcg/arm/Makefile.include b/tests/tcg/arm/Makefile.include
new file mode 100644
index 0000000000..8e7eac008f
--- /dev/null
+++ b/tests/tcg/arm/Makefile.include
@@ -0,0 +1,8 @@
+# Makefile.include for all ARM targets
+#
+# We don't have any bigendian build tools so we only use this for armhf
+
+ifeq ($(TARGET_NAME),arm)
+DOCKER_IMAGE=debian-armhf-cross
+DOCKER_CROSS_COMPILER=arm-linux-gnueabihf-gcc
+endif
diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index bc6962ecc6..0312293dca 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -1,6 +1,6 @@
 # -*- Mode: makefile -*-
 #
-# ARM - included from tests/tcg/Makefile.target
+# ARM - included from tests/tcg/Makefile
 #
 
 ARM_SRC=$(SRC_PATH)/tests/tcg/arm
@@ -11,3 +11,6 @@ VPATH 		+= $(ARM_SRC)
 
 hello-arm: CFLAGS+=-marm -ffreestanding
 hello-arm: LDFLAGS+=-nostdlib
+
+# On ARM Linux only supports 4k pages
+EXTRA_RUNS+=run-test-mmap-4096
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 24/56] tests/tcg/arm: fix up test-arm-iwmmxt test
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (22 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 23/56] tests/tcg: enable building for ARM Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 25/56] tests/tcg: enable building for AArch64 Alex Bennée
                   ` (33 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, open list:ARM

We need to rename the source file to a .S so we can do a single-line
assemble and link invocation. We also specify the additional CFLAGS
for the compile as it's a non-standard ARM binary.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
[rth: force fpu configuration]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
v4
  - include rth's -mfpu=fpv4-sp-d16
v5
  - merge fixes

diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index 0312293dca..cadb385890 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -8,9 +8,14 @@ ARM_SRC=$(SRC_PATH)/tests/tcg/arm
 # Set search path for all sources
 VPATH 		+= $(ARM_SRC)
 
+TESTS += hello-arm test-arm-iwmmxt
 
 hello-arm: CFLAGS+=-marm -ffreestanding
 hello-arm: LDFLAGS+=-nostdlib
 
+test-arm-iwmmxt: CFLAGS+=-marm -march=iwmmxt -mabi=aapcs -mfpu=fpv4-sp-d16
+test-arm-iwmmxt: test-arm-iwmmxt.S
+	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
+
 # On ARM Linux only supports 4k pages
 EXTRA_RUNS+=run-test-mmap-4096
diff --git a/tests/tcg/arm/test-arm-iwmmxt.s b/tests/tcg/arm/test-arm-iwmmxt.S
similarity index 100%
rename from tests/tcg/arm/test-arm-iwmmxt.s
rename to tests/tcg/arm/test-arm-iwmmxt.S
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 25/56] tests/tcg: enable building for AArch64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (23 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 24/56] tests/tcg/arm: fix up test-arm-iwmmxt test Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 26/56] tests/tcg/arm: add fcvt test cases for AArch32/64 Alex Bennée
                   ` (32 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, open list:ARM

We only have compilers for the (default) little endian variants.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v4
  - update MAINTAINERS

diff --git a/MAINTAINERS b/MAINTAINERS
index 75a163f557..c4fc6fa357 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -136,6 +136,7 @@ L: qemu-arm@nongnu.org
 S: Maintained
 F: target/arm/
 F: tests/tcg/arm/
+F: tests/tcg/aarch64/
 F: hw/arm/
 F: hw/cpu/a*mpcore.c
 F: include/hw/cpu/a*mpcore.h
diff --git a/tests/tcg/aarch64/Makefile.include b/tests/tcg/aarch64/Makefile.include
new file mode 100644
index 0000000000..de32c91235
--- /dev/null
+++ b/tests/tcg/aarch64/Makefile.include
@@ -0,0 +1,8 @@
+# Makefile.include for AArch64 targets
+#
+# We don't have any bigendian build tools so we only use this for AArch64
+
+ifeq ($(TARGET_NAME),aarch64)
+DOCKER_IMAGE=debian-arm64-cross
+DOCKER_CROSS_COMPILER=aarch64-linux-gnu-gcc
+endif
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 26/56] tests/tcg/arm: add fcvt test cases for AArch32/64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (24 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 25/56] tests/tcg: enable building for AArch64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 27/56] tests/tcg: move MIPS specific tests into subdir Alex Bennée
                   ` (31 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, open list:ARM

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 <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v4
  - add fcvt.ref and check results against it
  - fix single_to_half, single_to_double conversions
  - properly toggle AHP mode (fpsr->fpcr)
  - more values around the AHP margins
  - add INF/NAN/SNAN inputs
  - build for ARM and AArch64
  - fix bug for hex literals
  - add float-to-int
  - checkpatch fix
v5
  - merge with tests/tcg/aarch64: add Makefile.target

diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
new file mode 100644
index 0000000000..7dba32138d
--- /dev/null
+++ b/tests/tcg/aarch64/Makefile.target
@@ -0,0 +1,19 @@
+# -*- Mode: makefile -*-
+#
+# 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
+
+run-fcvt: fcvt
+	$(call quiet-command, \
+		$(QEMU) $< > fcvt.out && \
+		diff -u $(AARCH64_SRC)/fcvt.ref fcvt.out, \
+		"TEST", "$< (default) on $(TARGET_NAME)")
diff --git a/tests/tcg/aarch64/fcvt.ref b/tests/tcg/aarch64/fcvt.ref
new file mode 100644
index 0000000000..e7af24dc58
--- /dev/null
+++ b/tests/tcg/aarch64/fcvt.ref
@@ -0,0 +1,3268 @@
+#### Enabling IEEE Half Precision
+### Rounding to nearest
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0x7f00  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x4170  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bff  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7c00  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0x7e00  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0x7e00  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: nan / 0x007ff8040000000000 (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK)
+### Rounding upwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x401  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4249  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0x7f00  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x401  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x4170  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4249  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bff  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7c00  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0x7e00  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0x7e00  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: nan / 0x007ff8040000000000 (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK)
+### Rounding downwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730512e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0x7f00  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x416f  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bfe  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7c00  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0x7e00  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0x7e00  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: nan / 0x007ff8040000000000 (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK)
+### Rounding to zero
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0x7f00  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x416f  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bfe  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7c00  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0x7e00  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0x7e00  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -nan / 0x00fffffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -nan / 0x00fffbfc0000000000 (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -nan / 0x00fff8040000000000 (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: nan / 0x007ff8040000000000 (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: nan / 0x007ffbfc0000000000 (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: nan / 0x007ffffc0000000000 (0 => OK)
+Converting single-precision to integer
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   INT64:                    1/0x000000000000000001 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   INT64:                    2/0x000000000000000002 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   INT64:                65503/0x00000000000000ffdf (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   INT64:                65504/0x00000000000000ffe0 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   INT64:                65505/0x00000000000000ffe1 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   INT64:               131007/0x00000000000001ffbf (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   INT64:               131008/0x00000000000001ffc0 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   INT64:               131009/0x00000000000001ffc1 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting double-precision to integer
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   INT64:                   -2/0x00fffffffffffffffe (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   INT64:                   -1/0x00ffffffffffffffff (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   INT64:                    0/00000000000000000000 (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   INT64:                    1/0x000000000000000001 (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   INT64:                    1/0x000000000000000001 (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   INT64:                    2/0x000000000000000002 (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   INT64:                65503/0x00000000000000ffdf (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   INT64:                65504/0x00000000000000ffe0 (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   INT64:                65505/0x00000000000000ffe1 (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   INT64:               131007/0x00000000000001ffbf (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   INT64:               131008/0x00000000000001ffc0 (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   INT64:               131009/0x00000000000001ffc1 (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   INT64:           2147483647/0x00000000007fffffff (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting half-precision to integer
+00   HALF: 0xffff  (0 => OK)
+00   INT64:           4294959104/0x0000000000ffffe000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01   INT64:           4292861952/0x0000000000ffdfe000 (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02   INT64:           4290781184/0x0000000000ffc02000 (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03   INT64:           4286578688/0x0000000000ff800000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04   INT64:           3347046400/0x0000000000c77fe000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05   INT64:           3221225472/0x0000000000c0000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06   INT64:           3212836864/0x0000000000bf800000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07   INT64:           3011510272/0x0000000000b3800000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08   INT64:           2147483648/0x000000000080000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10   INT64:            864026624/0x000000000033800000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11   INT64:           1065353216/0x00000000003f800000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12   INT64:           1199562752/0x0000000000477fe000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13   INT64:           2139095040/0x00000000007f800000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14   INT64:           2143297536/0x00000000007fc02000 (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15   INT64:           2145378304/0x00000000007fdfe000 (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16   INT64:           2147475456/0x00000000007fffe000 (0 => OK)
+#### Enabling ARM Alternative Half Precision
+### Rounding to nearest
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7fff  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xffff  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xffff  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x4170  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bff  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7fff  (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7fff  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7fff  (0x10 =>    INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7fff  (0x1 =>     INVALID)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7fff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7fff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7fff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7fff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+### Rounding upwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x401  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4249  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7c00  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7fff  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x1 =>     INVALID)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xffff  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xffff  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x401  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x4170  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4249  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bff  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7c00  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7fff  (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7fff  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7fff  (0x1 =>     INVALID)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7fff  (0x1 =>     INVALID)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7fff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7fff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7fff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7fff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+### Rounding downwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7ffe  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730512e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xffff  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xffff  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x416f  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bfe  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7ffe  (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7fff  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7fff  (0x10 =>    INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7fff  (0x1 =>     INVALID)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7fff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7fff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7fff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7fff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+### Rounding to zero
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7ffe  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0xffff  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0xffff  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0xc000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0xbc00  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0x400  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x3c00  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x3c01  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x3c00  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x4000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x416f  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x4248  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0x7bfe  (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0x7bff  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0x7bff  (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0x7ffe  (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0x7fff  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0x7fff  (0x10 =>    INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0x7fff  (0x1 =>     INVALID)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0x7fff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0x7fff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0x7fff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0x7fff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: -1.31008000000000000000e+05 / 0x00c0fffc0000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: -8.18560000000000000000e+04 / 0x00c0f3fc0000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: -6.56000000000000000000e+04 / 0x00c0f0040000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: -6.55360000000000000000e+04 / 0x00c0f0000000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: -6.55040000000000000000e+04 / 0x00c0effc0000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: -5.96046447753906250000e-08 / 0x00be70000000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: -0.00000000000000000000e+00 / 0x008000000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 5.96046447753906250000e-08 / 0x003e70000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 6.55360000000000000000e+04 / 0x0040f0000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 6.56000000000000000000e+04 / 0x0040f0040000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 8.18560000000000000000e+04 / 0x0040f3fc0000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+Converting single-precision to integer
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   INT64:                    1/0x000000000000000001 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   INT64:                    2/0x000000000000000002 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   INT64:                65503/0x00000000000000ffdf (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   INT64:                65504/0x00000000000000ffe0 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   INT64:                65505/0x00000000000000ffe1 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   INT64:               131007/0x00000000000001ffbf (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   INT64:               131008/0x00000000000001ffc0 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   INT64:               131009/0x00000000000001ffc1 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting double-precision to integer
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   INT64: -9223372036854775808/0x008000000000000000 (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   INT64:                   -2/0x00fffffffffffffffe (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   INT64:                   -1/0x00ffffffffffffffff (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   INT64:                    0/00000000000000000000 (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   INT64:                    1/0x000000000000000001 (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   INT64:                    1/0x000000000000000001 (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   INT64:                    2/0x000000000000000002 (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   INT64:                65503/0x00000000000000ffdf (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   INT64:                65504/0x00000000000000ffe0 (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   INT64:                65505/0x00000000000000ffe1 (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   INT64:               131007/0x00000000000001ffbf (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   INT64:               131008/0x00000000000001ffc0 (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   INT64:               131009/0x00000000000001ffc1 (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   INT64:           2147483647/0x00000000007fffffff (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   INT64:  9223372036854775807/0x007fffffffffffffff (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting half-precision to integer
+00   HALF: 0xffff  (0 => OK)
+00   INT64:           3355435008/0x0000000000c7ffe000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01   INT64:           3349143552/0x0000000000c79fe000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02   INT64:           3347062784/0x0000000000c7802000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03   INT64:           3347054592/0x0000000000c7800000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04   INT64:           3347046400/0x0000000000c77fe000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05   INT64:           3221225472/0x0000000000c0000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06   INT64:           3212836864/0x0000000000bf800000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07   INT64:           3011510272/0x0000000000b3800000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08   INT64:           2147483648/0x000000000080000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10   INT64:            864026624/0x000000000033800000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11   INT64:           1065353216/0x00000000003f800000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12   INT64:           1199562752/0x0000000000477fe000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13   INT64:           1199570944/0x000000000047800000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14   INT64:           1199579136/0x000000000047802000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15   INT64:           1201659904/0x0000000000479fe000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16   INT64:           1207951360/0x000000000047ffe000 (0 => OK)
diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index cadb385890..14b5435fc6 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) fcvt
 
 hello-arm: CFLAGS+=-marm -ffreestanding
 hello-arm: LDFLAGS+=-nostdlib
@@ -17,5 +19,16 @@ test-arm-iwmmxt: CFLAGS+=-marm -march=iwmmxt -mabi=aapcs -mfpu=fpv4-sp-d16
 test-arm-iwmmxt: test-arm-iwmmxt.S
 	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
 
+ifeq ($(TARGET_NAME), arm)
+fcvt: LDFLAGS+=-lm
+# fcvt: CFLAGS+=-march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+
+run-fcvt: fcvt
+	$(call quiet-command, \
+		$(QEMU) $< > fcvt.out && \
+		diff -u $(ARM_SRC)/fcvt.ref fcvt.out, \
+		"TEST", "$< (default) on $(TARGET_NAME)")
+endif
+
 # On ARM Linux only supports 4k pages
 EXTRA_RUNS+=run-test-mmap-4096
diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
new file mode 100644
index 0000000000..617626bc63
--- /dev/null
+++ b/tests/tcg/arm/fcvt.c
@@ -0,0 +1,458 @@
+/*
+ * Test Floating Point Conversion
+ */
+
+/* we want additional float type definitions */
+#define __STDC_WANT_IEC_60559_BFP_EXT__
+#define __STDC_WANT_IEC_60559_TYPES_EXT__
+
+#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 / %#020" PRIx64 " (%#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);
+}
+
+static void print_int64(int i, int64_t num)
+{
+    uint64_t int64_as_hex = *(uint64_t *) &num;
+    int flags = fetestexcept(FE_ALL_EXCEPT);
+    char *fstr = get_flag_state(flags);
+
+    printf("%02d   INT64: %20" PRId64 "/%#020" PRIx64 " (%#x => %s)\n",
+           i, num, int64_as_hex, flags, fstr);
+}
+
+#ifndef SNANF
+/* Signaling NaN macros, if supported.  */
+# if __GNUC_PREREQ(3, 3)
+#  define SNANF (__builtin_nansf (""))
+#  define SNAN (__builtin_nans (""))
+#  define SNANL (__builtin_nansl (""))
+# endif
+#endif
+
+float single_numbers[] = { -SNANF,
+                           -NAN,
+                           -INFINITY,
+                           -FLT_MAX,
+                           -1.111E+31,
+                           -1.111E+30,
+                           -1.08700982e-12,
+                           -1.78051176e-20,
+                           -FLT_MIN,
+                           0.0,
+                           FLT_MIN,
+                           2.98023224e-08,
+                           5.96046E-8, /* min positive FP16 subnormal */
+                           6.09756E-5, /* max subnormal FP16 */
+                           6.10352E-5, /* min positive normal FP16 */
+                           1.0,
+                           1.0009765625, /* smallest float after 1.0 FP16 */
+                           2.0,
+                           M_E, M_PI,
+                           65503.0,
+                           65504.0, /* max FP16 */
+                           65505.0,
+                           131007.0,
+                           131008.0, /* max AFP */
+                           131009.0,
+                           1.111E+30,
+                           FLT_MAX,
+                           INFINITY,
+                           NAN,
+                           SNANF };
+
+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];
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_single_number(i, input);
+#if defined(__arm__)
+        uint32_t output;
+        asm("vcvtb.f16.f32 %0, %1" : "=t" (output) : "x" (input));
+#else
+        uint16_t output;
+        asm("fcvt %h0, %s1" : "=w" (output) : "x" (input));
+#endif
+        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; */
+        double output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_single_number(i, input);
+#if defined(__arm__)
+        asm("vcvt.f64.f32 %P0, %1" : "=w" (output) : "t" (input));
+#else
+        asm("fcvt %d0, %s1" : "=w" (output) : "x" (input));
+#endif
+        print_double_number(i, output);
+    }
+}
+
+static void convert_single_to_integer(void)
+{
+    int i;
+
+    printf("Converting single-precision to integer\n");
+
+    for (i = 0; i < ARRAY_SIZE(single_numbers); ++i) {
+        float input = single_numbers[i];
+        int64_t output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_single_number(i, input);
+#if defined(__arm__)
+        /* asm("vcvt.s32.f32 %s0, %s1" : "=t" (output) : "t" (input)); */
+        output = input;
+#else
+        asm("fcvtzs %0, %s1" : "=r" (output) : "w" (input));
+#endif
+        print_int64(i, output);
+    }
+}
+
+/* This allows us to initialise some doubles as pure hex */
+typedef union {
+    double d;
+    uint64_t h;
+} test_doubles;
+
+test_doubles double_numbers[] = {
+    {SNAN},
+    {-NAN},
+    {-INFINITY},
+    {-DBL_MAX},
+    {-FLT_MAX-1.0},
+    {-FLT_MAX},
+    {-1.111E+31},
+    {-1.111E+30}, /* half prec */
+    {-2.0}, {-1.0},
+    {-DBL_MIN},
+    {-FLT_MIN},
+    {0.0},
+    {FLT_MIN},
+    {2.98023224e-08},
+    {5.96046E-8}, /* min positive FP16 subnormal */
+    {6.09756E-5}, /* max subnormal FP16 */
+    {6.10352E-5}, /* min positive normal FP16 */
+    {1.0},
+    {1.0009765625}, /* smallest float after 1.0 FP16 */
+    {DBL_MIN},
+    {1.3789972848607228e-308},
+    {1.4914738736681624e-308},
+    {1.0}, {2.0},
+    {M_E}, {M_PI},
+    {65503.0},
+    {65504.0}, /* max FP16 */
+    {65505.0},
+    {131007.0},
+    {131008.0}, /* max AFP */
+    {131009.0},
+    {.h = 0x41dfffffffc00000 }, /* to int = 0x7fffffff */
+    {FLT_MAX},
+    {FLT_MAX + 1.0},
+    {DBL_MAX},
+    {INFINITY},
+    {NAN},
+    {.h = 0x7ff0000000000001}, /* SNAN */
+    {SNAN},
+};
+
+static void convert_double_to_half(void)
+{
+    int i;
+
+    printf("Converting double-precision to half-precision\n");
+
+    for (i = 0; i < ARRAY_SIZE(double_numbers); ++i) {
+        double input = double_numbers[i].d;
+        uint16_t output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_double_number(i, input);
+
+        /* as we don't have _Float16 support */
+#if defined(__arm__)
+        /* asm("vcvtb.f16.f64 %0, %P1" : "=t" (output) : "x" (input)); */
+        output = input;
+#else
+        asm("fcvt %h0, %d1" : "=w" (output) : "x" (input));
+#endif
+        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(double_numbers); ++i) {
+        double input = double_numbers[i].d;
+        uint32_t output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_double_number(i, input);
+
+#if defined(__arm__)
+        asm("vcvt.f32.f64 %0, %P1" : "=w" (output) : "x" (input));
+#else
+        asm("fcvt %s0, %d1" : "=w" (output) : "x" (input));
+#endif
+
+        print_single_number(i, output);
+    }
+}
+
+static void convert_double_to_integer(void)
+{
+    int i;
+
+    printf("Converting double-precision to integer\n");
+
+    for (i = 0; i < ARRAY_SIZE(double_numbers); ++i) {
+        double input = double_numbers[i].d;
+        int64_t output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_double_number(i, input);
+#if defined(__arm__)
+        /* asm("vcvt.s32.f32 %s0, %s1" : "=t" (output) : "t" (input)); */
+        output = input;
+#else
+        asm("fcvtzs %0, %d1" : "=r" (output) : "w" (input));
+#endif
+        print_int64(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);
+#if defined(__arm__)
+        /* asm("vcvtb.f64.f16 %P0, %1" : "=w" (output) : "t" (input)); */
+        output = input;
+#else
+        asm("fcvt %d0, %h1" : "=w" (output) : "x" (input));
+#endif
+        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);
+#if defined(__arm__)
+        asm("vcvtb.f32.f16 %0, %1" : "=w" (output) : "x" ((uint32_t)input));
+#else
+        asm("fcvt %s0, %h1" : "=w" (output) : "x" (input));
+#endif
+        print_single_number(i, output);
+    }
+}
+
+static void convert_half_to_integer(void)
+{
+    int i;
+
+    printf("Converting half-precision to integer\n");
+
+    for (i = 0; i < ARRAY_SIZE(half_numbers); ++i) {
+        uint16_t input = half_numbers[i];
+        int64_t output;
+
+        feclearexcept(FE_ALL_EXCEPT);
+
+        print_half_number(i, input);
+#if defined(__arm__)
+        /* asm("vcvt.s32.f16 %0, %1" : "=t" (output) : "t" (input)); v8.2*/
+        output = input;
+#else
+        asm("fcvt %s0, %h1" : "=w" (output) : "x" (input));
+#endif
+        print_int64(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;
+
+    printf("#### Enabling IEEE 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();
+    }
+
+    /* convert to integer */
+    convert_single_to_integer();
+    convert_double_to_integer();
+    convert_half_to_integer();
+
+    /* And now with ARM alternative FP16 */
+#if defined(__arm__)
+    /* See glibc sysdeps/arm/fpu_control.h */
+    asm("mrc p10, 7, r1, cr1, cr0, 0\n\t"
+        "orr r1, r1, %[flags]\n\t"
+        "mcr p10, 7, r1, cr1, cr0, 0\n\t"
+        : /* no output */ : [flags] "n" (1 << 26) : "r1" );
+#else
+    asm("mrs x1, fpcr\n\t"
+        "orr x1, x1, %[flags]\n\t"
+        "msr fpcr, x1\n\t"
+        : /* no output */ : [flags] "n" (1 << 26) : "x1" );
+#endif
+
+    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();
+    }
+
+    /* convert to integer */
+    convert_single_to_integer();
+    convert_double_to_integer();
+    convert_half_to_integer();
+
+    return 0;
+}
diff --git a/tests/tcg/arm/fcvt.ref b/tests/tcg/arm/fcvt.ref
new file mode 100644
index 0000000000..f052b6d7e5
--- /dev/null
+++ b/tests/tcg/arm/fcvt.ref
@@ -0,0 +1,3268 @@
+#### Enabling IEEE Half Precision
+### Rounding to nearest
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding upwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x401  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4249  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7c00  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding downwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfc00  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730512e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding to zero
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0xff00  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0xfe00  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xfbff  (0x14 => OVERFLOW   INEXACT )
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7bff  (0x14 => OVERFLOW   INEXACT )
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7c00  (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0x7e00  (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0x7f00  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -nan / 0xffffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -nan / 0xffdfe000  (0x1 =>     INVALID)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -nan / 0xffc02000  (0x1 =>     INVALID)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -inf / 0xff800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: inf / 0x7f800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: nan / 0x7fc02000  (0x1 =>     INVALID)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: nan / 0x7fdfe000  (0x1 =>     INVALID)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: nan / 0x7fffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+Converting single-precision to integer
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   INT64:                    1/0x000000000000000001 (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   INT64:                65503/0x00000000000000ffdf (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   INT64:                65504/0x00000000000000ffe0 (0x10 =>    INEXACT )
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   INT64:                65505/0x00000000000000ffe1 (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   INT64:               131007/0x00000000000001ffbf (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   INT64:               131008/0x00000000000001ffc0 (0x10 =>    INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   INT64:               131009/0x00000000000001ffc1 (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   INT64:                   -1/0x00ffffffffffffffff (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting double-precision to integer
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   INT64:                    1/0x000000000000000001 (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   INT64:                   -2/0x00fffffffffffffffe (0x10 =>    INEXACT )
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   INT64:                   -1/0x00ffffffffffffffff (0x10 =>    INEXACT )
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   INT64:                    0/00000000000000000000 (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   INT64:                    0/00000000000000000000 (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   INT64:                    0/00000000000000000000 (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   INT64:                65503/0x00000000000000ffdf (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   INT64:                65504/0x00000000000000ffe0 (0x10 =>    INEXACT )
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   INT64:                65505/0x00000000000000ffe1 (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   INT64:               131007/0x00000000000001ffbf (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   INT64:               131008/0x00000000000001ffc0 (0x10 =>    INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   INT64:               131009/0x00000000000001ffc1 (0x10 =>    INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   INT64:           2147483647/0x00000000007fffffff (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   INT64:                   -1/0x00ffffffffffffffff (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting half-precision to integer
+00   HALF: 0xffff  (0 => OK)
+00   INT64:                65535/0x00000000000000ffff (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01   INT64:                64767/0x00000000000000fcff (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02   INT64:                64513/0x00000000000000fc01 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03   INT64:                64512/0x00000000000000fc00 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04   INT64:                64511/0x00000000000000fbff (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05   INT64:                49152/0x00000000000000c000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06   INT64:                48128/0x00000000000000bc00 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07   INT64:                32769/0x000000000000008001 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08   INT64:                32768/0x000000000000008000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10   INT64:                    1/0x000000000000000001 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11   INT64:                15360/0x000000000000003c00 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12   INT64:                31743/0x000000000000007bff (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13   INT64:                31744/0x000000000000007c00 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14   INT64:                31745/0x000000000000007c01 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15   INT64:                31999/0x000000000000007cff (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16   INT64:                32767/0x000000000000007fff (0 => OK)
+#### Enabling ARM Alternative Half Precision
+### Rounding to nearest
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7fff  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding upwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0x01  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x400  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x401  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x4170  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4249  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bff  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7c00  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7fff  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x1 =>     INVALID)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005935e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015673e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851006e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324219e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635273e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635273e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750797e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding downwards
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8001  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7ffe  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909791e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635273e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289629e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289629e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730512e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730512e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+### Rounding to zero
+Converting single-precision to half-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   HALF: 0x8000  (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   HALF: 0x8000  (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   HALF: 0xffff  (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   HALF: 0xffff  (0x1 =>     INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   HALF: 0xffff  (0x1 =>     INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   HALF: 0xffff  (0x1 =>     INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   HALF: 0x8000  (0x18 =>  UNDERFLOW  INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   HALF: 0000  (0x18 =>  UNDERFLOW  INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   HALF: 0x3ff  (0x18 =>  UNDERFLOW  INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   HALF: 0x400  (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   HALF: 0x3c00  (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   HALF: 0x3c01  (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   HALF: 0x4000  (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   HALF: 0x416f  (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   HALF: 0x4248  (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   HALF: 0x7bfe  (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   HALF: 0x7bff  (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   HALF: 0x7bff  (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   HALF: 0x7ffe  (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   HALF: 0x7fff  (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   HALF: 0x7fff  (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   HALF: 0x7fff  (0x1 =>     INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   HALF: 0x7fff  (0x1 =>     INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   HALF: 0x7fff  (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   HALF: 0000  (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   HALF: 0000  (0x1 =>     INVALID)
+Converting single-precision to double-precision
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00 DOUBLE: -nan / 0x00fffc000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04 DOUBLE: -1.11100004769645909790e+31 / 0x00c661874b20000000 (0 => OK)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05 DOUBLE: -1.11100003258488635272e+30 / 0x00c62c0bab60000000 (0 => OK)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06 DOUBLE: -1.08700982243137289628e-12 / 0x00bd731f7500000000 (0 => OK)
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07 DOUBLE: -1.78051176151664730511e-20 / 0x00bbd5054440000000 (0 => OK)
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11 DOUBLE: 2.98023223876953125000e-08 / 0x003e60000000000000 (0 => OK)
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12 DOUBLE: 5.96045985901128005934e-08 / 0x003e6ffffe60000000 (0 => OK)
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13 DOUBLE: 6.09755988989491015672e-05 / 0x003f0ff801a0000000 (0 => OK)
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14 DOUBLE: 6.10351999057456851005e-05 / 0x003f100000c0000000 (0 => OK)
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18 DOUBLE: 2.71828174591064453125e+00 / 0x004005bf0a80000000 (0 => OK)
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19 DOUBLE: 3.14159274101257324218e+00 / 0x00400921fb60000000 (0 => OK)
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26 DOUBLE: 1.11100003258488635272e+30 / 0x00462c0bab60000000 (0 => OK)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30 DOUBLE: nan / 0x007ffc000000000000 (0x1 =>     INVALID)
+Converting double-precision to half-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   HALF: 0000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   HALF: 0000  (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   HALF: 0000  (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   HALF: 0000  (0x1 =>     INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   HALF: 0000  (0x1 =>     INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   HALF: 0000  (0x1 =>     INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   HALF: 0000  (0x1 =>     INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   HALF: 0000  (0x1 =>     INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   HALF: 0000  (0x1 =>     INVALID)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   HALF: 0000  (0x1 =>     INVALID)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   HALF: 0000  (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   HALF: 0000  (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   HALF: 0000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   HALF: 0000  (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   HALF: 0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   HALF: 0000  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   HALF: 0000  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   HALF: 0000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   HALF: 0x01  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   HALF: 0x01  (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   HALF: 0000  (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   HALF: 0000  (0x10 =>    INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   HALF: 0000  (0x10 =>    INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   HALF: 0x01  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   HALF: 0x02  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   HALF: 0x02  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   HALF: 0x03  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   HALF: 0xffdf  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   HALF: 0xffe0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   HALF: 0xffe1  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   HALF: 0xffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   HALF: 0xffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   HALF: 0xffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   HALF: 0xffff  (0 => OK)
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   HALF: 0xffff  (0x1 =>     INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   HALF: 0xffff  (0x1 =>     INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   HALF: 0xffff  (0x1 =>     INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   HALF: 0xffff  (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   HALF: 0000  (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   HALF: 0000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   HALF: 0000  (0x1 =>     INVALID)
+Converting double-precision to single-precision
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13 SINGLE: 8.38860800000000000000e+06 / 0x4b000000  (0 => OK)
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+Converting half-precision to single-precision
+00   HALF: 0xffff  (0 => OK)
+00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 SINGLE: -8.18560000000000000000e+04 / 0xc79fe000  (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 SINGLE: -6.56000000000000000000e+04 / 0xc7802000  (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 SINGLE: -6.55360000000000000000e+04 / 0xc7800000  (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 SINGLE: -6.55040000000000000000e+04 / 0xc77fe000  (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 SINGLE: -5.96046447753906250000e-08 / 0xb3800000  (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 SINGLE: 5.96046447753906250000e-08 / 0x33800000  (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 SINGLE: 6.55360000000000000000e+04 / 0x47800000  (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 SINGLE: 6.56000000000000000000e+04 / 0x47802000  (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 SINGLE: 8.18560000000000000000e+04 / 0x479fe000  (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+Converting half-precision to double-precision
+00   HALF: 0xffff  (0 => OK)
+00 DOUBLE: 6.55350000000000000000e+04 / 0x0040efffe000000000 (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01 DOUBLE: 6.47670000000000000000e+04 / 0x0040ef9fe000000000 (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02 DOUBLE: 6.45130000000000000000e+04 / 0x0040ef802000000000 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03 DOUBLE: 6.45120000000000000000e+04 / 0x0040ef800000000000 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04 DOUBLE: 6.45110000000000000000e+04 / 0x0040ef7fe000000000 (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05 DOUBLE: 4.91520000000000000000e+04 / 0x0040e8000000000000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06 DOUBLE: 4.81280000000000000000e+04 / 0x0040e7800000000000 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07 DOUBLE: 3.27690000000000000000e+04 / 0x0040e0002000000000 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08 DOUBLE: 3.27680000000000000000e+04 / 0x0040e0000000000000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11 DOUBLE: 1.53600000000000000000e+04 / 0x0040ce000000000000 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12 DOUBLE: 3.17430000000000000000e+04 / 0x0040deffc000000000 (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13 DOUBLE: 3.17440000000000000000e+04 / 0x0040df000000000000 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14 DOUBLE: 3.17450000000000000000e+04 / 0x0040df004000000000 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15 DOUBLE: 3.19990000000000000000e+04 / 0x0040df3fc000000000 (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16 DOUBLE: 3.27670000000000000000e+04 / 0x0040dfffc000000000 (0 => OK)
+Converting single-precision to integer
+00 SINGLE: -nan / 0xffa00000  (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
+02   INT64:                    1/0x000000000000000001 (0x1 =>     INVALID)
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
+03   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+04 SINGLE: -1.11100004769645909790e+31 / 0xf30c3a59  (0 => OK)
+04   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+05 SINGLE: -1.11100003258488635272e+30 / 0xf1605d5b  (0 => OK)
+05   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+06 SINGLE: -1.08700982243137289628e-12 / 0xab98fba8  (0 => OK)
+06   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+07 SINGLE: -1.78051176151664730511e-20 / 0x9ea82a22  (0 => OK)
+07   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+08 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (0 => OK)
+08   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+09 SINGLE: 0.00000000000000000000e+00 / 0000000000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0 => OK)
+12   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+13 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
+15   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+16 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
+16   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+17 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
+17   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+18 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0 => OK)
+18   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+19 SINGLE: 3.14159274101257324218e+00 / 0x40490fdb  (0 => OK)
+19   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+20 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
+20   INT64:                65503/0x00000000000000ffdf (0x10 =>    INEXACT )
+21 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
+21   INT64:                65504/0x00000000000000ffe0 (0x10 =>    INEXACT )
+22 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
+22   INT64:                65505/0x00000000000000ffe1 (0x10 =>    INEXACT )
+23 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
+23   INT64:               131007/0x00000000000001ffbf (0x10 =>    INEXACT )
+24 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
+24   INT64:               131008/0x00000000000001ffc0 (0x10 =>    INEXACT )
+25 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
+25   INT64:               131009/0x00000000000001ffc1 (0x10 =>    INEXACT )
+26 SINGLE: 1.11100003258488635272e+30 / 0x71605d5b  (0 => OK)
+26   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+27 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
+27   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+28 SINGLE: inf / 0x7f800000  (0 => OK)
+28   INT64:                   -1/0x00ffffffffffffffff (0x1 =>     INVALID)
+29 SINGLE: nan / 0x7fc00000  (0 => OK)
+29   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+30 SINGLE: nan / 0x7fa00000  (0 => OK)
+30   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting double-precision to integer
+00 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+00   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
+01   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
+02   INT64:                    1/0x000000000000000001 (0x1 =>     INVALID)
+03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
+03   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+04   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
+05   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
+06   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
+07   INT64:                    1/0x000000000000000001 (0x11 =>    INEXACT INVALID)
+08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
+08   INT64:                   -2/0x00fffffffffffffffe (0x10 =>    INEXACT )
+09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
+09   INT64:                   -1/0x00ffffffffffffffff (0x10 =>    INEXACT )
+10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
+10   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
+11   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+12 DOUBLE: 0.00000000000000000000e+00 / 00000000000000000000 (0 => OK)
+12   INT64:                    0/00000000000000000000 (0 => OK)
+13 DOUBLE: 1.17549435082228750796e-38 / 0x003810000000000000 (0 => OK)
+13   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
+14   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
+15   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
+16   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
+17   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+18   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
+19   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+20 DOUBLE: 2.22507385850720138309e-308 / 0x000010000000000000 (0 => OK)
+20   INT64:                    0/00000000000000000000 (0x10 =>    INEXACT )
+21 DOUBLE: 1.37899728486072282843e-308 / 0x000009ea82a2287680 (0 => OK)
+21   INT64:                    0/00000000000000000000 (0x18 =>  UNDERFLOW  INEXACT )
+22 DOUBLE: 1.49147387366816238763e-308 / 0x00000ab98fba843210 (0 => OK)
+22   INT64:                    0/00000000000000000000 (0x18 =>  UNDERFLOW  INEXACT )
+23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
+23   INT64:                    1/0x000000000000000001 (0x10 =>    INEXACT )
+24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
+24   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
+25   INT64:                    2/0x000000000000000002 (0x10 =>    INEXACT )
+26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
+26   INT64:                    3/0x000000000000000003 (0x10 =>    INEXACT )
+27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
+27   INT64:                65503/0x00000000000000ffdf (0x10 =>    INEXACT )
+28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
+28   INT64:                65504/0x00000000000000ffe0 (0x10 =>    INEXACT )
+29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
+29   INT64:                65505/0x00000000000000ffe1 (0x10 =>    INEXACT )
+30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
+30   INT64:               131007/0x00000000000001ffbf (0x10 =>    INEXACT )
+31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
+31   INT64:               131008/0x00000000000001ffc0 (0x10 =>    INEXACT )
+32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
+32   INT64:               131009/0x00000000000001ffc1 (0x10 =>    INEXACT )
+33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
+33   INT64:           2147483647/0x00000000007fffffff (0x10 =>    INEXACT )
+34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+34   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
+35   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
+36   INT64:                   -1/0x00ffffffffffffffff (0x11 =>    INEXACT INVALID)
+37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
+37   INT64:                   -1/0x00ffffffffffffffff (0x1 =>     INVALID)
+38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
+38   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
+39   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
+40   INT64:                    0/00000000000000000000 (0x1 =>     INVALID)
+Converting half-precision to integer
+00   HALF: 0xffff  (0 => OK)
+00   INT64:                65535/0x00000000000000ffff (0 => OK)
+01   HALF: 0xfcff  (0 => OK)
+01   INT64:                64767/0x00000000000000fcff (0 => OK)
+02   HALF: 0xfc01  (0 => OK)
+02   INT64:                64513/0x00000000000000fc01 (0 => OK)
+03   HALF: 0xfc00  (0 => OK)
+03   INT64:                64512/0x00000000000000fc00 (0 => OK)
+04   HALF: 0xfbff  (0 => OK)
+04   INT64:                64511/0x00000000000000fbff (0 => OK)
+05   HALF: 0xc000  (0 => OK)
+05   INT64:                49152/0x00000000000000c000 (0 => OK)
+06   HALF: 0xbc00  (0 => OK)
+06   INT64:                48128/0x00000000000000bc00 (0 => OK)
+07   HALF: 0x8001  (0 => OK)
+07   INT64:                32769/0x000000000000008001 (0 => OK)
+08   HALF: 0x8000  (0 => OK)
+08   INT64:                32768/0x000000000000008000 (0 => OK)
+09   HALF: 0000  (0 => OK)
+09   INT64:                    0/00000000000000000000 (0 => OK)
+10   HALF: 0x01  (0 => OK)
+10   INT64:                    1/0x000000000000000001 (0 => OK)
+11   HALF: 0x3c00  (0 => OK)
+11   INT64:                15360/0x000000000000003c00 (0 => OK)
+12   HALF: 0x7bff  (0 => OK)
+12   INT64:                31743/0x000000000000007bff (0 => OK)
+13   HALF: 0x7c00  (0 => OK)
+13   INT64:                31744/0x000000000000007c00 (0 => OK)
+14   HALF: 0x7c01  (0 => OK)
+14   INT64:                31745/0x000000000000007c01 (0 => OK)
+15   HALF: 0x7cff  (0 => OK)
+15   INT64:                31999/0x000000000000007cff (0 => OK)
+16   HALF: 0x7fff  (0 => OK)
+16   INT64:                32767/0x000000000000007fff (0 => OK)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 27/56] tests/tcg: move MIPS specific tests into subdir
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (25 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 26/56] tests/tcg/arm: add fcvt test cases for AArch32/64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 28/56] tests/tcg: enable building for MIPS Alex Bennée
                   ` (30 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Yongbok Kim

These only need to be built for MIPS guests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/README b/tests/tcg/README
index 625f2326e6..a5643d33e7 100644
--- a/tests/tcg/README
+++ b/tests/tcg/README
@@ -3,17 +3,6 @@ regression testing. Tests are either multi-arch, meaning they can be
 built for all guest architectures that support linux-user executable,
 or they are architecture specific.
 
-
-
-MIPS
-====
-
-hello-mips
-----------
-
-hello-mipsel
-------------
-
 CRIS
 ====
 The testsuite for CRIS is in tests/tcg/cris.  You can run it
diff --git a/tests/tcg/mips/README b/tests/tcg/mips/README
new file mode 100644
index 0000000000..e5bbc58ec5
--- /dev/null
+++ b/tests/tcg/mips/README
@@ -0,0 +1,7 @@
+MIPS
+====
+
+hello-mips
+----------
+
+A very simple inline assembly, write syscall based hello world
diff --git a/tests/tcg/hello-mips.c b/tests/tcg/mips/hello-mips.c
similarity index 100%
rename from tests/tcg/hello-mips.c
rename to tests/tcg/mips/hello-mips.c
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 28/56] tests/tcg: enable building for MIPS
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (26 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 27/56] tests/tcg: move MIPS specific tests into subdir Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 29/56] tests/docker/Makefile.include: fix mipsel-cross dependancy Alex Bennée
                   ` (29 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Yongbok Kim

This doesn't add any additional tests but enables building the
multiarch tests for MIPS using docker cross compilers. We don't have a
cross compiler for mips64 big endian though.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/mips/Makefile.include b/tests/tcg/mips/Makefile.include
new file mode 100644
index 0000000000..a9beceb623
--- /dev/null
+++ b/tests/tcg/mips/Makefile.include
@@ -0,0 +1,17 @@
+#
+# Makefile.include for all MIPs targets
+#
+# As Debian doesn't support mip64 in big endian mode the only way to
+# build BE is to pass a working cross compiler to ./configure
+#
+
+ifeq ($(TARGET_NAME),mips64el)
+DOCKER_IMAGE=debian-mips64el-cross
+DOCKER_CROSS_COMPILER=mips64el-linux-gnuabi64-gcc
+else ifeq ($(TARGET_NAME),mipsel)
+DOCKER_IMAGE=debian-mipsel-cross
+DOCKER_CROSS_COMPILER=mipsel-linux-gnu-gcc
+else ifeq ($(TARGET_NAME),mips)
+DOCKER_IMAGE=debian-mips-cross
+DOCKER_CROSS_COMPILER=mips-linux-gnu-gcc
+endif
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 29/56] tests/docker/Makefile.include: fix mipsel-cross dependancy
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (27 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 28/56] tests/tcg: enable building for MIPS Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 30/56] tests/tcg/mips: include common mips hello-mips Alex Bennée
                   ` (28 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This got broken in commit 4319db7 but generally only shows up when you
try and do massive parallel builds on fresh machines.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 8afb383478..4a2b028a3b 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -57,6 +57,7 @@ docker-image-debian-armel-cross: docker-image-debian9
 docker-image-debian-armhf-cross: docker-image-debian9
 docker-image-debian-arm64-cross: docker-image-debian9
 docker-image-debian-mips-cross: docker-image-debian9
+docker-image-debian-mipsel-cross: docker-image-debian9
 docker-image-debian-mips64el-cross: docker-image-debian9
 docker-image-debian-powerpc-cross: docker-image-debian8
 docker-image-debian-ppc64el-cross: docker-image-debian9
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 30/56] tests/tcg/mips: include common mips hello-mips
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (28 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 29/56] tests/docker/Makefile.include: fix mipsel-cross dependancy Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 31/56] tests/tcg: enable building for s390x Alex Bennée
                   ` (27 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Yongbok Kim

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/mips/Makefile.target b/tests/tcg/mips/Makefile.target
new file mode 100644
index 0000000000..71f0c2dd53
--- /dev/null
+++ b/tests/tcg/mips/Makefile.target
@@ -0,0 +1,19 @@
+# -*- Mode: makefile -*-
+#
+# MIPS - included from tests/tcg/Makefile.target
+#
+
+MIPS_SRC=$(SRC_PATH)/tests/tcg/mips
+
+# Set search path for all sources
+VPATH 		+= $(MIPS_SRC)
+
+MIPS_TESTS=hello-mips
+
+TESTS += $(MIPS_TESTS)
+
+hello-mips: CFLAGS+=-ffreestanding
+hello-mips: LDFLAGS+=-nostdlib
+
+# For MIPS32 and 64 we have a bunch of extra tests in sub-directories
+# however they are intended for system tests.
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 31/56] tests/tcg: enable building for s390x
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (29 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 30/56] tests/tcg/mips: include common mips hello-mips Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 32/56] tests/tcg: enable building for ppc64 Alex Bennée
                   ` (26 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Cornelia Huck,
	open list:S390

This doesn't add any additional tests but enables building the
multiarch tests for s390x.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: David Hildenbrand <david@redhat.com>

diff --git a/tests/tcg/s390x/Makefile.include b/tests/tcg/s390x/Makefile.include
new file mode 100644
index 0000000000..1f58115d96
--- /dev/null
+++ b/tests/tcg/s390x/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-s390x-cross
+DOCKER_CROSS_COMPILER=s390x-linux-gnu-gcc
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 32/56] tests/tcg: enable building for ppc64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (30 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 31/56] tests/tcg: enable building for s390x Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 33/56] tests/tcg: enable building for Alpha Alex Bennée
                   ` (25 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Currently this just enables building the multiarch tests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/tcg/ppc64le/Makefile.include b/tests/tcg/ppc64le/Makefile.include
new file mode 100644
index 0000000000..d71cfc9aa7
--- /dev/null
+++ b/tests/tcg/ppc64le/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-ppc64el-cross
+DOCKER_CROSS_COMPILER=powerpc64le-linux-gnu-gcc
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 33/56] tests/tcg: enable building for Alpha
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (31 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 32/56] tests/tcg: enable building for ppc64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 34/56] tests/tcg/alpha: add Alpha specific tests Alex Bennée
                   ` (24 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Richard Henderson

We can't use our normal Debian based compilers as Alpha isn't an
officially supported architecture. However it is available as a port
and fortunately cross compilers for all these targets are included in
Debian Sid, the perpetual rolling/unstable/testing version of Debian.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
  - drop the unused debian-cross-build docker image
  - add note to debian-sid docker image
  - echo reference to notes on build failure
  - include EXTRA_RUNS for mmap tests
v6
  - use NOCACHE=1 for docker-image-debian-sid to force re-builds
  - this seems a little hacky

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 4a2b028a3b..8c24f8807e 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -64,6 +64,13 @@ docker-image-debian-ppc64el-cross: docker-image-debian9
 docker-image-debian-s390x-cross: docker-image-debian9
 docker-image-debian-win32-cross: docker-image-debian8-mxe
 docker-image-debian-win64-cross: docker-image-debian8-mxe
+
+# Debian SID images - we are tracking a rolling distro so we want to
+# force a re-build of the base image if we ever need to build one of
+# its children.
+docker-image-debian-sid: NOCACHE=1
+
+docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-alpha-cross.docker b/tests/docker/dockerfiles/debian-alpha-cross.docker
new file mode 100644
index 0000000000..29a25d0dfd
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-alpha-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-alpha-linux-gnu \
+        libc6.1-dev-alpha-cross || { echo "Failed to build - see debian-sid.docker notes"; exit 1; }
diff --git a/tests/docker/dockerfiles/debian-sid.docker b/tests/docker/dockerfiles/debian-sid.docker
new file mode 100644
index 0000000000..9a3d168705
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-sid.docker
@@ -0,0 +1,32 @@
+#
+# Debian Sid Base
+#
+# A number of our guests exist as ports only. We can either use the
+# ports repo or get everything from Sid. However Sid is a rolling
+# distro which may be broken at any particular time. If you are
+# unlucky and try and build your images while gcc is in the process of
+# being uploaded this can fail. Your only recourse is to try again in
+# a few hours when the repos have re-synced. Once built however you
+# won't be affected by repo changes unless the docker recipies are
+# updated and trigger a re-build.
+#
+
+FROM debian:sid-slim
+
+# Duplicate deb line as deb-src
+RUN cat /etc/apt/sources.list | sed "s/^deb\ /deb-src /" >> /etc/apt/sources.list
+
+# Install common build utilities
+RUN apt update
+RUN DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt install -y --no-install-recommends \
+        bison \
+        build-essential \
+        ca-certificates \
+        flex \
+        git \
+        pkg-config \
+        psmisc \
+        python \
+        texinfo || { echo "Failed to build - see debian-sid.docker notes"; exit 1; }
diff --git a/tests/tcg/alpha/Makefile.include b/tests/tcg/alpha/Makefile.include
new file mode 100644
index 0000000000..c7dc48eadb
--- /dev/null
+++ b/tests/tcg/alpha/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-alpha-cross
+DOCKER_CROSS_COMPILER=alpha-linux-gnu-gcc
diff --git a/tests/tcg/alpha/Makefile.target b/tests/tcg/alpha/Makefile.target
new file mode 100644
index 0000000000..bedf1b6444
--- /dev/null
+++ b/tests/tcg/alpha/Makefile.target
@@ -0,0 +1,6 @@
+# -*- Mode: makefile -*-
+#
+# Alpha specific tweaks
+
+# On Alpha Linux only supports 8k pages
+EXTRA_RUNS+=run-test-mmap-8192
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 34/56] tests/tcg/alpha: add Alpha specific tests
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (32 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 33/56] tests/tcg: enable building for Alpha Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 35/56] tests/tcg: enable building for HPPA Alex Bennée
                   ` (23 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Richard Henderson

These tests did use their own crt.o stub however that is a little
stone age so we drop crt.S and just statically link to the cross
compilers libraries.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v4
  - drop crt.s
  - drop skipping of threadtest
  - drop write() hack, include unistd.h
v5
  - merge fixes

diff --git a/tests/tcg/alpha/Makefile b/tests/tcg/alpha/Makefile
deleted file mode 100644
index 2b1f03d048..0000000000
--- a/tests/tcg/alpha/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-CROSS=alpha-linux-gnu-
-CC=$(CROSS)gcc
-AS=$(CROSS)as
-
-SIM=../../alpha-linux-user/qemu-alpha
-
-CFLAGS=-O
-LINK=$(CC) -o $@ crt.o $< -nostdlib
-
-TESTS=test-cond test-cmov
-
-all: hello-alpha $(TESTS)
-
-hello-alpha: hello-alpha.o crt.o
-	$(LINK)
-
-test-cond: test-cond.o crt.o
-	$(LINK)
-
-test-cmov.o: test-cond.c
-	$(CC) -c $(CFLAGS) -DTEST_CMOV -o $@ $<
-
-test-cmov: test-cmov.o crt.o
-	$(LINK)
-
-test-ovf: test-ovf.o crt.o
-	$(LINK)
-
-check: $(TESTS)
-	for f in $(TESTS); do $(SIM) $$f || exit 1; done
-
-clean:
-	$(RM) *.o *~ hello-alpha $(TESTS)
-
-.PHONY: clean all check
diff --git a/tests/tcg/alpha/Makefile.target b/tests/tcg/alpha/Makefile.target
index bedf1b6444..a585080328 100644
--- a/tests/tcg/alpha/Makefile.target
+++ b/tests/tcg/alpha/Makefile.target
@@ -2,5 +2,17 @@
 #
 # Alpha specific tweaks
 
+ALPHA_SRC=$(SRC_PATH)/tests/tcg/alpha
+VPATH+=$(ALPHA_SRC)
+
+ALPHA_TESTS=hello-alpha test-cond test-cmov test-ovf
+TESTS+=$(ALPHA_TESTS)
+
+test-cmov: EXTRA_CFLAGS=-DTEST_CMOV
+test-cmov: test-cond.c
+	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
+
+run-test-cmov: test-cmov
+
 # On Alpha Linux only supports 8k pages
 EXTRA_RUNS+=run-test-mmap-8192
diff --git a/tests/tcg/alpha/crt.s b/tests/tcg/alpha/crt.s
deleted file mode 100644
index 31af8825bc..0000000000
--- a/tests/tcg/alpha/crt.s
+++ /dev/null
@@ -1,26 +0,0 @@
-	.text
-
-	.globl _start
-	.ent _start,0
-_start:
-	.frame $15,0,$15
-	br $29,1f
-1:	ldgp $29, 0($29)
-	.prologue 0
-	ldq $27,main($29) !literal!1
-	jsr $26,($27)
-	or $0,$0,$16
-	.end _start
-
-	.globl _exit
-_exit:
-	lda $0,1
-	callsys
-
-	call_pal 0
-
-	.globl write
-write:
-	lda $0,4
-	callsys
-	ret
diff --git a/tests/tcg/alpha/hello-alpha.c b/tests/tcg/alpha/hello-alpha.c
index 79892e6522..84e43b2fc4 100644
--- a/tests/tcg/alpha/hello-alpha.c
+++ b/tests/tcg/alpha/hello-alpha.c
@@ -1,3 +1,5 @@
+#include <unistd.h>
+
 int main (void)
 {
   write (1, "hello\n", 6);
diff --git a/tests/tcg/alpha/test-cond.c b/tests/tcg/alpha/test-cond.c
index 74adffaa69..e625313b3e 100644
--- a/tests/tcg/alpha/test-cond.c
+++ b/tests/tcg/alpha/test-cond.c
@@ -1,3 +1,4 @@
+#include <unistd.h>
 
 #ifdef TEST_CMOV
 
diff --git a/tests/tcg/alpha/test-ovf.c b/tests/tcg/alpha/test-ovf.c
index 01c80e7525..17892f1e89 100644
--- a/tests/tcg/alpha/test-ovf.c
+++ b/tests/tcg/alpha/test-ovf.c
@@ -1,3 +1,5 @@
+#include <unistd.h>
+
 static long test_subqv (long a, long b)
 {
   long res;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 35/56] tests/tcg: enable building for HPPA
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (33 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 34/56] tests/tcg/alpha: add Alpha specific tests Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 36/56] tests/tcg: enable building for m68k Alex Bennée
                   ` (22 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v5
  - add EXTRA_RUNS for mmap tests

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 8c24f8807e..65e3dee741 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -71,6 +71,7 @@ docker-image-debian-win64-cross: docker-image-debian8-mxe
 docker-image-debian-sid: NOCACHE=1
 
 docker-image-debian-alpha-cross: docker-image-debian-sid
+docker-image-debian-hppa-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-hppa-cross.docker b/tests/docker/dockerfiles/debian-hppa-cross.docker
new file mode 100644
index 0000000000..ad443defac
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-hppa-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-hppa-linux-gnu \
+        libc6-dev-hppa-cross
diff --git a/tests/tcg/hppa/Makefile.include b/tests/tcg/hppa/Makefile.include
new file mode 100644
index 0000000000..da2353430e
--- /dev/null
+++ b/tests/tcg/hppa/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-hppa-cross
+DOCKER_CROSS_COMPILER=hppa-linux-gnu-gcc
diff --git a/tests/tcg/hppa/Makefile.target b/tests/tcg/hppa/Makefile.target
new file mode 100644
index 0000000000..8bf01966bd
--- /dev/null
+++ b/tests/tcg/hppa/Makefile.target
@@ -0,0 +1,6 @@
+# -*- Mode: makefile -*-
+#
+# HPPA specific tweaks - specifically masking out broken tests
+
+# On parisc Linux supports 4K/16K/64K (but currently only 4k works)
+EXTRA_RUNS+=run-test-mmap-4096 # run-test-mmap-16384 run-test-mmap-65536
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 36/56] tests/tcg: enable building for m68k
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (34 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 35/56] tests/tcg: enable building for HPPA Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 37/56] tests/tcg: enable building for sh4 Alex Bennée
                   ` (21 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As before, using Debian SID compilers.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v5
  - add EXTRA_RUNS for mmap tests

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 65e3dee741..59dd8e314d 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -72,6 +72,7 @@ docker-image-debian-sid: NOCACHE=1
 
 docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-debian-hppa-cross: docker-image-debian-sid
+docker-image-debian-m68k-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-m68k-cross.docker b/tests/docker/dockerfiles/debian-m68k-cross.docker
new file mode 100644
index 0000000000..21ba3b0132
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-m68k-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-m68k-linux-gnu \
+        libc6-dev-m68k-cross
diff --git a/tests/tcg/m68k/Makefile.include b/tests/tcg/m68k/Makefile.include
new file mode 100644
index 0000000000..cd7c6bf50d
--- /dev/null
+++ b/tests/tcg/m68k/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-m68k-cross
+DOCKER_CROSS_COMPILER=m68k-linux-gnu-gcc
diff --git a/tests/tcg/m68k/Makefile.target b/tests/tcg/m68k/Makefile.target
new file mode 100644
index 0000000000..62f109eef4
--- /dev/null
+++ b/tests/tcg/m68k/Makefile.target
@@ -0,0 +1,7 @@
+# -*- Mode: makefile -*-
+#
+# m68k specific tweaks - specifically masking out broken tests
+#
+
+# On m68k Linux supports 4k and 8k pages (but 8k is currently broken)
+EXTRA_RUNS+=run-test-mmap-4096 # run-test-mmap-8192
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 37/56] tests/tcg: enable building for sh4
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (35 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 36/56] tests/tcg: enable building for m68k Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 38/56] tests/tcg: enable building for sparc64 Alex Bennée
                   ` (20 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As before, using Debian SID compilers. While the compiler can be
coerced into generating big-endian code it seems the linker can't deal
with it so we only enable the building for little endian SH4.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v5
   - add Makefile.target with EXTRA_RUNS for mmap tests

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 59dd8e314d..a2dd307a8e 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -73,6 +73,7 @@ docker-image-debian-sid: NOCACHE=1
 docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-debian-hppa-cross: docker-image-debian-sid
 docker-image-debian-m68k-cross: docker-image-debian-sid
+docker-image-debian-sh4-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-sh4-cross.docker b/tests/docker/dockerfiles/debian-sh4-cross.docker
new file mode 100644
index 0000000000..88a2423094
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-sh4-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-sh4-linux-gnu \
+        libc6-dev-sh4-cross
diff --git a/tests/tcg/sh4/Makefile.include b/tests/tcg/sh4/Makefile.include
new file mode 100644
index 0000000000..ad21594d9d
--- /dev/null
+++ b/tests/tcg/sh4/Makefile.include
@@ -0,0 +1,4 @@
+ifneq ($(TARGET_NAME), sh4eb)
+DOCKER_IMAGE=debian-sh4-cross
+DOCKER_CROSS_COMPILER=sh4-linux-gnu-gcc
+endif
diff --git a/tests/tcg/sh4/Makefile.target b/tests/tcg/sh4/Makefile.target
new file mode 100644
index 0000000000..9d18d44612
--- /dev/null
+++ b/tests/tcg/sh4/Makefile.target
@@ -0,0 +1,7 @@
+# -*- Mode: makefile -*-
+#
+# SuperH specific tweaks
+#
+
+# On sh Linux supports 4k, 8k, 16k and 64k pages (but only 4k currently works)
+EXTRA_RUNS+=run-test-mmap-4096 # run-test-mmap-8192 run-test-mmap-16384 run-test-mmap-65536
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 38/56] tests/tcg: enable building for sparc64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (36 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 37/56] tests/tcg: enable building for sh4 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 39/56] tests/tcg: enable building for mips64 Alex Bennée
                   ` (19 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As before, using Debian SID compilers.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
   - add Makefile with EXTRA_RUNS for mmap tests

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index a2dd307a8e..fb465e729e 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -74,6 +74,7 @@ docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-debian-hppa-cross: docker-image-debian-sid
 docker-image-debian-m68k-cross: docker-image-debian-sid
 docker-image-debian-sh4-cross: docker-image-debian-sid
+docker-image-debian-sparc64-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-sparc64-cross.docker b/tests/docker/dockerfiles/debian-sparc64-cross.docker
new file mode 100644
index 0000000000..1e2c809274
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-sparc64-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-sparc64-linux-gnu \
+        libc6-dev-sparc64-cross
diff --git a/tests/tcg/sparc64/Makefile.include b/tests/tcg/sparc64/Makefile.include
new file mode 100644
index 0000000000..95fc8dee9f
--- /dev/null
+++ b/tests/tcg/sparc64/Makefile.include
@@ -0,0 +1,2 @@
+DOCKER_IMAGE=debian-sparc64-cross
+DOCKER_CROSS_COMPILER=sparc64-linux-gnu-gcc
diff --git a/tests/tcg/sparc64/Makefile.target b/tests/tcg/sparc64/Makefile.target
new file mode 100644
index 0000000000..408dace783
--- /dev/null
+++ b/tests/tcg/sparc64/Makefile.target
@@ -0,0 +1,6 @@
+# -*- Mode: makefile -*-
+#
+# sparc specific tweaks
+
+# On Sparc64 Linux support 8k pages
+EXTRA_RUNS+=run-test-mmap-8192
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 39/56] tests/tcg: enable building for mips64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (37 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 38/56] tests/tcg: enable building for sparc64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 40/56] tests/tcg: enable building for RISCV64 Alex Bennée
                   ` (18 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Yongbok Kim

As before, using Debian SID compilers.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index fb465e729e..8fd4041716 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -75,6 +75,7 @@ docker-image-debian-hppa-cross: docker-image-debian-sid
 docker-image-debian-m68k-cross: docker-image-debian-sid
 docker-image-debian-sh4-cross: docker-image-debian-sid
 docker-image-debian-sparc64-cross: docker-image-debian-sid
+docker-image-debian-mips64-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-mips64-cross.docker b/tests/docker/dockerfiles/debian-mips64-cross.docker
new file mode 100644
index 0000000000..ed1ce0e919
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-mips64-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-mips64-linux-gnuabi64 \
+        libc6-dev-mips64-cross
diff --git a/tests/tcg/mips/Makefile.include b/tests/tcg/mips/Makefile.include
index a9beceb623..4a14fc078d 100644
--- a/tests/tcg/mips/Makefile.include
+++ b/tests/tcg/mips/Makefile.include
@@ -8,6 +8,9 @@
 ifeq ($(TARGET_NAME),mips64el)
 DOCKER_IMAGE=debian-mips64el-cross
 DOCKER_CROSS_COMPILER=mips64el-linux-gnuabi64-gcc
+else ifeq ($(TARGET_NAME),mips64)
+DOCKER_IMAGE=debian-mips64-cross
+DOCKER_CROSS_COMPILER=mips64-linux-gnuabi64-gcc
 else ifeq ($(TARGET_NAME),mipsel)
 DOCKER_IMAGE=debian-mipsel-cross
 DOCKER_CROSS_COMPILER=mipsel-linux-gnu-gcc
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 40/56] tests/tcg: enable building for RISCV64
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (38 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 39/56] tests/tcg: enable building for mips64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 41/56] docker: move debian-powerpc-cross to sid based build Alex Bennée
                   ` (17 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As before, using Debian SID compilers.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 8fd4041716..a680743ae8 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -76,6 +76,7 @@ docker-image-debian-m68k-cross: docker-image-debian-sid
 docker-image-debian-sh4-cross: docker-image-debian-sid
 docker-image-debian-sparc64-cross: docker-image-debian-sid
 docker-image-debian-mips64-cross: docker-image-debian-sid
+docker-image-debian-riscv64-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-riscv64-cross.docker b/tests/docker/dockerfiles/debian-riscv64-cross.docker
new file mode 100644
index 0000000000..2b2e64cee6
--- /dev/null
+++ b/tests/docker/dockerfiles/debian-riscv64-cross.docker
@@ -0,0 +1,12 @@
+#
+# Docker cross-compiler target
+#
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets.
+#
+FROM qemu:debian-sid
+
+RUN DEBIAN_FRONTEND=noninteractive eatmydata \
+    apt-get install -y --no-install-recommends \
+        gcc-riscv64-linux-gnu \
+        libc6-dev-riscv64-cross
diff --git a/tests/tcg/riscv/Makefile.include b/tests/tcg/riscv/Makefile.include
new file mode 100644
index 0000000000..d92ac6c89f
--- /dev/null
+++ b/tests/tcg/riscv/Makefile.include
@@ -0,0 +1,10 @@
+#
+# Makefile.include for all RISCV targets
+#
+# Debian only really cares about 64 bit going forward
+#
+
+ifeq ($(TARGET_NAME),riscv64)
+DOCKER_IMAGE=debian-riscv64-cross
+DOCKER_CROSS_COMPILER=riscv64-linux-gnu-gcc
+endif
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 41/56] docker: move debian-powerpc-cross to sid based build
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (39 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 40/56] tests/tcg: enable building for RISCV64 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 42/56] tests/tcg: enable building for PowerPC Alex Bennée
                   ` (16 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

The original Jessie based cross builder hasn't worked for a while. The
state of the libraries is still perilous for cross-building QEMU but
we can use it for building TCG tests.

The debian-apt-fake.sh script can also be dropped as it is no longer
used.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index a680743ae8..87f449264f 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -47,8 +47,6 @@ docker-image-%: $(DOCKER_FILES_DIR)/%.docker
 		$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\
 		"BUILD","$*")
 
-docker-image-debian-powerpc-cross: EXTRA_FILES:=$(SRC_PATH)/tests/docker/dockerfiles/debian-apt-fake.sh
-
 # Enforce dependencies for composite images
 docker-image-debian: docker-image-debian9
 docker-image-debian8-mxe: docker-image-debian8
@@ -59,7 +57,6 @@ docker-image-debian-arm64-cross: docker-image-debian9
 docker-image-debian-mips-cross: docker-image-debian9
 docker-image-debian-mipsel-cross: docker-image-debian9
 docker-image-debian-mips64el-cross: docker-image-debian9
-docker-image-debian-powerpc-cross: docker-image-debian8
 docker-image-debian-ppc64el-cross: docker-image-debian9
 docker-image-debian-s390x-cross: docker-image-debian9
 docker-image-debian-win32-cross: docker-image-debian8-mxe
@@ -77,6 +74,7 @@ docker-image-debian-sh4-cross: docker-image-debian-sid
 docker-image-debian-sparc64-cross: docker-image-debian-sid
 docker-image-debian-mips64-cross: docker-image-debian-sid
 docker-image-debian-riscv64-cross: docker-image-debian-sid
+docker-image-debian-powerpc-cross: docker-image-debian-sid
 docker-image-travis: NOUSER=1
 
 # Specialist build images, sometimes very limited tools
diff --git a/tests/docker/dockerfiles/debian-apt-fake.sh b/tests/docker/dockerfiles/debian-apt-fake.sh
deleted file mode 100755
index 2ec0fdf47a..0000000000
--- a/tests/docker/dockerfiles/debian-apt-fake.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#! /bin/sh
-#
-# Generate fake debian package to resolve unimportant unmet dependencies held
-# by upstream multiarch broken packages.
-#
-# Copyright (c) 2017 Philippe Mathieu-Daudé <f4bug@amsat.org>
-#
-# This work is licensed under the terms of the GNU GPL, version 2
-# or (at your option) any later version. See the COPYING file in
-# the top-level directory.
-
-test $1 = "install" && shift 1
-
-fake_install()
-{
-    echo "Generating fake $2 $1 $3 ..."
-    (cd /var/cache/apt/archives
-        (cat << 'EOF'
-Section: misc
-Priority: optional
-Standards-Version: 3.9.2
-
-Package: NAME
-Version: VERSION
-Maintainer: qemu-devel@nongnu.org
-Architecture: any
-Multi-Arch: same
-Description: fake NAME
-EOF
-        ) | sed s/NAME/$2/g | sed s/VERSION/$3/g > $2.control
-        equivs-build -a $1 $2.control 1>/dev/null 2>/dev/null
-        dpkg -i --force-overwrite $2_$3_$1.deb
-    )
-}
-
-try_install()
-{
-    name=$(echo $1|sed "s/\(.*\):\(.*\)=\(.*\)/\1/")
-    arch=$(echo $1|sed "s/\(.*\):\(.*\)=\(.*\)/\2/")
-    vers=$(echo $1|sed "s/\(.*\):\(.*\)=\(.*\)/\3/")
-    apt-get install -q -yy $1 || fake_install $arch $name $vers
-}
-
-for package in $*; do
-    try_install $package
-done
diff --git a/tests/docker/dockerfiles/debian-powerpc-cross.docker b/tests/docker/dockerfiles/debian-powerpc-cross.docker
index a5dd46b4ac..5e62ca0df1 100644
--- a/tests/docker/dockerfiles/debian-powerpc-cross.docker
+++ b/tests/docker/dockerfiles/debian-powerpc-cross.docker
@@ -1,40 +1,13 @@
 #
 # Docker powerpc cross-compiler target
 #
-# This docker target builds on the debian Jessie base image.
+# This docker target builds on the debian sid base image which
+# contains cross compilers for Debian "ports" targets. The original
+# Jessie based no longer builds.
 #
-FROM qemu:debian8
-MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
+FROM qemu:debian-sid
 
-# Add the foreign architecture we want and install dependencies
-RUN dpkg --add-architecture powerpc
-RUN apt-get update
 RUN DEBIAN_FRONTEND=noninteractive eatmydata \
     apt-get install -y --no-install-recommends \
-        crossbuild-essential-powerpc
-
-# <kludge> to fix "following packages have unmet dependencies" ...
-ADD debian-apt-fake.sh /usr/local/bin/apt-fake
-RUN apt-get install -y --no-install-recommends \
-        equivs \
-        pkg-config
-RUN apt-fake install \
-        pkg-config:powerpc=0.28-1.1-fake && \
-    ln -s pkg-config /usr/bin/powerpc-linux-gnu-pkg-config
-ENV PKG_CONFIG_PATH /usr/lib/powerpc-linux-gnu/pkgconfig
-# </kludge>
-
-# Specify the cross prefix for this image (see tests/docker/common.rc)
-ENV QEMU_CONFIGURE_OPTS --cross-prefix=powerpc-linux-gnu-
-
-RUN DEBIAN_FRONTEND=noninteractive eatmydata \
-    apt-get build-dep -yy -a powerpc qemu
-RUN DEBIAN_FRONTEND=noninteractive \
-    apt-get install -y --no-install-recommends \
-        glusterfs-common:powerpc \
-        libbz2-dev:powerpc \
-        liblzo2-dev:powerpc \
-        libncursesw5-dev:powerpc \
-        libnfs-dev:powerpc \
-        librdmacm-dev:powerpc \
-        libsnappy-dev:powerpc
+        gcc-powerpc-linux-gnu \
+        libc6-dev-powerpc-cross || { echo "Failed to build - see debian-sid.docker notes"; exit 1; }
diff --git a/tests/docker/dockerfiles/debian8.docker b/tests/docker/dockerfiles/debian8.docker
index 1bcf2e3d2f..52945631cd 100644
--- a/tests/docker/dockerfiles/debian8.docker
+++ b/tests/docker/dockerfiles/debian8.docker
@@ -32,6 +32,3 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
         pkg-config \
         python-minimal
 
-# Setup Emdebian [emdebian-archive-keyring]
-RUN echo "deb http://emdebian.org/tools/debian/ jessie main" > /etc/apt/sources.list.d/emdebian.list && \
-    curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | apt-key add -
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 42/56] tests/tcg: enable building for PowerPC
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (40 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 41/56] docker: move debian-powerpc-cross to sid based build Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 43/56] tests/tcg/Makefile: update to be called from Makefile.target Alex Bennée
                   ` (15 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Now we have restored debian-image-powerpc-cross using Debian SID
compilers we can build for 32 bit powerpc. Although PPC32 supports a
range of pages sizes currently only 4k works so the others are
commented out for now.

We can also merge the ppc64 support under the base architecture
directory to avoid too much proliferation of directories.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
  - new for v5

diff --git a/tests/tcg/ppc/Makefile.include b/tests/tcg/ppc/Makefile.include
new file mode 100644
index 0000000000..b062c30dd3
--- /dev/null
+++ b/tests/tcg/ppc/Makefile.include
@@ -0,0 +1,7 @@
+ifeq ($(TARGET_NAME),ppc)
+DOCKER_IMAGE=debian-powerpc-cross
+DOCKER_CROSS_COMPILER=powerpc-linux-gnu-gcc
+else ifeq ($(TARGET_NAME),ppc64le)
+DOCKER_IMAGE=debian-ppc64el-cross
+DOCKER_CROSS_COMPILER=powerpc64le-linux-gnu-gcc
+endif
diff --git a/tests/tcg/ppc/Makefile.target b/tests/tcg/ppc/Makefile.target
new file mode 100644
index 0000000000..f5e08c7376
--- /dev/null
+++ b/tests/tcg/ppc/Makefile.target
@@ -0,0 +1,12 @@
+# -*- Mode: makefile -*-
+#
+# PPC - included from tests/tcg/Makefile
+#
+
+ifneq (,$(findstring 64,$(TARGET_NAME)))
+# On PPC64 Linux can be configured with 4k (default) or 64k pages (currently broken)
+EXTRA_RUNS+=run-test-mmap-4096 #run-test-mmap-65536
+else
+# On PPC32 Linux supports 4K/16K/64K/256K (but currently only 4k works)
+EXTRA_RUNS+=run-test-mmap-4096 #run-test-mmap-16384 run-test-mmap-65536 run-test-mmap-262144
+endif
diff --git a/tests/tcg/ppc64le/Makefile.include b/tests/tcg/ppc64le/Makefile.include
deleted file mode 100644
index d71cfc9aa7..0000000000
--- a/tests/tcg/ppc64le/Makefile.include
+++ /dev/null
@@ -1,2 +0,0 @@
-DOCKER_IMAGE=debian-ppc64el-cross
-DOCKER_CROSS_COMPILER=powerpc64le-linux-gnu-gcc
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 43/56] tests/tcg/Makefile: update to be called from Makefile.target
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (41 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 42/56] tests/tcg: enable building for PowerPC Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 44/56] Makefile.target: add (clean-/build-)guest-tests targets Alex Bennée
                   ` (14 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This make is now invoked from each individual target make with the
appropriate CC and EXTRA_CFLAGS set for each guest. It then includes
additional Makefile.targets from:

  - tests/tcg/multiarch (always)
  - tests/tcg/$(TARGET_BASE_ARCH) (if available)
  - tests/tcg/$(TARGET_NAME)

The order is important as the later Makefile's may want to suppress
TESTS from its base arch profile. Each included Makefile.target is
responsible for adding TESTS as well as defining any special build
instructions for individual tests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v2
  - cleaner approach to include sub makefiles
  - move TESTS/VPATH manipulation into sub-makefile
  - avoid double inclusion when TARGET_BASE_ARCH==TARGET_NAME
v4
  - add timeout to default runner
  - clean-up comments about build flags
  - update to handle BUILD_STATIC
  - add MAINTAINERS entry
v5
  - support EXTRA_RUNS for run variants
v6
  - extend timeout for DEBUG_TCG
v7
  - add f4bug to as a reviewer

diff --git a/MAINTAINERS b/MAINTAINERS
index c4fc6fa357..aea5788c1d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2150,6 +2150,12 @@ W: https://travis-ci.org/qemu/qemu
 W: https://app.shippable.com/github/qemu/qemu
 W: http://patchew.org/QEMU/
 
+Guest Test Compilation Support
+M: Alex Bennée <alex.bennee@linaro.org>
+R: Philippe Mathieu-Daudé <f4bug@amsat.org>
+F: tests/tcg/Makefile
+L: qemu-devel@nongnu.org
+
 Documentation
 -------------
 Build system architecture
diff --git a/tests/tcg/Makefile b/tests/tcg/Makefile
index e12395117a..e7dbcdb5bf 100644
--- a/tests/tcg/Makefile
+++ b/tests/tcg/Makefile
@@ -1,125 +1,94 @@
+# -*- Mode: makefile -*-
+#
+# TCG tests
+#
+# These are complicated by the fact we want to build them for guest
+# systems. This requires knowing what guests we are building and which
+# ones we have cross-compilers for or docker images with
+# cross-compilers.
+#
+# The tests themselves should be as minimal as possible as
+# cross-compilers don't always have a large amount of libraries
+# available.
+#
+# We only include the host build system for SRC_PATH and we don't
+# bother with the common rules.mk. We expect the following:
+#
+#   CC - the C compiler command
+#   EXTRA_CFLAGS - any extra CFLAGS
+#   BUILD_STATIC - are we building static binaries
+#
+# By default all tests are statically compiled but some host systems
+# may not package static libraries by default. If an external
+# cross-compiler can only build dynamic libraries the user might need
+# to make extra efforts to ensure ld.so can link at runtime when the
+# tests are run.
+#
+# We also accept SPEED=slow to enable slower running tests
+#
+# We also expect to be in the tests build dir for the FOO-linux-user.
+#
+
 -include ../../config-host.mak
--include $(SRC_PATH)/rules.mak
+-include ../config-target.mak
 
-$(call set-vpath, $(SRC_PATH)/tests/tcg)
+quiet-command = $(if $(V),$1,$(if $(2),@printf "  %-7s %s\n" $2 $3 && $1, @$1))
 
-QEMU=../../i386-linux-user/qemu-i386
-QEMU_X86_64=../../x86_64-linux-user/qemu-x86_64
-CC_X86_64=$(CC_I386) -m64
+# Tests we are building
+TESTS=
 
-QEMU_INCLUDES += -I../..
-CFLAGS=-Wall -O2 -g -fno-strict-aliasing
-#CFLAGS+=-msse2
+# Start with a blank slate, the build targets get to add stuff first
+CFLAGS=
+QEMU_CFLAGS=
 LDFLAGS=
 
-# TODO: automatically detect ARM and MIPS compilers, and run those too
-
-# runcom maps page 0, so it requires root privileges
-# also, pi_10.com runs indefinitely
-
-I386_TESTS=hello-i386 \
-	   sha1-i386 \
-	   test-i386 \
-	   test-i386-fprem \
-	   # runcom
+# The QEMU for this TARGET
+QEMU=../qemu-$(TARGET_NAME)
 
-# native i386 compilers sometimes are not biarch.  assume cross-compilers are
-ifneq ($(ARCH),i386)
-I386_TESTS+=run-test-x86_64
+# If TCG debugging is enabled things are a lot slower
+ifeq ($(CONFIG_DEBUG_TCG),y)
+TIMEOUT=45
+else
+TIMEOUT=15
 endif
 
-TESTS = test_path
-ifneq ($(call find-in-path, $(CC_I386)),)
-TESTS += $(I386_TESTS)
+# The order we include is important. We include multiarch, base arch
+# and finally arch if it's not the same as base arch.
+-include $(SRC_PATH)/tests/tcg/multiarch/Makefile.target
+-include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.target
+ifneq ($(TARGET_BASE_ARCH),$(TARGET_NAME))
+-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.target
 endif
 
-all: $(patsubst %,run-%,$(TESTS))
-test: all
-
-# rules to run tests
-
-.PHONY: $(patsubst %,run-%,$(TESTS))
-
-run-%: %
-	-$(QEMU) ./$*
-
-run-hello-i386: hello-i386
-run-sha1-i386: sha1-i386
-
-run-test-i386: test-i386
-	./test-i386 > test-i386.ref
-	-$(QEMU) test-i386 > test-i386.out
-	@if diff -u test-i386.ref test-i386.out ; then echo "Auto Test OK"; fi
-
-run-test-i386-fprem: test-i386-fprem
-	./test-i386-fprem > test-i386-fprem.ref
-	-$(QEMU) test-i386-fprem > test-i386-fprem.out
-	@if diff -u test-i386-fprem.ref test-i386-fprem.out ; then echo "Auto Test OK"; fi
-
-run-test-x86_64: test-x86_64
-	./test-x86_64 > test-x86_64.ref
-	-$(QEMU_X86_64) test-x86_64 > test-x86_64.out
-	@if diff -u test-x86_64.ref test-x86_64.out ; then echo "Auto Test OK"; fi
-
-
-run-runcom: runcom
-	-$(QEMU) ./runcom $(SRC_PATH)/tests/pi_10.com
-
-run-test_path: test_path
-	./test_path
-
-# rules to compile tests
-
-hello-i386: hello-i386.c
-	$(CC_I386) -nostdlib $(CFLAGS) -static $(LDFLAGS) -o $@ $<
-	strip $@
-
-# i386/x86_64 emulation test (test various opcodes) */
-test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S \
-           test-i386.h test-i386-shift.h test-i386-muldiv.h
-	$(CC_I386) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ \
-              $(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
-
-test-i386-fprem: test-i386-fprem.c
-	$(CC_I386) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ $^
-
-test-x86_64: test-i386.c \
-           test-i386.h test-i386-shift.h test-i386-muldiv.h
-	$(CC_X86_64) $(QEMU_INCLUDES) $(CFLAGS) $(LDFLAGS) -o $@ $(<D)/test-i386.c -lm
-
-# vm86 test
-runcom: runcom.c
-	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
-
-# speed test
-sha1-i386: sha1.c
-	$(CC_I386) $(CFLAGS) $(LDFLAGS) -o $@ $<
-
-# arm test
-hello-arm: hello-arm.o
-	arm-linux-ld -o $@ $<
+# Add the common build options
+CFLAGS+=-Wall -O0 -g -fno-strict-aliasing
+ifeq ($(BUILD_STATIC),y)
+LDFLAGS+=-static
+endif
 
-hello-arm.o: hello-arm.c
-	arm-linux-gcc -Wall -g -O2 -c -o $@ $<
+%: %.c
+	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
 
-test-arm-iwmmxt: test-arm-iwmmxt.s
-	cpp < $< | arm-linux-gnu-gcc -Wall -static -march=iwmmxt -mabi=aapcs -x assembler - -o $@
+all: $(TESTS)
 
-# MIPS test
-hello-mips: hello-mips.c
-	mips-linux-gnu-gcc -nostdlib -static -mno-abicalls -fno-PIC -mabi=32 -Wall -Wextra -g -O2 -o $@ $<
+#
+# Test Runners
+#
+# By default we just run the test with the appropriate QEMU for the
+# target. More advanced tests may want to override the runner in their
+# specific make rules. Additional runners for the same binary should
+# be added to EXTRA_RUNS.
+#
 
-hello-mipsel: hello-mips.c
-	mipsel-linux-gnu-gcc -nostdlib -static -mno-abicalls -fno-PIC -mabi=32 -Wall -Wextra -g -O2 -o $@ $<
+RUN_TESTS=$(patsubst %,run-%, $(TESTS))
+RUN_TESTS+=$(EXTRA_RUNS)
 
-# testsuite for the CRIS port.
-test-cris:
-	$(MAKE) -C cris check
+run-%: %
+	$(call quiet-command, \
+		timeout $(TIMEOUT) $(QEMU) $< > $<.out, \
+		"TEST", "$< on $(TARGET_NAME)")
 
-# testsuite for the LM32 port.
-test-lm32:
-	$(MAKE) -C lm32 check
+.PHONY: run
+run: $(RUN_TESTS)
 
-clean:
-	rm -f *~ *.o test-i386.out test-i386.ref \
-           test-x86_64.log test-x86_64.ref qruncom $(TESTS)
+# There is no clean target, the calling make just rm's the tests build dir
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 44/56] Makefile.target: add (clean-/build-)guest-tests targets
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (42 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 43/56] tests/tcg/Makefile: update to be called from Makefile.target Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 45/56] tests/Makefile.include: add [build|clean|check]-tcg targets Alex Bennée
                   ` (13 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Now all the build infrastructure is in place we can build tests for
each guest that we support. That support mainly depends on having
cross compilers installed or docker setup. To keep all the logic for
that together we put the rules in tests/tcg/Makefile.include and
include it from the main Makefile.target.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v4
  - pulled Makefile.include bits from next patch
  - added qemu-$(TARGET_NAME) dependency for running tests
  - accept SPEED parameter to run slow tests
  - pass BUILD_STATIC
  - update MAINTAINERS
v6
  - bare make -> $(MAKE) for sub-makes
v7
  - fixed spelling
  - shorten CROSS-BUILD to BUILD and RUN-TESTS to RUN with additional
    info to the right.

diff --git a/MAINTAINERS b/MAINTAINERS
index aea5788c1d..2a4a7e0e0e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2154,6 +2154,7 @@ Guest Test Compilation Support
 M: Alex Bennée <alex.bennee@linaro.org>
 R: Philippe Mathieu-Daudé <f4bug@amsat.org>
 F: tests/tcg/Makefile
+F: tests/tcg/Makefile.include
 L: qemu-devel@nongnu.org
 
 Documentation
diff --git a/Makefile.target b/Makefile.target
index dad2cf8778..a9d8928f96 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -36,6 +36,11 @@ endif
 PROGS=$(QEMU_PROG) $(QEMU_PROGW)
 STPFILES=
 
+# Makefile Tests
+ifdef CONFIG_USER_ONLY
+include $(SRC_PATH)/tests/tcg/Makefile.include
+endif
+
 config-target.h: config-target.h-timestamp
 config-target.h-timestamp: config-target.mak
 
diff --git a/tests/tcg/Makefile.include b/tests/tcg/Makefile.include
new file mode 100644
index 0000000000..57470b2a2c
--- /dev/null
+++ b/tests/tcg/Makefile.include
@@ -0,0 +1,88 @@
+# -*- Mode: makefile -*-
+#
+# TCG tests (per-target rules)
+#
+# This Makefile fragement is included from the per-target
+# Makefile.target so will be invoked for each linux-user program we
+# build. We have two options for compiling, either using a configured
+# guest compiler or calling one of our docker images to do it for us.
+#
+
+# The per ARCH makefile, if it exists, holds extra information about
+# useful docker images or alternative compiler flags.
+
+-include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.include
+-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include
+
+GUEST_BUILD=
+TCG_MAKE=$(SRC_PATH)/tests/tcg/Makefile
+# Support installed Cross Compilers
+
+ifdef CROSS_CC_GUEST
+
+.PHONY: cross-build-guest-tests
+cross-build-guest-tests:
+	$(call quiet-command, \
+	   (mkdir -p tests && cd tests && \
+	    $(MAKE) -f $(TCG_MAKE) CC=$(CROSS_CC_GUEST) \
+			BUILD_STATIC=$(CROSS_CC_GUEST_STATIC) \
+			EXTRA_CFLAGS=$(CROSS_CC_GUEST_CFLAGS)), \
+	"BUILD","$(TARGET_NAME) guest-tests with $(CROSS_CC_GUEST)")
+
+GUEST_BUILD=cross-build-guest-tests
+
+endif
+
+# Support building with Docker
+
+ifeq ($(HAVE_USER_DOCKER)$(GUEST_BUILD),y)
+ifneq ($(DOCKER_IMAGE),)
+
+# We also need the Docker make rules to depend on
+include $(SRC_PATH)/tests/docker/Makefile.include
+
+DOCKER_COMPILE_CMD="$(DOCKER_SCRIPT) cc --user $(shell id -u) \
+		--cc $(DOCKER_CROSS_COMPILER) \
+		-i qemu:$(DOCKER_IMAGE) \
+		-s $(SRC_PATH) -- "
+DOCKER_PREREQ=docker-image-$(DOCKER_IMAGE)
+
+.PHONY: docker-build-guest-tests
+docker-build-guest-tests: $(DOCKER_PREREQ)
+	$(call quiet-command, \
+	  (mkdir -p tests && cd tests && \
+	   $(MAKE) -f $(TCG_MAKE) CC=$(DOCKER_COMPILE_CMD) \
+			BUILD_STATIC=y \
+			EXTRA_CFLAGS=$(DOCKER_CROSS_COMPILER_CFLAGS)), \
+	"BUILD","$(TARGET_NAME) guest-tests with docker qemu:$(DOCKER_IMAGE)")
+
+GUEST_BUILD=docker-build-guest-tests
+
+endif
+endif
+
+# Final targets
+.PHONY: guest-tests
+
+ifneq ($(GUEST_BUILD),)
+guest-tests: $(GUEST_BUILD)
+
+run-guest-tests: guest-tests qemu-$(TARGET_NAME)
+	$(call quiet-command, \
+	(cd tests && $(MAKE) -f $(TCG_MAKE) SPEED=$(SPEED) run), \
+	"RUN", "tests for $(TARGET_NAME)")
+
+else
+guest-tests:
+	$(call quiet-command, /bin/true, "BUILD", \
+		"$(TARGET_NAME) guest-tests SKIPPED")
+
+run-guest-tests:
+	$(call quiet-command, /bin/true, "RUN", \
+		"tests for $(TARGET_NAME) SKIPPED")
+endif
+
+# It doesn't matter if these don't exits
+.PHONY: clean-guest-tests
+clean-guest-tests:
+	rm -rf tests || echo "no $(TARGET_NAME) tests to remove"
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 45/56] tests/Makefile.include: add [build|clean|check]-tcg targets
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (43 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 44/56] Makefile.target: add (clean-/build-)guest-tests targets Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 46/56] tests/tcg: add run, diff, and skip helper macros Alex Bennée
                   ` (12 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This will ensure all linux-user targets build their guest test
programs and ensure check-tcg will run the respective tests.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v2
  - use -include instead of complex macro stuff
  - also include TARGET_BASE_ARCH/Makefile
v3
  - add build-tcg, make check-tcg actually run tests

diff --git a/tests/Makefile.include b/tests/Makefile.include
index ca91da26cb..c8faa01a33 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -10,6 +10,7 @@ check-help:
 	@echo " $(MAKE) check-speed          Run qobject speed tests"
 	@echo " $(MAKE) check-qapi-schema    Run QAPI schema tests"
 	@echo " $(MAKE) check-block          Run block tests"
+	@echo " $(MAKE) check-tcg            Run TCG tests"
 	@echo " $(MAKE) check-report.html    Generates an HTML test report"
 	@echo " $(MAKE) check-clean          Clean the tests"
 	@echo
@@ -930,6 +931,30 @@ check-report.xml: $(patsubst %,check-report-qtest-%.xml, $(QTEST_TARGETS)) check
 check-report.html: check-report.xml
 	$(call quiet-command,gtester-report $< > $@,"GEN","$@")
 
+# Per guest TCG tests
+
+LINUX_USER_TARGETS=$(filter %-linux-user,$(TARGET_LIST))
+BUILD_TCG_TARGET_RULES=$(patsubst %,build-tcg-tests-%, $(LINUX_USER_TARGETS))
+CLEAN_TCG_TARGET_RULES=$(patsubst %,clean-tcg-tests-%, $(LINUX_USER_TARGETS))
+RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(LINUX_USER_TARGETS))
+
+build-tcg-tests-%:
+	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" guest-tests,)
+
+run-tcg-tests-%: build-tcg-tests-%
+	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" run-guest-tests,)
+
+clean-tcg-tests-%:
+	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" clean-guest-tests,)
+
+.PHONY: build-tcg
+build-tcg: $(BUILD_TCG_TARGET_RULES)
+
+.PHONY: check-tcg
+check-tcg: $(RUN_TCG_TARGET_RULES)
+
+.PHONY: clean-tcg
+clean-tcg: $(CLEAN_TCG_TARGET_RULES)
 
 # Other tests
 
@@ -972,7 +997,6 @@ check-speed: $(patsubst %,check-%, $(check-speed-y))
 check-block: $(patsubst %,check-%, $(check-block-y))
 check: check-qapi-schema check-unit check-qtest check-decodetree
 check-clean:
-	$(MAKE) -C tests/tcg clean
 	rm -rf $(check-unit-y) tests/*.o $(QEMU_IOTESTS_HELPERS-y)
 	rm -rf $(sort $(foreach target,$(SYSEMU_TARGET_LIST), $(check-qtest-$(target)-y)) $(check-qtest-generic-y))
 	rm -f tests/test-qapi-gen-timestamp
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 46/56] tests/tcg: add run, diff, and skip helper macros
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (44 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 45/56] tests/Makefile.include: add [build|clean|check]-tcg targets Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 47/56] tests/tcg: override runners for broken tests Alex Bennée
                   ` (11 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost, open list:ARM

As we aren't using the default runners for all the test cases it is
easy to miss out things like timeouts. To help with this we add some
helpers and use them so we only need to make core changes in one
place.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v5
  - new for v5
v5.1
  - diff-test->diff-out
v7
  - mention $(TARGET_NAME) when skipping

diff --git a/tests/tcg/Makefile b/tests/tcg/Makefile
index e7dbcdb5bf..bf06415390 100644
--- a/tests/tcg/Makefile
+++ b/tests/tcg/Makefile
@@ -34,6 +34,15 @@
 
 quiet-command = $(if $(V),$1,$(if $(2),@printf "  %-7s %s\n" $2 $3 && $1, @$1))
 
+# $1 = test name, $2 = cmd, $3 = desc
+run-test = $(call quiet-command, timeout $(TIMEOUT) $2 > $1.out,"TEST",$3)
+
+# $1 = test name, $2 = reference
+diff-out = $(call quiet-command, diff -u $1.out $2 | head -n 10,"DIFF","$1.out with $2")
+
+# $1 = test name, $2 = reason
+skip-test = @printf "  SKIPPED %s on $(TARGET_NAME) because %s\n" $1 $2
+
 # Tests we are building
 TESTS=
 
@@ -84,9 +93,7 @@ RUN_TESTS=$(patsubst %,run-%, $(TESTS))
 RUN_TESTS+=$(EXTRA_RUNS)
 
 run-%: %
-	$(call quiet-command, \
-		timeout $(TIMEOUT) $(QEMU) $< > $<.out, \
-		"TEST", "$< on $(TARGET_NAME)")
+	$(call run-test, $<, $(QEMU) $<, "$< on $(TARGET_NAME)")
 
 .PHONY: run
 run: $(RUN_TESTS)
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index 7dba32138d..08c45b8470 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -13,7 +13,5 @@ TESTS:=$(AARCH64_TESTS)
 fcvt: LDFLAGS+=-lm
 
 run-fcvt: fcvt
-	$(call quiet-command, \
-		$(QEMU) $< > fcvt.out && \
-		diff -u $(AARCH64_SRC)/fcvt.ref fcvt.out, \
-		"TEST", "$< (default) on $(TARGET_NAME)")
+	$(call run-test,$<,$(QEMU) $<, "$< on $(TARGET_NAME)")
+	$(call diff-out,$<,$(AARCH64_SRC)/fcvt.ref)
diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index 14b5435fc6..aa4e4e3782 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -24,10 +24,8 @@ fcvt: LDFLAGS+=-lm
 # fcvt: CFLAGS+=-march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
 
 run-fcvt: fcvt
-	$(call quiet-command, \
-		$(QEMU) $< > fcvt.out && \
-		diff -u $(ARM_SRC)/fcvt.ref fcvt.out, \
-		"TEST", "$< (default) on $(TARGET_NAME)")
+	$(call run-test,fcvt,$(QEMU) $<,"$< on $(TARGET_NAME)")
+	$(call diff-out,fcvt,$(ARM_SRC)/fcvt.ref)
 endif
 
 # On ARM Linux only supports 4k pages
diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
index cd173363ee..97b7c23cf1 100644
--- a/tests/tcg/i386/Makefile.target
+++ b/tests/tcg/i386/Makefile.target
@@ -31,7 +31,7 @@ test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S test-i386.h test-i386
 
 # Specialist test runners
 run-runcom: runcom pi_10.com
-	$(call quiet-command, $(QEMU) ./runcom $(I386_SRC)/pi_10.com > runcom.out, "TEST", "$< on $(TARGET_NAME)")
+	$(call run-test,$<,$(QEMU) ./runcom $(I386_SRC)/pi_10.com,"$< on $(TARGET_NAME)")
 
 ifeq ($(SPEED), slow)
 
@@ -40,13 +40,11 @@ test-i386-fprem.ref: test-i386-fprem
 
 run-test-i386-fprem: TIMEOUT=60
 run-test-i386-fprem: test-i386-fprem
-	$(call quiet-command, \
-		$(QEMU) $< > $<.out && \
-		diff -u $(I386_SRC)/$<.ref $<.out, \
-		"TEST", "$< (default) on $(TARGET_NAME)")
+	$(call run-test,test-i386-fprem, $(QEMU) $<,"$< on $(TARGET_NAME)")
+	$(call diff-out,test-i386-fprem, $(I386_SRC)/$<.ref)
 else
 run-test-i386-fprem: test-i386-fprem
-	$(call quiet-command, /bin/true, "SLOW TEST", "$< SKIPPED on $(TARGET_NAME)")
+	$(call skip-test, $<, "SLOW")
 endif
 
 # On i386 and x86_64 Linux only supports 4k pages (large pages are a different hack)
diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target
index 90e45a881e..b77084c146 100644
--- a/tests/tcg/multiarch/Makefile.target
+++ b/tests/tcg/multiarch/Makefile.target
@@ -27,10 +27,10 @@ testthread: LDFLAGS+=-lpthread
 
 # default case (host page size)
 run-test-mmap: test-mmap
-	$(call quiet-command, $(QEMU) $< > test-mmap.out, "TEST", \
+	$(call run-test, test-mmap, $(QEMU) $<, \
 		"$< (default) on $(TARGET_NAME)")
 
 # additional page sizes (defined by each architecture adding to EXTRA_RUNS)
 run-test-mmap-%: test-mmap
-	$(call quiet-command, $(QEMU) -p $* $< > test-mmap-$*.out, "TEST", \
+	$(call run-test, test-mmap-$*, $(QEMU) -p $* $<,\
 		"$< ($* byte pages) on $(TARGET_NAME)")
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 47/56] tests/tcg: override runners for broken tests
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (45 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 46/56] tests/tcg: add run, diff, and skip helper macros Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 48/56] tests/tcg/i386: extend timeout for runcom test Alex Bennée
                   ` (10 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Yongbok Kim

To get a clean run of check-tcg these tests are currently skipped:

  - hello-mips for mips
  - linux-test for sparc

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v4
  - document broken tests in commit
  - temporarily demote fcvt while fixes percolate upstream
v5
  - reinstate fcvt
  - remove test-mmap overrides (done with EXTRA_RUNS now)
v6
  - move to after the skip-test helper
v7
  - rm personal path

diff --git a/tests/tcg/mips/Makefile.target b/tests/tcg/mips/Makefile.target
index 71f0c2dd53..086625f533 100644
--- a/tests/tcg/mips/Makefile.target
+++ b/tests/tcg/mips/Makefile.target
@@ -17,3 +17,6 @@ hello-mips: LDFLAGS+=-nostdlib
 
 # For MIPS32 and 64 we have a bunch of extra tests in sub-directories
 # however they are intended for system tests.
+
+run-hello-mips: hello-mips
+	$(call skip-test, $<, "BROKEN")
diff --git a/tests/tcg/sparc64/Makefile.target b/tests/tcg/sparc64/Makefile.target
index 408dace783..5bd7f90583 100644
--- a/tests/tcg/sparc64/Makefile.target
+++ b/tests/tcg/sparc64/Makefile.target
@@ -1,6 +1,11 @@
 # -*- Mode: makefile -*-
 #
-# sparc specific tweaks
+# sparc specific tweaks and masking out broken tests
+
+# different from the other hangs:
+# tests/tcg/multiarch/linux-test.c:264: Value too large for defined data type (ret=-1, errno=92/Value too large for defined data type)
+run-linux-test: linux-test
+	$(call skip-test, $<, "BROKEN")
 
 # On Sparc64 Linux support 8k pages
 EXTRA_RUNS+=run-test-mmap-8192
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 48/56] tests/tcg/i386: extend timeout for runcom test
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (46 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 47/56] tests/tcg: override runners for broken tests Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 49/56] tests: add top-level make dependency for docker builds Alex Bennée
                   ` (9 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost

The Travis hardware can be a little slow and the runcom test is fairly
heavy in calculating pi. Lets double the timeout so we don't trip up
during CI by mistake.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/tcg/i386/Makefile.target b/tests/tcg/i386/Makefile.target
index 97b7c23cf1..c1997a1624 100644
--- a/tests/tcg/i386/Makefile.target
+++ b/tests/tcg/i386/Makefile.target
@@ -30,6 +30,7 @@ test-i386: test-i386.c test-i386-code16.S test-i386-vm86.S test-i386.h test-i386
 	   $(<D)/test-i386.c $(<D)/test-i386-code16.S $(<D)/test-i386-vm86.S -lm
 
 # Specialist test runners
+run-runcom: TIMEOUT=30
 run-runcom: runcom pi_10.com
 	$(call run-test,$<,$(QEMU) ./runcom $(I386_SRC)/pi_10.com,"$< on $(TARGET_NAME)")
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 49/56] tests: add top-level make dependency for docker builds
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (47 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 48/56] tests/tcg/i386: extend timeout for runcom test Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 50/56] docker: docker.py use "version" to probe usage Alex Bennée
                   ` (8 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

One problem with satisfying your docker dependencies in a sub-make it
you might end up trying to satisfy the dependency multiple times. This
is especially a problem with debian-sid based cross compilers and CI
setups. We solve this by doing a docker build pass at the top level
before any sub-makes are called.

We still need to satisfy dependencies in the Makefile.target call so
people can run tests from individual target directories. We introduce
a new Makefile.probe which gets called for each PROBE_TARGET and
allows us to build up the list. It does require multiply including
config-target.mak which shouldn't cause any issues as it shouldn't
define anything that clashes with config-host.mak. However we undefine
a few key variables each time around.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
v7
  - remove $(info) spam
  - just add the explicit docker dependency to each build target
  - include build-tcg-prereqs for CI tasks

diff --git a/tests/Makefile.include b/tests/Makefile.include
index c8faa01a33..2dd0700a88 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -938,6 +938,14 @@ BUILD_TCG_TARGET_RULES=$(patsubst %,build-tcg-tests-%, $(LINUX_USER_TARGETS))
 CLEAN_TCG_TARGET_RULES=$(patsubst %,clean-tcg-tests-%, $(LINUX_USER_TARGETS))
 RUN_TCG_TARGET_RULES=$(patsubst %,run-tcg-tests-%, $(LINUX_USER_TARGETS))
 
+# Probe for the Docker Builds needed for each build
+DOCKER_BUILD_TARGETS:=
+$(foreach PROBE_TARGET,$(TARGET_LIST), 				\
+	$(eval -include $(SRC_PATH)/tests/tcg/Makefile.probe) 	\
+	$(if $(DOCKER_PREREQ), 					\
+		$(eval DOCKER_BUILD_TARGETS+=$(DOCKER_PREREQ))  \
+		$(eval build-tcg-tests-$(PROBE_TARGET): $(DOCKER_PREREQ))))
+
 build-tcg-tests-%:
 	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" guest-tests,)
 
@@ -947,6 +955,9 @@ run-tcg-tests-%: build-tcg-tests-%
 clean-tcg-tests-%:
 	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" clean-guest-tests,)
 
+.PHONY: build-tcg-prereqs
+build-tcg-prereqs: $(DOCKER_BUILD_TARGETS)
+
 .PHONY: build-tcg
 build-tcg: $(BUILD_TCG_TARGET_RULES)
 
diff --git a/tests/tcg/Makefile.probe b/tests/tcg/Makefile.probe
new file mode 100644
index 0000000000..15c0412657
--- /dev/null
+++ b/tests/tcg/Makefile.probe
@@ -0,0 +1,31 @@
+# -*- Mode: makefile -*-
+#
+# TCG Compiler Probe
+#
+# This Makefile fragement is included multiple times in the main make
+# script to probe for available compilers. This is used to build up a
+# selection of required docker targets before we invoke a sub-make for
+# each target.
+
+# First we need the target makefile which tells us the target architecture
+-include $(BUILD_DIR)/$(PROBE_TARGET)/config-target.mak
+
+# Then we load up the target architecture makefiles which tell us
+# about the compilers
+CROSS_CC_GUEST:=
+DOCKER_IMAGE:=
+DOCKER_PREREQ:=
+
+-include $(SRC_PATH)/tests/tcg/$(TARGET_BASE_ARCH)/Makefile.include
+-include $(SRC_PATH)/tests/tcg/$(TARGET_NAME)/Makefile.include
+
+ifndef CROSS_CC_GUEST
+ifneq ($(DOCKER_IMAGE),)
+DOCKER_PREREQ:=docker-image-$(DOCKER_IMAGE)
+endif
+endif
+
+# Clean-up
+# undefine TARGET_NAME
+# undefine TARGET_BASE_ARCH
+# undefine TARGET_ABI_DIR
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 50/56] docker: docker.py use "version" to probe usage
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (48 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 49/56] tests: add top-level make dependency for docker builds Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 51/56] docker: docker.py don't conflate checksums for extra_files Alex Bennée
                   ` (7 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

The "images" command is a fairly heavyweight command to run as it
involves searching the whole docker file-system inventory. On a
machine with a lot of images this makes start-up fairly expensive.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
v8
  - use version instead of ps, add comment

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index c83fd89985..e6685f6d81 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -49,7 +49,9 @@ def _guess_docker_command():
     commands = [["docker"], ["sudo", "-n", "docker"]]
     for cmd in commands:
         try:
-            if subprocess.call(cmd + ["images"],
+            # docker version will return the client details in stdout
+            # but still report a status of 1 if it can't contact the daemon
+            if subprocess.call(cmd + ["version"],
                                stdout=DEVNULL, stderr=DEVNULL) == 0:
                 return cmd
         except OSError:
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 51/56] docker: docker.py don't conflate checksums for extra_files
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (49 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 50/56] docker: docker.py use "version" to probe usage Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 52/56] docker: docker.py add check sub-command Alex Bennée
                   ` (6 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This just gets confusing especially as the helper function doesn't
even take into account any extra files (or the executable). Currently
the actual check just ignores them and also passes the result through
_dockerfile_preprocess so we fix that too.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index e6685f6d81..0a0155c941 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -203,8 +203,10 @@ class Docker(object):
 
         tmp_df.write("\n")
         tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s" %
-                     _text_checksum("\n".join([dockerfile] +
-                                    extra_files_cksum)))
+                     _text_checksum(_dockerfile_preprocess(dockerfile)))
+        for f, c in extra_files_cksum:
+            tmp_df.write("LABEL com.qemu.%s-checksum=%s" % (f, c))
+
         tmp_df.flush()
 
         self._do_check(["build", "-t", tag, "-f", tmp_df.name] + argv + \
@@ -319,7 +321,7 @@ class BuildCommand(SubCommand):
                 _copy_binary_with_libs(args.include_executable, docker_dir)
             for filename in args.extra_files or []:
                 _copy_with_mkdir(filename, docker_dir)
-                cksum += [_file_checksum(filename)]
+                cksum += [(filename, _file_checksum(filename))]
 
             argv += ["--build-arg=" + k.lower() + "=" + v
                         for k, v in os.environ.iteritems()
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 52/56] docker: docker.py add check sub-command
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (50 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 51/56] docker: docker.py don't conflate checksums for extra_files Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 53/56] tests/Makefile: call sub-makes with SKIP_DOCKER_BUILD=1 Alex Bennée
                   ` (5 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This command allows you to check if we need to re-build a docker
image. If the image isn't in the repository or the checksums don't
match then we return false and some text (for processing in
makefiles).

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
  - fix prints to be "modern"
  - PEP8 fixes
  - split inspect into function

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 0a0155c941..770b22424b 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -181,8 +181,14 @@ class Docker(object):
                                        stderr=subprocess.STDOUT,
                                        **kwargs)
 
+    def inspect_tag(self, tag):
+        try:
+            return self._output(["inspect", tag])
+        except subprocess.CalledProcessError:
+            return None
+
     def get_image_dockerfile_checksum(self, tag):
-        resp = self._output(["inspect", tag])
+        resp = self.inspect_tag(tag)
         labels = json.loads(resp)[0]["Config"].get("Labels", {})
         return labels.get("com.qemu.dockerfile-checksum", "")
 
@@ -444,6 +450,36 @@ class CcCommand(SubCommand):
         return Docker().command("run", cmd, args.quiet)
 
 
+class CheckCommand(SubCommand):
+    """Check if we need to re-build a docker image out of a dockerfile.
+    Arguments: <tag> <dockerfile>"""
+    name = "check"
+
+    def args(self, parser):
+        parser.add_argument("tag",
+                            help="Image Tag")
+        parser.add_argument("dockerfile",
+                            help="Dockerfile name")
+
+    def run(self, args, argv):
+        dockerfile = open(args.dockerfile, "rb").read()
+        tag = args.tag
+
+        dkr = Docker()
+        info = dkr.inspect_tag(tag)
+        if info is None:
+            print("Image does not exist")
+            return 1
+
+        if dkr.image_matches_dockerfile(tag, dockerfile):
+            if not args.quiet:
+                print("Image is up to date")
+            return 0
+        else:
+            print("Image needs updating")
+            return 1
+
+
 def main():
     parser = argparse.ArgumentParser(description="A Docker helper",
             usage="%s <subcommand> ..." % os.path.basename(sys.argv[0]))
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 53/56] tests/Makefile: call sub-makes with SKIP_DOCKER_BUILD=1
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (51 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 52/56] docker: docker.py add check sub-command Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 54/56] docker: docker.py adding age check command Alex Bennée
                   ` (4 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

As we now ensure all the images we are going to use are built in the
top level make file lets not over complicate things by running the
full script again. We do run the check script just in case someone
deletes the docker image while we are running.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 2dd0700a88..dad20e1b9b 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -947,10 +947,14 @@ $(foreach PROBE_TARGET,$(TARGET_LIST), 				\
 		$(eval build-tcg-tests-$(PROBE_TARGET): $(DOCKER_PREREQ))))
 
 build-tcg-tests-%:
-	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" guest-tests,)
+	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" \
+		SKIP_DOCKER_BUILD=1 TARGET_DIR="$*/" guest-tests, \
+		"BUILD", "TCG tests for $*")
 
 run-tcg-tests-%: build-tcg-tests-%
-	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" run-guest-tests,)
+	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" \
+		SKIP_DOCKER_BUILD=1 TARGET_DIR="$*/" run-guest-tests, \
+		"RUN", "TCG tests for $*")
 
 clean-tcg-tests-%:
 	$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" clean-guest-tests,)
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 87f449264f..c0f09505bb 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -34,7 +34,15 @@ docker-qemu-src: $(DOCKER_SRC_COPY)
 
 docker-image: ${DOCKER_TARGETS}
 
-# General rule for building docker images
+# General rule for building docker images. If we are a sub-make
+# invoked with SKIP_DOCKER_BUILD we still check the image is upto date
+# though
+ifdef SKIP_DOCKER_BUILD
+docker-image-%: $(DOCKER_FILES_DIR)/%.docker
+	$(call quiet-command, \
+		$(DOCKER_SCRIPT) check --quiet qemu:$* $<, \
+		"CHECK", "$*")
+else
 docker-image-%: $(DOCKER_FILES_DIR)/%.docker
 	@if test "$@" = docker-image-debian-bootstrap -a -z "$(EXECUTABLE)"; then \
 		echo WARNING: EXECUTABLE is not set, debootstrap may fail. 2>&1 ; \
@@ -46,6 +54,7 @@ docker-image-%: $(DOCKER_FILES_DIR)/%.docker
 		$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES))\
 		$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\
 		"BUILD","$*")
+endif
 
 # Enforce dependencies for composite images
 docker-image-debian: docker-image-debian9
@@ -65,7 +74,9 @@ docker-image-debian-win64-cross: docker-image-debian8-mxe
 # Debian SID images - we are tracking a rolling distro so we want to
 # force a re-build of the base image if we ever need to build one of
 # its children.
+ifndef SKIP_DOCKER_BUILD
 docker-image-debian-sid: NOCACHE=1
+endif
 
 docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-debian-hppa-cross: docker-image-debian-sid
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 54/56] docker: docker.py adding age check command
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (52 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 53/56] tests/Makefile: call sub-makes with SKIP_DOCKER_BUILD=1 Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 55/56] tests/docker/Makefile.include: only force SID to NOCACHE if old Alex Bennée
                   ` (3 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

This is useful for querying if an image is too old.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
v7
  - use cached info

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 770b22424b..c748c457b9 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -29,6 +29,7 @@ from tarfile import TarFile, TarInfo
 from StringIO import StringIO
 from shutil import copy, rmtree
 from pwd import getpwuid
+from datetime import datetime,timedelta
 
 
 FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy']
@@ -187,6 +188,9 @@ class Docker(object):
         except subprocess.CalledProcessError:
             return None
 
+    def get_image_creation_time(self, info):
+        return json.loads(info)[0]["Created"]
+
     def get_image_dockerfile_checksum(self, tag):
         resp = self.inspect_tag(tag)
         labels = json.loads(resp)[0]["Config"].get("Labels", {})
@@ -458,11 +462,14 @@ class CheckCommand(SubCommand):
     def args(self, parser):
         parser.add_argument("tag",
                             help="Image Tag")
-        parser.add_argument("dockerfile",
-                            help="Dockerfile name")
+        parser.add_argument("dockerfile", default=None,
+                            help="Dockerfile name", nargs='?')
+        parser.add_argument("--checktype", choices=["checksum", "age"],
+                            default="checksum", help="check type")
+        parser.add_argument("--olderthan", default=60, type=int,
+                            help="number of minutes")
 
     def run(self, args, argv):
-        dockerfile = open(args.dockerfile, "rb").read()
         tag = args.tag
 
         dkr = Docker()
@@ -471,13 +478,32 @@ class CheckCommand(SubCommand):
             print("Image does not exist")
             return 1
 
-        if dkr.image_matches_dockerfile(tag, dockerfile):
-            if not args.quiet:
-                print("Image is up to date")
-            return 0
-        else:
-            print("Image needs updating")
-            return 1
+        if args.checktype == "checksum":
+            if not args.dockerfile:
+                print("Need a dockerfile for tag:%s" % (tag))
+                return 1
+
+            dockerfile = open(args.dockerfile, "rb").read()
+
+            if dkr.image_matches_dockerfile(tag, dockerfile):
+                if not args.quiet:
+                    print("Image is up to date")
+                return 0
+            else:
+                print("Image needs updating")
+                return 1
+        elif args.checktype == "age":
+            timestr = dkr.get_image_creation_time(info).split(".")[0]
+            created = datetime.strptime(timestr, "%Y-%m-%dT%H:%M:%S")
+            past = datetime.now() - timedelta(minutes=args.olderthan)
+            if created < past:
+                print ("Image created @ %s more than %d minutes old" %
+                       (timestr, args.olderthan))
+                return 1
+            else:
+                if not args.quiet:
+                    print ("Image less than %d minutes old" % (args.olderthan))
+                return 0
 
 
 def main():
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 55/56] tests/docker/Makefile.include: only force SID to NOCACHE if old
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (53 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 54/56] docker: docker.py adding age check command Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-19 15:44 ` [Qemu-devel] [PULL 56/56] .travis.yml: add check-tcg test Alex Bennée
                   ` (2 subsequent siblings)
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Now we can check the age of a docker image we can be a little more
intelligent about re-building Sid images and only force NOCACHE if
it is "old".

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index c0f09505bb..91d9665517 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -75,8 +75,14 @@ docker-image-debian-win64-cross: docker-image-debian8-mxe
 # force a re-build of the base image if we ever need to build one of
 # its children.
 ifndef SKIP_DOCKER_BUILD
+ifeq ($(HAVE_USER_DOCKER),y)
+SID_AGE=$(shell $(DOCKER_SCRIPT) check --checktype=age --olderthan=180 --quiet qemu:debian-sid)
+ifeq ($(SID_AGE),)
+else
 docker-image-debian-sid: NOCACHE=1
 endif
+endif
+endif
 
 docker-image-debian-alpha-cross: docker-image-debian-sid
 docker-image-debian-hppa-cross: docker-image-debian-sid
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* [Qemu-devel] [PULL 56/56] .travis.yml: add check-tcg test
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (54 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 55/56] tests/docker/Makefile.include: only force SID to NOCACHE if old Alex Bennée
@ 2018-06-19 15:44 ` Alex Bennée
  2018-06-20 10:43 ` [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Peter Maydell
  2018-06-20 14:21 ` Peter Maydell
  57 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-19 15:44 UTC (permalink / raw)
  To: peter.maydell
  Cc: qemu-devel, cota, famz, berrange, f4bug, richard.henderson,
	balrogg, aurelien, agraf, Alex Bennée

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

---
v7
  - explicit build-tcg-prereqs

diff --git a/.travis.yml b/.travis.yml
index fabfe9ec34..ad352c5784 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -153,3 +153,11 @@ matrix:
         - TEST_CMD=""
       before_script:
         - ./configure ${CONFIG} --extra-cflags="-g3 -O0 -fsanitize=thread -fuse-ld=gold" || { cat config.log && exit 1; }
+    - env:
+        - CONFIG="--disable-system --disable-docs"
+        - TEST_CMD="make check-tcg"
+      script:
+        - make ${MAKEFLAGS} build-tcg-prereqs && ${TEST_CMD}
+      sudo: required
+      dist: trusty
+      compiler: gcc
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (55 preceding siblings ...)
  2018-06-19 15:44 ` [Qemu-devel] [PULL 56/56] .travis.yml: add check-tcg test Alex Bennée
@ 2018-06-20 10:43 ` Peter Maydell
  2018-06-20 14:09   ` Alex Bennée
  2018-06-20 14:13   ` Daniel P. Berrangé
  2018-06-20 14:21 ` Peter Maydell
  57 siblings, 2 replies; 63+ messages in thread
From: Peter Maydell @ 2018-06-20 10:43 UTC (permalink / raw)
  To: Alex Bennée
  Cc: QEMU Developers, Emilio G. Cota, Fam Zheng, Daniel P. Berrange,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf

On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
> The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
>
>   Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
>
> are available in the Git repository at:
>
>   https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1
>
> for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:
>
>   .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)
>
> ----------------------------------------------------------------
> Add check-tcg machinary
>
> This restores the ability to run TCG smoke tests by using our docker
> infrastructure to support cross building simple tests. It represents
> the first step to making better cross-architecture testing available
> straight from the source tree ;-)
>
> ----------------------------------------------------------------

On x86-64/Linux I get:

Doing build and test cycle...
make: Entering directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
Traceback (most recent call last):
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 523, in <module>
    sys.exit(main())
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 520, in main
    return args.cmdobj.run(args, argv)
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 475, in run
    dkr = Docker()
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 137, in __init__
    self._command = _guess_docker_command()
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 62, in _guess_docker_command
    commands_txt)
Exception: Cannot find working docker command. Tried:
  docker
  sudo -n docker
make: Leaving directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
make: *** Deleting file 'config-host.mak'
make: Entering directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
config-host.mak is out-of-date, running configure
Traceback (most recent call last):
  File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
line 29, in <module>
    from StringIO import StringIO
ImportError: No module named 'StringIO'
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
firmware path     /usr/local/share/qemu-firmware
[other configure output trimmed]
VxHS block device no
capstone          git
docker

ERROR: configure test passed without -Werror but failed with -Werror.
       This is probably a bug in the configure script. The failing command
       will be at the bottom of config.log.
       You can run configure with --disable-werror to bypass this check.

Makefile:73: recipe for target 'config-host.mak' failed
make: *** [config-host.mak] Error 1

and the last part of config.log is

======
ccache gcc -Werror -pthread -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings
-Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv
-Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
-Wold-style-declaration -Wold-style-definition -Wtype-limits
-fstack-protector-strong -I/usr/include/p11-kit-1
-I/usr/include/libpng12 -I/usr/include/spice-server
-I/usr/include/spice-1 -I$(SRC_PATH)/capstone/include -c -o
config-temp/qemu-conf.o config-temp/qemu-conf.c
c++ -D__STDC_LIMIT_MACROS -Werror -pthread -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wall -Wundef
-Wwrite-strings -fno-strict-aliasing -fno-common -fwrapv
-Wendif-labels -Wno-missing-include-dirs -Wempty-body
-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
-Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1
-I/usr/include/libpng12 -I/usr/include/spice-server
-I/usr/include/spice-1 -I$(SRC_PATH)/capstone/include -o
config-temp/qemu-conf.exe config-temp/qemu-conf.cxx
config-temp/qemu-conf.o -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie
-m64 -g
aarch64-linux-gnu-gcc -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
aarch64-linux-gnu-gcc -Werror -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
arm-linux-gnueabihf-gcc -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
arm-linux-gnueabihf-gcc -Werror -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
powerpc-linux-gnu-gcc -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
powerpc-linux-gnu-gcc -Werror -o config-temp/qemu-conf.exe
config-temp/qemu-conf.c -static
ccache gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static
ccache -Werror gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static
ccache: invalid option -- 'W'
Usage:
    ccache [options]
    ccache compiler [compiler options]
    compiler [compiler options]          (via symbolic link)

Options:
    -c, --cleanup         delete old files and recalculate size counters
                          (normally not needed as this is done automatically)
    -C, --clear           clear the cache completely (except configuration)
    -F, --max-files=N     set maximum number of files in cache to N (use 0 for
                          no limit)
    -M, --max-size=SIZE   set maximum size of cache to SIZE (use 0 for no
                          limit); available suffixes: k, M, G, T (decimal) and
                          Ki, Mi, Gi, Ti (binary); default suffix: G
    -o, --set-config=K=V  set configuration key K to value V
    -p, --print-config    print current configuration options
    -s, --show-stats      show statistics summary
    -z, --zero-stats      zero statistics counters

    -h, --help            print this help text
    -V, --version         print version and copyright information

See also <http://ccache.samba.org>.
======

The configure options for this build are
'--cc=ccache gcc' '--enable-debug' '--python=python3'

Looks like something is mishandling CC.

On FreeBSD I get an odd linker error:

  LINK    qemu-ga
/usr/bin/ld: cannot open linker script file ../config-host.ld: No such
file or directory
c++: error: linker command failed with exit code 1 (use -v to see invocation)
gmake: *** [Makefile:688: qemu-ga] Error 1

thanks
-- PMM

^ permalink raw reply	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
  2018-06-20 10:43 ` [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Peter Maydell
@ 2018-06-20 14:09   ` Alex Bennée
  2018-06-20 14:13   ` Daniel P. Berrangé
  1 sibling, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-20 14:09 UTC (permalink / raw)
  To: Peter Maydell
  Cc: QEMU Developers, Emilio G. Cota, Fam Zheng, Daniel P. Berrange,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf


Peter Maydell <peter.maydell@linaro.org> writes:

> On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
>> The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
>>
>>   Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
>>
>> are available in the Git repository at:
>>
>>   https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1
>>
>> for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:
>>
>>   .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)
>>
>> ----------------------------------------------------------------
>> Add check-tcg machinary
>>
>> This restores the ability to run TCG smoke tests by using our docker
>> infrastructure to support cross building simple tests. It represents
>> the first step to making better cross-architecture testing available
>> straight from the source tree ;-)
>>
>> ----------------------------------------------------------------
>
> On x86-64/Linux I get:
>
> Doing build and test cycle...
> make: Entering directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
> Traceback (most recent call last):
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 523, in <module>
>     sys.exit(main())
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 520, in main
>     return args.cmdobj.run(args, argv)
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 475, in run
>     dkr = Docker()
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 137, in __init__
>     self._command = _guess_docker_command()
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 62, in _guess_docker_command
>     commands_txt)
> Exception: Cannot find working docker command. Tried:
>   docker
>   sudo -n docker
> make: Leaving directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
> make: *** Deleting file 'config-host.mak'
> make: Entering directory '/home/petmay01/linaro/qemu-for-merges/build/alldbg'
> config-host.mak is out-of-date, running configure
> Traceback (most recent call last):
>   File "/home/petmay01/linaro/qemu-for-merges/tests/docker/docker.py",
> line 29, in <module>
>     from StringIO import StringIO
> ImportError: No module named 'StringIO'
> Install prefix    /usr/local
> BIOS directory    /usr/local/share/qemu
> firmware path     /usr/local/share/qemu-firmware
> [other configure output trimmed]
> VxHS block device no
> capstone          git
> docker

Hmm I'm sure I tested this. I'll go and find a box without docker to
double check.

>
> ERROR: configure test passed without -Werror but failed with -Werror.
>        This is probably a bug in the configure script. The failing command
>        will be at the bottom of config.log.
>        You can run configure with --disable-werror to bypass this check.
>
> Makefile:73: recipe for target 'config-host.mak' failed
> make: *** [config-host.mak] Error 1
>
> and the last part of config.log is
>
> ======
> ccache gcc -Werror -pthread -I/usr/include/glib-2.0
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16
> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
> -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings
> -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv
> -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs
> -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
> -Wold-style-declaration -Wold-style-definition -Wtype-limits
> -fstack-protector-strong -I/usr/include/p11-kit-1
> -I/usr/include/libpng12 -I/usr/include/spice-server
> -I/usr/include/spice-1 -I$(SRC_PATH)/capstone/include -c -o
> config-temp/qemu-conf.o config-temp/qemu-conf.c
> c++ -D__STDC_LIMIT_MACROS -Werror -pthread -I/usr/include/glib-2.0
> -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16
> -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wall -Wundef
> -Wwrite-strings -fno-strict-aliasing -fno-common -fwrapv
> -Wendif-labels -Wno-missing-include-dirs -Wempty-body
> -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
> -Wtype-limits -fstack-protector-strong -I/usr/include/p11-kit-1
> -I/usr/include/libpng12 -I/usr/include/spice-server
> -I/usr/include/spice-1 -I$(SRC_PATH)/capstone/include -o
> config-temp/qemu-conf.exe config-temp/qemu-conf.cxx
> config-temp/qemu-conf.o -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie
> -m64 -g
> aarch64-linux-gnu-gcc -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> aarch64-linux-gnu-gcc -Werror -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> arm-linux-gnueabihf-gcc -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> arm-linux-gnueabihf-gcc -Werror -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> powerpc-linux-gnu-gcc -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> powerpc-linux-gnu-gcc -Werror -o config-temp/qemu-conf.exe
> config-temp/qemu-conf.c -static
> ccache gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static
> ccache -Werror gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static
> ccache: invalid option -- 'W'
> Usage:
>     ccache [options]
>     ccache compiler [compiler options]
>     compiler [compiler options]          (via symbolic link)
>
> Options:
>     -c, --cleanup         delete old files and recalculate size counters
>                           (normally not needed as this is done automatically)
>     -C, --clear           clear the cache completely (except configuration)
>     -F, --max-files=N     set maximum number of files in cache to N (use 0 for
>                           no limit)
>     -M, --max-size=SIZE   set maximum size of cache to SIZE (use 0 for no
>                           limit); available suffixes: k, M, G, T (decimal) and
>                           Ki, Mi, Gi, Ti (binary); default suffix: G
>     -o, --set-config=K=V  set configuration key K to value V
>     -p, --print-config    print current configuration options
>     -s, --show-stats      show statistics summary
>     -z, --zero-stats      zero statistics counters
>
>     -h, --help            print this help text
>     -V, --version         print version and copyright information
>
> See also <http://ccache.samba.org>.
> ======
>
> The configure options for this build are
> '--cc=ccache gcc' '--enable-debug' '--python=python3'
>
> Looks like something is mishandling CC.
>
> On FreeBSD I get an odd linker error:
>
>   LINK    qemu-ga
> /usr/bin/ld: cannot open linker script file ../config-host.ld: No such
> file or directory
> c++: error: linker command failed with exit code 1 (use -v to see invocation)
> gmake: *** [Makefile:688: qemu-ga] Error 1
>
> thanks
> -- PMM


--
Alex Bennée

^ permalink raw reply	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
  2018-06-20 10:43 ` [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Peter Maydell
  2018-06-20 14:09   ` Alex Bennée
@ 2018-06-20 14:13   ` Daniel P. Berrangé
  1 sibling, 0 replies; 63+ messages in thread
From: Daniel P. Berrangé @ 2018-06-20 14:13 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Alex Bennée, QEMU Developers, Emilio G. Cota, Fam Zheng,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf

On Wed, Jun 20, 2018 at 11:43:57AM +0100, Peter Maydell wrote:
> On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
> > The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
> >
> >   Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
> >
> > are available in the Git repository at:
> >
> >   https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1
> >
> > for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:
> >
> >   .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)
> >
> > ----------------------------------------------------------------
> > Add check-tcg machinary
> >
> > This restores the ability to run TCG smoke tests by using our docker
> > infrastructure to support cross building simple tests. It represents
> > the first step to making better cross-architecture testing available
> > straight from the source tree ;-)
> >
> > ----------------------------------------------------------------
> 
> On x86-64/Linux I get:
> 

[snip]

> ERROR: configure test passed without -Werror but failed with -Werror.
>        This is probably a bug in the configure script. The failing command
>        will be at the bottom of config.log.
>        You can run configure with --disable-werror to bypass this check.

[snip]

> ccache gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static
> ccache -Werror gcc -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -static

This looks dubious - the -Werror arg is in the wrong place on the
command line, hence ccache complaining:

> ccache: invalid option -- 'W'
> Usage:
>     ccache [options]
>     ccache compiler [compiler options]
>     compiler [compiler options]          (via symbolic link)
> 
> Options:
>     -c, --cleanup         delete old files and recalculate size counters
>                           (normally not needed as this is done automatically)
>     -C, --clear           clear the cache completely (except configuration)
>     -F, --max-files=N     set maximum number of files in cache to N (use 0 for
>                           no limit)
>     -M, --max-size=SIZE   set maximum size of cache to SIZE (use 0 for no
>                           limit); available suffixes: k, M, G, T (decimal) and
>                           Ki, Mi, Gi, Ti (binary); default suffix: G
>     -o, --set-config=K=V  set configuration key K to value V
>     -p, --print-config    print current configuration options
>     -s, --show-stats      show statistics summary
>     -z, --zero-stats      zero statistics counters
> 
>     -h, --help            print this help text
>     -V, --version         print version and copyright information
> 
> See also <http://ccache.samba.org>.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
  2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
                   ` (56 preceding siblings ...)
  2018-06-20 10:43 ` [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Peter Maydell
@ 2018-06-20 14:21 ` Peter Maydell
  2018-06-20 14:34   ` Alex Bennée
  57 siblings, 1 reply; 63+ messages in thread
From: Peter Maydell @ 2018-06-20 14:21 UTC (permalink / raw)
  To: Alex Bennée
  Cc: QEMU Developers, Emilio G. Cota, Fam Zheng, Daniel P. Berrange,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf

On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
> The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
>
>   Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
>
> are available in the Git repository at:
>
>   https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1
>
> for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:
>
>   .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)
>
> ----------------------------------------------------------------
> Add check-tcg machinary
>
> This restores the ability to run TCG smoke tests by using our docker
> infrastructure to support cross building simple tests. It represents
> the first step to making better cross-architecture testing available
> straight from the source tree ;-)
>

Also, I've just noticed that your commit messages are
full of the 'below-the-fold' info about changes since
v3, v4, etc. That shouldn't be in commits in pull requests,
please.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery
  2018-06-20 14:21 ` Peter Maydell
@ 2018-06-20 14:34   ` Alex Bennée
  0 siblings, 0 replies; 63+ messages in thread
From: Alex Bennée @ 2018-06-20 14:34 UTC (permalink / raw)
  To: Peter Maydell
  Cc: QEMU Developers, Emilio G. Cota, Fam Zheng, Daniel P. Berrange,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf


Peter Maydell <peter.maydell@linaro.org> writes:

> On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
>> The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
>>
>>   Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
>>
>> are available in the Git repository at:
>>
>>   https://github.com/stsquad/qemu.git tags/pull-tcg-testing-revivial-190618-1
>>
>> for you to fetch changes up to 03c79cb5825f2e930a39839e8375dc0feef6d57d:
>>
>>   .travis.yml: add check-tcg test (2018-06-19 16:38:54 +0100)
>>
>> ----------------------------------------------------------------
>> Add check-tcg machinary
>>
>> This restores the ability to run TCG smoke tests by using our docker
>> infrastructure to support cross building simple tests. It represents
>> the first step to making better cross-architecture testing available
>> straight from the source tree ;-)
>>
>
> Also, I've just noticed that your commit messages are
> full of the 'below-the-fold' info about changes since
> v3, v4, etc. That shouldn't be in commits in pull requests,
> please.

Doh... let me add that to my pullreq script...

>
> thanks
> -- PMM


--
Alex Bennée

^ permalink raw reply	[flat|nested] 63+ messages in thread

* Re: [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO
  2018-06-19 15:43 ` [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO Alex Bennée
@ 2018-06-20 15:22   ` Peter Maydell
  0 siblings, 0 replies; 63+ messages in thread
From: Peter Maydell @ 2018-06-20 15:22 UTC (permalink / raw)
  To: Alex Bennée
  Cc: QEMU Developers, Emilio G. Cota, Fam Zheng, Daniel P. Berrange,
	Philippe Mathieu-Daudé,
	Richard Henderson, andrzej zaborowski, Aurelien Jarno,
	Alexander Graf

On 19 June 2018 at 16:43, Alex Bennée <alex.bennee@linaro.org> wrote:
> This allows us to specify cross compilers for our guests. This is
> useful for building test images/programs. Currently we re-run the
> compile test for each target. I couldn't think of a way to cache the
> value for a given arch without getting messier configure code.
>
> The cross compiler for the guest is visible to each target as
> CROSS_CC_GUEST in config-target.mak.
>
> +# Do we have a cross compiler for this target?
> +if has $target_compiler; then
> +
> +    write_c_skeleton
> +
> +    if ! do_compiler $target_compiler -o $TMPE $TMPC -static ; then

Need quotes around "$target_compiler"


> +        # For host systems we might get away with building without -static
> +        if ! do_compiler $target_compiler -o $TMPE $TMPC ; then

Ditto

> +            target_compiler=""
> +        else
> +            enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}"
> +            target_compiler_static="n"
> +        fi
> +    else
> +        enabled_cross_compilers="${enabled_cross_compilers} ${target_compiler}"
> +        target_compiler_static="y"
> +    fi
> +else
> +    target_compiler=""
> +fi
>

> +if test -n "$enabled_cross_compilers"; then
> +    echo
> +    echo "NOTE: cross-compilers enabled:"
> +    printf '%s\n' $enabled_cross_compilers | sort -u
> +fi

This is going to do weird things in the case where one of the
target compilers is something like 'ccache gcc'.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 63+ messages in thread

end of thread, other threads:[~2018-06-20 15:23 UTC | newest]

Thread overview: 63+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-19 15:43 [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 01/56] configure: add support for --cross-cc-FOO Alex Bennée
2018-06-20 15:22   ` Peter Maydell
2018-06-19 15:43 ` [Qemu-devel] [PULL 02/56] configure: move i386_cc to cross_cc_i386 Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 03/56] configure: allow user to specify --cross-cc-cflags-foo= Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 04/56] configure: set cross_cc_FOO for host compiler Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 05/56] docker: Add "cc" subcommand Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 06/56] docker: extend "cc" command to accept compiler Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 07/56] docker: allow "cc" command to run in user context Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 08/56] docker: Makefile.include introduce DOCKER_SCRIPT Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 09/56] tests/tcg: move architecture independent tests into subdir Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 10/56] tests/tcg/multiarch: Build fix for linux-test Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 11/56] tests/tcg/multiarch: enable additional linux-test tests Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 12/56] tests/tcg/multiarch: don't hard code paths/ports for linux-test Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 13/56] tests/tcg/multiarch: move most output to stdout Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 14/56] tests/tcg: move i386 specific tests into subdir Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 15/56] tests/tcg: enable building for i386 Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 16/56] tests/tcg/i386: Build fix for hello-i386 Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 17/56] tests/tcg/i386: fix test-i386 Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 18/56] tests/tcg/i386: add runner for test-i386-fprem Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 19/56] tests/tcg/x86_64: add Makefile.target Alex Bennée
2018-06-19 15:43 ` [Qemu-devel] [PULL 20/56] tests/tcg/i386/test-i386: use modern vector_size attributes Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 21/56] tests/tcg/i386/test-i386: fix printf format Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 22/56] tests/tcg: move ARM specific tests into subdir Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 23/56] tests/tcg: enable building for ARM Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 24/56] tests/tcg/arm: fix up test-arm-iwmmxt test Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 25/56] tests/tcg: enable building for AArch64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 26/56] tests/tcg/arm: add fcvt test cases for AArch32/64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 27/56] tests/tcg: move MIPS specific tests into subdir Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 28/56] tests/tcg: enable building for MIPS Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 29/56] tests/docker/Makefile.include: fix mipsel-cross dependancy Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 30/56] tests/tcg/mips: include common mips hello-mips Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 31/56] tests/tcg: enable building for s390x Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 32/56] tests/tcg: enable building for ppc64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 33/56] tests/tcg: enable building for Alpha Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 34/56] tests/tcg/alpha: add Alpha specific tests Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 35/56] tests/tcg: enable building for HPPA Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 36/56] tests/tcg: enable building for m68k Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 37/56] tests/tcg: enable building for sh4 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 38/56] tests/tcg: enable building for sparc64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 39/56] tests/tcg: enable building for mips64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 40/56] tests/tcg: enable building for RISCV64 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 41/56] docker: move debian-powerpc-cross to sid based build Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 42/56] tests/tcg: enable building for PowerPC Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 43/56] tests/tcg/Makefile: update to be called from Makefile.target Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 44/56] Makefile.target: add (clean-/build-)guest-tests targets Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 45/56] tests/Makefile.include: add [build|clean|check]-tcg targets Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 46/56] tests/tcg: add run, diff, and skip helper macros Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 47/56] tests/tcg: override runners for broken tests Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 48/56] tests/tcg/i386: extend timeout for runcom test Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 49/56] tests: add top-level make dependency for docker builds Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 50/56] docker: docker.py use "version" to probe usage Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 51/56] docker: docker.py don't conflate checksums for extra_files Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 52/56] docker: docker.py add check sub-command Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 53/56] tests/Makefile: call sub-makes with SKIP_DOCKER_BUILD=1 Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 54/56] docker: docker.py adding age check command Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 55/56] tests/docker/Makefile.include: only force SID to NOCACHE if old Alex Bennée
2018-06-19 15:44 ` [Qemu-devel] [PULL 56/56] .travis.yml: add check-tcg test Alex Bennée
2018-06-20 10:43 ` [Qemu-devel] [PULL 00/56] add check-tcg and associated machinery Peter Maydell
2018-06-20 14:09   ` Alex Bennée
2018-06-20 14:13   ` Daniel P. Berrangé
2018-06-20 14:21 ` Peter Maydell
2018-06-20 14:34   ` Alex Bennée

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.