qemu-patch-raspberry4/target/s390x
Ulrich Weigand 2876105704 target/s390x: Fix CC set by CONVERT TO FIXED/LOGICAL
The FP-to-integer conversion instructions need to set CC 3 whenever
a "special case" occurs; this is the case whenever the instruction
also signals the IEEE invalid exception.  (See e.g. figure 19-18
in the Principles of Operation.)

However, qemu currently will set CC 3 only in the case where the
input was a NaN.  This is indeed one of the special cases, but
there are others, most notably the case where the input is out
of range of the target data type.

This patch fixes the problem by switching these instructions to
the "static" CC method and computing the correct result directly
in the helper.  (It cannot be re-computed later as the information
about the invalid exception is no longer available.)

This fixes a bug observed when running the wasmtime test suite
under the s390x-linux-user target.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210630105058.GA29130@oc3748833570.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
2021-07-07 13:57:25 +02:00
..
arch_dump.c target/s390x/arch_dump: Fix warning for the name field in the PT_NOTE section 2021-03-04 11:23:35 +01:00
cc_helper.c target/s390x: Expose load_psw and get_psw_mask to cpu.h 2021-06-21 08:48:21 +02:00
cpu-param.h tcg: Split out target/arch/cpu-param.h 2019-06-10 07:03:34 -07:00
cpu-qom.h qom: Remove module_obj_name parameter from OBJECT_DECLARE* macros 2020-09-18 14:12:32 -04:00
cpu.c hw/core: Constify TCGCPUOps 2021-05-26 15:33:59 -07:00
cpu.h target/s390x: Expose load_psw and get_psw_mask to cpu.h 2021-06-21 08:48:21 +02:00
cpu_features.c s390x: pv: Fence additional unavailable SCLP facilities for PV guests 2020-12-21 18:11:32 +01:00
cpu_features.h s390x: pv: Fix diag318 PV fencing 2020-10-22 15:47:27 +02:00
cpu_features_def.h meson: rename .inc.h files to .h.inc 2020-08-21 06:18:35 -04:00
cpu_features_def.h.inc s390x/cpumodel: add 3931 and 3932 2021-07-07 13:57:25 +02:00
cpu_models.c s390x/cpumodel: add 3931 and 3932 2021-07-07 13:57:25 +02:00
cpu_models.h meson: convert target/s390x/gen-features.h 2020-08-21 06:30:17 -04:00
crypto_helper.c target/s390x: Use tcg_s390_program_interrupt in TCG helpers 2019-10-09 12:49:01 +02:00
diag.c Do not include exec/address-spaces.h if it's not really necessary 2021-05-02 17:24:51 +02:00
excp_helper.c target/s390x: Expose load_psw and get_psw_mask to cpu.h 2021-06-21 08:48:21 +02:00
fpu_helper.c target/s390x: Fix CC set by CONVERT TO FIXED/LOGICAL 2021-07-07 13:57:25 +02:00
gdbstub.c target/s390x: Use s390_cpu_{set_psw, get_psw_mask} in gdbstub 2021-06-21 08:48:21 +02:00
gen-features.c s390x/cpumodel: add 3931 and 3932 2021-07-07 13:57:25 +02:00
helper.c target/s390x: Improve s390_cpu_dump_state vs cc_op 2021-06-21 08:48:21 +02:00
helper.h target/s390x: Fix CC set by CONVERT TO FIXED/LOGICAL 2021-07-07 13:57:25 +02:00
insn-data.def s390x/tcg: Implement VECTOR FP (MAXIMUM|MINIMUM) 2021-06-21 08:48:21 +02:00
insn-format.def s390x/tcg: Define vector instruction formats 2019-03-11 09:31:01 +01:00
int_helper.c target/s390x: Use tcg_s390_program_interrupt in TCG helpers 2019-10-09 12:49:01 +02:00
internal.h target/s390x: Expose load_psw and get_psw_mask to cpu.h 2021-06-21 08:48:21 +02:00
interrupt.c hw: Do not include qemu/log.h if it is not necessary 2021-05-02 17:24:50 +02:00
ioinst.c css: SCHIB measurement block origin must be aligned 2021-03-04 11:23:35 +01:00
kvm-stub.c s390x/kvm: remove unused gs handling 2021-06-21 08:48:20 +02:00
kvm.c s390x/kvm: remove unused gs handling 2021-06-21 08:48:20 +02:00
kvm_s390x.h s390x/kvm: remove unused gs handling 2021-06-21 08:48:20 +02:00
machine.c s390: guest support for diagnose 0x318 2020-10-02 13:52:49 +02:00
mem_helper.c target/s390x: fix s390_probe_access to check PAGE_WRITE_ORG for writeability 2021-04-23 14:10:56 +01:00
meson.build target/s390x: fix meson.build issue 2020-08-21 11:55:13 -04:00
misc_helper.c s390x: Use strpadcpy for copying vm name 2021-01-21 11:19:45 +01:00
mmu_helper.c s390x: do not use ram_size global 2020-12-10 12:15:09 -05:00
s390-tod.h target/s390x: Split out s390-tod.h 2019-02-18 11:25:43 +01:00
sigp.c target/s390x: Expose load_psw and get_psw_mask to cpu.h 2021-06-21 08:48:21 +02:00
tcg-stub.c target/s390x: Remove ilen parameter from tcg_s390_program_interrupt 2019-10-09 12:49:01 +02:00
tcg_s390x.h target/s390x: Remove ilen parameter from tcg_s390_program_interrupt 2019-10-09 12:49:01 +02:00
trace-events docs: fix references to docs/devel/tracing.rst 2021-06-02 06:51:09 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate.c target/s390x: Fix CC set by CONVERT TO FIXED/LOGICAL 2021-07-07 13:57:25 +02:00
translate_vx.c.inc s390x/tcg: Implement VECTOR FP (MAXIMUM|MINIMUM) 2021-06-21 08:48:21 +02:00
vec.h s390x/tcg: Implement VECTOR STRING RANGE COMPARE 2019-06-07 14:53:25 +02:00
vec_fpu_helper.c s390x/tcg: Implement VECTOR FP (MAXIMUM|MINIMUM) 2021-06-21 08:48:21 +02:00
vec_helper.c s390x/tcg: Implement VECTOR BIT PERMUTE 2021-06-21 08:48:21 +02:00
vec_int_helper.c target/s390x: Use tcg_gen_gvec_rotl{i,s,v} 2020-06-02 08:42:37 -07:00
vec_string_helper.c s390x/tcg: Implement VECTOR STRING RANGE COMPARE 2019-06-07 14:53:25 +02:00