qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs
@ 2025-01-27 11:27 Peter Maydell
  2025-01-27 11:27 ` [PATCH 1/2] target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation Peter Maydell
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Peter Maydell @ 2025-01-27 11:27 UTC (permalink / raw)
  To: qemu-arm, qemu-devel

This patchset marks all the CPUs that support iwMMXt as deprecated,
because I don't believe anybody is using them, and we have no way to
test the thousands of lines of code we have that's only there for
iwMMXt emulation.  (See for instance the recent thread where a patch
was submitted to fix an issue detected by a static analyzer: we
didn't take it, largely because we had no way to know if the
behaviour change the patch would produce was correct or not.)

The pxa2xx CPUs are now only useful with user-mode emulation, because
we dropped all the machine types that used them in 9.2.  (Technically
you could alse use "-cpu pxa270" with a board model like versatilepb
which doesn't sanity-check the CPU type, but that has never been a
supported config.)

To use them (or iwMMXt emulation) with QEMU user-mode you would need
to explicitly select them with the -cpu option or the QEMU_CPU
environment variable, because the '-cpu max' default CPU does not
include iwMMXt emulation.  A google search finds no examples of
anybody doing this in the last decade.

I asked some of the Linaro GCC folks if they were using QEMU to test
their iwMMXt codegen, or knew anybody doing that upstream, and the
answer was "no". In fact, GCC is in the process of dropping support
for iwMMXt entirely.
                    
We have one test case in check-tcg which purports to be checking
iwMMXt. In fact it is doing no such thing: it runs the test without
selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
prints garbage and then succeeds anyway. Modern distro toolchains
can't generate a binary that will run with -cpu pxa270 (because their
crt startup code uses Thumb insns); rather than putting in a lot of
effort trying to salvage the test case to really test a feature we've
deprecated, I opted to just remove the test.

-- PMM

Peter Maydell (2):
  target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation
  tests/tcg/arm: Remove test-arm-iwmmxt test

 docs/about/deprecated.rst       | 21 ++++++++++++++
 target/arm/cpu.h                |  1 +
 target/arm/cpu.c                |  3 ++
 target/arm/tcg/cpu32.c          | 36 ++++++++++++++++--------
 tests/tcg/arm/Makefile.target   |  7 -----
 tests/tcg/arm/README            |  5 ----
 tests/tcg/arm/test-arm-iwmmxt.S | 49 ---------------------------------
 7 files changed, 49 insertions(+), 73 deletions(-)
 delete mode 100644 tests/tcg/arm/test-arm-iwmmxt.S

-- 
2.34.1



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

* [PATCH 1/2] target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation
  2025-01-27 11:27 [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Peter Maydell
@ 2025-01-27 11:27 ` Peter Maydell
  2025-01-27 11:27 ` [PATCH 2/2] tests/tcg/arm: Remove test-arm-iwmmxt test Peter Maydell
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2025-01-27 11:27 UTC (permalink / raw)
  To: qemu-arm, qemu-devel

The pxa2xx CPUs are now only useful with user-mode emulation, because
we dropped all the machine types that used them in 9.2.  (Technically
you could alse use "-cpu pxa270" with a board model like versatilepb
which doesn't sanity-check the CPU type, but that has never been a
supported config.)

To use them (or iwMMXt emulation) with QEMU user-mode you would need
to explicitly select them with the -cpu option or the QEMU_CPU
environment variable.  A google search finds no examples of anybody
doing this in the last decade; I don't believe the GCC folks are
using QEMU to test their iwMMXt codegen either.  In fact, GCC is in
the process of dropping support for iwMMXT entirely.

The iwMMXt emulation is thousands of lines of code in QEMU, and
is now the only bit of Arm insn decode which doesn't use decodetree.
We have no way to test or validate changes to it. This code is
just dead weight that is almost certainly not being used by anybody.
Mark it as deprecated.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 docs/about/deprecated.rst | 21 +++++++++++++++++++++
 target/arm/cpu.h          |  1 +
 target/arm/cpu.c          |  3 +++
 target/arm/tcg/cpu32.c    | 36 ++++++++++++++++++++++++------------
 4 files changed, 49 insertions(+), 12 deletions(-)

diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
index 4a3c302962a..29de49351d1 100644
--- a/docs/about/deprecated.rst
+++ b/docs/about/deprecated.rst
@@ -204,6 +204,27 @@ is going to be so much slower it wouldn't make sense for any serious
 instrumentation. Due to implementation differences there will also be
 anomalies in things like memory instrumentation.
 
+linux-user mode CPUs
+--------------------
+
+iwMMXt emulation and the ``pxa`` CPUs (since 10.0)
+''''''''''''''''''''''''''''''''''''''''''''''''''
+
+The ``pxa`` CPU family (``pxa250``, ``pxa255``, ``pxa260``,
+``pxa261``, ``pxa262``, ``pxa270-a0``, ``pxa270-a1``, ``pxa270``,
+``pxa270-b0``, ``pxa270-b1``, ``pxa270-c0``, ``pxa270-c5``) are no
+longer used in system emulation, because all the machine types which
+used these CPUs were removed in the QEMU 9.2 release. These CPUs can
+now only be used in linux-user mode, and to do that you would have to
+explicitly select one of these CPUs with the ``-cpu`` command line
+option or the ``QEMU_CPU`` environment variable.
+
+We don't believe that anybody is using the iwMMXt emulation, and we do
+not have any tests to validate it or any real hardware or similar
+known-good implementation to test against. GCC is in the process of
+dropping their support for iwMMXt codegen. These CPU types are
+therefore deprecated in QEMU, and will be removed in a future release.
+
 System emulator CPUs
 --------------------
 
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 9a6e8e589cc..71df9d3a0c4 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -1114,6 +1114,7 @@ struct ArchCPU {
 
 typedef struct ARMCPUInfo {
     const char *name;
+    const char *deprecation_note;
     void (*initfn)(Object *obj);
     void (*class_init)(ObjectClass *oc, void *data);
 } ARMCPUInfo;
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index dc0231233a6..8a0e3d12f3f 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2756,6 +2756,9 @@ static void cpu_register_class_init(ObjectClass *oc, void *data)
 
     acc->info = data;
     cc->gdb_core_xml_file = "arm-core.xml";
+    if (acc->info->deprecation_note) {
+        cc->deprecation_note = acc->info->deprecation_note;
+    }
 }
 
 void arm_cpu_register(const ARMCPUInfo *info)
diff --git a/target/arm/tcg/cpu32.c b/target/arm/tcg/cpu32.c
index 2ad21825255..0f1c5bc87e8 100644
--- a/target/arm/tcg/cpu32.c
+++ b/target/arm/tcg/cpu32.c
@@ -1026,19 +1026,31 @@ static const ARMCPUInfo arm_tcg_cpus[] = {
     { .name = "ti925t",      .initfn = ti925t_initfn },
     { .name = "sa1100",      .initfn = sa1100_initfn },
     { .name = "sa1110",      .initfn = sa1110_initfn },
-    { .name = "pxa250",      .initfn = pxa250_initfn },
-    { .name = "pxa255",      .initfn = pxa255_initfn },
-    { .name = "pxa260",      .initfn = pxa260_initfn },
-    { .name = "pxa261",      .initfn = pxa261_initfn },
-    { .name = "pxa262",      .initfn = pxa262_initfn },
+    { .name = "pxa250",      .initfn = pxa250_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa255",      .initfn = pxa255_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa260",      .initfn = pxa260_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa261",      .initfn = pxa261_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa262",      .initfn = pxa262_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
     /* "pxa270" is an alias for "pxa270-a0" */
-    { .name = "pxa270",      .initfn = pxa270a0_initfn },
-    { .name = "pxa270-a0",   .initfn = pxa270a0_initfn },
-    { .name = "pxa270-a1",   .initfn = pxa270a1_initfn },
-    { .name = "pxa270-b0",   .initfn = pxa270b0_initfn },
-    { .name = "pxa270-b1",   .initfn = pxa270b1_initfn },
-    { .name = "pxa270-c0",   .initfn = pxa270c0_initfn },
-    { .name = "pxa270-c5",   .initfn = pxa270c5_initfn },
+    { .name = "pxa270",      .initfn = pxa270a0_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-a0",   .initfn = pxa270a0_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-a1",   .initfn = pxa270a1_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-b0",   .initfn = pxa270b0_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-b1",   .initfn = pxa270b1_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-c0",   .initfn = pxa270c0_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
+    { .name = "pxa270-c5",   .initfn = pxa270c5_initfn,
+      .deprecation_note = "iwMMXt CPUs are no longer supported", },
 #ifndef TARGET_AARCH64
     { .name = "max",         .initfn = arm_max_initfn },
 #endif
-- 
2.34.1



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

* [PATCH 2/2] tests/tcg/arm: Remove test-arm-iwmmxt test
  2025-01-27 11:27 [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Peter Maydell
  2025-01-27 11:27 ` [PATCH 1/2] target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation Peter Maydell
