Ilya Leoshkevich
b4b8d58e56
target/s390x: Emulate CVB, CVBY and CVBG
...
Convert to Binary - counterparts of the already implemented Convert
to Decimal (CVD*) instructions.
Example from the Principles of Operation: 25594C becomes 63FA.
Co-developed-by: Pavel Zbitskiy <pavel.zbitskiy@gmail.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Thomas Huth <thuth@redhat.com >
Message-ID: <20240205205830.6425-3-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2024-02-06 09:51:37 +01:00
Ilya Leoshkevich
a6e55a82e9
target/s390x: Emulate CVDG
...
CVDG is the same as CVD, except that it converts 64 bits into 128,
rather than 32 into 64. Create a new helper, which uses Int128
wrappers.
Reported-by: Ido Plat <Ido.Plat@ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-ID: <20240205205830.6425-2-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2024-02-06 09:51:37 +01:00
Ilya Leoshkevich
bea402482a
target/s390x: Fix LAALG not updating cc_src
...
LAALG uses op_laa() and wout_addu64(). The latter expects cc_src to be
set, but the former does not do it. This can lead to assertion failures
if something sets cc_src to neither 0 nor 1 before.
Fix by introducing op_laa_addu64(), which sets cc_src, and using it for
LAALG.
Fixes: 4dba4d6fef
("target/s390x: Use atomic operations for LOAD AND OP")
Cc: qemu-stable@nongnu.org
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: David Hildenbrand <david@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-ID: <20231106093605.1349201-4-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-11-07 19:27:08 +01:00
Michael Tokarev
cced0d6539
s390x: spelling fixes
...
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru >
Reviewed-by: Thomas Huth <thuth@redhat.com >
2023-07-25 17:13:45 +03:00
Ilya Leoshkevich
761b0aa938
target/s390x: Make CKSM raise an exception if R2 is odd
...
R2 designates an even-odd register pair; the instruction should raise
a specification exception when R2 is not even.
Cc: qemu-stable@nongnu.org
Fixes: e023e832d0
("s390x: translate engine for s390x CPU")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-Id: <20230724082032.66864-2-iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-07-24 18:44:47 +02:00
Ilya Leoshkevich
fed9a4fe0c
target/s390x: Fix MDEB and MDEBR
...
These instructions multiply 32 bits by 32 bits, not 32 bits by 64 bits.
Fixes: 83b00736f3
("target-s390: Convert FP MULTIPLY")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: David Hildenbrand <david@redhat.com >
Cc: qemu-stable@nongnu.org
Message-Id: <20230704081506.276055-4-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-07-10 15:34:23 +02:00
Ilya Leoshkevich
a7f4add793
target/s390x: Fix MXDB and MXDBR
...
These instructions multiply 64 bits by 64 bits, not 128 bits by 64 bits.
Reported-by: Tulio Magno Quites Machado Filho <tuliom@redhat.com >
Fixes: 2b91240f95
("target/s390x: Use Int128 for passing float128")
Cc: qemu-stable@nongnu.org
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2211472
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-Id: <20230601223027.795501-2-iii@linux.ibm.com >
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-06-05 09:48:29 +02:00
Ilya Leoshkevich
3180b17362
target/s390x: Fix LOCFHR taking the wrong half of R2
...
LOCFHR should write top-to-top, but QEMU erroneously writes
bottom-to-top.
Fixes: 45aa9aa3b7
("target/s390x: Implement load-on-condition-2 insns")
Cc: qemu-stable@nongnu.org
Reported-by: Mikhail Mitskevich <mitskevichmn@gmail.com >
Closes: https://gitlab.com/qemu-project/qemu/-/issues/1668
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-Id: <20230526181240.1425579-4-iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-06-05 07:27:23 +02:00
Ilya Leoshkevich
079181b9bc
target/s390x: Fix LCBB overwriting the top 32 bits
...
LCBB is supposed to overwrite only the bottom 32 bits, but QEMU
erroneously overwrites the entire register.
Fixes: 6d9303322e
("s390x/tcg: Implement LOAD COUNT TO BLOCK BOUNDARY")
Cc: qemu-stable@nongnu.org
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-Id: <20230526181240.1425579-2-iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-06-05 07:27:23 +02:00
Richard Henderson
d54a20b9dd
target/s390x: Use tcg_gen_qemu_{ld,st}_i128 for LPQ, STPQ
...
No need to roll our own, as this is now provided by tcg.
This was the last use of retxl, so remove that too.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-05-23 16:51:19 -07:00
Ilya Leoshkevich
970641de01
s390x/tcg: Fix LDER instruction format
...
It's RRE, not RXE.
Found by running valgrind's none/tests/s390x/bfp-2.
Fixes: 86b59624c4
("s390x/tcg: Implement LOAD LENGTHENED short HFP to long HFP")
Reviewed-by: David Hildenbrand <david@redhat.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Message-Id: <20230511134726.469651-1-iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-05-16 09:14:18 +02:00
Ilya Leoshkevich
39ad734445
target/s390x: Handle STGRL to non-aligned addresses
...
Use MO_ALIGN and let do_unaligned_access() generate a specification
exception.
Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Suggested-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230316164428.275147-11-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-20 09:32:50 +01:00
Ilya Leoshkevich
2bc66225d8
target/s390x: Handle STRL to non-aligned addresses
...
Use MO_ALIGN and let do_unaligned_access() generate a specification
exception.
Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Suggested-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230316164428.275147-10-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-20 09:32:50 +01:00
Ilya Leoshkevich
4942e4cc90
target/s390x: Handle LLGFRL from non-aligned addresses
...
Use MO_ALIGN and let do_unaligned_access() generate a specification
exception.
Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Suggested-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230316164428.275147-6-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-20 09:32:50 +01:00
Ilya Leoshkevich
e6d70c82ff
target/s390x: Handle LRL and LGFRL from non-aligned addresses
...
Use MO_ALIGN and let do_unaligned_access() generate a specification
exception.
Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Suggested-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230316164428.275147-5-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-20 09:32:50 +01:00
Ilya Leoshkevich
2a00d55d21
target/s390x: Handle LGRL from non-aligned addresses
...
Use MO_ALIGN and let do_unaligned_access() generate a specification
exception.
Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Suggested-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230316164428.275147-4-iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-20 09:32:50 +01:00
Nina Schoetterl-Glausch
54fce97cfc
target/s390x: Fix emulation of C(G)HRL
...
The second operand of COMPARE HALFWORD RELATIVE LONG is a signed
halfword, it does not have the same size as the first operand.
Fixes: a7e836d5eb
("target-s390: Convert COMPARE, COMPARE LOGICAL")
Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: David Hildenbrand <david@redhat.com >
Message-Id: <20230310114157.3024170-2-nsg@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2023-03-13 09:23:42 +01:00
Richard Henderson
1fcd84fa0d
target/s390x: Use tcg_gen_atomic_cmpxchg_i128 for CDSG
...
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-02-04 06:19:43 -10:00
Richard Henderson
2b91240f95
target/s390x: Use Int128 for passing float128
...
Acked-by: David Hildenbrand <david@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
---
v2: Fix SPEC_in1_x1.
2023-02-04 06:19:43 -10:00
Richard Henderson
ee5e866fd2
target/s390x: Use Int128 for returning float128
...
Acked-by: David Hildenbrand <david@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
---
v2: Remove extraneous return_low128.
2023-02-04 06:19:43 -10:00
Richard Henderson
f4031d9664
target/s390x: Copy wout_x1 to wout_x1_P
...
Make a copy of wout_x1 before modifying it, as wout_x1_P
emphasizing that it operates on the out/out2 pair. The insns
that use x1_P are data movement that will not change to Int128.
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-02-04 06:19:43 -10:00
Thomas Huth
3ef473e52e
target/s390x: The MVCP and MVCS instructions are not privileged
...
The "MOVE TO PRIMARY/SECONDARY" instructions can also be called
from problem state. We just should properly check whether the
secondary-space access key is valid here, too, and inject a
privileged program exception if it is invalid.
Message-Id: <20221205125852.81848-1-thuth@redhat.com >
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2022-12-15 15:02:34 +01:00
Thomas Huth
21be74a9a5
target/s390x/tcg: Fix and improve the SACF instruction
...
The SET ADDRESS SPACE CONTROL FAST instruction is not privileged, it can be
used from problem space, too. Just the switching to the home address space
is privileged and should still generate a privilege exception. This bug is
e.g. causing programs like Java that use the "getcpu" vdso kernel function
to crash (see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=990417#26 ).
While we're at it, also check if DAT is not enabled. In that case the
instruction is supposed to generate a special operation exception.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/655
Message-Id: <20221201184443.136355-1-thuth@redhat.com >
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com >
Reviewed-by: David Hildenbrand <david@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2022-12-03 22:04:40 +01:00
Philippe Mathieu-Daudé
9cef8d9926
target/s390x: Rename insn-data/format.def -> insn-data/format.h.inc
...
We use the .h.inc extension to include C headers. To be consistent
with the rest of the codebase, rename the C headers using the .def
extension.
IDE/tools using our .editorconfig / .gitattributes will leverage
this consistency.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Thomas Huth <thuth@redhat.com >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20221025235006.7215-3-philmd@linaro.org >
Signed-off-by: Laurent Vivier <laurent@vivier.eu >
2022-11-05 20:35:45 +01:00