qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub)
@ 2024-07-05  8:40 Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 01/40] tests/lcitool: fix debian-i686-cross toolchain prefix Alex Bennée
                   ` (39 more replies)
  0 siblings, 40 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

Hi,

This is a grab bag of fixes and clean-ups as we swiftly approach the
soft freeze deadline. The i386 TCG fix has been dropped now rth's TCG
clean-ups have been merged. I've also taken a series from Richard that
built on Akihiko's TCG test cleanups. There is one new fix I came
across when doing some gcov testing.

The following still need review:

  plugins/lockstep: clean-up output
  plugins/lockstep: mention the one-insn-per-tb option
  plugins/lockstep: preserve sock_path
  test/plugins: preserve the instruction record over translations
  test/plugin: make insn plugin less noisy by default
  gitlab: don't bother with KVM for TCI builds
  hw/core: ensure kernel_end never gets used undefined
  testing: restore some testing for i686

Akihiko Odaki (6):
  tests/docker: Specify --userns keep-id for Podman
  tests/tcg/aarch64: Explicitly specify register width
  tests/tcg/aarch64: Fix irg operand type
  tests/tcg/aarch64: Do not use x constraint
  tests/tcg/arm: Fix fcvt result messages
  tests/tcg/arm: Manually register allocate half-precision numbers

Alex Bennée (11):
  tests/lcitool: fix debian-i686-cross toolchain prefix
  testing: restore some testing for i686
  tracepoints: move physmem trace points
  hw/core: ensure kernel_end never gets used undefined
  gitlab: don't bother with KVM for TCI builds
  test/plugin: make insn plugin less noisy by default
  test/plugins: preserve the instruction record over translations
  plugins/lockstep: preserve sock_path
  plugins/lockstep: make mixed-mode safe
  plugins/lockstep: mention the one-insn-per-tb option
  plugins/lockstep: clean-up output

Gustavo Romero (11):
  gdbstub: Clean up process_string_cmd
  gdbstub: Move GdbCmdParseEntry into a new header file
  gdbstub: Add support for target-specific stubs
  target/arm: Fix exception case in allocation_tag_mem_probe
  target/arm: Make some MTE helpers widely available
  target/arm: Factor out code for setting MTE TCF0 field
  gdbstub: Make hex conversion function non-internal
  gdbstub: Pass CPU context to command handler
  gdbstub: Use true to set cmd_startswith
  gdbstub: Add support for MTE in user mode
  tests/tcg/aarch64: Add MTE gdbstub tests

Philippe Mathieu-Daudé (3):
  plugins: Ensure vCPU index is assigned in init/exit hooks
  plugins: Free CPUPluginState before destroying vCPU state
  accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/

Richard Henderson (9):
  tests/tcg/minilib: Constify digits in print_num
  tests/tcg: Adjust variable defintion from cc-option
  tests/tcg/aarch64: Drop -fno-tree-loop-distribute-patterns
  tests/tcg/aarch64: Add -fno-integrated-as for sme
  tests/tcg/arm: Drop -N from LDFLAGS
  tests/tcg/arm: Use -fno-integrated-as for test-arm-iwmmxt
  tests/tcg/arm: Use -march and -mfpu for fcvt
  tests/tcg/arm: Use vmrs/vmsr instead of mcr/mrc
  linux-user/main: Suppress out-of-range comparison warning for clang

 configure                                     |   4 +
 configs/targets/aarch64-linux-user.mak        |   2 +-
 gdbstub/internals.h                           |  23 -
 include/gdbstub/commands.h                    | 103 +++
 include/qemu/plugin.h                         |   3 +
 linux-user/aarch64/mte_user_helper.h          |  32 +
 linux-user/aarch64/target_prctl.h             |  22 +-
 target/arm/internals.h                        |   6 +
 target/arm/tcg/mte_helper.h                   |  66 ++
 contrib/plugins/lockstep.c                    |  23 +-
 gdbstub/gdbstub.c                             | 341 ++++++----
 gdbstub/syscalls.c                            |   7 +-
 gdbstub/system.c                              |   7 +-
 gdbstub/user-target.c                         |  25 +-
 gdbstub/user.c                                |   7 +-
 hw/core/cpu-common.c                          |  14 +-
 hw/core/loader-fit.c                          |   2 +-
 linux-user/aarch64/mte_user_helper.c          |  35 +
 linux-user/main.c                             |   1 +
 linux-user/syscall.c                          |   9 -
 plugins/core.c                                |  10 +-
 system/physmem.c                              |   4 +-
 target/arm/cpu.c                              |   1 +
 target/arm/gdbstub.c                          |  46 ++
 target/arm/gdbstub64.c                        | 223 +++++++
 target/arm/tcg/mte_helper.c                   |  48 +-
 tests/plugin/insn.c                           | 112 +++-
 tests/tcg/aarch64/bti-1.c                     |   6 +-
 tests/tcg/aarch64/bti-3.c                     |   6 +-
 tests/tcg/aarch64/mte-1.c                     |   2 +-
 tests/tcg/aarch64/mte-8.c                     |  99 +++
 tests/tcg/arm/fcvt.c                          |  28 +-
 tests/tcg/minilib/printf.c                    |   2 +-
 .gitlab-ci.d/buildtest.yml                    |   2 +-
 .gitlab-ci.d/crossbuilds.yml                  |  13 +-
 gdb-xml/aarch64-mte.xml                       |  11 +
 linux-user/aarch64/meson.build                |   2 +
 system/trace-events                           |   6 +
 tests/docker/Makefile.include                 |   7 +-
 .../dockerfiles/debian-i686-cross.docker      |   2 +-
 tests/lcitool/refresh                         |   2 +-
 tests/tcg/Makefile.target                     |   2 +-
 tests/tcg/aarch64/Makefile.softmmu-target     |   4 +-
 tests/tcg/aarch64/Makefile.target             |  32 +-
 tests/tcg/aarch64/fcvt.ref                    | 604 +++++++++---------
 tests/tcg/aarch64/gdbstub/test-mte.py         |  86 +++
 tests/tcg/arm/Makefile.softmmu-target         |   4 +-
 tests/tcg/arm/Makefile.target                 |  12 +-
 tests/tcg/arm/fcvt.ref                        | 604 +++++++++---------
 trace-events                                  |   5 -
 50 files changed, 1771 insertions(+), 946 deletions(-)
 create mode 100644 include/gdbstub/commands.h
 create mode 100644 linux-user/aarch64/mte_user_helper.h
 create mode 100644 target/arm/tcg/mte_helper.h
 create mode 100644 linux-user/aarch64/mte_user_helper.c
 create mode 100644 tests/tcg/aarch64/mte-8.c
 create mode 100644 gdb-xml/aarch64-mte.xml
 create mode 100644 tests/tcg/aarch64/gdbstub/test-mte.py

-- 
2.39.2



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

* [PATCH v2 01/40] tests/lcitool: fix debian-i686-cross toolchain prefix
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 02/40] testing: restore some testing for i686 Alex Bennée
                   ` (38 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

I guess we never noticed and tried to build with this cross image. Fix
the toolchain prefix so we actually build 32 bit images.

Message-Id: <20240628124258.832466-2-alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/dockerfiles/debian-i686-cross.docker | 2 +-
 tests/lcitool/refresh                             | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/docker/dockerfiles/debian-i686-cross.docker b/tests/docker/dockerfiles/debian-i686-cross.docker
index f1e5b0b877..f4ef054a2e 100644
--- a/tests/docker/dockerfiles/debian-i686-cross.docker
+++ b/tests/docker/dockerfiles/debian-i686-cross.docker
@@ -169,7 +169,7 @@ endian = 'little'\n" > /usr/local/share/meson/cross/i686-linux-gnu && \
 
 ENV ABI "i686-linux-gnu"
 ENV MESON_OPTS "--cross-file=i686-linux-gnu"
-ENV QEMU_CONFIGURE_OPTS --cross-prefix=x86_64-linux-gnu-
+ENV QEMU_CONFIGURE_OPTS --cross-prefix=i686-linux-gnu-
 ENV DEF_TARGET_LIST x86_64-softmmu,x86_64-linux-user,i386-softmmu,i386-linux-user
 # As a final step configure the user (if env is defined)
 ARG USER
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index b25e3ac4dd..ac803e34f1 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -167,7 +167,7 @@ try:
 
     generate_dockerfile("debian-i686-cross", "debian-11",
                         cross="i686",
-                        trailer=cross_build("x86_64-linux-gnu-",
+                        trailer=cross_build("i686-linux-gnu-",
                                             "x86_64-softmmu,"
                                             "x86_64-linux-user,"
                                             "i386-softmmu,i386-linux-user"))
-- 
2.39.2



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

* [PATCH v2 02/40] testing: restore some testing for i686
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 01/40] tests/lcitool: fix debian-i686-cross toolchain prefix Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 03/40] tracepoints: move physmem trace points Alex Bennée
                   ` (37 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

The commit 4f9a8315e6 (gitlab-ci.d/crossbuilds: Drop the i386 system
emulation job) was a little too aggressive dropping testing for 32 bit
system builds. Partially revert but using the debian-i686 cross build
images this time as fedora has deprecated the 32 bit stuff.

As the SEV breakage gets in the way and its TCG issues we want to
catch I've added --disable-kvm to the build.

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

---
v2
  - add --disable-kvm
  - currently blocked by https://gitlab.com/qemu-project/qemu/-/issues/2413
---
 .gitlab-ci.d/crossbuilds.yml | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/.gitlab-ci.d/crossbuilds.yml b/.gitlab-ci.d/crossbuilds.yml
index 47bdb99b5b..3de0341afe 100644
--- a/.gitlab-ci.d/crossbuilds.yml
+++ b/.gitlab-ci.d/crossbuilds.yml
@@ -37,6 +37,17 @@ cross-arm64-kvm-only:
     IMAGE: debian-arm64-cross
     EXTRA_CONFIGURE_OPTS: --disable-tcg --without-default-features
 
+cross-i686-system:
+  extends:
+    - .cross_system_build_job
+    - .cross_test_artifacts
+  needs:
+    job: i686-debian-cross-container
+  variables:
+    IMAGE: debian-i686-cross
+    EXTRA_CONFIGURE_OPTS: --disable-kvm
+    MAKE_CHECK_ARGS: check-qtest
+
 cross-i686-user:
   extends:
     - .cross_user_build_job
-- 
2.39.2



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

* [PATCH v2 03/40] tracepoints: move physmem trace points
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 01/40] tests/lcitool: fix debian-i686-cross toolchain prefix Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 02/40] testing: restore some testing for i686 Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined Alex Bennée
                   ` (36 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

They don't need to be in the global trace-events file and can have a
local trace header. Also add address_space_map tracepoint for tracking
mapping behaviour.

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

---
v2
  - dropped qatomic_set which came from another patch
---
 system/physmem.c    | 4 +++-
 system/trace-events | 6 ++++++
 trace-events        | 5 -----
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/system/physmem.c b/system/physmem.c
index 261196cde0..14aa025d41 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -53,7 +53,7 @@
 #include "sysemu/hostmem.h"
 #include "sysemu/hw_accel.h"
 #include "sysemu/xen-mapcache.h"
-#include "trace/trace-root.h"
+#include "trace.h"
 
 #ifdef CONFIG_FALLOCATE_PUNCH_HOLE
 #include <linux/falloc.h>
@@ -3193,6 +3193,8 @@ void *address_space_map(AddressSpace *as,
     MemoryRegion *mr;
     FlatView *fv;
 
+    trace_address_space_map(as, addr, len, is_write, *(uint32_t *) &attrs);
+
     if (len == 0) {
         return NULL;
     }
diff --git a/system/trace-events b/system/trace-events
index 69c9044151..2ed1d59b1f 100644
--- a/system/trace-events
+++ b/system/trace-events
@@ -21,6 +21,12 @@ flatview_destroy(void *view, void *root) "%p (root %p)"
 flatview_destroy_rcu(void *view, void *root) "%p (root %p)"
 global_dirty_changed(unsigned int bitmask) "bitmask 0x%"PRIx32
 
+# physmem.c
+address_space_map(void *as, uint64_t addr, uint64_t len, bool is_write, uint32_t attrs) "as:%p addr 0x%"PRIx64":%"PRIx64" write:%d attrs:0x%x"
+find_ram_offset(uint64_t size, uint64_t offset) "size: 0x%" PRIx64 " @ 0x%" PRIx64
+find_ram_offset_loop(uint64_t size, uint64_t candidate, uint64_t offset, uint64_t next, uint64_t mingap) "trying size: 0x%" PRIx64 " @ 0x%" PRIx64 ", offset: 0x%" PRIx64" next: 0x%" PRIx64 " mingap: 0x%" PRIx64
+ram_block_discard_range(const char *rbname, void *hva, size_t length, bool need_madvise, bool need_fallocate, int ret) "%s@%p + 0x%zx: madvise: %d fallocate: %d ret: %d"
+
 # cpus.c
 vm_stop_flush_all(int ret) "ret %d"
 
diff --git a/trace-events b/trace-events
index dd318ed1af..9cb96f64c4 100644
--- a/trace-events
+++ b/trace-events
@@ -37,11 +37,6 @@ dma_complete(void *dbs, int ret, void *cb) "dbs=%p ret=%d cb=%p"
 dma_blk_cb(void *dbs, int ret) "dbs=%p ret=%d"
 dma_map_wait(void *dbs) "dbs=%p"
 
-# exec.c
-find_ram_offset(uint64_t size, uint64_t offset) "size: 0x%" PRIx64 " @ 0x%" PRIx64
-find_ram_offset_loop(uint64_t size, uint64_t candidate, uint64_t offset, uint64_t next, uint64_t mingap) "trying size: 0x%" PRIx64 " @ 0x%" PRIx64 ", offset: 0x%" PRIx64" next: 0x%" PRIx64 " mingap: 0x%" PRIx64
-ram_block_discard_range(const char *rbname, void *hva, size_t length, bool need_madvise, bool need_fallocate, int ret) "%s@%p + 0x%zx: madvise: %d fallocate: %d ret: %d"
-
 # job.c
 job_state_transition(void *job,  int ret, const char *legal, const char *s0, const char *s1) "job %p (ret: %d) attempting %s transition (%s-->%s)"
 job_apply_verb(void *job, const char *state, const char *verb, const char *legal) "job %p in state %s; applying verb %s (%s)"
-- 
2.39.2



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

* [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (2 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 03/40] tracepoints: move physmem trace points Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  9:49   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 05/40] tests/docker: Specify --userns keep-id for Podman Alex Bennée
                   ` (35 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

Really the problem here is the return values of fit_load_[kernel|fdt]() are a
little all over the place. However we don't want to somehow get
through not having set kernel_end and having it just be random unused
data.

The compiler complained on an --enable-gcov build:

  In file included from ../../hw/core/loader-fit.c:20:
  /home/alex/lsrc/qemu.git/include/qemu/osdep.h: In function ‘load_fit’:
  /home/alex/lsrc/qemu.git/include/qemu/osdep.h:486:45: error: ‘kernel_end’ may be used uninitialized [-Werror=maybe-uninitialized]
    486 | #define ROUND_UP(n, d) ROUND_DOWN((n) + (d) - 1, (d))
        |                                             ^
  ../../hw/core/loader-fit.c:270:12: note: ‘kernel_end’ was declared here
    270 |     hwaddr kernel_end;
        |            ^~~~~~~~~~

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 hw/core/loader-fit.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c
index 9f20007dbb..7ccc9d5fbc 100644
--- a/hw/core/loader-fit.c
+++ b/hw/core/loader-fit.c
@@ -267,7 +267,7 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
     const char *def_cfg_name;
     char path[FIT_LOADER_MAX_PATH];
     int itb_size, configs, cfg_off, off;
-    hwaddr kernel_end;
+    hwaddr kernel_end = 0;
     int ret;
 
     itb = load_device_tree(filename, &itb_size);
-- 
2.39.2



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

* [PATCH v2 05/40] tests/docker: Specify --userns keep-id for Podman
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (3 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 06/40] tests/tcg/minilib: Constify digits in print_num Alex Bennée
                   ` (34 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

Previously we are always specifying -u $(UID) to match the UID in the
container with one outside. This causes a problem with rootless Podman.

Rootless Podman remaps user IDs in the container to ones controllable
for the current user outside. The -u option instructs Podman to use
a specified UID in the container but does not affect the UID remapping.
Therefore, the UID in the container can be remapped to some other UID
outside the container. This can make the access to bind-mounted volumes
fail because the remapped UID mismatches with the owner of the
directories.

Replace -u $(UID) with --userns keep-id, which fixes the UID remapping.
This change is limited to Podman because Docker does not support
--userns keep-id.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240626-podman-v1-1-f8c8daf2bb0a@daynix.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/docker/Makefile.include | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 8df50a0ca0..708e3a72fb 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -207,7 +207,12 @@ docker-run: docker-qemu-src
 	$(call quiet-command,						\
 		$(RUNC) run 						\
 			--rm						\
-			$(if $(NOUSER),,-u $(UID)) 			\
+			$(if $(NOUSER),,				\
+				$(if $(filter docker,$(RUNC)),		\
+					-u $(UID),			\
+					--userns keep-id		\
+				)					\
+			) 						\
 			--security-opt seccomp=unconfined		\
 			$(if $(DEBUG),-ti,)				\
 			$(if $(NETWORK),$(if $(subst $(NETWORK),,1),--net=$(NETWORK)),--net=none) \
-- 
2.39.2



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

* [PATCH v2 06/40] tests/tcg/minilib: Constify digits in print_num
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (4 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 05/40] tests/docker: Specify --userns keep-id for Podman Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 07/40] tests/tcg: Adjust variable defintion from cc-option Alex Bennée
                   ` (33 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

This avoids a memcpy to the stack when compiled with clang.
Since we don't enable optimization, nor provide memcpy,
this results in an undefined symbol error at link time.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-2-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/minilib/printf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/tcg/minilib/printf.c b/tests/tcg/minilib/printf.c
index 10472b4f58..fb0189c2bb 100644
--- a/tests/tcg/minilib/printf.c
+++ b/tests/tcg/minilib/printf.c
@@ -27,7 +27,7 @@ static void print_str(char *s)
 
 static void print_num(unsigned long long value, int base)
 {
-    char digits[] = "0123456789abcdef";
+    static const char digits[] = "0123456789abcdef";
     char buf[32];
     int i = sizeof(buf) - 2, j;
 
-- 
2.39.2



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

* [PATCH v2 07/40] tests/tcg: Adjust variable defintion from cc-option
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (5 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 06/40] tests/tcg/minilib: Constify digits in print_num Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 08/40] tests/tcg/aarch64: Drop -fno-tree-loop-distribute-patterns Alex Bennée
                   ` (32 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

Define the variable to the compiler flag used, not "y".
This avoids replication of the compiler flag itself.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-3-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/Makefile.target                 |  2 +-
 tests/tcg/aarch64/Makefile.softmmu-target |  2 +-
 tests/tcg/aarch64/Makefile.target         | 15 ++++++++-------
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/tests/tcg/Makefile.target b/tests/tcg/Makefile.target
index f21be50d3b..cb8cfeb6da 100644
--- a/tests/tcg/Makefile.target
+++ b/tests/tcg/Makefile.target
@@ -49,7 +49,7 @@ quiet-command = $(call quiet-@,$2,$3)$1
 
 cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1
 cc-option = if $(call cc-test, $1); then \
-    echo "$(TARGET_PREFIX)$1 detected" && echo "$(strip $2)=y" >&3; else \
+    echo "$(TARGET_PREFIX)$1 detected" && echo "$(strip $2)=$(strip $1)" >&3; else \
     echo "$(TARGET_PREFIX)$1 not detected"; fi
 
 # $1 = test name, $2 = cmd, $3 = desc
diff --git a/tests/tcg/aarch64/Makefile.softmmu-target b/tests/tcg/aarch64/Makefile.softmmu-target
index 4b03ef602e..39d3f961c5 100644
--- a/tests/tcg/aarch64/Makefile.softmmu-target
+++ b/tests/tcg/aarch64/Makefile.softmmu-target
@@ -81,7 +81,7 @@ run-memory-replay: memory-replay run-memory-record
 EXTRA_RUNS+=run-memory-replay
 
 ifneq ($(CROSS_CC_HAS_ARMV8_3),)
-pauth-3: CFLAGS += -march=armv8.3-a
+pauth-3: CFLAGS += $(CROSS_CC_HAS_ARMV8_3)
 else
 pauth-3:
 	$(call skip-test, "BUILD of $@", "missing compiler support")
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index 4ecbca6a41..11ccde5579 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -32,17 +32,17 @@ config-cc.mak: Makefile
 
 ifneq ($(CROSS_CC_HAS_ARMV8_2),)
 AARCH64_TESTS += dcpop
-dcpop: CFLAGS += -march=armv8.2-a
+dcpop: CFLAGS += $(CROSS_CC_HAS_ARMV8_2)
 endif
 ifneq ($(CROSS_CC_HAS_ARMV8_5),)
 AARCH64_TESTS += dcpodp
-dcpodp: CFLAGS += -march=armv8.5-a
+dcpodp: CFLAGS += $(CROSS_CC_HAS_ARMV8_5)
 endif
 
 # Pauth Tests
 ifneq ($(CROSS_CC_HAS_ARMV8_3),)
 AARCH64_TESTS += pauth-1 pauth-2 pauth-4 pauth-5 test-2375
-pauth-%: CFLAGS += -march=armv8.3-a
+pauth-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_3)
 test-2375: CFLAGS += -march=armv8.3-a
 run-pauth-1: QEMU_OPTS += -cpu max
 run-pauth-2: QEMU_OPTS += -cpu max
@@ -55,7 +55,7 @@ endif
 # bti-1 tests the elf notes, so we require special compiler support.
 ifneq ($(CROSS_CC_HAS_ARMV8_BTI),)
 AARCH64_TESTS += bti-1 bti-3
-bti-1 bti-3: CFLAGS += -fno-stack-protector -mbranch-protection=standard
+bti-1 bti-3: CFLAGS += -fno-stack-protector $(CROSS_CC_HAS_ARMV8_BTI)
 bti-1 bti-3: LDFLAGS += -nostdlib
 endif
 # bti-2 tests PROT_BTI, so no special compiler support required.
@@ -64,12 +64,13 @@ AARCH64_TESTS += bti-2
 # MTE Tests
 ifneq ($(CROSS_CC_HAS_ARMV8_MTE),)
 AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7
-mte-%: CFLAGS += -march=armv8.5-a+memtag
+mte-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_MTE)
 endif
 
 # SME Tests
 ifneq ($(CROSS_AS_HAS_ARMV9_SME),)
 AARCH64_TESTS += sme-outprod1 sme-smopa-1 sme-smopa-2
+sme-outprod1 sme-smopa-1 sme-smopa-2: CFLAGS += $(CROSS_AS_HAS_ARMV9_SME)
 endif
 
 # System Registers Tests
@@ -99,7 +100,7 @@ TESTS += sha512-vector
 ifneq ($(CROSS_CC_HAS_SVE),)
 # SVE ioctl test
 AARCH64_TESTS += sve-ioctls
-sve-ioctls: CFLAGS+=-march=armv8.1-a+sve
+sve-ioctls: CFLAGS += $(CROSS_CC_HAS_SVE)
 
 sha512-sve: CFLAGS=-O3 -march=armv8.1-a+sve
 sha512-sve: sha512.c
@@ -134,7 +135,7 @@ endif
 
 ifneq ($(CROSS_CC_HAS_SVE2),)
 AARCH64_TESTS += test-826
-test-826: CFLAGS+=-march=armv8.1-a+sve2
+test-826: CFLAGS += $(CROSS_CC_HAS_SVE2)
 endif
 
 TESTS += $(AARCH64_TESTS)
-- 
2.39.2



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

* [PATCH v2 08/40] tests/tcg/aarch64: Drop -fno-tree-loop-distribute-patterns
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (6 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 07/40] tests/tcg: Adjust variable defintion from cc-option Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 09/40] tests/tcg/aarch64: Explicitly specify register width Alex Bennée
                   ` (31 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

This option is not supported by clang, and is not required
in order to get sve code generation with gcc 12.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-4-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/aarch64/Makefile.softmmu-target | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/tcg/aarch64/Makefile.softmmu-target b/tests/tcg/aarch64/Makefile.softmmu-target
index 39d3f961c5..dd6d595830 100644
--- a/tests/tcg/aarch64/Makefile.softmmu-target
+++ b/tests/tcg/aarch64/Makefile.softmmu-target
@@ -39,7 +39,7 @@ memory: CFLAGS+=-DCHECK_UNALIGNED=1
 memory-sve: memory.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
 	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
 
-memory-sve: CFLAGS+=-DCHECK_UNALIGNED=1 -march=armv8.1-a+sve -O3 -fno-tree-loop-distribute-patterns
+memory-sve: CFLAGS+=-DCHECK_UNALIGNED=1 -march=armv8.1-a+sve -O3
 
 TESTS+=memory-sve
 
-- 
2.39.2



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

* [PATCH v2 09/40] tests/tcg/aarch64: Explicitly specify register width
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (7 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 08/40] tests/tcg/aarch64: Drop -fno-tree-loop-distribute-patterns Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 10/40] tests/tcg/aarch64: Fix irg operand type Alex Bennée
                   ` (30 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

clang version 18.1.6 assumes a register is 64-bit by default and
complains if a 32-bit value is given. Explicitly specify register width
when passing a 32-bit value.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20240627-tcg-v2-3-1690a813348e@daynix.com>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-5-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/aarch64/bti-1.c | 6 +++---
 tests/tcg/aarch64/bti-3.c | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/tests/tcg/aarch64/bti-1.c b/tests/tcg/aarch64/bti-1.c
index 99a879af23..1fada8108d 100644
--- a/tests/tcg/aarch64/bti-1.c
+++ b/tests/tcg/aarch64/bti-1.c
@@ -17,15 +17,15 @@ static void skip2_sigill(int sig, siginfo_t *info, ucontext_t *uc)
 #define BTI_JC    "hint #38"
 
 #define BTYPE_1(DEST) \
-    asm("mov %0,#1; adr x16, 1f; br x16; 1: " DEST "; mov %0,#0" \
+    asm("mov %w0,#1; adr x16, 1f; br x16; 1: " DEST "; mov %w0,#0" \
         : "=r"(skipped) : : "x16")
 
 #define BTYPE_2(DEST) \
-    asm("mov %0,#1; adr x16, 1f; blr x16; 1: " DEST "; mov %0,#0" \
+    asm("mov %w0,#1; adr x16, 1f; blr x16; 1: " DEST "; mov %w0,#0" \
         : "=r"(skipped) : : "x16", "x30")
 
 #define BTYPE_3(DEST) \
-    asm("mov %0,#1; adr x15, 1f; br x15; 1: " DEST "; mov %0,#0" \
+    asm("mov %w0,#1; adr x15, 1f; br x15; 1: " DEST "; mov %w0,#0" \
         : "=r"(skipped) : : "x15")
 
 #define TEST(WHICH, DEST, EXPECT) \
diff --git a/tests/tcg/aarch64/bti-3.c b/tests/tcg/aarch64/bti-3.c
index 8c534c09d7..6a3bd037bc 100644
--- a/tests/tcg/aarch64/bti-3.c
+++ b/tests/tcg/aarch64/bti-3.c
@@ -11,15 +11,15 @@ static void skip2_sigill(int sig, siginfo_t *info, ucontext_t *uc)
 }
 
 #define BTYPE_1() \
-    asm("mov %0,#1; adr x16, 1f; br x16; 1: hint #25; mov %0,#0" \
+    asm("mov %w0,#1; adr x16, 1f; br x16; 1: hint #25; mov %w0,#0" \
         : "=r"(skipped) : : "x16", "x30")
 
 #define BTYPE_2() \
-    asm("mov %0,#1; adr x16, 1f; blr x16; 1: hint #25; mov %0,#0" \
+    asm("mov %w0,#1; adr x16, 1f; blr x16; 1: hint #25; mov %w0,#0" \
         : "=r"(skipped) : : "x16", "x30")
 
 #define BTYPE_3() \
-    asm("mov %0,#1; adr x15, 1f; br x15; 1: hint #25; mov %0,#0" \
+    asm("mov %w0,#1; adr x15, 1f; br x15; 1: hint #25; mov %w0,#0" \
         : "=r"(skipped) : : "x15", "x30")
 
 #define TEST(WHICH, EXPECT) \
-- 
2.39.2



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

* [PATCH v2 10/40] tests/tcg/aarch64: Fix irg operand type
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (8 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 09/40] tests/tcg/aarch64: Explicitly specify register width Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 11/40] tests/tcg/aarch64: Do not use x constraint Alex Bennée
                   ` (29 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

irg expects 64-bit integers. Passing a 32-bit integer results in
compilation failure with clang version 18.1.6.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240627-tcg-v2-4-1690a813348e@daynix.com>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-6-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/aarch64/mte-1.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/tcg/aarch64/mte-1.c b/tests/tcg/aarch64/mte-1.c
index 88dcd617ad..146cad4a04 100644
--- a/tests/tcg/aarch64/mte-1.c
+++ b/tests/tcg/aarch64/mte-1.c
@@ -15,7 +15,7 @@ int main(int ac, char **av)
     enable_mte(PR_MTE_TCF_NONE);
     p0 = alloc_mte_mem(sizeof(*p0));
 
-    asm("irg %0,%1,%2" : "=r"(p1) : "r"(p0), "r"(1));
+    asm("irg %0,%1,%2" : "=r"(p1) : "r"(p0), "r"(1l));
     assert(p1 != p0);
     asm("subp %0,%1,%2" : "=r"(c) : "r"(p0), "r"(p1));
     assert(c == 0);
-- 
2.39.2



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

* [PATCH v2 11/40] tests/tcg/aarch64: Do not use x constraint
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (9 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 10/40] tests/tcg/aarch64: Fix irg operand type Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 12/40] tests/tcg/aarch64: Add -fno-integrated-as for sme Alex Bennée
                   ` (28 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

clang version 18.1.6 does not support x constraint for AArch64.
Use w instead.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240627-tcg-v2-5-1690a813348e@daynix.com>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-7-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/fcvt.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
index 7ac47b564e..f631197287 100644
--- a/tests/tcg/arm/fcvt.c
+++ b/tests/tcg/arm/fcvt.c
@@ -126,7 +126,7 @@ static void convert_single_to_half(void)
         asm("vcvtb.f16.f32 %0, %1" : "=t" (output) : "x" (input));
 #else
         uint16_t output;
-        asm("fcvt %h0, %s1" : "=w" (output) : "x" (input));
+        asm("fcvt %h0, %s1" : "=w" (output) : "w" (input));
 #endif
         print_half_number(i, output);
     }
@@ -149,7 +149,7 @@ static void convert_single_to_double(void)
 #if defined(__arm__)
         asm("vcvt.f64.f32 %P0, %1" : "=w" (output) : "t" (input));
 #else
-        asm("fcvt %d0, %s1" : "=w" (output) : "x" (input));
+        asm("fcvt %d0, %s1" : "=w" (output) : "w" (input));
 #endif
         print_double_number(i, output);
     }
@@ -244,7 +244,7 @@ static void convert_double_to_half(void)
         /* asm("vcvtb.f16.f64 %0, %P1" : "=t" (output) : "x" (input)); */
         output = input;
 #else
-        asm("fcvt %h0, %d1" : "=w" (output) : "x" (input));
+        asm("fcvt %h0, %d1" : "=w" (output) : "w" (input));
 #endif
         print_half_number(i, output);
     }
@@ -267,7 +267,7 @@ static void convert_double_to_single(void)
 #if defined(__arm__)
         asm("vcvt.f32.f64 %0, %P1" : "=w" (output) : "x" (input));
 #else
-        asm("fcvt %s0, %d1" : "=w" (output) : "x" (input));
+        asm("fcvt %s0, %d1" : "=w" (output) : "w" (input));
 #endif
 
         print_single_number(i, output);
@@ -335,7 +335,7 @@ static void convert_half_to_double(void)
         /* asm("vcvtb.f64.f16 %P0, %1" : "=w" (output) : "t" (input)); */
         output = input;
 #else
-        asm("fcvt %d0, %h1" : "=w" (output) : "x" (input));
+        asm("fcvt %d0, %h1" : "=w" (output) : "w" (input));
 #endif
         print_double_number(i, output);
     }
@@ -357,7 +357,7 @@ static void convert_half_to_single(void)
 #if defined(__arm__)
         asm("vcvtb.f32.f16 %0, %1" : "=w" (output) : "x" ((uint32_t)input));
 #else
-        asm("fcvt %s0, %h1" : "=w" (output) : "x" (input));
+        asm("fcvt %s0, %h1" : "=w" (output) : "w" (input));
 #endif
         print_single_number(i, output);
     }
@@ -380,7 +380,7 @@ static void convert_half_to_integer(void)
         /* asm("vcvt.s32.f16 %0, %1" : "=t" (output) : "t" (input)); v8.2*/
         output = input;
 #else
-        asm("fcvt %s0, %h1" : "=w" (output) : "x" (input));
+        asm("fcvt %s0, %h1" : "=w" (output) : "w" (input));
 #endif
         print_int64(i, output);
     }
-- 
2.39.2



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

* [PATCH v2 12/40] tests/tcg/aarch64: Add -fno-integrated-as for sme
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (10 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 11/40] tests/tcg/aarch64: Do not use x constraint Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 13/40] tests/tcg/arm: Fix fcvt result messages Alex Bennée
                   ` (27 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

The only use of SME is inline assembly.  Both gcc and clang only
support SME with very recent releases; by deferring detection to
the assembler we get better test coverage.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-8-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/aarch64/Makefile.target | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index 11ccde5579..ad1774c2ce 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -20,6 +20,7 @@ run-fcvt: fcvt
 
 config-cc.mak: Makefile
 	$(quiet-@)( \
+	    fnia=`$(call cc-test,-fno-integrated-as) && echo -fno-integrated-as`; \
 	    $(call cc-option,-march=armv8.1-a+sve,          CROSS_CC_HAS_SVE); \
 	    $(call cc-option,-march=armv8.1-a+sve2,         CROSS_CC_HAS_SVE2); \
 	    $(call cc-option,-march=armv8.2-a,              CROSS_CC_HAS_ARMV8_2); \
@@ -27,7 +28,7 @@ config-cc.mak: Makefile
 	    $(call cc-option,-march=armv8.5-a,              CROSS_CC_HAS_ARMV8_5); \
 	    $(call cc-option,-mbranch-protection=standard,  CROSS_CC_HAS_ARMV8_BTI); \
 	    $(call cc-option,-march=armv8.5-a+memtag,       CROSS_CC_HAS_ARMV8_MTE); \
-	    $(call cc-option,-Wa$(COMMA)-march=armv9-a+sme, CROSS_AS_HAS_ARMV9_SME)) 3> config-cc.mak
+	    $(call cc-option,-Wa$(COMMA)-march=armv9-a+sme $$fnia, CROSS_AS_HAS_ARMV9_SME)) 3> config-cc.mak
 -include config-cc.mak
 
 ifneq ($(CROSS_CC_HAS_ARMV8_2),)
-- 
2.39.2



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

* [PATCH v2 13/40] tests/tcg/arm: Fix fcvt result messages
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (11 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 12/40] tests/tcg/aarch64: Add -fno-integrated-as for sme Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 14/40] tests/tcg/arm: Drop -N from LDFLAGS Alex Bennée
                   ` (26 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

The test cases for "converting double-precision to single-precision"
emits float but the result variable was typed as uint32_t and corrupted
the printed values. Propertly type it as float.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Fixes: 8ec8a55e3fc9 ("tests/tcg/arm: add fcvt test cases for AArch32/64")
Message-Id: <20240627-tcg-v2-1-1690a813348e@daynix.com>
[rth: Update arm ref file as well]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-9-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/fcvt.c       |   2 +-
 tests/tcg/aarch64/fcvt.ref | 604 ++++++++++++++++++-------------------
 tests/tcg/arm/fcvt.ref     | 604 ++++++++++++++++++-------------------
 3 files changed, 605 insertions(+), 605 deletions(-)

diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
index f631197287..157790e679 100644
--- a/tests/tcg/arm/fcvt.c
+++ b/tests/tcg/arm/fcvt.c
@@ -258,7 +258,7 @@ static void convert_double_to_single(void)
 
     for (i = 0; i < ARRAY_SIZE(double_numbers); ++i) {
         double input = double_numbers[i].d;
-        uint32_t output;
+        float output;
 
         feclearexcept(FE_ALL_EXCEPT);
 
diff --git a/tests/tcg/aarch64/fcvt.ref b/tests/tcg/aarch64/fcvt.ref
index e7af24dc58..2726b41063 100644
--- a/tests/tcg/aarch64/fcvt.ref
+++ b/tests/tcg/aarch64/fcvt.ref
@@ -211,45 +211,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -257,41 +257,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -574,87 +574,87 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023259404089913006e-08 / 0x33000001  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96046021428264793940e-08 / 0x337ffff4  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+16 SINGLE: 6.09756025369279086590e-05 / 0x387fc00e  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+17 SINGLE: 6.10352071817032992840e-05 / 0x38800007  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
 20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
-20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+20 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
-21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
-22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828198432922363282e+00 / 0x402df855  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -937,45 +937,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -1.40129846432481707093e-45 / 0x80000001  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -983,41 +983,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -1300,45 +1300,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -1346,41 +1346,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -1845,45 +1845,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -1891,41 +1891,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2208,87 +2208,87 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023259404089913006e-08 / 0x33000001  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96046021428264793940e-08 / 0x337ffff4  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+16 SINGLE: 6.09756025369279086590e-05 / 0x387fc00e  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+17 SINGLE: 6.10352071817032992840e-05 / 0x38800007  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
 20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
-20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+20 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
-21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
-22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828198432922363282e+00 / 0x402df855  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2571,45 +2571,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -1.40129846432481707093e-45 / 0x80000001  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -2617,41 +2617,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2934,45 +2934,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -2980,41 +2980,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
diff --git a/tests/tcg/arm/fcvt.ref b/tests/tcg/arm/fcvt.ref
index f052b6d7e5..8e007c3345 100644
--- a/tests/tcg/arm/fcvt.ref
+++ b/tests/tcg/arm/fcvt.ref
@@ -211,45 +211,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -257,41 +257,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -574,87 +574,87 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023259404089913006e-08 / 0x33000001  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96046021428264793940e-08 / 0x337ffff4  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+16 SINGLE: 6.09756025369279086590e-05 / 0x387fc00e  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+17 SINGLE: 6.10352071817032992840e-05 / 0x38800007  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
 20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
-20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+20 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
-21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
-22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828198432922363282e+00 / 0x402df855  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -937,45 +937,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -1.40129846432481707093e-45 / 0x80000001  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -983,41 +983,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -1300,45 +1300,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -1346,41 +1346,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -nan / 0xffffe000  (0 => OK)
@@ -1845,45 +1845,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005935e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015673e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851006e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -1891,41 +1891,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2208,87 +2208,87 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766502400000000000e+09 / 0x4f730c3b  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962457600000000000e+09 / 0x4f71605e  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750797e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013061e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638080000000000000e+08 / 0x4e4c0001  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023259404089913006e-08 / 0x33000001  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015662e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026624000000000000e+08 / 0x4e4e0000  (0x10 =>    INEXACT )
+15 SINGLE: 5.96046021428264793940e-08 / 0x337ffff4  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994299e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896384000000000000e+08 / 0x4e61ff01  (0x10 =>    INEXACT )
+16 SINGLE: 6.09756025369279086590e-05 / 0x387fc00e  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013665e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912768000000000000e+08 / 0x4e620001  (0x10 =>    INEXACT )
+17 SINGLE: 6.10352071817032992840e-05 / 0x38800007  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (0 => OK)
 20 DOUBLE: 2.22507385850720138310e-308 / 0x000010000000000000 (0 => OK)
-20 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+20 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 21 DOUBLE: 1.37899728486072282844e-308 / 0x000009ea82a2287680 (0 => OK)
-21 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+21 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 22 DOUBLE: 1.49147387366816238764e-308 / 0x00000ab98fba843210 (0 => OK)
-22 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0x18 =>  UNDERFLOW  INEXACT )
+22 SINGLE: 1.40129846432481707093e-45 / 0x00000001  (0x18 =>  UNDERFLOW  INEXACT )
 23 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-23 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509080e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675456000000000000e+09 / 0x4e805bf1  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828198432922363282e+00 / 0x402df855  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311600e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07853004800000000000e+09 / 0x4e809220  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159274101257324219e+00 / 0x40490fdb  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32540006400000000000e+09 / 0x4e9e0000  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859812e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859812e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570815e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: inf / 0x7f800000  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2571,45 +2571,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570815e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -inf / 0xff800000  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859812e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859812e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007530e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11100004769645909791e+31 / 0xf30c3a59  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999085e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11100003258488635273e+30 / 0xf1605d5b  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138310e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -1.40129846432481707093e-45 / 0x80000001  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750797e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750797e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -2617,41 +2617,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
@@ -2934,45 +2934,45 @@ Converting double-precision to half-precision
 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)
