@samitouri / QOSamiQemu / commits / 0f1cffe509

target/s390x: Compile vec_helper.c as common unit

In order do build vec_helper.c as a common unit we need to replace: "accel/tcg/cpu-ldst.h" -> "accel/tcg/cpu-ldst-common.h" and update the cpu_ld/st_be_data_ra() API by cpu_ld/st_mmu() one. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-Id: <20260423135035.50126-7-philmd@linaro.org>

Philippe Mathieu-Daudé committed Apr 23, 2026 at 12:48 UTC 0f1cffe50973e335213f43655f739e0117549981
2 files changed +24 -12
target/s390x/tcg/meson.build
+1 -1
@@ -3,7 +3,6 @@ s390x_ss.add(when: 'CONFIG_TCG', if_true: files(
3 'int_helper.c',
4 'mem_helper.c',
5 'misc_helper.c',
6 - 'vec_helper.c',
6 ))
7 s390x_common_ss.add(when: 'CONFIG_TCG', if_true: files(
8 'cc_helper.c',
@@ -11,6 +10,7 @@ s390x_common_ss.add(when: 'CONFIG_TCG', if_true: files(
10 'fpu_helper.c',
11 'translate.c',
12 'vec_fpu_helper.c',
13 + 'vec_helper.c',
14 'vec_int_helper.c',
15 'vec_string_helper.c',
16 ))
target/s390x/tcg/vec_helper.c
+23 -11
@@ -16,7 +16,8 @@
16 #include "tcg/tcg.h"
17 #include "tcg/tcg-gvec-desc.h"
18 #include "exec/helper-proto.h"
19 -#include "accel/tcg/cpu-ldst.h"
19 +#include "accel/tcg/cpu-ldst-common.h"
20 +#include "accel/tcg/cpu-mmu-index.h"
21
22 void HELPER(gvec_vbperm)(void *v1, const void *v2, const void *v3,
23 uint32_t desc)
@@ -42,20 +43,26 @@ void HELPER(gvec_vbperm)(void *v1, const void *v2, const void *v3,
43
44 void HELPER(vll)(CPUS390XState *env, void *v1, uint64_t addr, uint64_t bytes)
45 {
46 + const int mmu_idx = cpu_mmu_index(env_cpu(env), false);
47 + const uintptr_t ra = GETPC();
48 + MemOpIdx oi;
49 +
50 if (likely(bytes >= 16)) {
51 uint64_t t0, t1;
52
48 - t0 = cpu_ldq_be_data_ra(env, addr, GETPC());
53 + oi = make_memop_idx(MO_BE | MO_64 | MO_UNALN, mmu_idx);
54 + t0 = cpu_ldq_mmu(env, addr, oi, ra);
55 addr = wrap_address(env, addr + 8);
50 - t1 = cpu_ldq_be_data_ra(env, addr, GETPC());
56 + t1 = cpu_ldq_mmu(env, addr, oi, ra);
57 s390_vec_write_element64(v1, 0, t0);
58 s390_vec_write_element64(v1, 1, t1);
59 } else {
60 S390Vector tmp = {};
55 - int i;
61
57 - for (i = 0; i < bytes; i++) {
58 - uint8_t byte = cpu_ldub_data_ra(env, addr, GETPC());
62 + oi = make_memop_idx(MO_8, mmu_idx);
63 + for (int i = 0; i < bytes; i++) {
64 + uint8_t byte = cpu_ldb_mmu(env, addr, oi, ra);
65 +
66
67 s390_vec_write_element8(&tmp, i, byte);
68 addr = wrap_address(env, addr + 1);
@@ -191,20 +198,25 @@ void HELPER(gvec_vperm)(void *v1, const void *v2, const void *v3,
198 void HELPER(vstl)(CPUS390XState *env, const void *v1, uint64_t addr,
199 uint64_t bytes)
200 {
201 + const int mmu_idx = cpu_mmu_index(env_cpu(env), false);
202 + const uintptr_t ra = GETPC();
203 + MemOpIdx oi;
204 +
205 /* Probe write access before actually modifying memory */
206 probe_write_access(env, addr, MIN(bytes, 16), GETPC());
207
208 if (likely(bytes >= 16)) {
198 - cpu_stq_be_data_ra(env, addr, s390_vec_read_element64(v1, 0), GETPC());
209 + oi = make_memop_idx(MO_BE | MO_64 | MO_UNALN, mmu_idx);
210 + cpu_stq_mmu(env, addr, s390_vec_read_element64(v1, 0), oi, ra);
211 addr = wrap_address(env, addr + 8);
200 - cpu_stq_be_data_ra(env, addr, s390_vec_read_element64(v1, 1), GETPC());
212 + cpu_stq_mmu(env, addr, s390_vec_read_element64(v1, 1), oi, ra);
213 } else {
202 - int i;
214 + oi = make_memop_idx(MO_8, mmu_idx);
215
204 - for (i = 0; i < bytes; i++) {
216 + for (int i = 0; i < bytes; i++) {
217 uint8_t byte = s390_vec_read_element8(v1, i);
218
207 - cpu_stb_data_ra(env, addr, byte, GETPC());
219 + cpu_stb_mmu(env, addr, byte, oi, ra);
220 addr = wrap_address(env, addr + 1);
221 }
222 }