@ 2025-01-27 11:27 ` Peter Maydell
  2025-01-27 16:13 ` [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Richard Henderson
  2025-01-27 17:27 ` Philippe Mathieu-Daudé
  3 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2025-01-27 11:27 UTC (permalink / raw)
  To: qemu-arm, qemu-devel

The test-arm-iwmmmxt test isn't testing what it thinks it's testing.

If you run it with a CPU type that supports iwMMXt then it will crash
immediately with a SIGILL, because (even with -marm) GCC will link it
against startup code that is in Thumb mode, and no iwMMXt CPU has
Thumb:

00010338 <_start>:
   10338:       f04f 0b00       mov.w   fp, #0
   1033c:       f04f 0e00       mov.w   lr, #0

If you run it with a CPU type which does *not* support iwMMXt, which
is what 'make check-tcg' does, then QEMU will not try to handle the
insns as iwMMXt.  Instead the translator turns them into illegal
instructions.  Then in the linux-user cpu_loop() code we identify
them as FPA11 instructions inside emulate_arm_fpa11(), because the
FPA11 happened to use the same coprocessor number as these iwMMXt
insns.  So we execute a completely different set of FPA11 insns,
which means we don't crash, but we will print garbage to stdout.
Then the test binary always exits with a 0 return code, so 'make
check-tcg' thinks the test passes.

Modern gnueabihf toolchains assume in their startup code that the CPU
is not so old as to not support Thumb, so there's no way to get them
to generate a binary that actually does what the test wants.  Since
we're deprecating iwMMXt emulation anyway, it's not worth trying to
salvage the test case to get it to really test the iwMMXt insns.

Delete the test entirely.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 tests/tcg/arm/Makefile.target   |  7 -----
 tests/tcg/arm/README            |  5 ----
 tests/tcg/arm/test-arm-iwmmxt.S | 49 ---------------------------------
 3 files changed, 61 deletions(-)
 delete mode 100644 tests/tcg/arm/test-arm-iwmmxt.S

diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
index 06ddf3e04fc..99a953b6671 100644
--- a/tests/tcg/arm/Makefile.target
+++ b/tests/tcg/arm/Makefile.target
@@ -20,13 +20,6 @@ ARM_TESTS = hello-arm
 hello-arm: CFLAGS+=-marm -ffreestanding -fno-stack-protector
 hello-arm: LDFLAGS+=-nostdlib
 
-# IWMXT floating point extensions
-ARM_TESTS += test-arm-iwmmxt
-# 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) -Wa,--noexecstack $< -o $@ $(LDFLAGS)
-
 # Float-convert Tests
 ARM_TESTS += fcvt
 fcvt: LDFLAGS += -lm
diff --git a/tests/tcg/arm/README b/tests/tcg/arm/README
index e6307116e23..aceccc127f7 100644
--- a/tests/tcg/arm/README
+++ b/tests/tcg/arm/README
@@ -4,8 +4,3 @@ hello-arm
 ---------
 
 A very simple inline assembly, write syscall based hello world
-
-test-arm-iwmmxt
----------------
-
-A simple test case for older iwmmxt extended ARMs
diff --git a/tests/tcg/arm/test-arm-iwmmxt.S b/tests/tcg/arm/test-arm-iwmmxt.S
deleted file mode 100644
index d647f9404ae..00000000000
--- a/tests/tcg/arm/test-arm-iwmmxt.S
+++ /dev/null
@@ -1,49 +0,0 @@
-@ Checks whether iwMMXt is functional.
-.code	32
-.globl	main
-
-main:
-ldr	r0, =data0
-ldr	r1, =data1
-ldr	r2, =data2
-#ifndef FPA
-wldrd	wr0, [r0, #0]
-wldrd	wr1, [r0, #8]
-wldrd	wr2, [r1, #0]
-wldrd	wr3, [r1, #8]
-wsubb	wr2, wr2, wr0
-wsubb	wr3, wr3, wr1
-wldrd	wr0, [r2, #0]
-wldrd	wr1, [r2, #8]
-waddb	wr0, wr0, wr2
-waddb	wr1, wr1, wr3
-wstrd	wr0, [r2, #0]
-wstrd	wr1, [r2, #8]
-#else
-ldfe	f0, [r0, #0]
-ldfe	f1, [r0, #8]
-ldfe	f2, [r1, #0]
-ldfe	f3, [r1, #8]
-adfdp	f2, f2, f0
-adfdp	f3, f3, f1
-ldfe	f0, [r2, #0]
-ldfe	f1, [r2, #8]
-adfd	f0, f0, f2
-adfd	f1, f1, f3
-stfe	f0, [r2, #0]
-stfe	f1, [r2, #8]
-#endif
-mov	r0, #1
-mov	r1, r2
-mov	r2, #0x11
-swi	#0x900004
-mov	r0, #0
-swi	#0x900001
-
-.data
-data0:
-.string	"aaaabbbbccccdddd"
-data1:
-.string	"bbbbccccddddeeee"
-data2:
-.string	"hvLLWs\x1fsdrs9\x1fNJ-\n"
-- 
2.34.1



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

* Re: [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs
  2025-01-27 11:27 [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Peter Maydell
  2025-01-27 11:27 ` [PATCH 1/2] target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation Peter Maydell
  2025-01-27 11:27 ` [PATCH 2/2] tests/tcg/arm: Remove test-arm-iwmmxt test Peter Maydell
@ 2025-01-27 16:13 ` Richard Henderson
  2025-01-27 17:27 ` Philippe Mathieu-Daudé
  3 siblings, 0 replies; 8+ messages in thread
From: Richard Henderson @ 2025-01-27 16:13 UTC (permalink / raw)
  To: qemu-devel

On 1/27/25 03:27, Peter Maydell wrote:
> This patchset marks all the CPUs that support iwMMXt as deprecated,
> because I don't believe anybody is using them, and we have no way to
> test the thousands of lines of code we have that's only there for
> iwMMXt emulation.  (See for instance the recent thread where a patch
> was submitted to fix an issue detected by a static analyzer: we
> didn't take it, largely because we had no way to know if the
> behaviour change the patch would produce was correct or not.)
> 
> The pxa2xx CPUs are now only useful with user-mode emulation, because
> we dropped all the machine types that used them in 9.2.  (Technically
> you could alse use "-cpu pxa270" with a board model like versatilepb
> which doesn't sanity-check the CPU type, but that has never been a
> supported config.)
> 
> To use them (or iwMMXt emulation) with QEMU user-mode you would need
> to explicitly select them with the -cpu option or the QEMU_CPU
> environment variable, because the '-cpu max' default CPU does not
> include iwMMXt emulation.  A google search finds no examples of
> anybody doing this in the last decade.
> 
> I asked some of the Linaro GCC folks if they were using QEMU to test
> their iwMMXt codegen, or knew anybody doing that upstream, and the
> answer was "no". In fact, GCC is in the process of dropping support
> for iwMMXt entirely.
>                      
> We have one test case in check-tcg which purports to be checking
> iwMMXt. In fact it is doing no such thing: it runs the test without
> selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
> as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
> prints garbage and then succeeds anyway. Modern distro toolchains
> can't generate a binary that will run with -cpu pxa270 (because their
> crt startup code uses Thumb insns); rather than putting in a lot of
> effort trying to salvage the test case to really test a feature we've
> deprecated, I opted to just remove the test.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


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

* Re: [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs
  2025-01-27 11:27 [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Peter Maydell
                   ` (2 preceding siblings ...)
  2025-01-27 16:13 ` [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Richard Henderson
@ 2025-01-27 17:27 ` Philippe Mathieu-Daudé
  2025-01-27 17:46   ` Peter Maydell
  3 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-01-27 17:27 UTC (permalink / raw)
  To: Peter Maydell, qemu-arm, qemu-devel

On 27/1/25 12:27, Peter Maydell wrote:
> This patchset marks all the CPUs that support iwMMXt as deprecated,
> because I don't believe anybody is using them, and we have no way to
> test the thousands of lines of code we have that's only there for
> iwMMXt emulation.  (See for instance the recent thread where a patch
> was submitted to fix an issue detected by a static analyzer: we
> didn't take it, largely because we had no way to know if the
> behaviour change the patch would produce was correct or not.)
> 
> The pxa2xx CPUs are now only useful with user-mode emulation, because
> we dropped all the machine types that used them in 9.2.  (Technically
> you could alse use "-cpu pxa270" with a board model like versatilepb
> which doesn't sanity-check the CPU type, but that has never been a
> supported config.)
> 
> To use them (or iwMMXt emulation) with QEMU user-mode you would need
> to explicitly select them with the -cpu option or the QEMU_CPU
> environment variable, because the '-cpu max' default CPU does not
> include iwMMXt emulation.  A google search finds no examples of
> anybody doing this in the last decade.
> 
> I asked some of the Linaro GCC folks if they were using QEMU to test
> their iwMMXt codegen, or knew anybody doing that upstream, and the
> answer was "no". In fact, GCC is in the process of dropping support
> for iwMMXt entirely.
>                      
> We have one test case in check-tcg which purports to be checking
> iwMMXt. In fact it is doing no such thing: it runs the test without
> selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
> as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
> prints garbage and then succeeds anyway. Modern distro toolchains

Uh...

> can't generate a binary that will run with -cpu pxa270 (because their
> crt startup code uses Thumb insns); rather than putting in a lot of
> effort trying to salvage the test case to really test a feature we've
> deprecated, I opted to just remove the test.
> 
> -- PMM
> 
> Peter Maydell (2):
>    target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation
>    tests/tcg/arm: Remove test-arm-iwmmxt test

Series:
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



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

* Re: [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs
  2025-01-27 17:27 ` Philippe Mathieu-Daudé
@ 2025-01-27 17:46   ` Peter Maydell
  2025-01-27 21:02     ` Deprecate nwfpe emulation? Richard Henderson
  0 siblings, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2025-01-27 17:46 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé; +Cc: qemu-arm, qemu-devel

On Mon, 27 Jan 2025 at 17:27, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
> On 27/1/25 12:27, Peter Maydell wrote:
> > We have one test case in check-tcg which purports to be checking
> > iwMMXt. In fact it is doing no such thing: it runs the test without
> > selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
> > as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
> > prints garbage and then succeeds anyway.
>
> Uh...

It had me confused for a while, because I'd convinced myself
by code inspection that we only enabled iwMMXt if you
manually asked for a pxa2xx CPU and not in the default 'max'
CPU, and then I found this test case that we were running
with the default CPU type and which was apparently passing :-)