+00 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 01 DOUBLE: -nan / 0x00fff8000000000000 (0 => OK)
-01 SINGLE: 4.29077299200000000000e+09 / 0x4f7fc000  (0 => OK)
+01 SINGLE: -nan / 0xffc00000  (0 => OK)
 02 DOUBLE: -inf / 0x00fff0000000000000 (0 => OK)
-02 SINGLE: 4.28657868800000000000e+09 / 0x4f7f8000  (0 => OK)
+02 SINGLE: -inf / 0xff800000  (0 => OK)
 03 DOUBLE: -1.79769313486231570814e+308 / 0x00ffefffffffffffff (0 => OK)
-03 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x14 => OVERFLOW   INEXACT )
+03 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0x14 => OVERFLOW   INEXACT )
 04 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-04 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+04 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 05 DOUBLE: -3.40282346638528859811e+38 / 0x00c7efffffe0000000 (0 => OK)
-05 SINGLE: 4.28657843200000000000e+09 / 0x4f7f7fff  (0x10 =>    INEXACT )
+05 SINGLE: -3.40282346638528859811e+38 / 0xff7fffff  (0 => OK)
 06 DOUBLE: -1.11100000000000007529e+31 / 0x00c661874b135ff654 (0 => OK)
-06 SINGLE: 4.07766476800000000000e+09 / 0x4f730c3a  (0x10 =>    INEXACT )
+06 SINGLE: -1.11099992680387713644e+31 / 0xf30c3a58  (0x10 =>    INEXACT )
 07 DOUBLE: -1.11099999999999999084e+30 / 0x00c62c0bab523323b9 (0 => OK)
-07 SINGLE: 4.04962432000000000000e+09 / 0x4f71605d  (0x10 =>    INEXACT )
+07 SINGLE: -1.11099995702702262681e+30 / 0xf1605d5a  (0x10 =>    INEXACT )
 08 DOUBLE: -2.00000000000000000000e+00 / 0x00c000000000000000 (0 => OK)
-08 SINGLE: 3.22122547200000000000e+09 / 0x4f400000  (0 => OK)
+08 SINGLE: -2.00000000000000000000e+00 / 0xc0000000  (0 => OK)
 09 DOUBLE: -1.00000000000000000000e+00 / 0x00bff0000000000000 (0 => OK)
-09 SINGLE: 3.21283686400000000000e+09 / 0x4f3f8000  (0 => OK)
+09 SINGLE: -1.00000000000000000000e+00 / 0xbf800000  (0 => OK)
 10 DOUBLE: -2.22507385850720138309e-308 / 0x008010000000000000 (0 => OK)
-10 SINGLE: 2.14748364800000000000e+09 / 0x4f000000  (0x18 =>  UNDERFLOW  INEXACT )
+10 SINGLE: -0.00000000000000000000e+00 / 0x80000000  (0x18 =>  UNDERFLOW  INEXACT )
 11 DOUBLE: -1.17549435082228750796e-38 / 0x00b810000000000000 (0 => OK)
-11 SINGLE: 2.15587225600000000000e+09 / 0x4f008000  (0 => OK)
+11 SINGLE: -1.17549435082228750796e-38 / 0x80800000  (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)
+13 SINGLE: 1.17549435082228750796e-38 / 0x00800000  (0 => OK)
 14 DOUBLE: 2.98023224000000013060e-08 / 0x003e600000001c5f68 (0 => OK)
-14 SINGLE: 8.55638016000000000000e+08 / 0x4e4c0000  (0x10 =>    INEXACT )
+14 SINGLE: 2.98023223876953125000e-08 / 0x33000000  (0x10 =>    INEXACT )
 15 DOUBLE: 5.96046000000000015661e-08 / 0x003e6ffffe6cb2fa82 (0 => OK)
-15 SINGLE: 8.64026560000000000000e+08 / 0x4e4dffff  (0x10 =>    INEXACT )
+15 SINGLE: 5.96045985901128005934e-08 / 0x337ffff3  (0x10 =>    INEXACT )
 16 DOUBLE: 6.09755999999999994298e-05 / 0x003f0ff801a9af58a1 (0 => OK)
-16 SINGLE: 9.47896320000000000000e+08 / 0x4e61ff00  (0x10 =>    INEXACT )
+16 SINGLE: 6.09755988989491015672e-05 / 0x387fc00d  (0x10 =>    INEXACT )
 17 DOUBLE: 6.10352000000000013664e-05 / 0x003f100000c06a1ef5 (0 => OK)
-17 SINGLE: 9.47912704000000000000e+08 / 0x4e620000  (0x10 =>    INEXACT )
+17 SINGLE: 6.10351999057456851005e-05 / 0x38800006  (0x10 =>    INEXACT )
 18 DOUBLE: 1.00000000000000000000e+00 / 0x003ff0000000000000 (0 => OK)
-18 SINGLE: 1.06535321600000000000e+09 / 0x4e7e0000  (0 => OK)
+18 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 19 DOUBLE: 1.00097656250000000000e+00 / 0x003ff0040000000000 (0 => OK)
-19 SINGLE: 1.06536140800000000000e+09 / 0x4e7e0080  (0 => OK)
+19 SINGLE: 1.00097656250000000000e+00 / 0x3f802000  (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)
@@ -2980,41 +2980,41 @@ Converting double-precision to single-precision
 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)
+23 SINGLE: 1.00000000000000000000e+00 / 0x3f800000  (0 => OK)
 24 DOUBLE: 2.00000000000000000000e+00 / 0x004000000000000000 (0 => OK)
-24 SINGLE: 1.07374182400000000000e+09 / 0x4e800000  (0 => OK)
+24 SINGLE: 2.00000000000000000000e+00 / 0x40000000  (0 => OK)
 25 DOUBLE: 2.71828182845904509079e+00 / 0x004005bf0a8b145769 (0 => OK)
-25 SINGLE: 1.07675443200000000000e+09 / 0x4e805bf0  (0x10 =>    INEXACT )
+25 SINGLE: 2.71828174591064453125e+00 / 0x402df854  (0x10 =>    INEXACT )
 26 DOUBLE: 3.14159265358979311599e+00 / 0x00400921fb54442d18 (0 => OK)
-26 SINGLE: 1.07852992000000000000e+09 / 0x4e80921f  (0x10 =>    INEXACT )
+26 SINGLE: 3.14159250259399414062e+00 / 0x40490fda  (0x10 =>    INEXACT )
 27 DOUBLE: 6.55030000000000000000e+04 / 0x0040effbe000000000 (0 => OK)
-27 SINGLE: 1.19956249600000000000e+09 / 0x4e8effbe  (0 => OK)
+27 SINGLE: 6.55030000000000000000e+04 / 0x477fdf00  (0 => OK)
 28 DOUBLE: 6.55040000000000000000e+04 / 0x0040effc0000000000 (0 => OK)
-28 SINGLE: 1.19956275200000000000e+09 / 0x4e8effc0  (0 => OK)
+28 SINGLE: 6.55040000000000000000e+04 / 0x477fe000  (0 => OK)
 29 DOUBLE: 6.55050000000000000000e+04 / 0x0040effc2000000000 (0 => OK)
-29 SINGLE: 1.19956300800000000000e+09 / 0x4e8effc2  (0 => OK)
+29 SINGLE: 6.55050000000000000000e+04 / 0x477fe100  (0 => OK)
 30 DOUBLE: 1.31007000000000000000e+05 / 0x0040fffbf000000000 (0 => OK)
-30 SINGLE: 1.20795123200000000000e+09 / 0x4e8fffbf  (0 => OK)
+30 SINGLE: 1.31007000000000000000e+05 / 0x47ffdf80  (0 => OK)
 31 DOUBLE: 1.31008000000000000000e+05 / 0x0040fffc0000000000 (0 => OK)
-31 SINGLE: 1.20795136000000000000e+09 / 0x4e8fffc0  (0 => OK)
+31 SINGLE: 1.31008000000000000000e+05 / 0x47ffe000  (0 => OK)
 32 DOUBLE: 1.31009000000000000000e+05 / 0x0040fffc1000000000 (0 => OK)
-32 SINGLE: 1.20795148800000000000e+09 / 0x4e8fffc1  (0 => OK)
+32 SINGLE: 1.31009000000000000000e+05 / 0x47ffe080  (0 => OK)
 33 DOUBLE: 2.14748364700000000000e+09 / 0x0041dfffffffc00000 (0 => OK)
-33 SINGLE: 1.32539993600000000000e+09 / 0x4e9dffff  (0x10 =>    INEXACT )
+33 SINGLE: 2.14748352000000000000e+09 / 0x4effffff  (0x10 =>    INEXACT )
 34 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-34 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+34 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 35 DOUBLE: 3.40282346638528859811e+38 / 0x0047efffffe0000000 (0 => OK)
-35 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x10 =>    INEXACT )
+35 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0 => OK)
 36 DOUBLE: 1.79769313486231570814e+308 / 0x007fefffffffffffff (0 => OK)
-36 SINGLE: 2.13909491200000000000e+09 / 0x4efeffff  (0x14 => OVERFLOW   INEXACT )
+36 SINGLE: 3.40282346638528859811e+38 / 0x7f7fffff  (0x14 => OVERFLOW   INEXACT )
 37 DOUBLE: inf / 0x007ff0000000000000 (0 => OK)
-37 SINGLE: 2.13909504000000000000e+09 / 0x4eff0000  (0 => OK)
+37 SINGLE: inf / 0x7f800000  (0 => OK)
 38 DOUBLE: nan / 0x007ff8000000000000 (0 => OK)
-38 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0 => OK)
+38 SINGLE: nan / 0x7fc00000  (0 => OK)
 39 DOUBLE: nan / 0x007ff0000000000001 (0 => OK)
-39 SINGLE: 2.14328934400000000000e+09 / 0x4eff8000  (0x1 =>     INVALID)
+39 SINGLE: nan / 0x7fc00000  (0x1 =>     INVALID)
 40 DOUBLE: nan / 0x007ff4000000000000 (0 => OK)
-40 SINGLE: 2.14538649600000000000e+09 / 0x4effc000  (0x1 =>     INVALID)
+40 SINGLE: nan / 0x7fe00000  (0x1 =>     INVALID)
 Converting half-precision to single-precision
 00   HALF: 0xffff  (0 => OK)
 00 SINGLE: -1.31008000000000000000e+05 / 0xc7ffe000  (0 => OK)
-- 
2.39.2



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

