Philippe Mathieu-Daudé and Michael Tokarev
9988c7b50e
fpu/softfloat: Remove mention of TILE-Gx target
...
TILE-Gx has been removed during the v6.0 release (see
commit 2cc1a90166 "Remove deprecated target tilegx"),
no need to mention it in the list of "supported targets".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Thomas Huth <thuth@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Michael Tokarev <mjt@tls.msk.ru >
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru >
2024-04-01 19:47:40 +03:00
Richard Henderson
722460652b
fpu: Handle m68k extended precision denormals properly
...
Motorola treats denormals with explicit integer bit set as
having unbiased exponent 0, unlike Intel which treats it as
having unbiased exponent 1 (more like all other IEEE formats
that have no explicit integer bit).
Add a flag on FloatFmt to differentiate the behaviour.
Reported-by: Keith Packard <keithp@keithp.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-16 14:57:16 +00:00
LIU Zhiwei and Richard Henderson
00f9ef8f3d
fpu: Add conversions between bfloat16 and [u]int8
...
We missed these functions when upstreaming the bfloat16 support.
Signed-off-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com >
Message-Id: <20230531065458.2082-1-zhiwei_liu@linux.alibaba.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-16 14:57:15 +00:00
Richard Henderson
e2041f4d5d
fpu: Add float64_to_int{32,64}_modulo
...
Add versions of float64_to_int* which do not saturate the result.
Reviewed-by: Christoph Muellner <christoph.muellner@vrull.eu >
Tested-by: Christoph Muellner <christoph.muellner@vrull.eu >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20230527141910.1885950-2-richard.henderson@linaro.org >
2023-07-01 08:26:54 +02:00
Alex Bennée and Richard Henderson
1d3daf9525
softfloat: use QEMU_FLATTEN to avoid mistaken isra inlining
...
Balton discovered that asserts for the extract/deposit calls had a
significant impact on a lame benchmark on qemu-ppc. Replicating with:
./qemu-ppc64 ~/lsrc/tests/lame.git-svn/builds/ppc64/frontend/lame \
-h pts-trondheim-3.wav pts-trondheim-3.mp3
showed up the pack/unpack routines not eliding the assert checks as it
should have done causing them to prominently figure in the profile:
11.44% qemu-ppc64 qemu-ppc64 [.] unpack_raw64.isra.0
11.03% qemu-ppc64 qemu-ppc64 [.] parts64_uncanon_normal
8.26% qemu-ppc64 qemu-ppc64 [.] helper_compute_fprf_float64
6.75% qemu-ppc64 qemu-ppc64 [.] do_float_check_status
5.34% qemu-ppc64 qemu-ppc64 [.] parts64_muladd
4.75% qemu-ppc64 qemu-ppc64 [.] pack_raw64.isra.0
4.38% qemu-ppc64 qemu-ppc64 [.] parts64_canonicalize
3.62% qemu-ppc64 qemu-ppc64 [.] float64r32_round_pack_canonical
After this patch the same test runs 31 seconds faster with a profile
where the generated code dominates more:
+ 14.12% 0.00% qemu-ppc64 [unknown] [.] 0x0000004000619420
+ 13.30% 0.00% qemu-ppc64 [unknown] [.] 0x0000004000616850
+ 12.58% 12.19% qemu-ppc64 qemu-ppc64 [.] parts64_uncanon_normal
+ 10.62% 0.00% qemu-ppc64 [unknown] [.] 0x000000400061bf70
+ 9.91% 9.73% qemu-ppc64 qemu-ppc64 [.] helper_compute_fprf_float64
+ 7.84% 7.82% qemu-ppc64 qemu-ppc64 [.] do_float_check_status
+ 6.47% 5.78% qemu-ppc64 qemu-ppc64 [.] parts64_canonicalize.constprop.0
+ 6.46% 0.00% qemu-ppc64 [unknown] [.] 0x0000004000620130
+ 6.42% 0.00% qemu-ppc64 [unknown] [.] 0x0000004000619400
+ 6.17% 6.04% qemu-ppc64 qemu-ppc64 [.] parts64_muladd
+ 5.85% 0.00% qemu-ppc64 [unknown] [.] 0x00000040006167e0
+ 5.74% 0.00% qemu-ppc64 [unknown] [.] 0x0000b693fcffffd3
+ 5.45% 4.78% qemu-ppc64 qemu-ppc64 [.] float64r32_round_pack_canonical
Suggested-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <ec9cfe5a-d5f2-466d-34dc-c35817e7e010@linaro.org >
[AJB: Patchified rth's suggestion]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Cc: BALATON Zoltan <balaton@eik.bme.hu >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Tested-by: BALATON Zoltan <balaton@eik.bme.hu >
Message-Id: <20230523131107.3680641-1-alex.bennee@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-06-26 17:33:00 +02:00
Shivaprasad G Bhat and Richard Henderson
1098cc3fcf
softfloat: Fix the incorrect computation in float32_exp2
...
The float32_exp2 function is computing wrong exponent of 2.
For example, with the following set of values {0.1, 2.0, 2.0, -1.0},
the expected output would be {1.071773, 4.000000, 4.000000, 0.500000}.
Instead, the function is computing {1.119102, 3.382044, 3.382044, -0.191022}
Looking at the code, the float32_exp2() attempts to do this
2 3 4 5 n
x x x x x x x
e = 1 + --- + --- + --- + --- + --- + ... + --- + ...
1! 2! 3! 4! 5! n!
But because of the typo it ends up doing
x x x x x x x
e = 1 + --- + --- + --- + --- + --- + ... + --- + ...
1! 2! 3! 4! 5! n!
This is because instead of the xnp which holds the numerator, parts_muladd
is using the xp which is just 'x'. Commit '572c4d862ff2' refactored this
function, and mistakenly used xp instead of xnp.
Cc: qemu-stable@nongnu.org
Fixes: 572c4d862f "softfloat: Convert float32_exp2 to FloatParts"
Partially-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1623
Reported-By: Luca Barbato (https://gitlab.com/lu-zero )
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com >
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com >
Message-Id: <168304110865.537992.13059030916325018670.stgit@localhost.localdomain >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-05-05 16:57:48 +01:00
Song Gao
3cf7196909
softfloat: logB(0) should raise divideByZero exception
...
logB(0) should raise divideByZero exception from IEEE 754-2008 spec 7.3
Suggested-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20220930024510.800005-4-gaosong@loongson.cn >
2022-10-17 10:28:35 +08:00
Lucas Mateus Castro (alqotel) and Daniel Henrique Barboza
c40da5c6fb
fpu: Add rebias bool, value and operation
...
Added the possibility of recalculating a result if it overflows or
underflows, if the result overflow and the rebias bool is true then the
intermediate result should have 3/4 of the total range subtracted from
the exponent. The same for underflow but it should be added to the
exponent of the intermediate number instead.
Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20220805141522.412864-2-lucas.araujo@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-08-31 14:08:05 -03:00
Peter Maydell
f45fd24c90
Merge tag 'pull-request-2022-07-20' of https://gitlab.com/thuth/qemu into staging
...
* Fixes for s390x floating point vector instructions
# gpg: Signature made Wed 20 Jul 2022 08:14:50 BST
# gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg: issuer "thuth@redhat.com "
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de >" [full]
# gpg: aka "Thomas Huth <thuth@redhat.com >" [full]
# gpg: aka "Thomas Huth <huth@tuxfamily.org >" [full]
# gpg: aka "Thomas Huth <th.huth@posteo.de >" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5
* tag 'pull-request-2022-07-20' of https://gitlab.com/thuth/qemu :
tests/tcg/s390x: test signed vfmin/vfmax
target/s390x: fix NaN propagation rules
target/s390x: fix handling of zeroes in vfmin/vfmax
Signed-off-by: Peter Maydell <peter.maydell@linaro.org >
# Conflicts:
# fpu/softfloat-specialize.c.inc
2022-07-20 14:13:32 +01:00
Song Gao and Richard Henderson
2344f98e9c
fpu/softfloat: Add LoongArch specializations for pickNaN*
...
The muladd (inf,zero,nan) case sets InvalidOp and returns the
input value 'c', and prefer sNaN over qNaN, in c,a,b order.
Binary operations prefer sNaN over qNaN and a,b order.
Signed-off-by: Song Gao <gaosong@loongson.cn >
Message-Id: <20220716085426.3098060-3-gaosong@loongson.cn >
[rth: Add specialization for pickNaN]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2022-07-19 21:53:58 +05:30
Ilya Leoshkevich and Thomas Huth
63dd7bcbea
target/s390x: fix NaN propagation rules
...
s390x has the same NaN propagation rules as ARM, and not as x86.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Message-Id: <20220713182612.3780050-3-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2022-07-19 12:49:56 +02:00
Richard Henderson
dee3fcfbb3
softfloat: Use FloatRelation for fracN_cmp
...
Since the caller, partsN_compare, is now exclusively
using FloatRelation, it's clearer to use it here too.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Peter Maydell <peter.maydell@linaro.org >
Message-Id: <20220401132240.79730-4-richard.henderson@linaro.org >
2022-04-26 20:01:55 -07:00
Richard Henderson
9343c88444
softfloat: Use FloatRelation within partsN_compare
...
As the return type is FloatRelation, it's clearer to
use the type for 'cmp' within the function.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Peter Maydell <peter.maydell@linaro.org >
Message-Id: <20220401132240.79730-3-richard.henderson@linaro.org >
2022-04-26 20:01:55 -07:00
Richard Henderson
b880867f15
softfloat: Fix declaration of partsN_compare
...
The declaration used 'int', while the definition used 'FloatRelation'.
This should have resulted in a compiler error, but mysteriously didn't.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Peter Maydell <peter.maydell@linaro.org >
Message-Id: <20220401132240.79730-2-richard.henderson@linaro.org >
2022-04-26 20:01:55 -07:00
Matheus Ferst and Daniel Henrique Barboza
bea592300b
softfloat: add float128_to_int128
...
Implements float128_to_int128 based on parts_float_to_int logic.
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20220330175932.6995-7-matheus.ferst@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-04-20 18:00:30 -03:00
Matheus Ferst and Daniel Henrique Barboza
4de49ddfac
softfloat: add float128_to_uint128
...
Implements float128_to_uint128 based on parts_float_to_uint logic.
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20220330175932.6995-6-matheus.ferst@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-04-20 18:00:30 -03:00
Matheus Ferst and Daniel Henrique Barboza
95c1b71e25
softfloat: add int128_to_float128
...
Based on parts_sint_to_float, implements int128_to_float128 to convert a
signed 128-bit value received through an Int128 argument.
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20220330175932.6995-5-matheus.ferst@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-04-20 18:00:30 -03:00
Matheus Ferst and Daniel Henrique Barboza
f279852b89
softfloat: add uint128_to_float128
...
Based on parts_uint_to_float, implements uint128_to_float128 to convert
an unsigned 128-bit value received through an Int128 argument.
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20220330175932.6995-4-matheus.ferst@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-04-20 18:00:30 -03:00
Richard Henderson and Cédric Le Goater
42636fb923
softfloat: Add float64r32 arithmetic routines
...
These variants take a float64 as input, compute the result to
infinite precision (as we do with FloatParts), round the result
to the precision and dynamic range of float32, and then return
the result in the format of float64.
This is the operation PowerPC requires for its float32 operations.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-28-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:15 +01:00
Richard Henderson and Cédric Le Goater
e706d4455b
softfloat: Add flag specific to signaling nans
...
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-8-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00
Richard Henderson and Cédric Le Goater
81254b02eb
softfloat: Add flag specific to convert non-nan to int
...
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-7-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00
Richard Henderson and Cédric Le Goater
f8718aab89
softfloat: Add flag specific to sqrt(-x)
...
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-6-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00
Richard Henderson and Cédric Le Goater
10cc964030
softfloat: Add flags specific to Inf / Inf and 0 / 0
...
PowerPC has these flags, and it's easier to compute them here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-5-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00
Richard Henderson and Cédric Le Goater
bead3c9b0f
softfloat: Add flag specific to Inf * 0
...
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-4-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00
Richard Henderson and Cédric Le Goater
ba11446c40
softfloat: Add flag specific to Inf - Inf
...
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20211119160502.17432-3-richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2021-12-17 17:57:14 +01:00