mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-27 03:51:57 -06:00
target/mips: Check CPU endianness at runtime using env_is_bigendian()
Since CPU endianness can be toggled at runtime before resetting, checking the endianness at build time preprocessing the TARGET_BIG_ENDIAN definition isn't correct. We have to call mips_env_is_bigendian() to get the CPU endianness at runtime. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20250417131004.47205-4-philmd@linaro.org>
This commit is contained in:
parent
56f8fb6886
commit
33fa8f02a9
1 changed files with 16 additions and 18 deletions
|
@ -8212,7 +8212,6 @@ void helper_msa_ffint_u_df(CPUMIPSState *env, uint32_t df, uint32_t wd,
|
||||||
/* Element-by-element access macros */
|
/* Element-by-element access macros */
|
||||||
#define DF_ELEMENTS(df) (MSA_WRLEN / DF_BITS(df))
|
#define DF_ELEMENTS(df) (MSA_WRLEN / DF_BITS(df))
|
||||||
|
|
||||||
#if TARGET_BIG_ENDIAN
|
|
||||||
static inline uint64_t bswap16x4(uint64_t x)
|
static inline uint64_t bswap16x4(uint64_t x)
|
||||||
{
|
{
|
||||||
uint64_t m = 0x00ff00ff00ff00ffull;
|
uint64_t m = 0x00ff00ff00ff00ffull;
|
||||||
|
@ -8223,7 +8222,6 @@ static inline uint64_t bswap32x2(uint64_t x)
|
||||||
{
|
{
|
||||||
return ror64(bswap64(x), 32);
|
return ror64(bswap64(x), 32);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void helper_msa_ld_b(CPUMIPSState *env, uint32_t wd,
|
void helper_msa_ld_b(CPUMIPSState *env, uint32_t wd,
|
||||||
target_ulong addr)
|
target_ulong addr)
|
||||||
|
@ -8252,10 +8250,10 @@ void helper_msa_ld_h(CPUMIPSState *env, uint32_t wd,
|
||||||
*/
|
*/
|
||||||
d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
|
d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
|
||||||
d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
|
d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
|
||||||
#if TARGET_BIG_ENDIAN
|
if (mips_env_is_bigendian(env)) {
|
||||||
d0 = bswap16x4(d0);
|
d0 = bswap16x4(d0);
|
||||||
d1 = bswap16x4(d1);
|
d1 = bswap16x4(d1);
|
||||||
#endif
|
}
|
||||||
pwd->d[0] = d0;
|
pwd->d[0] = d0;
|
||||||
pwd->d[1] = d1;
|
pwd->d[1] = d1;
|
||||||
}
|
}
|
||||||
|
@ -8273,10 +8271,10 @@ void helper_msa_ld_w(CPUMIPSState *env, uint32_t wd,
|
||||||
*/
|
*/
|
||||||
d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
|
d0 = cpu_ldq_le_data_ra(env, addr + 0, ra);
|
||||||
d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
|
d1 = cpu_ldq_le_data_ra(env, addr + 8, ra);
|
||||||
#if TARGET_BIG_ENDIAN
|
if (mips_env_is_bigendian(env)) {
|
||||||
d0 = bswap32x2(d0);
|
d0 = bswap32x2(d0);
|
||||||
d1 = bswap32x2(d1);
|
d1 = bswap32x2(d1);
|
||||||
#endif
|
}
|
||||||
pwd->d[0] = d0;
|
pwd->d[0] = d0;
|
||||||
pwd->d[1] = d1;
|
pwd->d[1] = d1;
|
||||||
}
|
}
|
||||||
|
@ -8339,10 +8337,10 @@ void helper_msa_st_h(CPUMIPSState *env, uint32_t wd,
|
||||||
/* Store 8 bytes at a time. See helper_msa_ld_h. */
|
/* Store 8 bytes at a time. See helper_msa_ld_h. */
|
||||||
d0 = pwd->d[0];
|
d0 = pwd->d[0];
|
||||||
d1 = pwd->d[1];
|
d1 = pwd->d[1];
|
||||||
#if TARGET_BIG_ENDIAN
|
if (mips_env_is_bigendian(env)) {
|
||||||
d0 = bswap16x4(d0);
|
d0 = bswap16x4(d0);
|
||||||
d1 = bswap16x4(d1);
|
d1 = bswap16x4(d1);
|
||||||
#endif
|
}
|
||||||
cpu_stq_le_data_ra(env, addr + 0, d0, ra);
|
cpu_stq_le_data_ra(env, addr + 0, d0, ra);
|
||||||
cpu_stq_le_data_ra(env, addr + 8, d1, ra);
|
cpu_stq_le_data_ra(env, addr + 8, d1, ra);
|
||||||
}
|
}
|
||||||
|
@ -8360,10 +8358,10 @@ void helper_msa_st_w(CPUMIPSState *env, uint32_t wd,
|
||||||
/* Store 8 bytes at a time. See helper_msa_ld_w. */
|
/* Store 8 bytes at a time. See helper_msa_ld_w. */
|
||||||
d0 = pwd->d[0];
|
d0 = pwd->d[0];
|
||||||
d1 = pwd->d[1];
|
d1 = pwd->d[1];
|
||||||
#if TARGET_BIG_ENDIAN
|
if (mips_env_is_bigendian(env)) {
|
||||||
d0 = bswap32x2(d0);
|
d0 = bswap32x2(d0);
|
||||||
d1 = bswap32x2(d1);
|
d1 = bswap32x2(d1);
|
||||||
#endif
|
}
|
||||||
cpu_stq_le_data_ra(env, addr + 0, d0, ra);
|
cpu_stq_le_data_ra(env, addr + 0, d0, ra);
|
||||||
cpu_stq_le_data_ra(env, addr + 8, d1, ra);
|
cpu_stq_le_data_ra(env, addr + 8, d1, ra);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue