target/s390x: Split out s390x_env_mmu_index

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2024-01-29 10:42:41 +10:00
parent ef5cc166da
commit 90b7022e69
2 changed files with 21 additions and 17 deletions

View File

@ -381,7 +381,7 @@ extern const VMStateDescription vmstate_s390_cpu;
#define MMU_HOME_IDX 2 #define MMU_HOME_IDX 2
#define MMU_REAL_IDX 3 #define MMU_REAL_IDX 3
static inline int cpu_mmu_index(CPUS390XState *env, bool ifetch) static inline int s390x_env_mmu_index(CPUS390XState *env, bool ifetch)
{ {
#ifdef CONFIG_USER_ONLY #ifdef CONFIG_USER_ONLY
return MMU_USER_IDX; return MMU_USER_IDX;
@ -412,6 +412,8 @@ static inline int cpu_mmu_index(CPUS390XState *env, bool ifetch)
#endif #endif
} }
#define cpu_mmu_index s390x_env_mmu_index
#ifdef CONFIG_TCG #ifdef CONFIG_TCG
#include "tcg/tcg_s390x.h" #include "tcg/tcg_s390x.h"

View File

@ -358,7 +358,7 @@ static int mmu_idx_from_as(uint8_t as)
static uint32_t do_helper_nc(CPUS390XState *env, uint32_t l, uint64_t dest, static uint32_t do_helper_nc(CPUS390XState *env, uint32_t l, uint64_t dest,
uint64_t src, uintptr_t ra) uint64_t src, uintptr_t ra)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca1, srca2, desta; S390Access srca1, srca2, desta;
uint32_t i; uint32_t i;
uint8_t c = 0; uint8_t c = 0;
@ -392,7 +392,7 @@ uint32_t HELPER(nc)(CPUS390XState *env, uint32_t l, uint64_t dest,
static uint32_t do_helper_xc(CPUS390XState *env, uint32_t l, uint64_t dest, static uint32_t do_helper_xc(CPUS390XState *env, uint32_t l, uint64_t dest,
uint64_t src, uintptr_t ra) uint64_t src, uintptr_t ra)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca1, srca2, desta; S390Access srca1, srca2, desta;
uint32_t i; uint32_t i;
uint8_t c = 0; uint8_t c = 0;
@ -433,7 +433,7 @@ uint32_t HELPER(xc)(CPUS390XState *env, uint32_t l, uint64_t dest,
static uint32_t do_helper_oc(CPUS390XState *env, uint32_t l, uint64_t dest, static uint32_t do_helper_oc(CPUS390XState *env, uint32_t l, uint64_t dest,
uint64_t src, uintptr_t ra) uint64_t src, uintptr_t ra)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca1, srca2, desta; S390Access srca1, srca2, desta;
uint32_t i; uint32_t i;
uint8_t c = 0; uint8_t c = 0;
@ -467,7 +467,7 @@ uint32_t HELPER(oc)(CPUS390XState *env, uint32_t l, uint64_t dest,
static uint32_t do_helper_mvc(CPUS390XState *env, uint32_t l, uint64_t dest, static uint32_t do_helper_mvc(CPUS390XState *env, uint32_t l, uint64_t dest,
uint64_t src, uintptr_t ra) uint64_t src, uintptr_t ra)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca, desta; S390Access srca, desta;
uint32_t i; uint32_t i;
@ -508,7 +508,7 @@ void HELPER(mvc)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
/* move right to left */ /* move right to left */
void HELPER(mvcrl)(CPUS390XState *env, uint64_t l, uint64_t dest, uint64_t src) void HELPER(mvcrl)(CPUS390XState *env, uint64_t l, uint64_t dest, uint64_t src)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
const uint64_t ra = GETPC(); const uint64_t ra = GETPC();
S390Access srca, desta; S390Access srca, desta;
int32_t i; int32_t i;
@ -529,7 +529,7 @@ void HELPER(mvcrl)(CPUS390XState *env, uint64_t l, uint64_t dest, uint64_t src)
/* move inverse */ /* move inverse */
void HELPER(mvcin)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src) void HELPER(mvcin)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca, desta; S390Access srca, desta;
uintptr_t ra = GETPC(); uintptr_t ra = GETPC();
int i; int i;
@ -550,7 +550,7 @@ void HELPER(mvcin)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
/* move numerics */ /* move numerics */
void HELPER(mvn)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src) void HELPER(mvn)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca1, srca2, desta; S390Access srca1, srca2, desta;
uintptr_t ra = GETPC(); uintptr_t ra = GETPC();
int i; int i;
@ -572,7 +572,7 @@ void HELPER(mvn)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
/* move with offset */ /* move with offset */
void HELPER(mvo)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src) void HELPER(mvo)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
/* MVO always processes one more byte than specified - maximum is 16 */ /* MVO always processes one more byte than specified - maximum is 16 */
const int len_dest = (l >> 4) + 1; const int len_dest = (l >> 4) + 1;
const int len_src = (l & 0xf) + 1; const int len_src = (l & 0xf) + 1;
@ -606,7 +606,7 @@ void HELPER(mvo)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
/* move zones */ /* move zones */
void HELPER(mvz)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src) void HELPER(mvz)(CPUS390XState *env, uint32_t l, uint64_t dest, uint64_t src)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
S390Access srca1, srca2, desta; S390Access srca1, srca2, desta;
uintptr_t ra = GETPC(); uintptr_t ra = GETPC();
int i; int i;
@ -669,7 +669,7 @@ uint32_t HELPER(clm)(CPUS390XState *env, uint32_t r1, uint32_t mask,
if (!mask) { if (!mask) {
/* Recognize access exceptions for the first byte */ /* Recognize access exceptions for the first byte */
probe_read(env, addr, 1, cpu_mmu_index(env, false), ra); probe_read(env, addr, 1, s390x_env_mmu_index(env, false), ra);
} }
while (mask) { while (mask) {
@ -893,7 +893,7 @@ uint32_t HELPER(mvpg)(CPUS390XState *env, uint64_t r0, uint32_t r1, uint32_t r2)
{ {
const uint64_t src = get_address(env, r2) & TARGET_PAGE_MASK; const uint64_t src = get_address(env, r2) & TARGET_PAGE_MASK;
const uint64_t dst = get_address(env, r1) & TARGET_PAGE_MASK; const uint64_t dst = get_address(env, r1) & TARGET_PAGE_MASK;
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
const bool f = extract64(r0, 11, 1); const bool f = extract64(r0, 11, 1);
const bool s = extract64(r0, 10, 1); const bool s = extract64(r0, 10, 1);
const bool cco = extract64(r0, 8, 1); const bool cco = extract64(r0, 8, 1);
@ -946,7 +946,7 @@ inject_exc:
/* string copy */ /* string copy */
uint32_t HELPER(mvst)(CPUS390XState *env, uint32_t r1, uint32_t r2) uint32_t HELPER(mvst)(CPUS390XState *env, uint32_t r1, uint32_t r2)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
const uint64_t d = get_address(env, r1); const uint64_t d = get_address(env, r1);
const uint64_t s = get_address(env, r2); const uint64_t s = get_address(env, r2);
const uint8_t c = env->regs[0]; const uint8_t c = env->regs[0];
@ -1027,7 +1027,7 @@ static inline uint32_t do_mvcl(CPUS390XState *env,
uint64_t *src, uint64_t *srclen, uint64_t *src, uint64_t *srclen,
uint16_t pad, int wordsize, uintptr_t ra) uint16_t pad, int wordsize, uintptr_t ra)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
int len = MIN(*destlen, -(*dest | TARGET_PAGE_MASK)); int len = MIN(*destlen, -(*dest | TARGET_PAGE_MASK));
S390Access srca, desta; S390Access srca, desta;
int i, cc; int i, cc;
@ -1084,7 +1084,7 @@ static inline uint32_t do_mvcl(CPUS390XState *env,
/* move long */ /* move long */
uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2) uint32_t HELPER(mvcl)(CPUS390XState *env, uint32_t r1, uint32_t r2)
{ {
const int mmu_idx = cpu_mmu_index(env, false); const int mmu_idx = s390x_env_mmu_index(env, false);
uintptr_t ra = GETPC(); uintptr_t ra = GETPC();
uint64_t destlen = env->regs[r1 + 1] & 0xffffff; uint64_t destlen = env->regs[r1 + 1] & 0xffffff;
uint64_t dest = get_address(env, r1); uint64_t dest = get_address(env, r1);
@ -1742,7 +1742,7 @@ uint32_t HELPER(trXX)(CPUS390XState *env, uint32_t r1, uint32_t r2,
static uint32_t do_csst(CPUS390XState *env, uint32_t r3, uint64_t a1, static uint32_t do_csst(CPUS390XState *env, uint32_t r3, uint64_t a1,
uint64_t a2, bool parallel) uint64_t a2, bool parallel)
{ {
uint32_t mem_idx = cpu_mmu_index(env, false); uint32_t mem_idx = s390x_env_mmu_index(env, false);
MemOpIdx oi16 = make_memop_idx(MO_TE | MO_128, mem_idx); MemOpIdx oi16 = make_memop_idx(MO_TE | MO_128, mem_idx);
MemOpIdx oi8 = make_memop_idx(MO_TE | MO_64, mem_idx); MemOpIdx oi8 = make_memop_idx(MO_TE | MO_64, mem_idx);
MemOpIdx oi4 = make_memop_idx(MO_TE | MO_32, mem_idx); MemOpIdx oi4 = make_memop_idx(MO_TE | MO_32, mem_idx);
@ -2867,12 +2867,14 @@ uint32_t HELPER(cu42)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_t m3)
void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len, void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len,
uintptr_t ra) uintptr_t ra)
{ {
const int mmu_idx = s390x_env_mmu_index(env, false);
/* test the actual access, not just any access to the page due to LAP */ /* test the actual access, not just any access to the page due to LAP */
while (len) { while (len) {
const uint64_t pagelen = -(addr | TARGET_PAGE_MASK); const uint64_t pagelen = -(addr | TARGET_PAGE_MASK);
const uint64_t curlen = MIN(pagelen, len); const uint64_t curlen = MIN(pagelen, len);
probe_write(env, addr, curlen, cpu_mmu_index(env, false), ra); probe_write(env, addr, curlen, mmu_idx, ra);
addr = wrap_address(env, addr + curlen); addr = wrap_address(env, addr + curlen);
len -= curlen; len -= curlen;
} }