* [PATCH v2 14/40] tests/tcg/arm: Drop -N from LDFLAGS
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (12 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 13/40] tests/tcg/arm: Fix fcvt result messages Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 15/40] tests/tcg/arm: Use -fno-integrated-as for test-arm-iwmmxt Alex Bennée
                   ` (25 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

This is redudant with a linker script, and is not
supported by clang.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-10-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/Makefile.softmmu-target | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/tcg/arm/Makefile.softmmu-target b/tests/tcg/arm/Makefile.softmmu-target
index 39e01ce49d..547063c08c 100644
--- a/tests/tcg/arm/Makefile.softmmu-target
+++ b/tests/tcg/arm/Makefile.softmmu-target
@@ -13,7 +13,7 @@ VPATH 		+= $(ARM_SRC)
 test-armv6m-undef: test-armv6m-undef.S
 	$(CC) -mcpu=cortex-m0 -mfloat-abi=soft \
 		-Wl,--build-id=none -x assembler-with-cpp \
-		$< -o $@ -nostdlib -N -static \
+		$< -o $@ -nostdlib -static \
 		-T $(ARM_SRC)/$@.ld
 
 run-test-armv6m-undef: QEMU_OPTS=-semihosting-config enable=on,target=native,chardev=output -M microbit -kernel
@@ -30,7 +30,7 @@ CRT_PATH=$(ARM_SRC)
 LINK_SCRIPT=$(ARM_SRC)/kernel.ld
 LDFLAGS=-Wl,-T$(LINK_SCRIPT)
 CFLAGS+=-nostdlib -ggdb -O0 $(MINILIB_INC)
-LDFLAGS+=-static -nostdlib -N $(CRT_OBJS) $(MINILIB_OBJS) -lgcc
+LDFLAGS+=-static -nostdlib $(CRT_OBJS) $(MINILIB_OBJS) -lgcc
 
 # building head blobs
 .PRECIOUS: $(CRT_OBJS)
-- 
2.39.2



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

* [PATCH v2 15/40] tests/tcg/arm: Use -fno-integrated-as for test-arm-iwmmxt
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (13 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 14/40] tests/tcg/arm: Drop -N from LDFLAGS Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 16/40] tests/tcg/arm: Manually register allocate half-precision numbers Alex Bennée
                   ` (24 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

Clang does not support IWMXT instructions.
Fall back to the external assembler.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-11-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/Makefile.target | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index 0a1965fce7..95f891bf8c 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -8,6 +8,11 @@ ARM_SRC=$(SRC_PATH)/tests/tcg/arm
 # Set search path for all sources
 VPATH 		+= $(ARM_SRC)
 
+config-cc.mak: Makefile
+	$(quiet-@)( \
+	    $(call cc-option,-fno-integrated-as, CROSS_CC_HAS_FNIA)) 3> config-cc.mak
+-include config-cc.mak
+
 float_madds: CFLAGS+=-mfpu=neon-vfpv4
 
 # Basic Hello World
@@ -17,7 +22,8 @@ hello-arm: LDFLAGS+=-nostdlib
 
 # IWMXT floating point extensions
 ARM_TESTS += test-arm-iwmmxt
-test-arm-iwmmxt: CFLAGS+=-marm -march=iwmmxt -mabi=aapcs -mfpu=fpv4-sp-d16
+# Clang assembler does not support IWMXT, so use the external assembler.
+test-arm-iwmmxt: CFLAGS += -marm -march=iwmmxt -mabi=aapcs -mfpu=fpv4-sp-d16 $(CROSS_CC_HAS_FNIA)
 test-arm-iwmmxt: test-arm-iwmmxt.S
 	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
 
-- 
2.39.2



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

* [PATCH v2 16/40] tests/tcg/arm: Manually register allocate half-precision numbers
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (14 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 15/40] tests/tcg/arm: Use -fno-integrated-as for test-arm-iwmmxt Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 17/40] tests/tcg/arm: Use -march and -mfpu for fcvt Alex Bennée
                   ` (23 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Akihiko Odaki <akihiko.odaki@daynix.com>

Clang does not allow specifying an integer as the value of a single
precision register.  Explicitly move value from a general register.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
[rth: Use one single inline asm block.]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-12-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/fcvt.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
index 157790e679..d8c61cd29f 100644
--- a/tests/tcg/arm/fcvt.c
+++ b/tests/tcg/arm/fcvt.c
@@ -355,7 +355,12 @@ static void convert_half_to_single(void)
 
         print_half_number(i, input);
 #if defined(__arm__)
-        asm("vcvtb.f32.f16 %0, %1" : "=w" (output) : "x" ((uint32_t)input));
+        /*
+         * Clang refuses to allocate an integer to a fp register.
+         * Perform the move from a general register by hand.
+         */
+        asm("vmov %0, %1\n\t"
+            "vcvtb.f32.f16 %0, %0" : "=w" (output) : "r" (input));
 #else
         asm("fcvt %s0, %h1" : "=w" (output) : "w" (input));
 #endif
-- 
2.39.2



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

* [PATCH v2 17/40] tests/tcg/arm: Use -march and -mfpu for fcvt
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (15 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 16/40] tests/tcg/arm: Manually register allocate half-precision numbers Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 18/40] tests/tcg/arm: Use vmrs/vmsr instead of mcr/mrc Alex Bennée
                   ` (22 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

Clang requires the architecture to be set properly
in order to assemble the half-precision instructions.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-13-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/Makefile.target | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index 95f891bf8c..8e287191af 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -29,8 +29,8 @@ test-arm-iwmmxt: test-arm-iwmmxt.S
 
 # Float-convert Tests
 ARM_TESTS += fcvt
-fcvt: LDFLAGS+=-lm
-# fcvt: CFLAGS+=-march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+fcvt: LDFLAGS += -lm
+fcvt: CFLAGS += -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
 run-fcvt: fcvt
 	$(call run-test,fcvt,$(QEMU) $<)
 	$(call diff-out,fcvt,$(ARM_SRC)/fcvt.ref)
-- 
2.39.2



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

* [PATCH v2 18/40] tests/tcg/arm: Use vmrs/vmsr instead of mcr/mrc
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (16 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 17/40] tests/tcg/arm: Use -march and -mfpu for fcvt Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 19/40] linux-user/main: Suppress out-of-range comparison warning for clang Alex Bennée
                   ` (21 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

Clang 14 generates

/home/rth/qemu/src/tests/tcg/arm/fcvt.c:431:9: error: invalid operand for instruction
    asm("mrc p10, 7, r1, cr1, cr0, 0\n\t"
        ^
<inline asm>:1:6: note: instantiated into assembly here
        mrc p10, 7, r1, cr1, cr0, 0
            ^
/home/rth/qemu/src/tests/tcg/arm/fcvt.c:432:32: error: invalid operand for instruction
        "orr r1, r1, %[flags]\n\t"
                               ^
<inline asm>:3:6: note: instantiated into assembly here
        mcr p10, 7, r1, cr1, cr0, 0
            ^

This is perhaps a clang bug, but using the neon mnemonic is clearer.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-14-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/tcg/arm/fcvt.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tests/tcg/arm/fcvt.c b/tests/tcg/arm/fcvt.c
index d8c61cd29f..ecebbb0247 100644
--- a/tests/tcg/arm/fcvt.c
+++ b/tests/tcg/arm/fcvt.c
@@ -427,10 +427,9 @@ int main(int argc, char *argv[argc])
 
     /* 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"
+    asm("vmrs r1, fpscr\n\t"
         "orr r1, r1, %[flags]\n\t"
-        "mcr p10, 7, r1, cr1, cr0, 0\n\t"
+        "vmsr fpscr, r1"
         : /* no output */ : [flags] "n" (1 << 26) : "r1" );
 #else
     asm("mrs x1, fpcr\n\t"
-- 
2.39.2



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

* [PATCH v2 19/40] linux-user/main: Suppress out-of-range comparison warning for clang
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (17 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 18/40] tests/tcg/arm: Use vmrs/vmsr instead of mcr/mrc Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds Alex Bennée
                   ` (20 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Akihiko Odaki

From: Richard Henderson <richard.henderson@linaro.org>

For arm32 host and arm64 guest we get

.../main.c:851:32: error: result of comparison of constant 70368744177664 with expression of type 'unsigned long' is always false [-Werror,-Wtautological-constant-out-of-range-compare]
        if (TASK_UNMAPPED_BASE < reserved_va) {
            ~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~

We already disable -Wtype-limits here, for this exact comparison, but
that is not enough for clang.  Disable -Wtautological-compare as well,
which is a superset.  GCC ignores the unknown warning flag.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
Message-Id: <20240630190050.160642-15-richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 linux-user/main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/linux-user/main.c b/linux-user/main.c
index 94c99a1366..7d3cf45fa9 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -843,6 +843,7 @@ int main(int argc, char **argv, char **envp)
      */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wtype-limits"
+#pragma GCC diagnostic ignored "-Wtautological-compare"
 
     /*
      * Select an initial value for task_unmapped_base that is in range.
-- 
2.39.2



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

* [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (18 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 19/40] linux-user/main: Suppress out-of-range comparison warning for clang Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:49   ` Thomas Huth
  2024-07-05 16:34   ` Philippe Mathieu-Daudé
  2024-07-05  8:40 ` [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default Alex Bennée
                   ` (19 subsequent siblings)
  39 siblings, 2 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

In fact any other accelerator would be pointless as the point is to
exercise the TCI accelerator anyway.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 .gitlab-ci.d/buildtest.yml   | 2 +-
 .gitlab-ci.d/crossbuilds.yml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 425fc6479b..e3a0758bd9 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -635,7 +635,7 @@ build-tci:
     - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
     - mkdir build
     - cd build
-    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
+    - ../configure --enable-tcg-interpreter --disable-kvm --disable-docs --disable-gtk --disable-vnc
         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
         || { cat config.log meson-logs/meson-log.txt && exit 1; }
     - make -j"$JOBS"
diff --git a/.gitlab-ci.d/crossbuilds.yml b/.gitlab-ci.d/crossbuilds.yml
index 3de0341afe..cb499e4ee0 100644
--- a/.gitlab-ci.d/crossbuilds.yml
+++ b/.gitlab-ci.d/crossbuilds.yml
@@ -68,7 +68,7 @@ cross-i686-tci:
   variables:
     IMAGE: debian-i686-cross
     ACCEL: tcg-interpreter
-    EXTRA_CONFIGURE_OPTS: --target-list=i386-softmmu,i386-linux-user,aarch64-softmmu,aarch64-linux-user,ppc-softmmu,ppc-linux-user --disable-plugins
+    EXTRA_CONFIGURE_OPTS: --target-list=i386-softmmu,i386-linux-user,aarch64-softmmu,aarch64-linux-user,ppc-softmmu,ppc-linux-user --disable-plugins --disable-kvm
     MAKE_CHECK_ARGS: check check-tcg
 
 cross-mipsel-system:
-- 
2.39.2



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

* [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (19 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:02   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 22/40] test/plugins: preserve the instruction record over translations Alex Bennée
                   ` (18 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

While the match functionality is useful lets make the verbosity
optional while we are actually running.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/plugin/insn.c | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index 5e0aa03223..524f9ddde8 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -20,6 +20,7 @@ static qemu_plugin_u64 insn_count;
 
 static bool do_inline;
 static bool do_size;
+static bool do_trace;
 static GArray *sizes;
 
 typedef struct {
@@ -73,30 +74,30 @@ static void vcpu_insn_matched_exec_before(unsigned int cpu_index, void *udata)
     MatchCount *match = qemu_plugin_scoreboard_find(insn_match->counts,
                                                     cpu_index);
 
-    g_autoptr(GString) ts = g_string_new("");
-
     insn->hits++;
-    g_string_append_printf(ts, "0x%" PRIx64 ", '%s', %"PRId64 " hits",
-                           insn->vaddr, insn->disas, insn->hits);
 
     uint64_t icount = qemu_plugin_u64_get(insn_count, cpu_index);
     uint64_t delta = icount - match->last_hit;
 
     match->hits++;
     match->total_delta += delta;
-
-    g_string_append_printf(ts,
-                           " , cpu %u,"
-                           " %"PRId64" match hits,"
-                           " Δ+%"PRId64 " since last match,"
-                           " %"PRId64 " avg insns/match\n",
-                           cpu_index,
-                           match->hits, delta,
-                           match->total_delta / match->hits);
-
     match->last_hit = icount;
 
-    qemu_plugin_outs(ts->str);
+    if (do_trace) {
+        g_autoptr(GString) ts = g_string_new("");
+        g_string_append_printf(ts, "0x%" PRIx64 ", '%s', %"PRId64 " hits",
+                               insn->vaddr, insn->disas, insn->hits);
+        g_string_append_printf(ts,
+                               " , cpu %u,"
+                               " %"PRId64" match hits,"
+                               " Δ+%"PRId64 " since last match,"
+                               " %"PRId64 " avg insns/match\n",
+                               cpu_index,
+                               match->hits, delta,
+                               match->total_delta / match->hits);
+
+        qemu_plugin_outs(ts->str);
+    }
 }
 
 static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
@@ -216,6 +217,11 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
             }
         } else if (g_strcmp0(tokens[0], "match") == 0) {
             parse_match(tokens[1]);
+        } else if (g_strcmp0(tokens[0], "trace") == 0) {
+            if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_trace)) {
+                fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
+                return -1;
+            }
         } else {
             fprintf(stderr, "option parsing failed: %s\n", opt);
             return -1;
-- 
2.39.2



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

* [PATCH v2 22/40] test/plugins: preserve the instruction record over translations
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (20 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:15   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 23/40] plugins/lockstep: preserve sock_path Alex Bennée
                   ` (17 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

We are interested in the particular instruction so we should use a
stable record for it. We could bring this down to physical address but
for now vaddr + disas seems to do the trick.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 tests/plugin/insn.c | 76 ++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 71 insertions(+), 5 deletions(-)

diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
index 524f9ddde8..baf2d07205 100644
--- a/tests/plugin/insn.c
+++ b/tests/plugin/insn.c
@@ -43,6 +43,44 @@ typedef struct {
     char *disas;
 } Instruction;
 
+/* A hash table to hold matched instructions */
+static GHashTable *match_insn_records;
+static GMutex match_hash_lock;
+
+
+static Instruction * get_insn_record(const char *disas, uint64_t vaddr, Match *m)
+{
+    g_autofree char *str_hash = g_strdup_printf("%"PRIx64" %s", vaddr, disas);
+    Instruction *record;
+
+    g_mutex_lock(&match_hash_lock);
+
+    if (!match_insn_records) {
+        match_insn_records = g_hash_table_new(g_str_hash, g_str_equal);
+    }
+
+    record = g_hash_table_lookup(match_insn_records, str_hash);
+
+    if (!record) {
+        g_autoptr(GString) ts = g_string_new(str_hash);
+
+        record = g_new0(Instruction, 1);
+        record->disas = g_strdup(disas);
+        record->vaddr = vaddr;
+        record->match = m;
+
+        g_hash_table_insert(match_insn_records, str_hash, record);
+
+        g_string_prepend(ts, "Created record for: ");
+        g_string_append(ts, "\n");
+        qemu_plugin_outs(ts->str);
+    }
+
+    g_mutex_unlock(&match_hash_lock);
+
+    return record;
+}
+
 /*
  * Initialise a new vcpu with reading the register list
  */
@@ -131,16 +169,19 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
          * If we are tracking certain instructions we will need more
          * information about the instruction which we also need to
          * save if there is a hit.
+         *
+         * We only want one record for each occurrence of the matched
+         * instruction.
          */
         if (matches->len) {
             char *insn_disas = qemu_plugin_insn_disas(insn);
             for (int j = 0; j < matches->len; j++) {
                 Match *m = &g_array_index(matches, Match, j);
                 if (g_str_has_prefix(insn_disas, m->match_string)) {
-                    Instruction *rec = g_new0(Instruction, 1);
-                    rec->disas = g_strdup(insn_disas);
-                    rec->vaddr = qemu_plugin_insn_vaddr(insn);
-                    rec->match = m;
+                    Instruction *rec = get_insn_record(insn_disas,
+                                                       qemu_plugin_insn_vaddr(insn),
+                                                       m);
+
                     qemu_plugin_register_vcpu_insn_exec_cb(
                         insn, vcpu_insn_matched_exec_before,
                         QEMU_PLUGIN_CB_NO_REGS, rec);
@@ -173,13 +214,38 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
                                qemu_plugin_u64_sum(insn_count));
     }
     qemu_plugin_outs(out->str);
-
     qemu_plugin_scoreboard_free(insn_count.score);
+
+    g_mutex_lock(&match_hash_lock);
+
     for (i = 0; i < matches->len; ++i) {
         Match *m = &g_array_index(matches, Match, i);
+        GHashTableIter iter;
+        Instruction *record;
+        qemu_plugin_u64 hit_e = qemu_plugin_scoreboard_u64_in_struct(m->counts, MatchCount, hits);
+        uint64_t hits = qemu_plugin_u64_sum(hit_e);
+
+        g_string_printf(out, "Match: %s, hits %"PRId64"\n", m->match_string, hits);
+        qemu_plugin_outs(out->str);
+
+        g_hash_table_iter_init(&iter, match_insn_records);
+        while (g_hash_table_iter_next(&iter, NULL, (void **)&record)) {
+            if (record->match == m) {
+                g_string_printf(out,
+                                "  %"PRIx64": %s (hits %"PRId64")\n",
+                                record->vaddr,
+                                record->disas,
+                                record->hits);
+                qemu_plugin_outs(out->str);
+            }
+        }
+
         g_free(m->match_string);
         qemu_plugin_scoreboard_free(m->counts);
     }
+
+    g_mutex_unlock(&match_hash_lock);
+
     g_array_free(matches, TRUE);
     g_array_free(sizes, TRUE);
 }
-- 
2.39.2



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

* [PATCH v2 23/40] plugins/lockstep: preserve sock_path
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (21 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 22/40] test/plugins: preserve the instruction record over translations Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  9:54   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 24/40] plugins/lockstep: make mixed-mode safe Alex Bennée
                   ` (16 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

We can't assign sock_path directly from the autofree'd GStrv, take a
copy.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/lockstep.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index 237543b43a..111ec3fa27 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -347,7 +347,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
                 return -1;
             }
         } else if (g_strcmp0(tokens[0], "sockpath") == 0) {
-            sock_path = tokens[1];
+            sock_path = strdup(tokens[1]);
         } else {
             fprintf(stderr, "option parsing failed: %s\n", p);
             return -1;
-- 
2.39.2



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

* [PATCH v2 24/40] plugins/lockstep: make mixed-mode safe
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (22 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 23/40] plugins/lockstep: preserve sock_path Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option Alex Bennée
                   ` (15 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

The ExecState is shared across the socket and if we want to compare
say 64 bit and 32 bit binaries we need the two to use the same sizes
for things.

Message-Id: <20240628124258.832466-11-alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/lockstep.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index 111ec3fa27..761bcdf363 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -57,7 +57,7 @@ typedef struct {
 /* The execution state we compare */
 typedef struct {
     uint64_t pc;
-    unsigned long insn_count;
+    uint64_t insn_count;
 } ExecState;
 
 typedef struct {
@@ -148,7 +148,7 @@ static void report_divergance(ExecState *us, ExecState *them)
 
         g_string_printf(out,
                         "Δ insn_count @ 0x%016" PRIx64
-                        " (%ld) vs 0x%016" PRIx64 " (%ld)\n",
+                        " (%"PRId64") vs 0x%016" PRIx64 " (%"PRId64")\n",
                         us->pc, us->insn_count, them->pc, them->insn_count);
 
         for (entry = log, i = 0;
-- 
2.39.2



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

* [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (23 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 24/40] plugins/lockstep: make mixed-mode safe Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:04   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 26/40] plugins/lockstep: clean-up output Alex Bennée
                   ` (14 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

This really helps with lockstep although its super slow on big jobs.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/lockstep.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index 761bcdf363..353bf12dfb 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -14,7 +14,8 @@
  * particular run may execute the exact same sequence of blocks. An
  * asynchronous event (for example X11 graphics update) may cause a
  * block to end early and a new partial block to start. This means
- * serial only test cases are a better bet. -d nochain may also help.
+ * serial only test cases are a better bet. -d nochain may also help
+ * as well as -accel tcg,one-insn-per-tb=on
  *
  * This code is not thread safe!
  *
-- 
2.39.2



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

* [PATCH v2 26/40] plugins/lockstep: clean-up output
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (24 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 27/40] plugins: Ensure vCPU index is assigned in init/exit hooks Alex Bennée
                   ` (13 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

We were repeating information which wasn't super clear. As we already
will have dumped the last failing PC just note the divergence and dump
the previous instruction log.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 contrib/plugins/lockstep.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index 353bf12dfb..5b7dfc9c06 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -135,10 +135,13 @@ static void report_divergance(ExecState *us, ExecState *them)
 
     /* Output short log entry of going out of sync... */
     if (verbose || divrec.distance == 1 || diverged) {
-        g_string_printf(out,
-                        "@ 0x%016" PRIx64 " vs 0x%016" PRIx64
+        g_string_printf(out, "@ "
+                        "0x%016" PRIx64 " (%" PRId64 ") vs "
+                        "0x%016" PRIx64 " (%" PRId64 ")"
                         " (%d/%d since last)\n",
-                        us->pc, them->pc, g_slist_length(divergence_log),
+                        us->pc, us->insn_count,
+                        them->pc, them->insn_count,
+                        g_slist_length(divergence_log),
                         divrec.distance);
         qemu_plugin_outs(out->str);
     }
@@ -147,10 +150,7 @@ static void report_divergance(ExecState *us, ExecState *them)
         int i;
         GSList *entry;
 
-        g_string_printf(out,
-                        "Δ insn_count @ 0x%016" PRIx64
-                        " (%"PRId64") vs 0x%016" PRIx64 " (%"PRId64")\n",
-                        us->pc, us->insn_count, them->pc, them->insn_count);
+        g_string_printf(out, "Δ too high, we have diverged, previous insns\n");
 
         for (entry = log, i = 0;
              g_slist_next(entry) && i < 5;
@@ -163,7 +163,7 @@ static void report_divergance(ExecState *us, ExecState *them)
                                    prev->insn_count);
         }
         qemu_plugin_outs(out->str);
-        qemu_plugin_outs("too much divergence... giving up.");
+        qemu_plugin_outs("giving up\n");
         qemu_plugin_uninstall(our_id, plugin_cleanup);
     }
 }
-- 
2.39.2



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

* [PATCH v2 27/40] plugins: Ensure vCPU index is assigned in init/exit hooks
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (25 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 26/40] plugins/lockstep: clean-up output Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 28/40] plugins: Free CPUPluginState before destroying vCPU state Alex Bennée
                   ` (12 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

From: Philippe Mathieu-Daudé <philmd@linaro.org>

Since vCPUs are hashed by their index, this index can't
be uninitialized (UNASSIGNED_CPU_INDEX).

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240606124010.2460-2-philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 plugins/core.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/plugins/core.c b/plugins/core.c
index 9d737d8278..a864275ae7 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -245,6 +245,7 @@ void qemu_plugin_vcpu_init_hook(CPUState *cpu)
 {
     bool success;
 
+    assert(cpu->cpu_index != UNASSIGNED_CPU_INDEX);
     qemu_rec_mutex_lock(&plugin.lock);
     plugin.num_vcpus = MAX(plugin.num_vcpus, cpu->cpu_index + 1);
     plugin_cpu_update__locked(&cpu->cpu_index, NULL, NULL);
@@ -263,6 +264,7 @@ void qemu_plugin_vcpu_exit_hook(CPUState *cpu)
 
     plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_EXIT);
 
+    assert(cpu->cpu_index != UNASSIGNED_CPU_INDEX);
     qemu_rec_mutex_lock(&plugin.lock);
     success = g_hash_table_remove(plugin.cpu_ht, &cpu->cpu_index);
     g_assert(success);
-- 
2.39.2



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

* [PATCH v2 28/40] plugins: Free CPUPluginState before destroying vCPU state
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (26 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 27/40] plugins: Ensure vCPU index is assigned in init/exit hooks Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 29/40] accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/ Alex Bennée
                   ` (11 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

From: Philippe Mathieu-Daudé <philmd@linaro.org>

cpu::plugin_state is allocated in cpu_common_initfn() when
the vCPU state is created. Release it in cpu_common_finalize()
when we are done.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240606124010.2460-3-philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 include/qemu/plugin.h | 3 +++
 hw/core/cpu-common.c  | 5 +++++
 2 files changed, 8 insertions(+)

diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h
index bc5aef979e..af5f9db469 100644
--- a/include/qemu/plugin.h
+++ b/include/qemu/plugin.h
@@ -149,6 +149,9 @@ struct CPUPluginState {
 
 /**
  * qemu_plugin_create_vcpu_state: allocate plugin state
+ *
+ * The returned data must be released with g_free()
+ * when no longer required.
  */
 CPUPluginState *qemu_plugin_create_vcpu_state(void);
 
diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index f131cde2c0..8f6cb64da3 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -283,6 +283,11 @@ static void cpu_common_finalize(Object *obj)
 {
     CPUState *cpu = CPU(obj);
 
+#ifdef CONFIG_PLUGIN
+    if (tcg_enabled()) {
+        g_free(cpu->plugin_state);
+    }
+#endif
     g_array_free(cpu->gdb_regs, TRUE);
     qemu_lockcnt_destroy(&cpu->in_ioctl_lock);
     qemu_mutex_destroy(&cpu->work_mutex);
-- 
2.39.2



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

* [PATCH v2 29/40] accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (27 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 28/40] plugins: Free CPUPluginState before destroying vCPU state Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 30/40] gdbstub: Clean up process_string_cmd Alex Bennée
                   ` (10 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier

From: Philippe Mathieu-Daudé <philmd@linaro.org>

Calling qemu_plugin_vcpu_init__async() on the vCPU thread
is a detail of plugins, not relevant to TCG vCPU management.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-Id: <20240606124010.2460-4-philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 hw/core/cpu-common.c | 9 +--------
 plugins/core.c       | 8 +++++++-
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index 8f6cb64da3..b19e1fdacf 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -192,13 +192,6 @@ static void cpu_common_parse_features(const char *typename, char *features,
     }
 }
 
-#ifdef CONFIG_PLUGIN
-static void qemu_plugin_vcpu_init__async(CPUState *cpu, run_on_cpu_data unused)
-{
-    qemu_plugin_vcpu_init_hook(cpu);
-}
-#endif
-
 static void cpu_common_realizefn(DeviceState *dev, Error **errp)
 {
     CPUState *cpu = CPU(dev);
@@ -274,7 +267,7 @@ static void cpu_common_initfn(Object *obj)
 #ifdef CONFIG_PLUGIN
     if (tcg_enabled()) {
         cpu->plugin_state = qemu_plugin_create_vcpu_state();
-        async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
+        qemu_plugin_vcpu_init_hook(cpu);
     }
 #endif
 }
diff --git a/plugins/core.c b/plugins/core.c
index a864275ae7..12c67b4b4e 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -241,7 +241,7 @@ static void plugin_grow_scoreboards__locked(CPUState *cpu)
     end_exclusive();
 }
 
-void qemu_plugin_vcpu_init_hook(CPUState *cpu)
+static void qemu_plugin_vcpu_init__async(CPUState *cpu, run_on_cpu_data unused)
 {
     bool success;
 
@@ -258,6 +258,12 @@ void qemu_plugin_vcpu_init_hook(CPUState *cpu)
     plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_INIT);
 }
 
+void qemu_plugin_vcpu_init_hook(CPUState *cpu)
+{
+    /* Plugin initialization must wait until the cpu start executing code */
+    async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
+}
+
 void qemu_plugin_vcpu_exit_hook(CPUState *cpu)
 {
     bool success;
-- 
2.39.2



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

* [PATCH v2 30/40] gdbstub: Clean up process_string_cmd
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (28 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 29/40] accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/ Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 31/40] gdbstub: Move GdbCmdParseEntry into a new header file Alex Bennée
                   ` (9 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Change 'process_string_cmd' to return true on success and false on
failure, instead of 0 and -1.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-2-gustavo.romero@linaro.org>
---
 gdbstub/gdbstub.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index b3574997ea..37314b92e5 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -962,14 +962,14 @@ static inline int startswith(const char *string, const char *pattern)
   return !strncmp(string, pattern, strlen(pattern));
 }
 
-static int process_string_cmd(const char *data,
-                              const GdbCmdParseEntry *cmds, int num_cmds)
+static bool process_string_cmd(const char *data,
+                               const GdbCmdParseEntry *cmds, int num_cmds)
 {
     int i;
     g_autoptr(GArray) params = g_array_new(false, true, sizeof(GdbCmdVariant));
 
     if (!cmds) {
-        return -1;
+        return false;
     }
 
     for (i = 0; i < num_cmds; i++) {
@@ -984,16 +984,16 @@ static int process_string_cmd(const char *data,
         if (cmd->schema) {
             if (cmd_parse_params(&data[strlen(cmd->cmd)],
                                  cmd->schema, params)) {
-                return -1;
+                return false;
             }
         }
 
         gdbserver_state.allow_stop_reply = cmd->allow_stop_reply;
         cmd->handler(params, NULL);
-        return 0;
+        return true;
     }
 
-    return -1;
+    return false;
 }
 
 static void run_cmd_parser(const char *data, const GdbCmdParseEntry *cmd)
@@ -1007,7 +1007,7 @@ static void run_cmd_parser(const char *data, const GdbCmdParseEntry *cmd)
 
     /* In case there was an error during the command parsing we must
     * send a NULL packet to indicate the command is not supported */
-    if (process_string_cmd(data, cmd, 1)) {
+    if (!process_string_cmd(data, cmd, 1)) {
         gdb_put_packet("");
     }
 }
@@ -1523,9 +1523,9 @@ static void handle_v_commands(GArray *params, void *user_ctx)
         return;
     }
 
-    if (process_string_cmd(get_param(params, 0)->data,
-                           gdb_v_commands_table,
-                           ARRAY_SIZE(gdb_v_commands_table))) {
+    if (!process_string_cmd(get_param(params, 0)->data,
+                            gdb_v_commands_table,
+                            ARRAY_SIZE(gdb_v_commands_table))) {
         gdb_put_packet("");
     }
 }
@@ -1889,15 +1889,15 @@ static void handle_gen_query(GArray *params, void *user_ctx)
         return;
     }
 
-    if (!process_string_cmd(get_param(params, 0)->data,
-                            gdb_gen_query_set_common_table,
-                            ARRAY_SIZE(gdb_gen_query_set_common_table))) {
+    if (process_string_cmd(get_param(params, 0)->data,
+                           gdb_gen_query_set_common_table,
+                           ARRAY_SIZE(gdb_gen_query_set_common_table))) {
         return;
     }
 
-    if (process_string_cmd(get_param(params, 0)->data,
-                           gdb_gen_query_table,
-                           ARRAY_SIZE(gdb_gen_query_table))) {
+    if (!process_string_cmd(get_param(params, 0)->data,
+                            gdb_gen_query_table,
+                            ARRAY_SIZE(gdb_gen_query_table))) {
         gdb_put_packet("");
     }
 }
@@ -1908,13 +1908,13 @@ static void handle_gen_set(GArray *params, void *user_ctx)
         return;
     }
 
-    if (!process_string_cmd(get_param(params, 0)->data,
-                            gdb_gen_query_set_common_table,
-                            ARRAY_SIZE(gdb_gen_query_set_common_table))) {
+    if (process_string_cmd(get_param(params, 0)->data,
+                           gdb_gen_query_set_common_table,
+                           ARRAY_SIZE(gdb_gen_query_set_common_table))) {
         return;
     }
 
-    if (process_string_cmd(get_param(params, 0)->data,
+    if (!process_string_cmd(get_param(params, 0)->data,
                            gdb_gen_set_table,
                            ARRAY_SIZE(gdb_gen_set_table))) {
         gdb_put_packet("");
-- 
2.39.2



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

* [PATCH v2 31/40] gdbstub: Move GdbCmdParseEntry into a new header file
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (29 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 30/40] gdbstub: Clean up process_string_cmd Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 32/40] gdbstub: Add support for target-specific stubs Alex Bennée
                   ` (8 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Move GdbCmdParseEntry and its associated types into a separate header
file to allow the use of GdbCmdParseEntry and other gdbstub command
functions outside of gdbstub.c.

Since GdbCmdParseEntry and get_param are now public, kdoc
GdbCmdParseEntry and rename get_param to gdb_get_cmd_param.

This commit also makes gdb_put_packet public since is used in gdbstub
command handling.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-3-gustavo.romero@linaro.org>
---
 gdbstub/internals.h        |  22 ------
 include/gdbstub/commands.h |  72 ++++++++++++++++++++
 gdbstub/gdbstub.c          | 134 ++++++++++++++-----------------------
 gdbstub/syscalls.c         |   7 +-
 gdbstub/system.c           |   7 +-
 gdbstub/user-target.c      |  25 +++----
 gdbstub/user.c             |   7 +-
 7 files changed, 146 insertions(+), 128 deletions(-)
 create mode 100644 include/gdbstub/commands.h

diff --git a/gdbstub/internals.h b/gdbstub/internals.h
index 32f9f63297..34121dc61a 100644
--- a/gdbstub/internals.h
+++ b/gdbstub/internals.h
@@ -106,7 +106,6 @@ static inline int tohex(int v)
  */
 
 void gdb_put_strbuf(void);
-int gdb_put_packet(const char *buf);
 int gdb_put_packet_binary(const char *buf, int len, bool dump);
 void gdb_hextomem(GByteArray *mem, const char *buf, int len);
 void gdb_memtohex(GString *buf, const uint8_t *mem, int len);
@@ -166,27 +165,6 @@ void gdb_put_buffer(const uint8_t *buf, int len);
  */
 void gdb_init_gdbserver_state(void);
 
-typedef enum GDBThreadIdKind {
-    GDB_ONE_THREAD = 0,
-    GDB_ALL_THREADS,     /* One process, all threads */
-    GDB_ALL_PROCESSES,
-    GDB_READ_THREAD_ERR
-} GDBThreadIdKind;
-
-typedef union GdbCmdVariant {
-    const char *data;
-    uint8_t opcode;
-    unsigned long val_ul;
-    unsigned long long val_ull;
-    struct {
-        GDBThreadIdKind kind;
-        uint32_t pid;
-        uint32_t tid;
-    } thread_id;
-} GdbCmdVariant;
-
-#define get_param(p, i)    (&g_array_index(p, GdbCmdVariant, i))
-
 void gdb_handle_query_rcmd(GArray *params, void *ctx); /* system */
 void gdb_handle_query_offsets(GArray *params, void *user_ctx); /* user */
 void gdb_handle_query_xfer_auxv(GArray *params, void *user_ctx); /*user */
diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h
new file mode 100644
index 0000000000..639257493e
--- /dev/null
+++ b/include/gdbstub/commands.h
@@ -0,0 +1,72 @@
+#ifndef GDBSTUB_COMMANDS_H
+#define GDBSTUB
+
+typedef void (*GdbCmdHandler)(GArray *params, void *user_ctx);
+
+typedef enum GDBThreadIdKind {
+    GDB_ONE_THREAD = 0,
+    GDB_ALL_THREADS,     /* One process, all threads */
+    GDB_ALL_PROCESSES,
+    GDB_READ_THREAD_ERR
+} GDBThreadIdKind;
+
+typedef union GdbCmdVariant {
+    const char *data;
+    uint8_t opcode;
+    unsigned long val_ul;
+    unsigned long long val_ull;
+    struct {
+        GDBThreadIdKind kind;
+        uint32_t pid;
+        uint32_t tid;
+    } thread_id;
+} GdbCmdVariant;
+
+#define gdb_get_cmd_param(p, i)    (&g_array_index(p, GdbCmdVariant, i))
+
+/**
+ * typedef GdbCmdParseEntry - gdb command parser
+ *
+ * This structure keeps the information necessary to match a gdb command,
+ * parse it (extract its parameters), and select the correct handler for it.
+ *
+ * @cmd: The command to be matched
+ * @cmd_startswith: If true, @cmd is compared using startswith
+ * @schema: Each schema for the command parameter entry consists of 2 chars,
+ * the first char represents the parameter type handling the second char
+ * represents the delimiter for the next parameter.
+ *
+ * Currently supported schema types:
+ * 'l' -> unsigned long (stored in .val_ul)
+ * 'L' -> unsigned long long (stored in .val_ull)
+ * 's' -> string (stored in .data)
+ * 'o' -> single char (stored in .opcode)
+ * 't' -> thread id (stored in .thread_id)
+ * '?' -> skip according to delimiter
+ *
+ * Currently supported delimiters:
+ * '?' -> Stop at any delimiter (",;:=\0")
+ * '0' -> Stop at "\0"
+ * '.' -> Skip 1 char unless reached "\0"
+ * Any other value is treated as the delimiter value itself
+ *
+ * @allow_stop_reply: True iff the gdbstub can respond to this command with a
+ * "stop reply" packet. The list of commands that accept such response is
+ * defined at the GDB Remote Serial Protocol documentation. See:
+ * https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets.
+ */
+typedef struct GdbCmdParseEntry {
+    GdbCmdHandler handler;
+    const char *cmd;
+    bool cmd_startswith;
+    const char *schema;
+    bool allow_stop_reply;
+} GdbCmdParseEntry;
+
+/**
+ * gdb_put_packet() - put string into gdb server's buffer so it is sent
+ * to the client
+ */
+int gdb_put_packet(const char *buf);
+
+#endif /* GDBSTUB_COMMANDS_H */
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 37314b92e5..9ff2f4177d 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -30,6 +30,7 @@
 #include "qemu/error-report.h"
 #include "trace.h"
 #include "exec/gdbstub.h"
+#include "gdbstub/commands.h"
 #include "gdbstub/syscalls.h"
 #ifdef CONFIG_USER_ONLY
 #include "accel/tcg/vcpu-state.h"
@@ -920,43 +921,6 @@ static int cmd_parse_params(const char *data, const char *schema,
     return 0;
 }
 
-typedef void (*GdbCmdHandler)(GArray *params, void *user_ctx);
-
-/*
- * cmd_startswith -> cmd is compared using startswith
- *
- * allow_stop_reply -> true iff the gdbstub can respond to this command with a
- *   "stop reply" packet. The list of commands that accept such response is
- *   defined at the GDB Remote Serial Protocol documentation. see:
- *   https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets.
- *
- * schema definitions:
- * Each schema parameter entry consists of 2 chars,
- * the first char represents the parameter type handling
- * the second char represents the delimiter for the next parameter
- *
- * Currently supported schema types:
- * 'l' -> unsigned long (stored in .val_ul)
- * 'L' -> unsigned long long (stored in .val_ull)
- * 's' -> string (stored in .data)
- * 'o' -> single char (stored in .opcode)
- * 't' -> thread id (stored in .thread_id)
- * '?' -> skip according to delimiter
- *
- * Currently supported delimiters:
- * '?' -> Stop at any delimiter (",;:=\0")
- * '0' -> Stop at "\0"
- * '.' -> Skip 1 char unless reached "\0"
- * Any other value is treated as the delimiter value itself
- */
-typedef struct GdbCmdParseEntry {
-    GdbCmdHandler handler;
-    const char *cmd;
-    bool cmd_startswith;
-    const char *schema;
-    bool allow_stop_reply;
-} GdbCmdParseEntry;
-
 static inline int startswith(const char *string, const char *pattern)
 {
   return !strncmp(string, pattern, strlen(pattern));
@@ -1023,7 +987,7 @@ static void handle_detach(GArray *params, void *user_ctx)
             return;
         }
 
-        pid = get_param(params, 0)->val_ul;
+        pid = gdb_get_cmd_param(params, 0)->val_ul;
     }
 
 #ifdef CONFIG_USER_ONLY
@@ -1061,13 +1025,13 @@ static void handle_thread_alive(GArray *params, void *user_ctx)
         return;
     }
 
-    if (get_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
+    if (gdb_get_cmd_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
         gdb_put_packet("E22");
         return;
     }
 
-    cpu = gdb_get_cpu(get_param(params, 0)->thread_id.pid,
-                      get_param(params, 0)->thread_id.tid);
+    cpu = gdb_get_cpu(gdb_get_cmd_param(params, 0)->thread_id.pid,
+                      gdb_get_cmd_param(params, 0)->thread_id.tid);
     if (!cpu) {
         gdb_put_packet("E22");
         return;
@@ -1079,7 +1043,7 @@ static void handle_thread_alive(GArray *params, void *user_ctx)
 static void handle_continue(GArray *params, void *user_ctx)
 {
     if (params->len) {
-        gdb_set_cpu_pc(get_param(params, 0)->val_ull);
+        gdb_set_cpu_pc(gdb_get_cmd_param(params, 0)->val_ull);
     }
 
     gdbserver_state.signal = 0;
@@ -1095,7 +1059,7 @@ static void handle_cont_with_sig(GArray *params, void *user_ctx)
      *       omit the addr parameter
      */
     if (params->len) {
-        signal = get_param(params, 0)->val_ul;
+        signal = gdb_get_cmd_param(params, 0)->val_ul;
     }
 
     gdbserver_state.signal = gdb_signal_to_target(signal);
@@ -1115,18 +1079,18 @@ static void handle_set_thread(GArray *params, void *user_ctx)
         return;
     }
 
-    if (get_param(params, 1)->thread_id.kind == GDB_READ_THREAD_ERR) {
+    if (gdb_get_cmd_param(params, 1)->thread_id.kind == GDB_READ_THREAD_ERR) {
         gdb_put_packet("E22");
         return;
     }
 
-    if (get_param(params, 1)->thread_id.kind != GDB_ONE_THREAD) {
+    if (gdb_get_cmd_param(params, 1)->thread_id.kind != GDB_ONE_THREAD) {
         gdb_put_packet("OK");
         return;
     }
 
-    pid = get_param(params, 1)->thread_id.pid;
-    tid = get_param(params, 1)->thread_id.tid;
+    pid = gdb_get_cmd_param(params, 1)->thread_id.pid;
+    tid = gdb_get_cmd_param(params, 1)->thread_id.tid;
 #ifdef CONFIG_USER_ONLY
     if (gdb_handle_set_thread_user(pid, tid)) {
         return;
@@ -1142,7 +1106,7 @@ static void handle_set_thread(GArray *params, void *user_ctx)
      * Note: This command is deprecated and modern gdb's will be using the
      *       vCont command instead.
      */
-    switch (get_param(params, 0)->opcode) {
+    switch (gdb_get_cmd_param(params, 0)->opcode) {
     case 'c':
         gdbserver_state.c_cpu = cpu;
         gdb_put_packet("OK");
@@ -1167,9 +1131,9 @@ static void handle_insert_bp(GArray *params, void *user_ctx)
     }
 
     res = gdb_breakpoint_insert(gdbserver_state.c_cpu,
-                                get_param(params, 0)->val_ul,
-                                get_param(params, 1)->val_ull,
-                                get_param(params, 2)->val_ull);
+                                gdb_get_cmd_param(params, 0)->val_ul,
+                                gdb_get_cmd_param(params, 1)->val_ull,
+                                gdb_get_cmd_param(params, 2)->val_ull);
     if (res >= 0) {
         gdb_put_packet("OK");
         return;
@@ -1191,9 +1155,9 @@ static void handle_remove_bp(GArray *params, void *user_ctx)
     }
 
     res = gdb_breakpoint_remove(gdbserver_state.c_cpu,
-                                get_param(params, 0)->val_ul,
-                                get_param(params, 1)->val_ull,
-                                get_param(params, 2)->val_ull);
+                                gdb_get_cmd_param(params, 0)->val_ul,
+                                gdb_get_cmd_param(params, 1)->val_ull,
+                                gdb_get_cmd_param(params, 2)->val_ull);
     if (res >= 0) {
         gdb_put_packet("OK");
         return;
@@ -1225,10 +1189,10 @@ static void handle_set_reg(GArray *params, void *user_ctx)
         return;
     }
 
-    reg_size = strlen(get_param(params, 1)->data) / 2;
-    gdb_hextomem(gdbserver_state.mem_buf, get_param(params, 1)->data, reg_size);
+    reg_size = strlen(gdb_get_cmd_param(params, 1)->data) / 2;
+    gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 1)->data, reg_size);
     gdb_write_register(gdbserver_state.g_cpu, gdbserver_state.mem_buf->data,
-                       get_param(params, 0)->val_ull);
+                       gdb_get_cmd_param(params, 0)->val_ull);
     gdb_put_packet("OK");
 }
 
@@ -1243,7 +1207,7 @@ static void handle_get_reg(GArray *params, void *user_ctx)
 
     reg_size = gdb_read_register(gdbserver_state.g_cpu,
                                  gdbserver_state.mem_buf,
-                                 get_param(params, 0)->val_ull);
+                                 gdb_get_cmd_param(params, 0)->val_ull);
     if (!reg_size) {
         gdb_put_packet("E14");
         return;
@@ -1264,16 +1228,16 @@ static void handle_write_mem(GArray *params, void *user_ctx)
     }
 
     /* gdb_hextomem() reads 2*len bytes */
-    if (get_param(params, 1)->val_ull >
-        strlen(get_param(params, 2)->data) / 2) {
+    if (gdb_get_cmd_param(params, 1)->val_ull >
+        strlen(gdb_get_cmd_param(params, 2)->data) / 2) {
         gdb_put_packet("E22");
         return;
     }
 
-    gdb_hextomem(gdbserver_state.mem_buf, get_param(params, 2)->data,
-                 get_param(params, 1)->val_ull);
+    gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 2)->data,
+                 gdb_get_cmd_param(params, 1)->val_ull);
     if (gdb_target_memory_rw_debug(gdbserver_state.g_cpu,
-                                   get_param(params, 0)->val_ull,
+                                   gdb_get_cmd_param(params, 0)->val_ull,
                                    gdbserver_state.mem_buf->data,
                                    gdbserver_state.mem_buf->len, true)) {
         gdb_put_packet("E14");
@@ -1291,16 +1255,16 @@ static void handle_read_mem(GArray *params, void *user_ctx)
     }
 
     /* gdb_memtohex() doubles the required space */
-    if (get_param(params, 1)->val_ull > MAX_PACKET_LENGTH / 2) {
+    if (gdb_get_cmd_param(params, 1)->val_ull > MAX_PACKET_LENGTH / 2) {
         gdb_put_packet("E22");
         return;
     }
 
     g_byte_array_set_size(gdbserver_state.mem_buf,
-                          get_param(params, 1)->val_ull);
+                          gdb_get_cmd_param(params, 1)->val_ull);
 
     if (gdb_target_memory_rw_debug(gdbserver_state.g_cpu,
-                                   get_param(params, 0)->val_ull,
+                                   gdb_get_cmd_param(params, 0)->val_ull,
                                    gdbserver_state.mem_buf->data,
                                    gdbserver_state.mem_buf->len, false)) {
         gdb_put_packet("E14");
@@ -1324,8 +1288,8 @@ static void handle_write_all_regs(GArray *params, void *user_ctx)
     }
 
     cpu_synchronize_state(gdbserver_state.g_cpu);
-    len = strlen(get_param(params, 0)->data) / 2;
-    gdb_hextomem(gdbserver_state.mem_buf, get_param(params, 0)->data, len);
+    len = strlen(gdb_get_cmd_param(params, 0)->data) / 2;
+    gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 0)->data, len);
     registers = gdbserver_state.mem_buf->data;
     for (reg_id = 0;
          reg_id < gdbserver_state.g_cpu->gdb_num_g_regs && len > 0;
@@ -1360,7 +1324,7 @@ static void handle_read_all_regs(GArray *params, void *user_ctx)
 static void handle_step(GArray *params, void *user_ctx)
 {
     if (params->len) {
-        gdb_set_cpu_pc(get_param(params, 0)->val_ull);
+        gdb_set_cpu_pc(gdb_get_cmd_param(params, 0)->val_ull);
     }
 
     cpu_single_step(gdbserver_state.c_cpu, gdbserver_state.sstep_flags);
@@ -1373,7 +1337,7 @@ static void handle_backward(GArray *params, void *user_ctx)
         gdb_put_packet("E22");
     }
     if (params->len == 1) {
-        switch (get_param(params, 0)->opcode) {
+        switch (gdb_get_cmd_param(params, 0)->opcode) {
         case 's':
             if (replay_reverse_step()) {
                 gdb_continue();
@@ -1408,7 +1372,7 @@ static void handle_v_cont(GArray *params, void *user_ctx)
         return;
     }
 
-    res = gdb_handle_vcont(get_param(params, 0)->data);
+    res = gdb_handle_vcont(gdb_get_cmd_param(params, 0)->data);
     if ((res == -EINVAL) || (res == -ERANGE)) {
         gdb_put_packet("E22");
     } else if (res) {
@@ -1426,7 +1390,7 @@ static void handle_v_attach(GArray *params, void *user_ctx)
         goto cleanup;
     }
 
-    process = gdb_get_process(get_param(params, 0)->val_ul);
+    process = gdb_get_process(gdb_get_cmd_param(params, 0)->val_ul);
     if (!process) {
         goto cleanup;
     }
@@ -1523,7 +1487,7 @@ static void handle_v_commands(GArray *params, void *user_ctx)
         return;
     }
 
-    if (!process_string_cmd(get_param(params, 0)->data,
+    if (!process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                             gdb_v_commands_table,
                             ARRAY_SIZE(gdb_v_commands_table))) {
         gdb_put_packet("");
@@ -1555,7 +1519,7 @@ static void handle_set_qemu_sstep(GArray *params, void *user_ctx)
         return;
     }
 
-    new_sstep_flags = get_param(params, 0)->val_ul;
+    new_sstep_flags = gdb_get_cmd_param(params, 0)->val_ul;
 
     if (new_sstep_flags  & ~gdbserver_state.supported_sstep_flags) {
         gdb_put_packet("E22");
@@ -1615,13 +1579,13 @@ static void handle_query_thread_extra(GArray *params, void *user_ctx)
     CPUState *cpu;
 
     if (!params->len ||
-        get_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
+        gdb_get_cmd_param(params, 0)->thread_id.kind == GDB_READ_THREAD_ERR) {
         gdb_put_packet("E22");
         return;
     }
 
-    cpu = gdb_get_cpu(get_param(params, 0)->thread_id.pid,
-                      get_param(params, 0)->thread_id.tid);
+    cpu = gdb_get_cpu(gdb_get_cmd_param(params, 0)->thread_id.pid,
+                      gdb_get_cmd_param(params, 0)->thread_id.tid);
     if (!cpu) {
         return;
     }
@@ -1673,7 +1637,7 @@ static void handle_query_supported(GArray *params, void *user_ctx)
 #endif
 
     if (params->len) {
-        const char *gdb_supported = get_param(params, 0)->data;
+        const char *gdb_supported = gdb_get_cmd_param(params, 0)->data;
 
         if (strstr(gdb_supported, "multiprocess+")) {
             gdbserver_state.multiprocess = true;
@@ -1707,15 +1671,15 @@ static void handle_query_xfer_features(GArray *params, void *user_ctx)
         return;
     }
 
-    p = get_param(params, 0)->data;
+    p = gdb_get_cmd_param(params, 0)->data;
     xml = get_feature_xml(p, &p, process);
     if (!xml) {
         gdb_put_packet("E00");
         return;
     }
 
-    addr = get_param(params, 1)->val_ul;
-    len = get_param(params, 2)->val_ul;
+    addr = gdb_get_cmd_param(params, 1)->val_ul;
+    len = gdb_get_cmd_param(params, 2)->val_ul;
     total_len = strlen(xml);
     if (addr > total_len) {
         gdb_put_packet("E00");
@@ -1889,13 +1853,13 @@ static void handle_gen_query(GArray *params, void *user_ctx)
         return;
     }
 
-    if (process_string_cmd(get_param(params, 0)->data,
+    if (process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                            gdb_gen_query_set_common_table,
                            ARRAY_SIZE(gdb_gen_query_set_common_table))) {
         return;
     }
 
-    if (!process_string_cmd(get_param(params, 0)->data,
+    if (!process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                             gdb_gen_query_table,
                             ARRAY_SIZE(gdb_gen_query_table))) {
         gdb_put_packet("");
@@ -1908,13 +1872,13 @@ static void handle_gen_set(GArray *params, void *user_ctx)
         return;
     }
 
-    if (process_string_cmd(get_param(params, 0)->data,
+    if (process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                            gdb_gen_query_set_common_table,
                            ARRAY_SIZE(gdb_gen_query_set_common_table))) {
         return;
     }
 
-    if (!process_string_cmd(get_param(params, 0)->data,
+    if (!process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                            gdb_gen_set_table,
                            ARRAY_SIZE(gdb_gen_set_table))) {
         gdb_put_packet("");
diff --git a/gdbstub/syscalls.c b/gdbstub/syscalls.c
index 02e3a8f74c..4e1295b782 100644
--- a/gdbstub/syscalls.c
+++ b/gdbstub/syscalls.c
@@ -16,6 +16,7 @@
 #include "sysemu/runstate.h"
 #include "gdbstub/user.h"
 #include "gdbstub/syscalls.h"
+#include "gdbstub/commands.h"
 #include "trace.h"
 #include "internals.h"
 
@@ -154,9 +155,9 @@ void gdb_handle_file_io(GArray *params, void *user_ctx)
         uint64_t ret;
         int err;
 
-        ret = get_param(params, 0)->val_ull;
+        ret = gdb_get_cmd_param(params, 0)->val_ull;
         if (params->len >= 2) {
-            err = get_param(params, 1)->val_ull;
+            err = gdb_get_cmd_param(params, 1)->val_ull;
         } else {
             err = 0;
         }
@@ -196,7 +197,7 @@ void gdb_handle_file_io(GArray *params, void *user_ctx)
         gdbserver_syscall_state.current_syscall_cb = NULL;
     }
 
-    if (params->len >= 3 && get_param(params, 2)->opcode == (uint8_t)'C') {
+    if (params->len >= 3 && gdb_get_cmd_param(params, 2)->opcode == (uint8_t)'C') {
         gdb_put_packet("T02");
         return;
     }
diff --git a/gdbstub/system.c b/gdbstub/system.c
index d235403855..1ad87fe7fd 100644
--- a/gdbstub/system.c
+++ b/gdbstub/system.c
@@ -16,6 +16,7 @@
 #include "qemu/cutils.h"
 #include "exec/gdbstub.h"
 #include "gdbstub/syscalls.h"
+#include "gdbstub/commands.h"
 #include "exec/hwaddr.h"
 #include "exec/tb-flush.h"
 #include "sysemu/cpus.h"
@@ -501,7 +502,7 @@ void gdb_handle_set_qemu_phy_mem_mode(GArray *params, void *ctx)
         return;
     }
 
-    if (!get_param(params, 0)->val_ul) {
+    if (!gdb_get_cmd_param(params, 0)->val_ul) {
         phy_memory_mode = 0;
     } else {
         phy_memory_mode = 1;
@@ -519,7 +520,7 @@ void gdb_handle_query_rcmd(GArray *params, void *ctx)
         return;
     }
 
-    len = strlen(get_param(params, 0)->data);
+    len = strlen(gdb_get_cmd_param(params, 0)->data);
     if (len % 2) {
         gdb_put_packet("E01");
         return;
@@ -527,7 +528,7 @@ void gdb_handle_query_rcmd(GArray *params, void *ctx)
 
     g_assert(gdbserver_state.mem_buf->len == 0);
     len = len / 2;
-    gdb_hextomem(gdbserver_state.mem_buf, get_param(params, 0)->data, len);
+    gdb_hextomem(gdbserver_state.mem_buf, gdb_get_cmd_param(params, 0)->data, len);
     g_byte_array_append(gdbserver_state.mem_buf, &zero, 1);
     qemu_chr_be_write(gdbserver_system_state.mon_chr,
                       gdbserver_state.mem_buf->data,
diff --git a/gdbstub/user-target.c b/gdbstub/user-target.c
index a9c6c64512..b5e01fd8b0 100644
--- a/gdbstub/user-target.c
+++ b/gdbstub/user-target.c
@@ -9,6 +9,7 @@
 
 #include "qemu/osdep.h"
 #include "exec/gdbstub.h"
+#include "gdbstub/commands.h"
 #include "qemu.h"
 #include "internals.h"
 #ifdef CONFIG_LINUX
@@ -250,8 +251,8 @@ void gdb_handle_query_xfer_auxv(GArray *params, void *user_ctx)
         return;
     }
 
-    offset = get_param(params, 0)->val_ul;
-    len = get_param(params, 1)->val_ul;
+    offset = gdb_get_cmd_param(params, 0)->val_ul;
+    len = gdb_get_cmd_param(params, 1)->val_ul;
     ts = get_task_state(gdbserver_state.c_cpu);
     saved_auxv = ts->info->saved_auxv;
     auxv_len = ts->info->auxv_len;
@@ -288,7 +289,7 @@ void gdb_handle_query_xfer_auxv(GArray *params, void *user_ctx)
 
 static const char *get_filename_param(GArray *params, int i)
 {
-    const char *hex_filename = get_param(params, i)->data;
+    const char *hex_filename = gdb_get_cmd_param(params, i)->data;
     gdb_hextomem(gdbserver_state.mem_buf, hex_filename,
                  strlen(hex_filename) / 2);
     g_byte_array_append(gdbserver_state.mem_buf, (const guint8 *)"", 1);
@@ -306,8 +307,8 @@ static void hostio_reply_with_data(const void *buf, size_t n)
 void gdb_handle_v_file_open(GArray *params, void *user_ctx)
 {
     const char *filename = get_filename_param(params, 0);
-    uint64_t flags = get_param(params, 1)->val_ull;
-    uint64_t mode = get_param(params, 2)->val_ull;
+    uint64_t flags = gdb_get_cmd_param(params, 1)->val_ull;
+    uint64_t mode = gdb_get_cmd_param(params, 2)->val_ull;
 
 #ifdef CONFIG_LINUX
     int fd = do_guest_openat(cpu_env(gdbserver_state.g_cpu), 0, filename,
@@ -325,7 +326,7 @@ void gdb_handle_v_file_open(GArray *params, void *user_ctx)
 
 void gdb_handle_v_file_close(GArray *params, void *user_ctx)
 {
-    int fd = get_param(params, 0)->val_ul;
+    int fd = gdb_get_cmd_param(params, 0)->val_ul;
 
     if (close(fd) == -1) {
         g_string_printf(gdbserver_state.str_buf, "F-1,%d", errno);
@@ -338,9 +339,9 @@ void gdb_handle_v_file_close(GArray *params, void *user_ctx)
 
 void gdb_handle_v_file_pread(GArray *params, void *user_ctx)
 {
-    int fd = get_param(params, 0)->val_ul;
-    size_t count = get_param(params, 1)->val_ull;
-    off_t offset = get_param(params, 2)->val_ull;
+    int fd = gdb_get_cmd_param(params, 0)->val_ul;
+    size_t count = gdb_get_cmd_param(params, 1)->val_ull;
+    off_t offset = gdb_get_cmd_param(params, 2)->val_ull;
 
     size_t bufsiz = MIN(count, BUFSIZ);
     g_autofree char *buf = g_try_malloc(bufsiz);
@@ -383,9 +384,9 @@ void gdb_handle_v_file_readlink(GArray *params, void *user_ctx)
 
 void gdb_handle_query_xfer_exec_file(GArray *params, void *user_ctx)
 {
-    uint32_t pid = get_param(params, 0)->val_ul;
-    uint32_t offset = get_param(params, 1)->val_ul;
-    uint32_t length = get_param(params, 2)->val_ul;
+    uint32_t pid = gdb_get_cmd_param(params, 0)->val_ul;
+    uint32_t offset = gdb_get_cmd_param(params, 1)->val_ul;
+    uint32_t length = gdb_get_cmd_param(params, 2)->val_ul;
 
     GDBProcess *process = gdb_get_process(pid);
     if (!process) {
diff --git a/gdbstub/user.c b/gdbstub/user.c
index e34b58b407..b36033bc7a 100644
--- a/gdbstub/user.c
+++ b/gdbstub/user.c
@@ -16,6 +16,7 @@
 #include "exec/hwaddr.h"
 #include "exec/tb-flush.h"
 #include "exec/gdbstub.h"
+#include "gdbstub/commands.h"
 #include "gdbstub/syscalls.h"
 #include "gdbstub/user.h"
 #include "gdbstub/enums.h"
@@ -793,7 +794,7 @@ void gdb_syscall_return(CPUState *cs, int num)
 
 void gdb_handle_set_catch_syscalls(GArray *params, void *user_ctx)
 {
-    const char *param = get_param(params, 0)->data;
+    const char *param = gdb_get_cmd_param(params, 0)->data;
     GDBSyscallsMask catch_syscalls_mask;
     bool catch_all_syscalls;
     unsigned int num;
@@ -858,8 +859,8 @@ void gdb_handle_query_xfer_siginfo(GArray *params, void *user_ctx)
     unsigned long offset, len;
     uint8_t *siginfo_offset;
 
-    offset = get_param(params, 0)->val_ul;
-    len = get_param(params, 1)->val_ul;
+    offset = gdb_get_cmd_param(params, 0)->val_ul;
+    len = gdb_get_cmd_param(params, 1)->val_ul;
 
     if (offset + len > gdbserver_user_state.siginfo_len) {
         /* Invalid offset and/or requested length. */
-- 
2.39.2



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

* [PATCH v2 32/40] gdbstub: Add support for target-specific stubs
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (30 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 31/40] gdbstub: Move GdbCmdParseEntry into a new header file Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 33/40] target/arm: Fix exception case in allocation_tag_mem_probe Alex Bennée
                   ` (7 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Currently, it's not possible to have stubs specific to a given target,
even though there are GDB features which are target-specific, like, for
instance, memory tagging.

This commit introduces gdb_extend_qsupported_features,
gdb_extend_query_table, and gdb_extend_set_table functions as interfaces
to extend the qSupported string, the query handler table, and the set
handler table, allowing target-specific stub implementations.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-4-gustavo.romero@linaro.org>
---
 include/gdbstub/commands.h |  22 ++++++++
 gdbstub/gdbstub.c          | 102 ++++++++++++++++++++++++++++++++++---
 2 files changed, 118 insertions(+), 6 deletions(-)

diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h
index 639257493e..306dfdef97 100644
--- a/include/gdbstub/commands.h
+++ b/include/gdbstub/commands.h
@@ -69,4 +69,26 @@ typedef struct GdbCmdParseEntry {
  */
 int gdb_put_packet(const char *buf);
 
+/**
+ * gdb_extend_query_table() - Extend query table.
+ * @table: The table with the additional query packet handlers.
+ * @size: The number of handlers to be added.
+ */
+void gdb_extend_query_table(GdbCmdParseEntry *table, int size);
+
+/**
+ * gdb_extend_set_table() - Extend set table.
+ * @table: The table with the additional set packet handlers.
+ * @size: The number of handlers to be added.
+ */
+void gdb_extend_set_table(GdbCmdParseEntry *table, int size);
+
+/**
+ * gdb_extend_qsupported_features() - Extend the qSupported features string.
+ * @qsupported_features: The additional qSupported feature(s) string. The string
+ * should start with a semicolon and, if there are more than one feature, the
+ * features should be separate by a semiocolon.
+ */
+void gdb_extend_qsupported_features(char *qsupported_features);
+
 #endif /* GDBSTUB_COMMANDS_H */
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 9ff2f4177d..b1ca253f97 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -1609,6 +1609,20 @@ static void handle_query_thread_extra(GArray *params, void *user_ctx)
     gdb_put_strbuf();
 }
 
+static char *extended_qsupported_features;
+void gdb_extend_qsupported_features(char *qsupported_features)
+{
+    /*
+     * We don't support different sets of CPU gdb features on different CPUs yet
+     * so assert the feature strings are the same on all CPUs, or is set only
+     * once (1 CPU).
+     */
+    g_assert(extended_qsupported_features == NULL ||
+             g_strcmp0(extended_qsupported_features, qsupported_features) == 0);
+
+    extended_qsupported_features = qsupported_features;
+}
+
 static void handle_query_supported(GArray *params, void *user_ctx)
 {
     CPUClass *cc;
@@ -1648,6 +1662,11 @@ static void handle_query_supported(GArray *params, void *user_ctx)
     }
 
     g_string_append(gdbserver_state.str_buf, ";vContSupported+;multiprocess+");
+
+    if (extended_qsupported_features) {
+        g_string_append(gdbserver_state.str_buf, extended_qsupported_features);
+    }
+
     gdb_put_strbuf();
 }
 
@@ -1729,6 +1748,41 @@ static const GdbCmdParseEntry gdb_gen_query_set_common_table[] = {
     },
 };
 
+/* Compares if a set of command parsers is equal to another set of parsers. */
+static bool cmp_cmds(GdbCmdParseEntry *c, GdbCmdParseEntry *d, int size)
+{
+    for (int i = 0; i < size; i++) {
+        if (!(c[i].handler == d[i].handler &&
+            g_strcmp0(c[i].cmd, d[i].cmd) == 0 &&
+            c[i].cmd_startswith == d[i].cmd_startswith &&
+            g_strcmp0(c[i].schema, d[i].schema) == 0)) {
+
+            /* Sets are different. */
+            return false;
+        }
+    }
+
+    /* Sets are equal, i.e. contain the same command parsers. */
+    return true;
+}
+
+static GdbCmdParseEntry *extended_query_table;
+static int extended_query_table_size;
+void gdb_extend_query_table(GdbCmdParseEntry *table, int size)
+{
+    /*
+     * We don't support different sets of CPU gdb features on different CPUs yet
+     * so assert query table is the same on all CPUs, or is set only once
+     * (1 CPU).
+     */
+    g_assert(extended_query_table == NULL ||
+             (extended_query_table_size == size &&
+              cmp_cmds(extended_query_table, table, size)));
+
+    extended_query_table = table;
+    extended_query_table_size = size;
+}
+
 static const GdbCmdParseEntry gdb_gen_query_table[] = {
     {
         .handler = handle_query_curr_tid,
@@ -1821,6 +1875,22 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
 #endif
 };
 
+static GdbCmdParseEntry *extended_set_table;
+static int extended_set_table_size;
+void gdb_extend_set_table(GdbCmdParseEntry *table, int size)
+{
+    /*
+     * We don't support different sets of CPU gdb features on different CPUs yet
+     * so assert set table is the same on all CPUs, or is set only once (1 CPU).
+     */
+    g_assert(extended_set_table == NULL ||
+             (extended_set_table_size == size &&
+              cmp_cmds(extended_set_table, table, size)));
+
+    extended_set_table = table;
+    extended_set_table_size = size;
+}
+
 static const GdbCmdParseEntry gdb_gen_set_table[] = {
     /* Order is important if has same prefix */
     {
@@ -1859,11 +1929,21 @@ static void handle_gen_query(GArray *params, void *user_ctx)
         return;
     }
 
-    if (!process_string_cmd(gdb_get_cmd_param(params, 0)->data,
-                            gdb_gen_query_table,
-                            ARRAY_SIZE(gdb_gen_query_table))) {
-        gdb_put_packet("");
+    if (process_string_cmd(gdb_get_cmd_param(params, 0)->data,
+                           gdb_gen_query_table,
+                           ARRAY_SIZE(gdb_gen_query_table))) {
+        return;
+    }
+
+    if (extended_query_table &&
+        process_string_cmd(gdb_get_cmd_param(params, 0)->data,
+                           extended_query_table,
+                           extended_query_table_size)) {
+        return;
     }
+
+    /* Can't handle query, return Empty response. */
+    gdb_put_packet("");
 }
 
 static void handle_gen_set(GArray *params, void *user_ctx)
@@ -1878,11 +1958,21 @@ static void handle_gen_set(GArray *params, void *user_ctx)
         return;
     }
 
-    if (!process_string_cmd(gdb_get_cmd_param(params, 0)->data,
+    if (process_string_cmd(gdb_get_cmd_param(params, 0)->data,
                            gdb_gen_set_table,
                            ARRAY_SIZE(gdb_gen_set_table))) {
-        gdb_put_packet("");
+        return;
     }
+
+    if (extended_set_table &&
+        process_string_cmd(gdb_get_cmd_param(params, 0)->data,
+                           extended_set_table,
+                           extended_set_table_size)) {
+        return;
+    }
+
+    /* Can't handle set, return Empty response. */
+    gdb_put_packet("");
 }
 
 static void handle_target_halt(GArray *params, void *user_ctx)
-- 
2.39.2



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

* [PATCH v2 33/40] target/arm: Fix exception case in allocation_tag_mem_probe
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (31 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 32/40] gdbstub: Add support for target-specific stubs Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 34/40] target/arm: Make some MTE helpers widely available Alex Bennée
                   ` (6 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

If page in 'ptr_access' is inaccessible and probe is 'true'
allocation_tag_mem_probe should not throw an exception, but currently it
does, so fix it.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-5-gustavo.romero@linaro.org>
---
 target/arm/tcg/mte_helper.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c
index 037ac6dd60..a50d576294 100644
--- a/target/arm/tcg/mte_helper.c
+++ b/target/arm/tcg/mte_helper.c
@@ -96,6 +96,9 @@ static uint8_t *allocation_tag_mem_probe(CPUARMState *env, int ptr_mmu_idx,
     assert(!(probe && ra));
 
     if (!(flags & (ptr_access == MMU_DATA_STORE ? PAGE_WRITE_ORG : PAGE_READ))) {
+        if (probe) {
+            return NULL;
+        }
         cpu_loop_exit_sigsegv(env_cpu(env), ptr, ptr_access,
                               !(flags & PAGE_VALID), ra);
     }
-- 
2.39.2



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

* [PATCH v2 34/40] target/arm: Make some MTE helpers widely available
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (32 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 33/40] target/arm: Fix exception case in allocation_tag_mem_probe Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field Alex Bennée
                   ` (5 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Make the MTE helpers allocation_tag_mem_probe, load_tag1, and store_tag1
available to other subsystems.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-6-gustavo.romero@linaro.org>
---
 target/arm/tcg/mte_helper.h | 66 +++++++++++++++++++++++++++++++++++++
 target/arm/tcg/mte_helper.c | 45 ++++---------------------
 2 files changed, 73 insertions(+), 38 deletions(-)
 create mode 100644 target/arm/tcg/mte_helper.h

diff --git a/target/arm/tcg/mte_helper.h b/target/arm/tcg/mte_helper.h
new file mode 100644
index 0000000000..1f471fb69b
--- /dev/null
+++ b/target/arm/tcg/mte_helper.h
@@ -0,0 +1,66 @@
+/*
+ * ARM MemTag operation helpers.
+ *
+ * This code is licensed under the GNU GPL v2 or later.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef TARGET_ARM_MTE_H
+#define TARGET_ARM_MTE_H
+
+#include "exec/mmu-access-type.h"
+
+/**
+ * allocation_tag_mem_probe:
+ * @env: the cpu environment
+ * @ptr_mmu_idx: the addressing regime to use for the virtual address
+ * @ptr: the virtual address for which to look up tag memory
+ * @ptr_access: the access to use for the virtual address
+ * @ptr_size: the number of bytes in the normal memory access
+ * @tag_access: the access to use for the tag memory
+ * @probe: true to merely probe, never taking an exception
+ * @ra: the return address for exception handling
+ *
+ * Our tag memory is formatted as a sequence of little-endian nibbles.
+ * That is, the byte at (addr >> (LOG2_TAG_GRANULE + 1)) contains two
+ * tags, with the tag at [3:0] for the lower addr and the tag at [7:4]
+ * for the higher addr.
+ *
+ * Here, resolve the physical address from the virtual address, and return
+ * a pointer to the corresponding tag byte.
+ *
+ * If there is no tag storage corresponding to @ptr, return NULL.
+ *
+ * If the page is inaccessible for @ptr_access, or has a watchpoint, there are
+ * three options:
+ * (1) probe = true, ra = 0 : pure probe -- we return NULL if the page is not
+ *     accessible, and do not take watchpoint traps. The calling code must
+ *     handle those cases in the right priority compared to MTE traps.
+ * (2) probe = false, ra = 0 : probe, no fault expected -- the caller guarantees
+ *     that the page is going to be accessible. We will take watchpoint traps.
+ * (3) probe = false, ra != 0 : non-probe -- we will take both memory access
+ *     traps and watchpoint traps.
+ * (probe = true, ra != 0 is invalid and will assert.)
+ */
+uint8_t *allocation_tag_mem_probe(CPUARMState *env, int ptr_mmu_idx,
+                                  uint64_t ptr, MMUAccessType ptr_access,
+                                  int ptr_size, MMUAccessType tag_access,
+                                  bool probe, uintptr_t ra);
+
+/**
+ * load_tag1 - Load 1 tag (nibble) from byte
+ * @ptr: The tagged address
+ * @mem: The tag address (packed, 2 tags in byte)
+ */
+int load_tag1(uint64_t ptr, uint8_t *mem);
+
+/**
+ * store_tag1 - Store 1 tag (nibble) into byte
+ * @ptr: The tagged address
+ * @mem: The tag address (packed, 2 tags in byte)
+ * @tag: The tag to be stored in the nibble
+ */
+void store_tag1(uint64_t ptr, uint8_t *mem, int tag);
+
+#endif /* TARGET_ARM_MTE_H */
diff --git a/target/arm/tcg/mte_helper.c b/target/arm/tcg/mte_helper.c
index a50d576294..9d2ba287ee 100644
--- a/target/arm/tcg/mte_helper.c
+++ b/target/arm/tcg/mte_helper.c
@@ -29,6 +29,7 @@
 #include "hw/core/tcg-cpu-ops.h"
 #include "qapi/error.h"
 #include "qemu/guest-random.h"
+#include "mte_helper.h"
 
 
 static int choose_nonexcluded_tag(int tag, int offset, uint16_t exclude)
@@ -50,42 +51,10 @@ static int choose_nonexcluded_tag(int tag, int offset, uint16_t exclude)
     return tag;
 }
 
-/**
- * allocation_tag_mem_probe:
- * @env: the cpu environment
- * @ptr_mmu_idx: the addressing regime to use for the virtual address
- * @ptr: the virtual address for which to look up tag memory
- * @ptr_access: the access to use for the virtual address
- * @ptr_size: the number of bytes in the normal memory access
- * @tag_access: the access to use for the tag memory
- * @probe: true to merely probe, never taking an exception
- * @ra: the return address for exception handling
- *
- * Our tag memory is formatted as a sequence of little-endian nibbles.
- * That is, the byte at (addr >> (LOG2_TAG_GRANULE + 1)) contains two
- * tags, with the tag at [3:0] for the lower addr and the tag at [7:4]
- * for the higher addr.
- *
- * Here, resolve the physical address from the virtual address, and return
- * a pointer to the corresponding tag byte.
- *
- * If there is no tag storage corresponding to @ptr, return NULL.
- *
- * If the page is inaccessible for @ptr_access, or has a watchpoint, there are
- * three options:
- * (1) probe = true, ra = 0 : pure probe -- we return NULL if the page is not
- *     accessible, and do not take watchpoint traps. The calling code must
- *     handle those cases in the right priority compared to MTE traps.
- * (2) probe = false, ra = 0 : probe, no fault expected -- the caller guarantees
- *     that the page is going to be accessible. We will take watchpoint traps.
- * (3) probe = false, ra != 0 : non-probe -- we will take both memory access
- *     traps and watchpoint traps.
- * (probe = true, ra != 0 is invalid and will assert.)
- */
-static uint8_t *allocation_tag_mem_probe(CPUARMState *env, int ptr_mmu_idx,
-                                         uint64_t ptr, MMUAccessType ptr_access,
-                                         int ptr_size, MMUAccessType tag_access,
-                                         bool probe, uintptr_t ra)
+uint8_t *allocation_tag_mem_probe(CPUARMState *env, int ptr_mmu_idx,
+                                  uint64_t ptr, MMUAccessType ptr_access,
+                                  int ptr_size, MMUAccessType tag_access,
+                                  bool probe, uintptr_t ra)
 {
 #ifdef CONFIG_USER_ONLY
     uint64_t clean_ptr = useronly_clean_ptr(ptr);
@@ -287,7 +256,7 @@ uint64_t HELPER(addsubg)(CPUARMState *env, uint64_t ptr,
     return address_with_allocation_tag(ptr + offset, rtag);
 }
 
-static int load_tag1(uint64_t ptr, uint8_t *mem)
+int load_tag1(uint64_t ptr, uint8_t *mem)
 {
     int ofs = extract32(ptr, LOG2_TAG_GRANULE, 1) * 4;
     return extract32(*mem, ofs, 4);
@@ -321,7 +290,7 @@ static void check_tag_aligned(CPUARMState *env, uint64_t ptr, uintptr_t ra)
 }
 
 /* For use in a non-parallel context, store to the given nibble.  */
-static void store_tag1(uint64_t ptr, uint8_t *mem, int tag)
+void store_tag1(uint64_t ptr, uint8_t *mem, int tag)
 {
     int ofs = extract32(ptr, LOG2_TAG_GRANULE, 1) * 4;
     *mem = deposit32(*mem, ofs, 4, tag);
-- 
2.39.2



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

* [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (33 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 34/40] target/arm: Make some MTE helpers widely available Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:07   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 36/40] gdbstub: Make hex conversion function non-internal Alex Bennée
                   ` (4 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Factor out the code used for setting the MTE TCF0 field from the prctl
code into a convenient function. Other subsystems, like gdbstub, need to
set this field as well, so keep it as a separate function to avoid
duplication and ensure consistency in how this field is set across the
board.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Message-Id: <20240628050850.536447-7-gustavo.romero@linaro.org>
[AJB: clean-up includes, move MTE defines]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
vAJB:
  - clean-up includes, move MTE defines
---
 linux-user/aarch64/mte_user_helper.h | 32 +++++++++++++++++++++++++
 linux-user/aarch64/target_prctl.h    | 22 ++---------------
 linux-user/aarch64/mte_user_helper.c | 35 ++++++++++++++++++++++++++++
 linux-user/syscall.c                 |  9 -------
 linux-user/aarch64/meson.build       |  2 ++
 5 files changed, 71 insertions(+), 29 deletions(-)
 create mode 100644 linux-user/aarch64/mte_user_helper.h
 create mode 100644 linux-user/aarch64/mte_user_helper.c

diff --git a/linux-user/aarch64/mte_user_helper.h b/linux-user/aarch64/mte_user_helper.h
new file mode 100644
index 0000000000..8685e5175a
--- /dev/null
+++ b/linux-user/aarch64/mte_user_helper.h
@@ -0,0 +1,32 @@
+/*
+ * ARM MemTag convenience functions.
+ *
+ * This code is licensed under the GNU GPL v2 or later.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef AARCH64_MTE_USER_HELPER_H
+#define AARCH64_MTE USER_HELPER_H
+
+#ifndef PR_MTE_TCF_SHIFT
+# define PR_MTE_TCF_SHIFT       1
+# define PR_MTE_TCF_NONE        (0UL << PR_MTE_TCF_SHIFT)
+# define PR_MTE_TCF_SYNC        (1UL << PR_MTE_TCF_SHIFT)
+# define PR_MTE_TCF_ASYNC       (2UL << PR_MTE_TCF_SHIFT)
+# define PR_MTE_TCF_MASK        (3UL << PR_MTE_TCF_SHIFT)
+# define PR_MTE_TAG_SHIFT       3
+# define PR_MTE_TAG_MASK        (0xffffUL << PR_MTE_TAG_SHIFT)
+#endif
+
+/**
+ * arm_set_mte_tcf0 - Set TCF0 field in SCTLR_EL1 register
+ * @env: The CPU environment
+ * @value: The value to be set for the Tag Check Fault in EL0 field.
+ *
+ * Only SYNC and ASYNC modes can be selected. If ASYMM mode is given, the SYNC
+ * mode is selected instead. So, there is no way to set the ASYMM mode.
+ */
+void arm_set_mte_tcf0(CPUArchState *env, abi_long value);
+
+#endif /* AARCH64_MTE_USER_HELPER_H */
diff --git a/linux-user/aarch64/target_prctl.h b/linux-user/aarch64/target_prctl.h
index aa8e203c15..ed75b9e4b5 100644
--- a/linux-user/aarch64/target_prctl.h
+++ b/linux-user/aarch64/target_prctl.h
@@ -7,6 +7,7 @@
 #define AARCH64_TARGET_PRCTL_H
 
 #include "target/arm/cpu-features.h"
+#include "mte_user_helper.h"
 
 static abi_long do_prctl_sve_get_vl(CPUArchState *env)
 {
@@ -173,26 +174,7 @@ static abi_long do_prctl_set_tagged_addr_ctrl(CPUArchState *env, abi_long arg2)
     env->tagged_addr_enable = arg2 & PR_TAGGED_ADDR_ENABLE;
 
     if (cpu_isar_feature(aa64_mte, cpu)) {
-        /*
-         * Write PR_MTE_TCF to SCTLR_EL1[TCF0].
-         *
-         * The kernel has a per-cpu configuration for the sysadmin,
-         * /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred,
-         * which qemu does not implement.
-         *
-         * Because there is no performance difference between the modes, and
-         * because SYNC is most useful for debugging MTE errors, choose SYNC
-         * as the preferred mode.  With this preference, and the way the API
-         * uses only two bits, there is no way for the program to select
-         * ASYMM mode.
-         */
-        unsigned tcf = 0;
-        if (arg2 & PR_MTE_TCF_SYNC) {
-            tcf = 1;
-        } else if (arg2 & PR_MTE_TCF_ASYNC) {
-            tcf = 2;
-        }
-        env->cp15.sctlr_el[1] = deposit64(env->cp15.sctlr_el[1], 38, 2, tcf);
+        arm_set_mte_tcf0(env, arg2);
 
         /*
          * Write PR_MTE_TAG to GCR_EL1[Exclude].
diff --git a/linux-user/aarch64/mte_user_helper.c b/linux-user/aarch64/mte_user_helper.c
new file mode 100644
index 0000000000..a5b1c8503b
--- /dev/null
+++ b/linux-user/aarch64/mte_user_helper.c
@@ -0,0 +1,35 @@
+/*
+ * ARM MemTag convenience functions.
+ *
+ * This code is licensed under the GNU GPL v2 or later.
+ *
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu.h"
+#include "mte_user_helper.h"
+
+void arm_set_mte_tcf0(CPUArchState *env, abi_long value)
+{
+    /*
+     * Write PR_MTE_TCF to SCTLR_EL1[TCF0].
+     *
+     * The kernel has a per-cpu configuration for the sysadmin,
+     * /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred,
+     * which qemu does not implement.
+     *
+     * Because there is no performance difference between the modes, and
+     * because SYNC is most useful for debugging MTE errors, choose SYNC
+     * as the preferred mode.  With this preference, and the way the API
+     * uses only two bits, there is no way for the program to select
+     * ASYMM mode.
+     */
+    unsigned tcf = 0;
+    if (value & PR_MTE_TCF_SYNC) {
+        tcf = 1;
+    } else if (value & PR_MTE_TCF_ASYNC) {
+        tcf = 2;
+    }
+    env->cp15.sctlr_el[1] = deposit64(env->cp15.sctlr_el[1], 38, 2, tcf);
+}
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index e2804312fc..b8c278b91d 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6281,15 +6281,6 @@ abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr)
 # define PR_GET_TAGGED_ADDR_CTRL 56
 # define PR_TAGGED_ADDR_ENABLE  (1UL << 0)
 #endif
-#ifndef PR_MTE_TCF_SHIFT
-# define PR_MTE_TCF_SHIFT       1
-# define PR_MTE_TCF_NONE        (0UL << PR_MTE_TCF_SHIFT)
-# define PR_MTE_TCF_SYNC        (1UL << PR_MTE_TCF_SHIFT)
-# define PR_MTE_TCF_ASYNC       (2UL << PR_MTE_TCF_SHIFT)
-# define PR_MTE_TCF_MASK        (3UL << PR_MTE_TCF_SHIFT)
-# define PR_MTE_TAG_SHIFT       3
-# define PR_MTE_TAG_MASK        (0xffffUL << PR_MTE_TAG_SHIFT)
-#endif
 #ifndef PR_SET_IO_FLUSHER
 # define PR_SET_IO_FLUSHER 57
 # define PR_GET_IO_FLUSHER 58
diff --git a/linux-user/aarch64/meson.build b/linux-user/aarch64/meson.build
index 248c578d15..f75bb3cd75 100644
--- a/linux-user/aarch64/meson.build
+++ b/linux-user/aarch64/meson.build
@@ -9,3 +9,5 @@ vdso_le_inc = gen_vdso.process('vdso-le.so',
                                extra_args: ['-r', '__kernel_rt_sigreturn'])
 
 linux_user_ss.add(when: 'TARGET_AARCH64', if_true: [vdso_be_inc, vdso_le_inc])
+
+linux_user_ss.add(when: 'TARGET_AARCH64', if_true: [files('mte_user_helper.c')])
-- 
2.39.2



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

* [PATCH v2 36/40] gdbstub: Make hex conversion function non-internal
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (34 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 37/40] gdbstub: Pass CPU context to command handler Alex Bennée
                   ` (3 subsequent siblings)
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Make gdb_hextomem non-internal so it's not confined to use only in
gdbstub.c.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-8-gustavo.romero@linaro.org>
---
 gdbstub/internals.h        | 1 -
 include/gdbstub/commands.h | 6 ++++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/gdbstub/internals.h b/gdbstub/internals.h
index 34121dc61a..bf5a5c6302 100644
--- a/gdbstub/internals.h
+++ b/gdbstub/internals.h
@@ -107,7 +107,6 @@ static inline int tohex(int v)
 
 void gdb_put_strbuf(void);
 int gdb_put_packet_binary(const char *buf, int len, bool dump);
-void gdb_hextomem(GByteArray *mem, const char *buf, int len);
 void gdb_memtohex(GString *buf, const uint8_t *mem, int len);
 void gdb_memtox(GString *buf, const char *mem, int len);
 void gdb_read_byte(uint8_t ch);
diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h
index 306dfdef97..e51f276b40 100644
--- a/include/gdbstub/commands.h
+++ b/include/gdbstub/commands.h
@@ -91,4 +91,10 @@ void gdb_extend_set_table(GdbCmdParseEntry *table, int size);
  */
 void gdb_extend_qsupported_features(char *qsupported_features);
 
+/**
+ * Convert a hex string to bytes. Conversion is done per byte, so 2 hex digits
+ * are converted to 1 byte. Invalid hex digits are treated as 0 digits.
+ */
+void gdb_hextomem(GByteArray *mem, const char *buf, int len);
+
 #endif /* GDBSTUB_COMMANDS_H */
-- 
2.39.2



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

* [PATCH v2 37/40] gdbstub: Pass CPU context to command handler
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (35 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 36/40] gdbstub: Make hex conversion function non-internal Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:08   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith Alex Bennée
                   ` (2 subsequent siblings)
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Allow passing the current CPU context to command handlers via user_ctx
when the handler requires it.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-9-gustavo.romero@linaro.org>
---
 include/gdbstub/commands.h | 3 +++
 gdbstub/gdbstub.c          | 7 ++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h
index e51f276b40..f3058f9dda 100644
--- a/include/gdbstub/commands.h
+++ b/include/gdbstub/commands.h
@@ -54,6 +54,8 @@ typedef union GdbCmdVariant {
  * "stop reply" packet. The list of commands that accept such response is
  * defined at the GDB Remote Serial Protocol documentation. See:
  * https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets.
+ *
+ * @need_cpu_context: Pass current CPU context to command handler via user_ctx.
  */
 typedef struct GdbCmdParseEntry {
     GdbCmdHandler handler;
@@ -61,6 +63,7 @@ typedef struct GdbCmdParseEntry {
     bool cmd_startswith;
     const char *schema;
     bool allow_stop_reply;
+    bool need_cpu_context;
 } GdbCmdParseEntry;
 
 /**
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index b1ca253f97..5c1612ed2a 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -938,6 +938,7 @@ static bool process_string_cmd(const char *data,
 
     for (i = 0; i < num_cmds; i++) {
         const GdbCmdParseEntry *cmd = &cmds[i];
+        void *user_ctx = NULL;
         g_assert(cmd->handler && cmd->cmd);
 
         if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) ||
@@ -952,8 +953,12 @@ static bool process_string_cmd(const char *data,
             }
         }
 
+        if (cmd->need_cpu_context) {
+            user_ctx = (void *)gdbserver_state.g_cpu;
+        }
+
         gdbserver_state.allow_stop_reply = cmd->allow_stop_reply;
-        cmd->handler(params, NULL);
+        cmd->handler(params, user_ctx);
         return true;
     }
 
-- 
2.39.2



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

* [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (36 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 37/40] gdbstub: Pass CPU context to command handler Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05 10:03   ` Manos Pitsidianakis
  2024-07-05  8:40 ` [PATCH v2 39/40] gdbstub: Add support for MTE in user mode Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 40/40] tests/tcg/aarch64: Add MTE gdbstub tests Alex Bennée
  39 siblings, 1 reply; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

cmd_startswith is a boolean so use 'true' to set it instead of 1.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-10-gustavo.romero@linaro.org>
---
 gdbstub/gdbstub.c | 80 +++++++++++++++++++++++------------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 5c1612ed2a..b9ad0a063e 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -1433,26 +1433,26 @@ static const GdbCmdParseEntry gdb_v_commands_table[] = {
     {
         .handler = handle_v_cont_query,
         .cmd = "Cont?",
-        .cmd_startswith = 1
+        .cmd_startswith = true
     },
     {
         .handler = handle_v_cont,
         .cmd = "Cont",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .allow_stop_reply = true,
         .schema = "s0"
     },
     {
         .handler = handle_v_attach,
         .cmd = "Attach;",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .allow_stop_reply = true,
         .schema = "l0"
     },
     {
         .handler = handle_v_kill,
         .cmd = "Kill;",
-        .cmd_startswith = 1
+        .cmd_startswith = true
     },
 #ifdef CONFIG_USER_ONLY
     /*
@@ -1462,25 +1462,25 @@ static const GdbCmdParseEntry gdb_v_commands_table[] = {
     {
         .handler = gdb_handle_v_file_open,
         .cmd = "File:open:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s,L,L0"
     },
     {
         .handler = gdb_handle_v_file_close,
         .cmd = "File:close:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l0"
     },
     {
         .handler = gdb_handle_v_file_pread,
         .cmd = "File:pread:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l,L,L0"
     },
     {
         .handler = gdb_handle_v_file_readlink,
         .cmd = "File:readlink:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s0"
     },
 #endif
@@ -1748,7 +1748,7 @@ static const GdbCmdParseEntry gdb_gen_query_set_common_table[] = {
     {
         .handler = handle_set_qemu_sstep,
         .cmd = "qemu.sstep=",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l0"
     },
 };
@@ -1804,7 +1804,7 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
     {
         .handler = handle_query_thread_extra,
         .cmd = "ThreadExtraInfo,",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "t0"
     },
 #ifdef CONFIG_USER_ONLY
@@ -1816,14 +1816,14 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
     {
         .handler = gdb_handle_query_rcmd,
         .cmd = "Rcmd,",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s0"
     },
 #endif
     {
         .handler = handle_query_supported,
         .cmd = "Supported:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s0"
     },
     {
@@ -1834,7 +1834,7 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
     {
         .handler = handle_query_xfer_features,
         .cmd = "Xfer:features:read:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s:l,l0"
     },
 #if defined(CONFIG_USER_ONLY)
@@ -1842,27 +1842,27 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
     {
         .handler = gdb_handle_query_xfer_auxv,
         .cmd = "Xfer:auxv:read::",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l,l0"
     },
     {
         .handler = gdb_handle_query_xfer_siginfo,
         .cmd = "Xfer:siginfo:read::",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l,l0"
      },
 #endif
     {
         .handler = gdb_handle_query_xfer_exec_file,
         .cmd = "Xfer:exec-file:read:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l:l,l0"
     },
 #endif
     {
         .handler = gdb_handle_query_attached,
         .cmd = "Attached:",
-        .cmd_startswith = 1
+        .cmd_startswith = true
     },
     {
         .handler = gdb_handle_query_attached,
@@ -1901,14 +1901,14 @@ static const GdbCmdParseEntry gdb_gen_set_table[] = {
     {
         .handler = handle_set_qemu_sstep,
         .cmd = "qemu.sstep:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l0"
     },
 #ifndef CONFIG_USER_ONLY
     {
         .handler = gdb_handle_set_qemu_phy_mem_mode,
         .cmd = "qemu.PhyMemMode:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "l0"
     },
 #endif
@@ -1916,7 +1916,7 @@ static const GdbCmdParseEntry gdb_gen_set_table[] = {
     {
         .handler = gdb_handle_set_catch_syscalls,
         .cmd = "CatchSyscalls:",
-        .cmd_startswith = 1,
+        .cmd_startswith = true,
         .schema = "s0",
     },
 #endif
@@ -2012,7 +2012,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry target_halted_cmd_desc = {
                 .handler = handle_target_halt,
                 .cmd = "?",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .allow_stop_reply = true,
             };
             cmd_parser = &target_halted_cmd_desc;
@@ -2023,7 +2023,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry continue_cmd_desc = {
                 .handler = handle_continue,
                 .cmd = "c",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .allow_stop_reply = true,
                 .schema = "L0"
             };
@@ -2035,7 +2035,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry cont_with_sig_cmd_desc = {
                 .handler = handle_cont_with_sig,
                 .cmd = "C",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .allow_stop_reply = true,
                 .schema = "l0"
             };
@@ -2047,7 +2047,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry v_cmd_desc = {
                 .handler = handle_v_commands,
                 .cmd = "v",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "s0"
             };
             cmd_parser = &v_cmd_desc;
@@ -2064,7 +2064,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry detach_cmd_desc = {
                 .handler = handle_detach,
                 .cmd = "D",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "?.l0"
             };
             cmd_parser = &detach_cmd_desc;
@@ -2075,7 +2075,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry step_cmd_desc = {
                 .handler = handle_step,
                 .cmd = "s",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .allow_stop_reply = true,
                 .schema = "L0"
             };
@@ -2087,7 +2087,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry backward_cmd_desc = {
                 .handler = handle_backward,
                 .cmd = "b",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .allow_stop_reply = true,
                 .schema = "o0"
             };
@@ -2099,7 +2099,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry file_io_cmd_desc = {
                 .handler = gdb_handle_file_io,
                 .cmd = "F",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "L,L,o0"
             };
             cmd_parser = &file_io_cmd_desc;
@@ -2110,7 +2110,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry read_all_regs_cmd_desc = {
                 .handler = handle_read_all_regs,
                 .cmd = "g",
-                .cmd_startswith = 1
+                .cmd_startswith = true
             };
             cmd_parser = &read_all_regs_cmd_desc;
         }
@@ -2120,7 +2120,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry write_all_regs_cmd_desc = {
                 .handler = handle_write_all_regs,
                 .cmd = "G",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "s0"
             };
             cmd_parser = &write_all_regs_cmd_desc;
@@ -2131,7 +2131,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry read_mem_cmd_desc = {
                 .handler = handle_read_mem,
                 .cmd = "m",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "L,L0"
             };
             cmd_parser = &read_mem_cmd_desc;
@@ -2142,7 +2142,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry write_mem_cmd_desc = {
                 .handler = handle_write_mem,
                 .cmd = "M",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "L,L:s0"
             };
             cmd_parser = &write_mem_cmd_desc;
@@ -2153,7 +2153,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry get_reg_cmd_desc = {
                 .handler = handle_get_reg,
                 .cmd = "p",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "L0"
             };
             cmd_parser = &get_reg_cmd_desc;
@@ -2164,7 +2164,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry set_reg_cmd_desc = {
                 .handler = handle_set_reg,
                 .cmd = "P",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "L?s0"
             };
             cmd_parser = &set_reg_cmd_desc;
@@ -2175,7 +2175,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry insert_bp_cmd_desc = {
                 .handler = handle_insert_bp,
                 .cmd = "Z",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "l?L?L0"
             };
             cmd_parser = &insert_bp_cmd_desc;
@@ -2186,7 +2186,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry remove_bp_cmd_desc = {
                 .handler = handle_remove_bp,
                 .cmd = "z",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "l?L?L0"
             };
             cmd_parser = &remove_bp_cmd_desc;
@@ -2197,7 +2197,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry set_thread_cmd_desc = {
                 .handler = handle_set_thread,
                 .cmd = "H",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "o.t0"
             };
             cmd_parser = &set_thread_cmd_desc;
@@ -2208,7 +2208,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry thread_alive_cmd_desc = {
                 .handler = handle_thread_alive,
                 .cmd = "T",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "t0"
             };
             cmd_parser = &thread_alive_cmd_desc;
@@ -2219,7 +2219,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry gen_query_cmd_desc = {
                 .handler = handle_gen_query,
                 .cmd = "q",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "s0"
             };
             cmd_parser = &gen_query_cmd_desc;
@@ -2230,7 +2230,7 @@ static int gdb_handle_packet(const char *line_buf)
             static const GdbCmdParseEntry gen_set_cmd_desc = {
                 .handler = handle_gen_set,
                 .cmd = "Q",
-                .cmd_startswith = 1,
+                .cmd_startswith = true,
                 .schema = "s0"
             };
             cmd_parser = &gen_set_cmd_desc;
-- 
2.39.2



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

* [PATCH v2 39/40] gdbstub: Add support for MTE in user mode
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (37 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  2024-07-05  8:40 ` [PATCH v2 40/40] tests/tcg/aarch64: Add MTE gdbstub tests Alex Bennée
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

This commit implements the stubs to handle the qIsAddressTagged,
qMemTag, and QMemTag GDB packets, allowing all GDB 'memory-tag'
subcommands to work with QEMU gdbstub on aarch64 user mode. It also
implements the get/set functions for the special GDB MTE register
'tag_ctl', used to control the MTE fault type at runtime.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-11-gustavo.romero@linaro.org>
---
 configs/targets/aarch64-linux-user.mak |   2 +-
 target/arm/internals.h                 |   6 +
 target/arm/cpu.c                       |   1 +
 target/arm/gdbstub.c                   |  46 +++++
 target/arm/gdbstub64.c                 | 223 +++++++++++++++++++++++++
 gdb-xml/aarch64-mte.xml                |  11 ++
 6 files changed, 288 insertions(+), 1 deletion(-)
 create mode 100644 gdb-xml/aarch64-mte.xml

diff --git a/configs/targets/aarch64-linux-user.mak b/configs/targets/aarch64-linux-user.mak
index ba8bc5fe3f..8f0ed21d76 100644
--- a/configs/targets/aarch64-linux-user.mak
+++ b/configs/targets/aarch64-linux-user.mak
@@ -1,6 +1,6 @@
 TARGET_ARCH=aarch64
 TARGET_BASE_ARCH=arm
-TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/aarch64-pauth.xml
+TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/aarch64-pauth.xml gdb-xml/aarch64-mte.xml
 TARGET_HAS_BFLT=y
 CONFIG_SEMIHOSTING=y
 CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y
diff --git a/target/arm/internals.h b/target/arm/internals.h
index 11b5da2562..e1aa1a63b9 100644
--- a/target/arm/internals.h
+++ b/target/arm/internals.h
@@ -358,6 +358,10 @@ void init_cpreg_list(ARMCPU *cpu);
 void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu);
 void arm_translate_init(void);
 
+void arm_cpu_register_gdb_commands(ARMCPU *cpu);
+void aarch64_cpu_register_gdb_commands(ARMCPU *cpu, GString *, GArray *,
+                                       GArray *);
+
 void arm_restore_state_to_opc(CPUState *cs,
                               const TranslationBlock *tb,
                               const uint64_t *data);
@@ -1640,6 +1644,8 @@ int aarch64_gdb_get_fpu_reg(CPUState *cs, GByteArray *buf, int reg);
 int aarch64_gdb_set_fpu_reg(CPUState *cs, uint8_t *buf, int reg);
 int aarch64_gdb_get_pauth_reg(CPUState *cs, GByteArray *buf, int reg);
 int aarch64_gdb_set_pauth_reg(CPUState *cs, uint8_t *buf, int reg);
+int aarch64_gdb_get_tag_ctl_reg(CPUState *cs, GByteArray *buf, int reg);
+int aarch64_gdb_set_tag_ctl_reg(CPUState *cs, uint8_t *buf, int reg);
 void arm_cpu_sve_finalize(ARMCPU *cpu, Error **errp);
 void arm_cpu_sme_finalize(ARMCPU *cpu, Error **errp);
 void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp);
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 35fa281f1b..14d4eca127 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2518,6 +2518,7 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
 
     register_cp_regs_for_features(cpu);
     arm_cpu_register_gdb_regs_for_features(cpu);
+    arm_cpu_register_gdb_commands(cpu);
 
     init_cpreg_list(cpu);
 
diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
index a3bb73cfa7..c3a9b5eb1e 100644
--- a/target/arm/gdbstub.c
+++ b/target/arm/gdbstub.c
@@ -21,6 +21,7 @@
 #include "cpu.h"
 #include "exec/gdbstub.h"
 #include "gdbstub/helpers.h"
+#include "gdbstub/commands.h"
 #include "sysemu/tcg.h"
 #include "internals.h"
 #include "cpu-features.h"
@@ -474,6 +475,41 @@ static GDBFeature *arm_gen_dynamic_m_secextreg_feature(CPUState *cs,
 #endif
 #endif /* CONFIG_TCG */
 
+void arm_cpu_register_gdb_commands(ARMCPU *cpu)
+{
+    GArray *query_table =
+        g_array_new(FALSE, FALSE, sizeof(GdbCmdParseEntry));
+    GArray *set_table =
+        g_array_new(FALSE, FALSE, sizeof(GdbCmdParseEntry));
+    GString *qsupported_features = g_string_new(NULL);
+
+    if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
+    #ifdef TARGET_AARCH64
+        aarch64_cpu_register_gdb_commands(cpu, qsupported_features, query_table,
+                                          set_table);
+    #endif
+    }
+
+    /* Set arch-specific handlers for 'q' commands. */
+    if (query_table->len) {
+        gdb_extend_query_table(&g_array_index(query_table,
+                                              GdbCmdParseEntry, 0),
+                                              query_table->len);
+    }
+
+    /* Set arch-specific handlers for 'Q' commands. */
+    if (set_table->len) {
+        gdb_extend_set_table(&g_array_index(set_table,
+                             GdbCmdParseEntry, 0),
+                             set_table->len);
+    }
+
+    /* Set arch-specific qSupported feature. */
+    if (qsupported_features->len) {
+        gdb_extend_qsupported_features(qsupported_features->str);
+    }
+}
+
 void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
 {
     CPUState *cs = CPU(cpu);
@@ -507,6 +543,16 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
                                      gdb_find_static_feature("aarch64-pauth.xml"),
                                      0);
         }
+
+#ifdef CONFIG_USER_ONLY
+        /* Memory Tagging Extension (MTE) 'tag_ctl' pseudo-register. */
+        if (cpu_isar_feature(aa64_mte, cpu)) {
+            gdb_register_coprocessor(cs, aarch64_gdb_get_tag_ctl_reg,
+                                     aarch64_gdb_set_tag_ctl_reg,
+                                     gdb_find_static_feature("aarch64-mte.xml"),
+                                     0);
+        }
+#endif
 #endif
     } else {
         if (arm_feature(env, ARM_FEATURE_NEON)) {
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
index caa31ff3fa..2e2bc2700b 100644
--- a/target/arm/gdbstub64.c
+++ b/target/arm/gdbstub64.c
@@ -21,6 +21,12 @@
 #include "cpu.h"
 #include "internals.h"
 #include "gdbstub/helpers.h"
+#include "gdbstub/commands.h"
+#include "tcg/mte_helper.h"
+#if defined(CONFIG_USER_ONLY) && defined(CONFIG_LINUX)
+#include <sys/prctl.h>
+#include "mte_user_helper.h"
+#endif
 
 int aarch64_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
 {
@@ -381,3 +387,220 @@ GDBFeature *arm_gen_dynamic_svereg_feature(CPUState *cs, int base_reg)
 
     return &cpu->dyn_svereg_feature.desc;
 }
+
+#ifdef CONFIG_USER_ONLY
+int aarch64_gdb_get_tag_ctl_reg(CPUState *cs, GByteArray *buf, int reg)
+{
+    ARMCPU *cpu = ARM_CPU(cs);
+    CPUARMState *env = &cpu->env;
+    uint64_t tcf0;
+
+    assert(reg == 0);
+
+    tcf0 = extract64(env->cp15.sctlr_el[1], 38, 2);
+
+    return gdb_get_reg64(buf, tcf0);
+}
+
+int aarch64_gdb_set_tag_ctl_reg(CPUState *cs, uint8_t *buf, int reg)
+{
+    ARMCPU *cpu = ARM_CPU(cs);
+    CPUARMState *env = &cpu->env;
+
+    uint8_t tcf;
+
+    assert(reg == 0);
+
+    tcf = *buf << PR_MTE_TCF_SHIFT;
+
+    if (!tcf) {
+        return 0;
+    }
+
+    /*
+     * 'tag_ctl' register is actually a "pseudo-register" provided by GDB to
+     * expose options regarding the type of MTE fault that can be controlled at
+     * runtime.
+     */
+    arm_set_mte_tcf0(env, tcf);
+
+    return 1;
+}
+
+static void handle_q_memtag(GArray *params, void *user_ctx)
+{
+    ARMCPU *cpu = ARM_CPU(user_ctx);
+    CPUARMState *env = &cpu->env;
+
+    uint64_t addr = gdb_get_cmd_param(params, 0)->val_ull;
+    uint64_t len = gdb_get_cmd_param(params, 1)->val_ul;
+    int type = gdb_get_cmd_param(params, 2)->val_ul;
+
+    uint8_t *tags;
+    uint8_t addr_tag;
+
+    g_autoptr(GString) str_buf = g_string_new(NULL);
+
+    /*
+     * GDB does not query multiple tags for a memory range on remote targets, so
+     * that's not supported either by gdbstub.
+     */
+    if (len != 1) {
+        gdb_put_packet("E02");
+    }
+
+    /* GDB never queries a tag different from an allocation tag (type 1). */
+    if (type != 1) {
+        gdb_put_packet("E03");
+    }
+
+    /* Note that tags are packed here (2 tags packed in one byte). */
+    tags = allocation_tag_mem_probe(env, 0, addr, MMU_DATA_LOAD, 8 /* 64-bit */,
+                                    MMU_DATA_LOAD, true, 0);
+    if (!tags) {
+        /* Address is not in a tagged region. */
+        gdb_put_packet("E04");
+        return;
+    }
+
+    /* Unpack tag from byte. */
+    addr_tag = load_tag1(addr, tags);
+    g_string_printf(str_buf, "m%.2x", addr_tag);
+
+    gdb_put_packet(str_buf->str);
+}
+
+static void handle_q_isaddresstagged(GArray *params, void *user_ctx)
+{
+    ARMCPU *cpu = ARM_CPU(user_ctx);
+    CPUARMState *env = &cpu->env;
+
+    uint64_t addr = gdb_get_cmd_param(params, 0)->val_ull;
+
+    uint8_t *tags;
+    const char *reply;
+
+    tags = allocation_tag_mem_probe(env, 0, addr, MMU_DATA_LOAD, 8 /* 64-bit */,
+                                    MMU_DATA_LOAD, true, 0);
+    reply = tags ? "01" : "00";
+
+    gdb_put_packet(reply);
+}
+
+static void handle_Q_memtag(GArray *params, void *user_ctx)
+{
+    ARMCPU *cpu = ARM_CPU(user_ctx);
+    CPUARMState *env = &cpu->env;
+
+    uint64_t start_addr = gdb_get_cmd_param(params, 0)->val_ull;
+    uint64_t len = gdb_get_cmd_param(params, 1)->val_ul;
+    int type = gdb_get_cmd_param(params, 2)->val_ul;
+    char const *new_tags_str = gdb_get_cmd_param(params, 3)->data;
+
+    uint64_t end_addr;
+
+    int num_new_tags;
+    uint8_t *tags;
+
+    g_autoptr(GByteArray) new_tags = g_byte_array_new();
+
+    /*
+     * Only the allocation tag (i.e. type 1) can be set at the stub side.
+     */
+    if (type != 1) {
+        gdb_put_packet("E02");
+        return;
+    }
+
+    end_addr = start_addr + (len - 1); /* 'len' is always >= 1 */
+    /* Check if request's memory range does not cross page boundaries. */
+    if ((start_addr ^ end_addr) & TARGET_PAGE_MASK) {
+        gdb_put_packet("E03");
+        return;
+    }
+
+    /*
+     * Get all tags in the page starting from the tag of the start address.
+     * Note that there are two tags packed into a single byte here.
+     */
+    tags = allocation_tag_mem_probe(env, 0, start_addr, MMU_DATA_STORE,
+                                    8 /* 64-bit */, MMU_DATA_STORE, true, 0);
+    if (!tags) {
+        /* Address is not in a tagged region. */
+        gdb_put_packet("E04");
+        return;
+    }
+
+    /* Convert tags provided by GDB, 2 hex digits per tag. */
+    num_new_tags = strlen(new_tags_str) / 2;
+    gdb_hextomem(new_tags, new_tags_str, num_new_tags);
+
+    uint64_t address = start_addr;
+    int new_tag_index = 0;
+    while (address <= end_addr) {
+        uint8_t new_tag;
+        int packed_index;
+
+        /*
+         * Find packed tag index from unpacked tag index. There are two tags
+         * in one packed index (one tag per nibble).
+         */
+        packed_index = new_tag_index / 2;
+
+        new_tag = new_tags->data[new_tag_index % num_new_tags];
+        store_tag1(address, tags + packed_index, new_tag);
+
+        address += TAG_GRANULE;
+        new_tag_index++;
+    }
+
+    gdb_put_packet("OK");
+}
+
+enum Command {
+    qMemTags,
+    qIsAddressTagged,
+    QMemTags,
+    NUM_CMDS
+};
+
+static GdbCmdParseEntry cmd_handler_table[NUM_CMDS] = {
+    [qMemTags] = {
+        .handler = handle_q_memtag,
+        .cmd_startswith = true,
+        .cmd = "MemTags:",
+        .schema = "L,l:l0",
+        .need_cpu_context = true
+    },
+    [qIsAddressTagged] = {
+        .handler = handle_q_isaddresstagged,
+        .cmd_startswith = true,
+        .cmd = "IsAddressTagged:",
+        .schema = "L0",
+        .need_cpu_context = true
+    },
+    [QMemTags] = {
+        .handler = handle_Q_memtag,
+        .cmd_startswith = true,
+        .cmd = "MemTags:",
+        .schema = "L,l:l:s0",
+        .need_cpu_context = true
+    },
+};
+#endif /* CONFIG_USER_ONLY */
+
+void aarch64_cpu_register_gdb_commands(ARMCPU *cpu, GString *qsupported,
+                                       GArray *qtable, GArray *stable)
+{
+#ifdef CONFIG_USER_ONLY
+    /* MTE */
+    if (cpu_isar_feature(aa64_mte, cpu)) {
+        g_string_append(qsupported, ";memory-tagging+");
+
+        g_array_append_val(qtable, cmd_handler_table[qMemTags]);
+        g_array_append_val(qtable, cmd_handler_table[qIsAddressTagged]);
+
+        g_array_append_val(stable, cmd_handler_table[QMemTags]);
+    }
+#endif
+}
diff --git a/gdb-xml/aarch64-mte.xml b/gdb-xml/aarch64-mte.xml
new file mode 100644
index 0000000000..4b70b4f17a
--- /dev/null
+++ b/gdb-xml/aarch64-mte.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2021-2023 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
+<feature name="org.gnu.gdb.aarch64.mte">
+  <reg name="tag_ctl" bitsize="64" type="uint64" group="system" save-restore="no"/>
+</feature>
-- 
2.39.2



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

* [PATCH v2 40/40] tests/tcg/aarch64: Add MTE gdbstub tests
  2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
                   ` (38 preceding siblings ...)
  2024-07-05  8:40 ` [PATCH v2 39/40] gdbstub: Add support for MTE in user mode Alex Bennée
@ 2024-07-05  8:40 ` Alex Bennée
  39 siblings, 0 replies; 54+ messages in thread
From: Alex Bennée @ 2024-07-05  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Thomas Huth, Mahmoud Mandour, Peter Maydell,
	qemu-arm, Aleksandar Rikalo, Mads Ynddal, Yanan Wang,
	Eduardo Habkost, Peter Xu, Richard Henderson, Marcel Apfelbaum,
	Paul Burton, Stefan Hajnoczi, Alex Bennée, Laurent Vivier,
	Gustavo Romero

From: Gustavo Romero <gustavo.romero@linaro.org>

Add tests to exercise the MTE stubs. The tests will only run if a
version of GDB that supports MTE is available in the test environment.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
[AJB: re-base and checkpatch fixes]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240628050850.536447-12-gustavo.romero@linaro.org>
---
 configure                             |  4 ++
 tests/tcg/aarch64/mte-8.c             | 99 +++++++++++++++++++++++++++
 tests/tcg/aarch64/Makefile.target     | 14 +++-
 tests/tcg/aarch64/gdbstub/test-mte.py | 86 +++++++++++++++++++++++
 4 files changed, 202 insertions(+), 1 deletion(-)
 create mode 100644 tests/tcg/aarch64/mte-8.c
 create mode 100644 tests/tcg/aarch64/gdbstub/test-mte.py

diff --git a/configure b/configure
index 8b6a2f16ce..019fcbd0ef 100755
--- a/configure
+++ b/configure
@@ -1673,6 +1673,10 @@ for target in $target_list; do
           echo "GDB=$gdb_bin" >> $config_target_mak
       fi
 
+      if test "${arch}" = "aarch64" && version_ge ${gdb_version##* } 15.0; then
+          echo "GDB_HAS_MTE=y" >> $config_target_mak
+      fi
+
       echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
       tcg_tests_targets="$tcg_tests_targets $target"
   fi
diff --git a/tests/tcg/aarch64/mte-8.c b/tests/tcg/aarch64/mte-8.c
new file mode 100644
index 0000000000..808135ba43
--- /dev/null
+++ b/tests/tcg/aarch64/mte-8.c
@@ -0,0 +1,99 @@
+/*
+ * To be compiled with -march=armv8.5-a+memtag
+ *
+ * This test is adapted from a Linux test. Please see:
+ *
+ * https://www.kernel.org/doc/html/next/arch/arm64/memory-tagging-extension.html#example-of-correct-usage
+ */
+#include <errno.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/auxv.h>
+#include <sys/mman.h>
+#include <sys/prctl.h>
+#include <string.h>
+/*
+ * From arch/arm64/include/uapi/asm/hwcap.h
+ */
+#define HWCAP2_MTE              (1 << 18)
+
+/*
+ * From arch/arm64/include/uapi/asm/mman.h
+ */
+#define PROT_MTE                 0x20
+
+/*
+ * Insert a random logical tag into the given pointer.
+ */
+#define insert_random_tag(ptr) ({                   \
+    uint64_t __val;                                 \
+    asm("irg %0, %1" : "=r" (__val) : "r" (ptr));   \
+    __val;                                          \
+})
+
+/*
+ * Set the allocation tag on the destination address.
+ */
+#define set_tag(tagged_addr) do {                                      \
+        asm volatile("stg %0, [%0]" : : "r" (tagged_addr) : "memory"); \
+} while (0)
+
+
+int main(int argc, char *argv[])
+{
+    unsigned char *a;
+    unsigned long page_sz = sysconf(_SC_PAGESIZE);
+    unsigned long hwcap2 = getauxval(AT_HWCAP2);
+
+    /* check if MTE is present */
+    if (!(hwcap2 & HWCAP2_MTE)) {
+        return EXIT_FAILURE;
+    }
+
+    /*
+     * Enable the tagged address ABI, synchronous or asynchronous MTE
+     * tag check faults (based on per-CPU preference) and allow all
+     * non-zero tags in the randomly generated set.
+     */
+    if (prctl(PR_SET_TAGGED_ADDR_CTRL,
+              PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | PR_MTE_TCF_ASYNC |
+              (0xfffe << PR_MTE_TAG_SHIFT),
+              0, 0, 0)) {
+        perror("prctl() failed");
+        return EXIT_FAILURE;
+    }
+
+    a = mmap(0, page_sz, PROT_READ | PROT_WRITE,
+             MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+    if (a == MAP_FAILED) {
+        perror("mmap() failed");
+        return EXIT_FAILURE;
+    }
+
+    printf("a[] address is %p\n", a);
+
+    /*
+     * Enable MTE on the above anonymous mmap. The flag could be passed
+     * directly to mmap() and skip this step.
+     */
+    if (mprotect(a, page_sz, PROT_READ | PROT_WRITE | PROT_MTE)) {
+        perror("mprotect() failed");
+        return EXIT_FAILURE;
+    }
+
+    /* access with the default tag (0) */
+    a[0] = 1;
+    a[1] = 2;
+
+    printf("a[0] = %hhu a[1] = %hhu\n", a[0], a[1]);
+
+    /* set the logical and allocation tags */
+    a = (unsigned char *)insert_random_tag(a);
+    set_tag(a);
+
+    printf("%p\n", a);
+
+    return 0;
+}
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index ad1774c2ce..b53218e115 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -64,7 +64,7 @@ AARCH64_TESTS += bti-2
 
 # MTE Tests
 ifneq ($(CROSS_CC_HAS_ARMV8_MTE),)
-AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7
+AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7 mte-8
 mte-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_MTE)
 endif
 
@@ -131,6 +131,18 @@ run-gdbstub-sve-ioctls: sve-ioctls
 	basic gdbstub SVE ZLEN support)
 
 EXTRA_RUNS += run-gdbstub-sysregs run-gdbstub-sve-ioctls
+
+ifeq ($(GDB_HAS_MTE),y)
+run-gdbstub-mte: mte-8
+	$(call run-test, $@, $(GDB_SCRIPT) \
+		--gdb $(GDB) \
+		--qemu $(QEMU) --qargs "$(QEMU_OPTS)" \
+		--bin $< --test $(AARCH64_SRC)/gdbstub/test-mte.py, \
+	gdbstub MTE support)
+
+EXTRA_RUNS += run-gdbstub-mte
+endif
+
 endif
 endif
 
diff --git a/tests/tcg/aarch64/gdbstub/test-mte.py b/tests/tcg/aarch64/gdbstub/test-mte.py
new file mode 100644
index 0000000000..2db0663c1a
--- /dev/null
+++ b/tests/tcg/aarch64/gdbstub/test-mte.py
@@ -0,0 +1,86 @@
+from __future__ import print_function
+#
+# Test GDB memory-tag commands that exercise the stubs for the qIsAddressTagged,
+# qMemTag, and QMemTag packets. Logical tag-only commands rely on local
+# operations, hence don't exercise any stub.
+#
+# The test consists in breaking just after a atag() call (which sets the
+# allocation tag -- see mte-8.c for details) and setting/getting tags in
+# different memory locations and ranges starting at the address of the array
+# 'a'.
+#
+# This is launched via tests/guest-debug/run-test.py
+#
+
+
+import gdb
+import re
+from test_gdbstub import main, report
+
+
+PATTERN_0 = "Memory tags for address 0x[0-9a-f]+ match \(0x[0-9a-f]+\)."
+PATTERN_1 = ".*(0x[0-9a-f]+)"
+
+
+def run_test():
+    gdb.execute("break 95", False, True)
+    gdb.execute("continue", False, True)
+    try:
+        # Test if we can check correctly that the allocation tag for
+        # array 'a' matches the logical tag after atag() is called.
+        co = gdb.execute("memory-tag check a", False, True)
+        tags_match = re.findall(PATTERN_0, co, re.MULTILINE)
+        if tags_match:
+            report(True, f"{tags_match[0]}")
+        else:
+            report(False, "Logical and allocation tags don't match!")
+
+        # Test allocation tag 'set and print' commands. Commands on logical
+        # tags rely on local operation and so don't exercise any stub.
+
+        # Set the allocation tag for the first granule (16 bytes) of
+        # address starting at 'a' address to a known value, i.e. 0x04.
+        gdb.execute("memory-tag set-allocation-tag a 1 04", False, True)
+
+        # Then set the allocation tag for the second granule to a known
+        # value, i.e. 0x06. This tests that contiguous tag granules are
+        # set correct and don't run over each other.
+        gdb.execute("memory-tag set-allocation-tag a+16 1 06", False, True)
+
+        # Read the known values back and check if they remain the same.
+
+        co = gdb.execute("memory-tag print-allocation-tag a", False, True)
+        first_tag = re.match(PATTERN_1, co)[1]
+
+        co = gdb.execute("memory-tag print-allocation-tag a+16", False, True)
+        second_tag = re.match(PATTERN_1, co)[1]
+
+        if first_tag == "0x4" and second_tag == "0x6":
+            report(True, "Allocation tags are correctly set/printed.")
+        else:
+            report(False, "Can't set/print allocation tags!")
+
+        # Now test fill pattern by setting a whole page with a pattern.
+        gdb.execute("memory-tag set-allocation-tag a 4096 0a0b", False, True)
+
+        # And read back the tags of the last two granules in page so
+        # we also test if the pattern is set correctly up to the end of
+        # the page.
+        co = gdb.execute("memory-tag print-allocation-tag a+4096-32", False, True)
+        tag = re.match(PATTERN_1, co)[1]
+
+        co = gdb.execute("memory-tag print-allocation-tag a+4096-16", False, True)
+        last_tag = re.match(PATTERN_1, co)[1]
+
+        if tag == "0xa" and last_tag == "0xb":
+            report(True, "Fill pattern is ok.")
+        else:
+            report(False, "Fill pattern failed!")
+
+    except gdb.error:
+        # This usually happens because a GDB version that does not
+        # support memory tagging was used to run the test.
+        report(False, "'memory-tag' command failed!")
+
+
+main(run_test, expected_arch="aarch64")
-- 
2.39.2



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

* Re: [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05  8:40 ` [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds Alex Bennée
@ 2024-07-05  8:49   ` Thomas Huth
  2024-07-05 16:34   ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 54+ messages in thread
From: Thomas Huth @ 2024-07-05  8:49 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Philippe Mathieu-Daudé, Pierrick Bouvier,
	Alexandre Iooss, Mahmoud Mandour, Peter Maydell, qemu-arm,
	Aleksandar Rikalo, Mads Ynddal, Yanan Wang, Eduardo Habkost,
	Peter Xu, Richard Henderson, Marcel Apfelbaum, Paul Burton,
	Stefan Hajnoczi, Laurent Vivier

On 05/07/2024 10.40, Alex Bennée wrote:
> In fact any other accelerator would be pointless as the point is to
> exercise the TCI accelerator anyway.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   .gitlab-ci.d/buildtest.yml   | 2 +-
>   .gitlab-ci.d/crossbuilds.yml | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>




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

* Re: [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined
  2024-07-05  8:40 ` [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined Alex Bennée
@ 2024-07-05  9:49   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05  9:49 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On Fri, 5 Jul 2024 at 11:41, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> Really the problem here is the return values of fit_load_[kernel|fdt]() are a
> little all over the place. However we don't want to somehow get
> through not having set kernel_end and having it just be random unused
> data.
>
> The compiler complained on an --enable-gcov build:
>
>   In file included from ../../hw/core/loader-fit.c:20:
>   /home/alex/lsrc/qemu.git/include/qemu/osdep.h: In function ‘load_fit’:
>   /home/alex/lsrc/qemu.git/include/qemu/osdep.h:486:45: error: ‘kernel_end’ may be used uninitialized [-Werror=maybe-uninitialized]
>     486 | #define ROUND_UP(n, d) ROUND_DOWN((n) + (d) - 1, (d))
>         |                                             ^
>   ../../hw/core/loader-fit.c:270:12: note: ‘kernel_end’ was declared here
>     270 |     hwaddr kernel_end;
>         |            ^~~~~~~~~~
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  hw/core/loader-fit.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c
> index 9f20007dbb..7ccc9d5fbc 100644
> --- a/hw/core/loader-fit.c
> +++ b/hw/core/loader-fit.c
> @@ -267,7 +267,7 @@ int load_fit(const struct fit_loader *ldr, const char *filename, void *opaque)
>      const char *def_cfg_name;
>      char path[FIT_LOADER_MAX_PATH];
>      int itb_size, configs, cfg_off, off;
> -    hwaddr kernel_end;
> +    hwaddr kernel_end = 0;
>      int ret;
>
>      itb = load_device_tree(filename, &itb_size);
> --
> 2.39.2
>

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 23/40] plugins/lockstep: preserve sock_path
  2024-07-05  8:40 ` [PATCH v2 23/40] plugins/lockstep: preserve sock_path Alex Bennée
@ 2024-07-05  9:54   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05  9:54 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On Fri, 5 Jul 2024 at 11:57, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> We can't assign sock_path directly from the autofree'd GStrv, take a
> copy.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  contrib/plugins/lockstep.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
> index 237543b43a..111ec3fa27 100644
> --- a/contrib/plugins/lockstep.c
> +++ b/contrib/plugins/lockstep.c
> @@ -347,7 +347,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
>                  return -1;
>              }
>          } else if (g_strcmp0(tokens[0], "sockpath") == 0) {
> -            sock_path = tokens[1];
> +            sock_path = strdup(tokens[1]);

s/strdup/g_strdup
?

Otherwise,

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>

>          } else {
>              fprintf(stderr, "option parsing failed: %s\n", p);
>              return -1;
> --
> 2.39.2
>
>


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

* Re: [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default
  2024-07-05  8:40 ` [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default Alex Bennée
@ 2024-07-05 10:02   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:02 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On Fri, 5 Jul 2024 at 11:49, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> While the match functionality is useful lets make the verbosity
> optional while we are actually running.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  tests/plugin/insn.c | 36 +++++++++++++++++++++---------------
>  1 file changed, 21 insertions(+), 15 deletions(-)
>
> diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
> index 5e0aa03223..524f9ddde8 100644
> --- a/tests/plugin/insn.c
> +++ b/tests/plugin/insn.c
> @@ -20,6 +20,7 @@ static qemu_plugin_u64 insn_count;
>
>  static bool do_inline;
>  static bool do_size;
> +static bool do_trace;
>  static GArray *sizes;
>
>  typedef struct {
> @@ -73,30 +74,30 @@ static void vcpu_insn_matched_exec_before(unsigned int cpu_index, void *udata)
>      MatchCount *match = qemu_plugin_scoreboard_find(insn_match->counts,
>                                                      cpu_index);
>
> -    g_autoptr(GString) ts = g_string_new("");
> -
>      insn->hits++;
> -    g_string_append_printf(ts, "0x%" PRIx64 ", '%s', %"PRId64 " hits",
> -                           insn->vaddr, insn->disas, insn->hits);
>
>      uint64_t icount = qemu_plugin_u64_get(insn_count, cpu_index);
>      uint64_t delta = icount - match->last_hit;
>
>      match->hits++;
>      match->total_delta += delta;
> -
> -    g_string_append_printf(ts,
> -                           " , cpu %u,"
> -                           " %"PRId64" match hits,"
> -                           " Δ+%"PRId64 " since last match,"
> -                           " %"PRId64 " avg insns/match\n",
> -                           cpu_index,
> -                           match->hits, delta,
> -                           match->total_delta / match->hits);
> -
>      match->last_hit = icount;
>
> -    qemu_plugin_outs(ts->str);
> +    if (do_trace) {
> +        g_autoptr(GString) ts = g_string_new("");
> +        g_string_append_printf(ts, "0x%" PRIx64 ", '%s', %"PRId64 " hits",
> +                               insn->vaddr, insn->disas, insn->hits);
> +        g_string_append_printf(ts,
> +                               " , cpu %u,"
> +                               " %"PRId64" match hits,"
> +                               " Δ+%"PRId64 " since last match,"
> +                               " %"PRId64 " avg insns/match\n",
> +                               cpu_index,
> +                               match->hits, delta,
> +                               match->total_delta / match->hits);
> +
> +        qemu_plugin_outs(ts->str);
> +    }
>  }
>
>  static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
> @@ -216,6 +217,11 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
>              }
>          } else if (g_strcmp0(tokens[0], "match") == 0) {
>              parse_match(tokens[1]);
> +        } else if (g_strcmp0(tokens[0], "trace") == 0) {
> +            if (!qemu_plugin_bool_parse(tokens[0], tokens[1], &do_trace)) {
> +                fprintf(stderr, "boolean argument parsing failed: %s\n", opt);
> +                return -1;
> +            }
>          } else {
>              fprintf(stderr, "option parsing failed: %s\n", opt);
>              return -1;
> --
> 2.39.2
>
>

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith
  2024-07-05  8:40 ` [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith Alex Bennée
@ 2024-07-05 10:03   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:03 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier,
	Gustavo Romero

On Fri, 5 Jul 2024 at 11:49, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> From: Gustavo Romero <gustavo.romero@linaro.org>
>
> cmd_startswith is a boolean so use 'true' to set it instead of 1.
>
> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20240628050850.536447-10-gustavo.romero@linaro.org>
> ---
>  gdbstub/gdbstub.c | 80 +++++++++++++++++++++++------------------------
>  1 file changed, 40 insertions(+), 40 deletions(-)
>
> diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
> index 5c1612ed2a..b9ad0a063e 100644
> --- a/gdbstub/gdbstub.c
> +++ b/gdbstub/gdbstub.c
> @@ -1433,26 +1433,26 @@ static const GdbCmdParseEntry gdb_v_commands_table[] = {
>      {
>          .handler = handle_v_cont_query,
>          .cmd = "Cont?",
> -        .cmd_startswith = 1
> +        .cmd_startswith = true
>      },
>      {
>          .handler = handle_v_cont,
>          .cmd = "Cont",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .allow_stop_reply = true,
>          .schema = "s0"
>      },
>      {
>          .handler = handle_v_attach,
>          .cmd = "Attach;",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .allow_stop_reply = true,
>          .schema = "l0"
>      },
>      {
>          .handler = handle_v_kill,
>          .cmd = "Kill;",
> -        .cmd_startswith = 1
> +        .cmd_startswith = true
>      },
>  #ifdef CONFIG_USER_ONLY
>      /*
> @@ -1462,25 +1462,25 @@ static const GdbCmdParseEntry gdb_v_commands_table[] = {
>      {
>          .handler = gdb_handle_v_file_open,
>          .cmd = "File:open:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s,L,L0"
>      },
>      {
>          .handler = gdb_handle_v_file_close,
>          .cmd = "File:close:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l0"
>      },
>      {
>          .handler = gdb_handle_v_file_pread,
>          .cmd = "File:pread:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l,L,L0"
>      },
>      {
>          .handler = gdb_handle_v_file_readlink,
>          .cmd = "File:readlink:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s0"
>      },
>  #endif
> @@ -1748,7 +1748,7 @@ static const GdbCmdParseEntry gdb_gen_query_set_common_table[] = {
>      {
>          .handler = handle_set_qemu_sstep,
>          .cmd = "qemu.sstep=",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l0"
>      },
>  };
> @@ -1804,7 +1804,7 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
>      {
>          .handler = handle_query_thread_extra,
>          .cmd = "ThreadExtraInfo,",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "t0"
>      },
>  #ifdef CONFIG_USER_ONLY
> @@ -1816,14 +1816,14 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
>      {
>          .handler = gdb_handle_query_rcmd,
>          .cmd = "Rcmd,",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s0"
>      },
>  #endif
>      {
>          .handler = handle_query_supported,
>          .cmd = "Supported:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s0"
>      },
>      {
> @@ -1834,7 +1834,7 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
>      {
>          .handler = handle_query_xfer_features,
>          .cmd = "Xfer:features:read:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s:l,l0"
>      },
>  #if defined(CONFIG_USER_ONLY)
> @@ -1842,27 +1842,27 @@ static const GdbCmdParseEntry gdb_gen_query_table[] = {
>      {
>          .handler = gdb_handle_query_xfer_auxv,
>          .cmd = "Xfer:auxv:read::",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l,l0"
>      },
>      {
>          .handler = gdb_handle_query_xfer_siginfo,
>          .cmd = "Xfer:siginfo:read::",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l,l0"
>       },
>  #endif
>      {
>          .handler = gdb_handle_query_xfer_exec_file,
>          .cmd = "Xfer:exec-file:read:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l:l,l0"
>      },
>  #endif
>      {
>          .handler = gdb_handle_query_attached,
>          .cmd = "Attached:",
> -        .cmd_startswith = 1
> +        .cmd_startswith = true
>      },
>      {
>          .handler = gdb_handle_query_attached,
> @@ -1901,14 +1901,14 @@ static const GdbCmdParseEntry gdb_gen_set_table[] = {
>      {
>          .handler = handle_set_qemu_sstep,
>          .cmd = "qemu.sstep:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l0"
>      },
>  #ifndef CONFIG_USER_ONLY
>      {
>          .handler = gdb_handle_set_qemu_phy_mem_mode,
>          .cmd = "qemu.PhyMemMode:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "l0"
>      },
>  #endif
> @@ -1916,7 +1916,7 @@ static const GdbCmdParseEntry gdb_gen_set_table[] = {
>      {
>          .handler = gdb_handle_set_catch_syscalls,
>          .cmd = "CatchSyscalls:",
> -        .cmd_startswith = 1,
> +        .cmd_startswith = true,
>          .schema = "s0",
>      },
>  #endif
> @@ -2012,7 +2012,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry target_halted_cmd_desc = {
>                  .handler = handle_target_halt,
>                  .cmd = "?",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .allow_stop_reply = true,
>              };
>              cmd_parser = &target_halted_cmd_desc;
> @@ -2023,7 +2023,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry continue_cmd_desc = {
>                  .handler = handle_continue,
>                  .cmd = "c",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .allow_stop_reply = true,
>                  .schema = "L0"
>              };
> @@ -2035,7 +2035,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry cont_with_sig_cmd_desc = {
>                  .handler = handle_cont_with_sig,
>                  .cmd = "C",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .allow_stop_reply = true,
>                  .schema = "l0"
>              };
> @@ -2047,7 +2047,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry v_cmd_desc = {
>                  .handler = handle_v_commands,
>                  .cmd = "v",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "s0"
>              };
>              cmd_parser = &v_cmd_desc;
> @@ -2064,7 +2064,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry detach_cmd_desc = {
>                  .handler = handle_detach,
>                  .cmd = "D",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "?.l0"
>              };
>              cmd_parser = &detach_cmd_desc;
> @@ -2075,7 +2075,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry step_cmd_desc = {
>                  .handler = handle_step,
>                  .cmd = "s",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .allow_stop_reply = true,
>                  .schema = "L0"
>              };
> @@ -2087,7 +2087,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry backward_cmd_desc = {
>                  .handler = handle_backward,
>                  .cmd = "b",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .allow_stop_reply = true,
>                  .schema = "o0"
>              };
> @@ -2099,7 +2099,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry file_io_cmd_desc = {
>                  .handler = gdb_handle_file_io,
>                  .cmd = "F",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "L,L,o0"
>              };
>              cmd_parser = &file_io_cmd_desc;
> @@ -2110,7 +2110,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry read_all_regs_cmd_desc = {
>                  .handler = handle_read_all_regs,
>                  .cmd = "g",
> -                .cmd_startswith = 1
> +                .cmd_startswith = true
>              };
>              cmd_parser = &read_all_regs_cmd_desc;
>          }
> @@ -2120,7 +2120,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry write_all_regs_cmd_desc = {
>                  .handler = handle_write_all_regs,
>                  .cmd = "G",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "s0"
>              };
>              cmd_parser = &write_all_regs_cmd_desc;
> @@ -2131,7 +2131,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry read_mem_cmd_desc = {
>                  .handler = handle_read_mem,
>                  .cmd = "m",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "L,L0"
>              };
>              cmd_parser = &read_mem_cmd_desc;
> @@ -2142,7 +2142,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry write_mem_cmd_desc = {
>                  .handler = handle_write_mem,
>                  .cmd = "M",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "L,L:s0"
>              };
>              cmd_parser = &write_mem_cmd_desc;
> @@ -2153,7 +2153,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry get_reg_cmd_desc = {
>                  .handler = handle_get_reg,
>                  .cmd = "p",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "L0"
>              };
>              cmd_parser = &get_reg_cmd_desc;
> @@ -2164,7 +2164,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry set_reg_cmd_desc = {
>                  .handler = handle_set_reg,
>                  .cmd = "P",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "L?s0"
>              };
>              cmd_parser = &set_reg_cmd_desc;
> @@ -2175,7 +2175,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry insert_bp_cmd_desc = {
>                  .handler = handle_insert_bp,
>                  .cmd = "Z",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "l?L?L0"
>              };
>              cmd_parser = &insert_bp_cmd_desc;
> @@ -2186,7 +2186,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry remove_bp_cmd_desc = {
>                  .handler = handle_remove_bp,
>                  .cmd = "z",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "l?L?L0"
>              };
>              cmd_parser = &remove_bp_cmd_desc;
> @@ -2197,7 +2197,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry set_thread_cmd_desc = {
>                  .handler = handle_set_thread,
>                  .cmd = "H",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "o.t0"
>              };
>              cmd_parser = &set_thread_cmd_desc;
> @@ -2208,7 +2208,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry thread_alive_cmd_desc = {
>                  .handler = handle_thread_alive,
>                  .cmd = "T",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "t0"
>              };
>              cmd_parser = &thread_alive_cmd_desc;
> @@ -2219,7 +2219,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry gen_query_cmd_desc = {
>                  .handler = handle_gen_query,
>                  .cmd = "q",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "s0"
>              };
>              cmd_parser = &gen_query_cmd_desc;
> @@ -2230,7 +2230,7 @@ static int gdb_handle_packet(const char *line_buf)
>              static const GdbCmdParseEntry gen_set_cmd_desc = {
>                  .handler = handle_gen_set,
>                  .cmd = "Q",
> -                .cmd_startswith = 1,
> +                .cmd_startswith = true,
>                  .schema = "s0"
>              };
>              cmd_parser = &gen_set_cmd_desc;
> --
> 2.39.2
>


Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option
  2024-07-05  8:40 ` [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option Alex Bennée
@ 2024-07-05 10:04   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:04 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On Fri, 5 Jul 2024 at 11:48, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> This really helps with lockstep although its super slow on big jobs.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  contrib/plugins/lockstep.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
> index 761bcdf363..353bf12dfb 100644
> --- a/contrib/plugins/lockstep.c
> +++ b/contrib/plugins/lockstep.c
> @@ -14,7 +14,8 @@
>   * particular run may execute the exact same sequence of blocks. An
>   * asynchronous event (for example X11 graphics update) may cause a
>   * block to end early and a new partial block to start. This means
> - * serial only test cases are a better bet. -d nochain may also help.
> + * serial only test cases are a better bet. -d nochain may also help
> + * as well as -accel tcg,one-insn-per-tb=on
>   *
>   * This code is not thread safe!
>   *
> --
> 2.39.2
>

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field
  2024-07-05  8:40 ` [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field Alex Bennée
@ 2024-07-05 10:07   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:07 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier,
	Gustavo Romero

On Fri, 5 Jul 2024 at 11:47, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> From: Gustavo Romero <gustavo.romero@linaro.org>
>
> Factor out the code used for setting the MTE TCF0 field from the prctl
> code into a convenient function. Other subsystems, like gdbstub, need to
> set this field as well, so keep it as a separate function to avoid
> duplication and ensure consistency in how this field is set across the
> board.
>
> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
> Message-Id: <20240628050850.536447-7-gustavo.romero@linaro.org>
> [AJB: clean-up includes, move MTE defines]
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> vAJB:
>   - clean-up includes, move MTE defines
> ---
>  linux-user/aarch64/mte_user_helper.h | 32 +++++++++++++++++++++++++
>  linux-user/aarch64/target_prctl.h    | 22 ++---------------
>  linux-user/aarch64/mte_user_helper.c | 35 ++++++++++++++++++++++++++++
>  linux-user/syscall.c                 |  9 -------
>  linux-user/aarch64/meson.build       |  2 ++
>  5 files changed, 71 insertions(+), 29 deletions(-)
>  create mode 100644 linux-user/aarch64/mte_user_helper.h
>  create mode 100644 linux-user/aarch64/mte_user_helper.c
>
> diff --git a/linux-user/aarch64/mte_user_helper.h b/linux-user/aarch64/mte_user_helper.h
> new file mode 100644
> index 0000000000..8685e5175a
> --- /dev/null
> +++ b/linux-user/aarch64/mte_user_helper.h
> @@ -0,0 +1,32 @@
> +/*
> + * ARM MemTag convenience functions.
> + *
> + * This code is licensed under the GNU GPL v2 or later.
> + *
> + * SPDX-License-Identifier: LGPL-2.1-or-later
> + */
> +
> +#ifndef AARCH64_MTE_USER_HELPER_H
> +#define AARCH64_MTE USER_HELPER_H
> +
> +#ifndef PR_MTE_TCF_SHIFT
> +# define PR_MTE_TCF_SHIFT       1
> +# define PR_MTE_TCF_NONE        (0UL << PR_MTE_TCF_SHIFT)
> +# define PR_MTE_TCF_SYNC        (1UL << PR_MTE_TCF_SHIFT)
> +# define PR_MTE_TCF_ASYNC       (2UL << PR_MTE_TCF_SHIFT)
> +# define PR_MTE_TCF_MASK        (3UL << PR_MTE_TCF_SHIFT)
> +# define PR_MTE_TAG_SHIFT       3
> +# define PR_MTE_TAG_MASK        (0xffffUL << PR_MTE_TAG_SHIFT)
> +#endif
> +
> +/**
> + * arm_set_mte_tcf0 - Set TCF0 field in SCTLR_EL1 register
> + * @env: The CPU environment
> + * @value: The value to be set for the Tag Check Fault in EL0 field.
> + *
> + * Only SYNC and ASYNC modes can be selected. If ASYMM mode is given, the SYNC
> + * mode is selected instead. So, there is no way to set the ASYMM mode.
> + */
> +void arm_set_mte_tcf0(CPUArchState *env, abi_long value);
> +
> +#endif /* AARCH64_MTE_USER_HELPER_H */
> diff --git a/linux-user/aarch64/target_prctl.h b/linux-user/aarch64/target_prctl.h
> index aa8e203c15..ed75b9e4b5 100644
> --- a/linux-user/aarch64/target_prctl.h
> +++ b/linux-user/aarch64/target_prctl.h
> @@ -7,6 +7,7 @@
>  #define AARCH64_TARGET_PRCTL_H
>
>  #include "target/arm/cpu-features.h"
> +#include "mte_user_helper.h"
>
>  static abi_long do_prctl_sve_get_vl(CPUArchState *env)
>  {
> @@ -173,26 +174,7 @@ static abi_long do_prctl_set_tagged_addr_ctrl(CPUArchState *env, abi_long arg2)
>      env->tagged_addr_enable = arg2 & PR_TAGGED_ADDR_ENABLE;
>
>      if (cpu_isar_feature(aa64_mte, cpu)) {
> -        /*
> -         * Write PR_MTE_TCF to SCTLR_EL1[TCF0].
> -         *
> -         * The kernel has a per-cpu configuration for the sysadmin,
> -         * /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred,
> -         * which qemu does not implement.
> -         *
> -         * Because there is no performance difference between the modes, and
> -         * because SYNC is most useful for debugging MTE errors, choose SYNC
> -         * as the preferred mode.  With this preference, and the way the API
> -         * uses only two bits, there is no way for the program to select
> -         * ASYMM mode.
> -         */
> -        unsigned tcf = 0;
> -        if (arg2 & PR_MTE_TCF_SYNC) {
> -            tcf = 1;
> -        } else if (arg2 & PR_MTE_TCF_ASYNC) {
> -            tcf = 2;
> -        }
> -        env->cp15.sctlr_el[1] = deposit64(env->cp15.sctlr_el[1], 38, 2, tcf);
> +        arm_set_mte_tcf0(env, arg2);
>
>          /*
>           * Write PR_MTE_TAG to GCR_EL1[Exclude].
> diff --git a/linux-user/aarch64/mte_user_helper.c b/linux-user/aarch64/mte_user_helper.c
> new file mode 100644
> index 0000000000..a5b1c8503b
> --- /dev/null
> +++ b/linux-user/aarch64/mte_user_helper.c
> @@ -0,0 +1,35 @@
> +/*
> + * ARM MemTag convenience functions.
> + *
> + * This code is licensed under the GNU GPL v2 or later.
> + *
> + * SPDX-License-Identifier: LGPL-2.1-or-later
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qemu.h"
> +#include "mte_user_helper.h"
> +
> +void arm_set_mte_tcf0(CPUArchState *env, abi_long value)
> +{
> +    /*
> +     * Write PR_MTE_TCF to SCTLR_EL1[TCF0].
> +     *
> +     * The kernel has a per-cpu configuration for the sysadmin,
> +     * /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred,
> +     * which qemu does not implement.
> +     *
> +     * Because there is no performance difference between the modes, and
> +     * because SYNC is most useful for debugging MTE errors, choose SYNC
> +     * as the preferred mode.  With this preference, and the way the API
> +     * uses only two bits, there is no way for the program to select
> +     * ASYMM mode.
> +     */
> +    unsigned tcf = 0;
> +    if (value & PR_MTE_TCF_SYNC) {
> +        tcf = 1;
> +    } else if (value & PR_MTE_TCF_ASYNC) {
> +        tcf = 2;
> +    }
> +    env->cp15.sctlr_el[1] = deposit64(env->cp15.sctlr_el[1], 38, 2, tcf);
> +}
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index e2804312fc..b8c278b91d 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -6281,15 +6281,6 @@ abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr)
>  # define PR_GET_TAGGED_ADDR_CTRL 56
>  # define PR_TAGGED_ADDR_ENABLE  (1UL << 0)
>  #endif
> -#ifndef PR_MTE_TCF_SHIFT
> -# define PR_MTE_TCF_SHIFT       1
> -# define PR_MTE_TCF_NONE        (0UL << PR_MTE_TCF_SHIFT)
> -# define PR_MTE_TCF_SYNC        (1UL << PR_MTE_TCF_SHIFT)
> -# define PR_MTE_TCF_ASYNC       (2UL << PR_MTE_TCF_SHIFT)
> -# define PR_MTE_TCF_MASK        (3UL << PR_MTE_TCF_SHIFT)
> -# define PR_MTE_TAG_SHIFT       3
> -# define PR_MTE_TAG_MASK        (0xffffUL << PR_MTE_TAG_SHIFT)
> -#endif
>  #ifndef PR_SET_IO_FLUSHER
>  # define PR_SET_IO_FLUSHER 57
>  # define PR_GET_IO_FLUSHER 58
> diff --git a/linux-user/aarch64/meson.build b/linux-user/aarch64/meson.build
> index 248c578d15..f75bb3cd75 100644
> --- a/linux-user/aarch64/meson.build
> +++ b/linux-user/aarch64/meson.build
> @@ -9,3 +9,5 @@ vdso_le_inc = gen_vdso.process('vdso-le.so',
>                                 extra_args: ['-r', '__kernel_rt_sigreturn'])
>
>  linux_user_ss.add(when: 'TARGET_AARCH64', if_true: [vdso_be_inc, vdso_le_inc])
> +
> +linux_user_ss.add(when: 'TARGET_AARCH64', if_true: [files('mte_user_helper.c')])
> --
> 2.39.2
>

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 37/40] gdbstub: Pass CPU context to command handler
  2024-07-05  8:40 ` [PATCH v2 37/40] gdbstub: Pass CPU context to command handler Alex Bennée
@ 2024-07-05 10:08   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:08 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier,
	Gustavo Romero

On Fri, 5 Jul 2024 at 11:47, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> From: Gustavo Romero <gustavo.romero@linaro.org>
>
> Allow passing the current CPU context to command handlers via user_ctx
> when the handler requires it.
>
> Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20240628050850.536447-9-gustavo.romero@linaro.org>
> ---
>  include/gdbstub/commands.h | 3 +++
>  gdbstub/gdbstub.c          | 7 ++++++-
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/include/gdbstub/commands.h b/include/gdbstub/commands.h
> index e51f276b40..f3058f9dda 100644
> --- a/include/gdbstub/commands.h
> +++ b/include/gdbstub/commands.h
> @@ -54,6 +54,8 @@ typedef union GdbCmdVariant {
>   * "stop reply" packet. The list of commands that accept such response is
>   * defined at the GDB Remote Serial Protocol documentation. See:
>   * https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html#Stop-Reply-Packets.
> + *
> + * @need_cpu_context: Pass current CPU context to command handler via user_ctx.
>   */
>  typedef struct GdbCmdParseEntry {
>      GdbCmdHandler handler;
> @@ -61,6 +63,7 @@ typedef struct GdbCmdParseEntry {
>      bool cmd_startswith;
>      const char *schema;
>      bool allow_stop_reply;
> +    bool need_cpu_context;
>  } GdbCmdParseEntry;
>
>  /**
> diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
> index b1ca253f97..5c1612ed2a 100644
> --- a/gdbstub/gdbstub.c
> +++ b/gdbstub/gdbstub.c
> @@ -938,6 +938,7 @@ static bool process_string_cmd(const char *data,
>
>      for (i = 0; i < num_cmds; i++) {
>          const GdbCmdParseEntry *cmd = &cmds[i];
> +        void *user_ctx = NULL;
>          g_assert(cmd->handler && cmd->cmd);
>
>          if ((cmd->cmd_startswith && !startswith(data, cmd->cmd)) ||
> @@ -952,8 +953,12 @@ static bool process_string_cmd(const char *data,
>              }
>          }
>
> +        if (cmd->need_cpu_context) {
> +            user_ctx = (void *)gdbserver_state.g_cpu;
> +        }
> +
>          gdbserver_state.allow_stop_reply = cmd->allow_stop_reply;
> -        cmd->handler(params, NULL);
> +        cmd->handler(params, user_ctx);
>          return true;
>      }
>
> --
> 2.39.2
>

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 22/40] test/plugins: preserve the instruction record over translations
  2024-07-05  8:40 ` [PATCH v2 22/40] test/plugins: preserve the instruction record over translations Alex Bennée
@ 2024-07-05 10:15   ` Manos Pitsidianakis
  0 siblings, 0 replies; 54+ messages in thread
From: Manos Pitsidianakis @ 2024-07-05 10:15 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, Wainer dos Santos Moschetta, Beraldo Leal,
	David Hildenbrand, Paolo Bonzini, Philippe Mathieu-Daudé,
	Pierrick Bouvier, Alexandre Iooss, Thomas Huth, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On Fri, 5 Jul 2024 at 11:43, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> We are interested in the particular instruction so we should use a
> stable record for it. We could bring this down to physical address but
> for now vaddr + disas seems to do the trick.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>  tests/plugin/insn.c | 76 ++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 71 insertions(+), 5 deletions(-)
>
> diff --git a/tests/plugin/insn.c b/tests/plugin/insn.c
> index 524f9ddde8..baf2d07205 100644
> --- a/tests/plugin/insn.c
> +++ b/tests/plugin/insn.c
> @@ -43,6 +43,44 @@ typedef struct {
>      char *disas;
>  } Instruction;
>
> +/* A hash table to hold matched instructions */
> +static GHashTable *match_insn_records;
> +static GMutex match_hash_lock;
> +
> +
> +static Instruction * get_insn_record(const char *disas, uint64_t vaddr, Match *m)
> +{
> +    g_autofree char *str_hash = g_strdup_printf("%"PRIx64" %s", vaddr, disas);
> +    Instruction *record;
> +
> +    g_mutex_lock(&match_hash_lock);
> +
> +    if (!match_insn_records) {
> +        match_insn_records = g_hash_table_new(g_str_hash, g_str_equal);
> +    }
> +
> +    record = g_hash_table_lookup(match_insn_records, str_hash);
> +
> +    if (!record) {
> +        g_autoptr(GString) ts = g_string_new(str_hash);
> +
> +        record = g_new0(Instruction, 1);
> +        record->disas = g_strdup(disas);
> +        record->vaddr = vaddr;
> +        record->match = m;
> +
> +        g_hash_table_insert(match_insn_records, str_hash, record);
> +
> +        g_string_prepend(ts, "Created record for: ");
> +        g_string_append(ts, "\n");
> +        qemu_plugin_outs(ts->str);
> +    }
> +
> +    g_mutex_unlock(&match_hash_lock);
> +
> +    return record;
> +}
> +
>  /*
>   * Initialise a new vcpu with reading the register list
>   */
> @@ -131,16 +169,19 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>           * If we are tracking certain instructions we will need more
>           * information about the instruction which we also need to
>           * save if there is a hit.
> +         *
> +         * We only want one record for each occurrence of the matched
> +         * instruction.
>           */
>          if (matches->len) {
>              char *insn_disas = qemu_plugin_insn_disas(insn);
>              for (int j = 0; j < matches->len; j++) {
>                  Match *m = &g_array_index(matches, Match, j);
>                  if (g_str_has_prefix(insn_disas, m->match_string)) {
> -                    Instruction *rec = g_new0(Instruction, 1);
> -                    rec->disas = g_strdup(insn_disas);
> -                    rec->vaddr = qemu_plugin_insn_vaddr(insn);
> -                    rec->match = m;
> +                    Instruction *rec = get_insn_record(insn_disas,
> +                                                       qemu_plugin_insn_vaddr(insn),
> +                                                       m);
> +
>                      qemu_plugin_register_vcpu_insn_exec_cb(
>                          insn, vcpu_insn_matched_exec_before,
>                          QEMU_PLUGIN_CB_NO_REGS, rec);
> @@ -173,13 +214,38 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
>                                 qemu_plugin_u64_sum(insn_count));
>      }
>      qemu_plugin_outs(out->str);
> -
>      qemu_plugin_scoreboard_free(insn_count.score);
> +
> +    g_mutex_lock(&match_hash_lock);
> +
>      for (i = 0; i < matches->len; ++i) {
>          Match *m = &g_array_index(matches, Match, i);
> +        GHashTableIter iter;
> +        Instruction *record;
> +        qemu_plugin_u64 hit_e = qemu_plugin_scoreboard_u64_in_struct(m->counts, MatchCount, hits);
> +        uint64_t hits = qemu_plugin_u64_sum(hit_e);
> +
> +        g_string_printf(out, "Match: %s, hits %"PRId64"\n", m->match_string, hits);
> +        qemu_plugin_outs(out->str);
> +
> +        g_hash_table_iter_init(&iter, match_insn_records);
> +        while (g_hash_table_iter_next(&iter, NULL, (void **)&record)) {
> +            if (record->match == m) {
> +                g_string_printf(out,
> +                                "  %"PRIx64": %s (hits %"PRId64")\n",
> +                                record->vaddr,
> +                                record->disas,
> +                                record->hits);
> +                qemu_plugin_outs(out->str);
> +            }
> +        }
> +
>          g_free(m->match_string);
>          qemu_plugin_scoreboard_free(m->counts);
>      }
> +
> +    g_mutex_unlock(&match_hash_lock);
> +
>      g_array_free(matches, TRUE);
>      g_array_free(sizes, TRUE);
>  }
> --
> 2.39.2

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>


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

* Re: [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05  8:40 ` [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds Alex Bennée
  2024-07-05  8:49   ` Thomas Huth
@ 2024-07-05 16:34   ` Philippe Mathieu-Daudé
  2024-07-05 16:49     ` Thomas Huth
  1 sibling, 1 reply; 54+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-07-05 16:34 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Pierrick Bouvier, Alexandre Iooss, Thomas Huth,
	Mahmoud Mandour, Peter Maydell, qemu-arm, Aleksandar Rikalo,
	Mads Ynddal, Yanan Wang, Eduardo Habkost, Peter Xu,
	Richard Henderson, Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi,
	Laurent Vivier

On 5/7/24 10:40, Alex Bennée wrote:
> In fact any other accelerator would be pointless as the point is to
> exercise the TCI accelerator anyway.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   .gitlab-ci.d/buildtest.yml   | 2 +-
>   .gitlab-ci.d/crossbuilds.yml | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
> index 425fc6479b..e3a0758bd9 100644
> --- a/.gitlab-ci.d/buildtest.yml
> +++ b/.gitlab-ci.d/buildtest.yml
> @@ -635,7 +635,7 @@ build-tci:
>       - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
>       - mkdir build
>       - cd build
> -    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
> +    - ../configure --enable-tcg-interpreter --disable-kvm --disable-docs --disable-gtk --disable-vnc

Shouldn't we also disable the other accelerators for completeness?

>           --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
>           || { cat config.log meson-logs/meson-log.txt && exit 1; }
>       - make -j"$JOBS"
> diff --git a/.gitlab-ci.d/crossbuilds.yml b/.gitlab-ci.d/crossbuilds.yml
> index 3de0341afe..cb499e4ee0 100644
> --- a/.gitlab-ci.d/crossbuilds.yml
> +++ b/.gitlab-ci.d/crossbuilds.yml
> @@ -68,7 +68,7 @@ cross-i686-tci:
>     variables:
>       IMAGE: debian-i686-cross
>       ACCEL: tcg-interpreter
> -    EXTRA_CONFIGURE_OPTS: --target-list=i386-softmmu,i386-linux-user,aarch64-softmmu,aarch64-linux-user,ppc-softmmu,ppc-linux-user --disable-plugins
> +    EXTRA_CONFIGURE_OPTS: --target-list=i386-softmmu,i386-linux-user,aarch64-softmmu,aarch64-linux-user,ppc-softmmu,ppc-linux-user --disable-plugins --disable-kvm
>       MAKE_CHECK_ARGS: check check-tcg
>   
>   cross-mipsel-system:



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

* Re: [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05 16:34   ` Philippe Mathieu-Daudé
@ 2024-07-05 16:49     ` Thomas Huth
  2024-07-05 21:44       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 54+ messages in thread
From: Thomas Huth @ 2024-07-05 16:49 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Alex Bennée, qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Pierrick Bouvier, Alexandre Iooss, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On 05/07/2024 18.34, Philippe Mathieu-Daudé wrote:
> On 5/7/24 10:40, Alex Bennée wrote:
>> In fact any other accelerator would be pointless as the point is to
>> exercise the TCI accelerator anyway.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> ---
>>   .gitlab-ci.d/buildtest.yml   | 2 +-
>>   .gitlab-ci.d/crossbuilds.yml | 2 +-
>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
>> index 425fc6479b..e3a0758bd9 100644
>> --- a/.gitlab-ci.d/buildtest.yml
>> +++ b/.gitlab-ci.d/buildtest.yml
>> @@ -635,7 +635,7 @@ build-tci:
>>       - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
>>       - mkdir build
>>       - cd build
>> -    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk 
>> --disable-vnc
>> +    - ../configure --enable-tcg-interpreter --disable-kvm --disable-docs 
>> --disable-gtk --disable-vnc
> 
> Shouldn't we also disable the other accelerators for completeness?

No, this is a Linux machine, and there's only TCG and KVM available for 
Linux. No need to bother with the other accelerators here.

  Thomas




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

* Re: [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05 16:49     ` Thomas Huth
@ 2024-07-05 21:44       ` Philippe Mathieu-Daudé
  2024-07-08  4:59         ` Thomas Huth
  0 siblings, 1 reply; 54+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-07-05 21:44 UTC (permalink / raw)
  To: Thomas Huth, Alex Bennée, qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Pierrick Bouvier, Alexandre Iooss, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On 5/7/24 18:49, Thomas Huth wrote:
> On 05/07/2024 18.34, Philippe Mathieu-Daudé wrote:
>> On 5/7/24 10:40, Alex Bennée wrote:
>>> In fact any other accelerator would be pointless as the point is to
>>> exercise the TCI accelerator anyway.
>>>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>> ---
>>>   .gitlab-ci.d/buildtest.yml   | 2 +-
>>>   .gitlab-ci.d/crossbuilds.yml | 2 +-
>>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
>>> index 425fc6479b..e3a0758bd9 100644
>>> --- a/.gitlab-ci.d/buildtest.yml
>>> +++ b/.gitlab-ci.d/buildtest.yml
>>> @@ -635,7 +635,7 @@ build-tci:
>>>       - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
>>>       - mkdir build
>>>       - cd build
>>> -    - ../configure --enable-tcg-interpreter --disable-docs 
>>> --disable-gtk --disable-vnc
>>> +    - ../configure --enable-tcg-interpreter --disable-kvm 
>>> --disable-docs --disable-gtk --disable-vnc
>>
>> Shouldn't we also disable the other accelerators for completeness?
> 
> No, this is a Linux machine, and there's only TCG and KVM available for 
> Linux. No need to bother with the other accelerators here.

I noticed this is Linux. If for some reason the Xen libs get installed,
Xen accel will be enabled. Explicit would be:

--enable-tcg --enable-tcg-interpreter --disable-kvm --disable-xen

But I won't insist. Anyhow Alex sent his pull request.

Regards,

Phil.


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

* Re: [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds
  2024-07-05 21:44       ` Philippe Mathieu-Daudé
@ 2024-07-08  4:59         ` Thomas Huth
  0 siblings, 0 replies; 54+ messages in thread
From: Thomas Huth @ 2024-07-08  4:59 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Alex Bennée, qemu-devel
  Cc: Wainer dos Santos Moschetta, Beraldo Leal, David Hildenbrand,
	Paolo Bonzini, Pierrick Bouvier, Alexandre Iooss, Mahmoud Mandour,
	Peter Maydell, qemu-arm, Aleksandar Rikalo, Mads Ynddal,
	Yanan Wang, Eduardo Habkost, Peter Xu, Richard Henderson,
	Marcel Apfelbaum, Paul Burton, Stefan Hajnoczi, Laurent Vivier

On 05/07/2024 23.44, Philippe Mathieu-Daudé wrote:
> On 5/7/24 18:49, Thomas Huth wrote:
>> On 05/07/2024 18.34, Philippe Mathieu-Daudé wrote:
>>> On 5/7/24 10:40, Alex Bennée wrote:
>>>> In fact any other accelerator would be pointless as the point is to
>>>> exercise the TCI accelerator anyway.
>>>>
>>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>> ---
>>>>   .gitlab-ci.d/buildtest.yml   | 2 +-
>>>>   .gitlab-ci.d/crossbuilds.yml | 2 +-
>>>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
>>>> index 425fc6479b..e3a0758bd9 100644
>>>> --- a/.gitlab-ci.d/buildtest.yml
>>>> +++ b/.gitlab-ci.d/buildtest.yml
>>>> @@ -635,7 +635,7 @@ build-tci:
>>>>       - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
>>>>       - mkdir build
>>>>       - cd build
>>>> -    - ../configure --enable-tcg-interpreter --disable-docs 
>>>> --disable-gtk --disable-vnc
>>>> +    - ../configure --enable-tcg-interpreter --disable-kvm 
>>>> --disable-docs --disable-gtk --disable-vnc
>>>
>>> Shouldn't we also disable the other accelerators for completeness?
>>
>> No, this is a Linux machine, and there's only TCG and KVM available for 
>> Linux. No need to bother with the other accelerators here.
> 
> I noticed this is Linux. If for some reason the Xen libs get installed,
> Xen accel will be enabled. Explicit would be:
> 
> --enable-tcg --enable-tcg-interpreter --disable-kvm --disable-xen
> 
> But I won't insist. Anyhow Alex sent his pull request.

Oh, drat, I somehow only had the hvf and whpx accelerators in mind... You're 
right, --disable-xen is certainly a good idea here, too:

  https://gitlab.com/qemu-project/qemu/-/jobs/7281510036#L583

Mind to send a patch on top of the previous one?

  Thomas




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

end of thread, other threads:[~2024-07-08  5:00 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-05  8:40 [PATCH v2 00/40] July maintainer updates (32bit, testing, plugins, gdbstub) Alex Bennée
2024-07-05  8:40 ` [PATCH v2 01/40] tests/lcitool: fix debian-i686-cross toolchain prefix Alex Bennée
2024-07-05  8:40 ` [PATCH v2 02/40] testing: restore some testing for i686 Alex Bennée
2024-07-05  8:40 ` [PATCH v2 03/40] tracepoints: move physmem trace points Alex Bennée
2024-07-05  8:40 ` [PATCH v2 04/40] hw/core: ensure kernel_end never gets used undefined Alex Bennée
2024-07-05  9:49   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 05/40] tests/docker: Specify --userns keep-id for Podman Alex Bennée
2024-07-05  8:40 ` [PATCH v2 06/40] tests/tcg/minilib: Constify digits in print_num Alex Bennée
2024-07-05  8:40 ` [PATCH v2 07/40] tests/tcg: Adjust variable defintion from cc-option Alex Bennée
2024-07-05  8:40 ` [PATCH v2 08/40] tests/tcg/aarch64: Drop -fno-tree-loop-distribute-patterns Alex Bennée
2024-07-05  8:40 ` [PATCH v2 09/40] tests/tcg/aarch64: Explicitly specify register width Alex Bennée
2024-07-05  8:40 ` [PATCH v2 10/40] tests/tcg/aarch64: Fix irg operand type Alex Bennée
2024-07-05  8:40 ` [PATCH v2 11/40] tests/tcg/aarch64: Do not use x constraint Alex Bennée
2024-07-05  8:40 ` [PATCH v2 12/40] tests/tcg/aarch64: Add -fno-integrated-as for sme Alex Bennée
2024-07-05  8:40 ` [PATCH v2 13/40] tests/tcg/arm: Fix fcvt result messages Alex Bennée
2024-07-05  8:40 ` [PATCH v2 14/40] tests/tcg/arm: Drop -N from LDFLAGS Alex Bennée
2024-07-05  8:40 ` [PATCH v2 15/40] tests/tcg/arm: Use -fno-integrated-as for test-arm-iwmmxt Alex Bennée
2024-07-05  8:40 ` [PATCH v2 16/40] tests/tcg/arm: Manually register allocate half-precision numbers Alex Bennée
2024-07-05  8:40 ` [PATCH v2 17/40] tests/tcg/arm: Use -march and -mfpu for fcvt Alex Bennée
2024-07-05  8:40 ` [PATCH v2 18/40] tests/tcg/arm: Use vmrs/vmsr instead of mcr/mrc Alex Bennée
2024-07-05  8:40 ` [PATCH v2 19/40] linux-user/main: Suppress out-of-range comparison warning for clang Alex Bennée
2024-07-05  8:40 ` [PATCH v2 20/40] gitlab: don't bother with KVM for TCI builds Alex Bennée
2024-07-05  8:49   ` Thomas Huth
2024-07-05 16:34   ` Philippe Mathieu-Daudé
2024-07-05 16:49     ` Thomas Huth
2024-07-05 21:44       ` Philippe Mathieu-Daudé
2024-07-08  4:59         ` Thomas Huth
2024-07-05  8:40 ` [PATCH v2 21/40] test/plugin: make insn plugin less noisy by default Alex Bennée
2024-07-05 10:02   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 22/40] test/plugins: preserve the instruction record over translations Alex Bennée
2024-07-05 10:15   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 23/40] plugins/lockstep: preserve sock_path Alex Bennée
2024-07-05  9:54   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 24/40] plugins/lockstep: make mixed-mode safe Alex Bennée
2024-07-05  8:40 ` [PATCH v2 25/40] plugins/lockstep: mention the one-insn-per-tb option Alex Bennée
2024-07-05 10:04   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 26/40] plugins/lockstep: clean-up output Alex Bennée
2024-07-05  8:40 ` [PATCH v2 27/40] plugins: Ensure vCPU index is assigned in init/exit hooks Alex Bennée
2024-07-05  8:40 ` [PATCH v2 28/40] plugins: Free CPUPluginState before destroying vCPU state Alex Bennée
2024-07-05  8:40 ` [PATCH v2 29/40] accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/ Alex Bennée
2024-07-05  8:40 ` [PATCH v2 30/40] gdbstub: Clean up process_string_cmd Alex Bennée
2024-07-05  8:40 ` [PATCH v2 31/40] gdbstub: Move GdbCmdParseEntry into a new header file Alex Bennée
2024-07-05  8:40 ` [PATCH v2 32/40] gdbstub: Add support for target-specific stubs Alex Bennée
2024-07-05  8:40 ` [PATCH v2 33/40] target/arm: Fix exception case in allocation_tag_mem_probe Alex Bennée
2024-07-05  8:40 ` [PATCH v2 34/40] target/arm: Make some MTE helpers widely available Alex Bennée
2024-07-05  8:40 ` [PATCH v2 35/40] target/arm: Factor out code for setting MTE TCF0 field Alex Bennée
2024-07-05 10:07   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 36/40] gdbstub: Make hex conversion function non-internal Alex Bennée
2024-07-05  8:40 ` [PATCH v2 37/40] gdbstub: Pass CPU context to command handler Alex Bennée
2024-07-05 10:08   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 38/40] gdbstub: Use true to set cmd_startswith Alex Bennée
2024-07-05 10:03   ` Manos Pitsidianakis
2024-07-05  8:40 ` [PATCH v2 39/40] gdbstub: Add support for MTE in user mode Alex Bennée
2024-07-05  8:40 ` [PATCH v2 40/40] tests/tcg/aarch64: Add MTE gdbstub tests Alex Bennée

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).