-- PMM


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

* Deprecate nwfpe emulation?
  2025-01-27 17:46   ` Peter Maydell
@ 2025-01-27 21:02     ` Richard Henderson
  2025-02-11 15:44       ` Peter Maydell
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2025-01-27 21:02 UTC (permalink / raw)
  To: Peter Maydell, Philippe Mathieu-Daudé
  Cc: qemu-arm, qemu-devel, linux-arm-kernel

On 1/27/25 09:46, Peter Maydell wrote:
> On Mon, 27 Jan 2025 at 17:27, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>> On 27/1/25 12:27, Peter Maydell wrote:
>>> We have one test case in check-tcg which purports to be checking
>>> iwMMXt. In fact it is doing no such thing: it runs the test without
>>> selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
>>> as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
>>> prints garbage and then succeeds anyway.
>>
>> Uh...
> 
> It had me confused for a while, because I'd convinced myself
> by code inspection that we only enabled iwMMXt if you
> manually asked for a pxa2xx CPU and not in the default 'max'
> CPU, and then I found this test case that we were running
> with the default CPU type and which was apparently passing :-)

Any chance we can deprecate the fpa11 stuff too?

I see it's still enabled by the kernel for some boards,
but it depends on really old configury:

config FPE_NWFPE
         bool "NWFPE math emulation"
         depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
         help
           Say Y to include the NWFPE floating point emulator in the kernel.
           This is necessary to run most binaries. Linux does not currently
           support floating point hardware so you need to say Y here even if
           your machine has an FPA or floating point co-processor podule.

No thumb2, no eabi, and oabi_compat enabled.
I suspect that's a very rare configuration these days.

I'll note the help message is somewhat dated.  :-)


r~


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

* Re: Deprecate nwfpe emulation?
  2025-01-27 21:02     ` Deprecate nwfpe emulation? Richard Henderson
@ 2025-02-11 15:44       ` Peter Maydell
  0 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2025-02-11 15:44 UTC (permalink / raw)
  To: Richard Henderson
  Cc: Philippe Mathieu-Daudé, qemu-arm, qemu-devel,
	linux-arm-kernel

On Mon, 27 Jan 2025 at 21:02, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> On 1/27/25 09:46, Peter Maydell wrote:
> > On Mon, 27 Jan 2025 at 17:27, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
> >> On 27/1/25 12:27, Peter Maydell wrote:
> >>> We have one test case in check-tcg which purports to be checking
> >>> iwMMXt. In fact it is doing no such thing: it runs the test without
> >>> selecting an iwMMXt CPU, which means the iwMMXt insns are interpreted
> >>> as FPA11 insns by the linux-user emulate_arm_fpa11() code. So the test
> >>> prints garbage and then succeeds anyway.
> >>
> >> Uh...
> >
> > It had me confused for a while, because I'd convinced myself
> > by code inspection that we only enabled iwMMXt if you
> > manually asked for a pxa2xx CPU and not in the default 'max'
> > CPU, and then I found this test case that we were running
> > with the default CPU type and which was apparently passing :-)
>
> Any chance we can deprecate the fpa11 stuff too?

I had wondered about that from the QEMU side, but it's
a little trickier than the iwmmxt deprecation because
we enable the fpa11 emulation by default, so it's harder
to tell if any users are still using it. (In practice I'm
pretty sure it'll only being used if people are running
old binaries that used the ancient "floating point return
values go in an FPA register" ABI.)

-- PMM


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

end of thread, other threads:[~2025-02-11 15:44 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-27 11:27 [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Peter Maydell
2025-01-27 11:27 ` [PATCH 1/2] target/arm: deprecate the pxa2xx CPUs and iwMMXt emulation Peter Maydell
2025-01-27 11:27 ` [PATCH 2/2] tests/tcg/arm: Remove test-arm-iwmmxt test Peter Maydell
2025-01-27 16:13 ` [PATCH 0/2] target/arm: Deprecate iwMMXt emulation and associated CPUs Richard Henderson
2025-01-27 17:27 ` Philippe Mathieu-Daudé
2025-01-27 17:46   ` Peter Maydell
2025-01-27 21:02     ` Deprecate nwfpe emulation? Richard Henderson
2025-02-11 15:44       ` Peter Maydell

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).