mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 02:54:58 -06:00
Replace config-time define HOST_WORDS_BIGENDIAN
Replace a config-time define with a compile time condition define (compatible with clang and gcc) that must be declared prior to its usage. This avoids having a global configure time define, but also prevents from bad usage, if the config header wasn't included before. This can help to make some code independent from qemu too. gcc supports __BYTE_ORDER__ from about 4.6 and clang from 3.2. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> [ For the s390x parts I'm involved in ] Acked-by: Halil Pasic <pasic@linux.ibm.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220323155743.1585078-7-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3f6c2e8b79
commit
e03b56863d
84 changed files with 173 additions and 174 deletions
|
@ -161,7 +161,7 @@ static void ppc_write_elf_vmxregset(NoteFuncArg *arg, PowerPCCPU *cpu)
|
|||
bool needs_byteswap;
|
||||
ppc_avr_t *avr = cpu_avr_ptr(&cpu->env, i);
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
needs_byteswap = s->dump_info.d_endian == ELFDATA2LSB;
|
||||
#else
|
||||
needs_byteswap = s->dump_info.d_endian == ELFDATA2MSB;
|
||||
|
|
|
@ -2642,7 +2642,7 @@ static inline bool lsw_reg_in_range(int start, int nregs, int rx)
|
|||
}
|
||||
|
||||
/* Accessors for FP, VMX and VSX registers */
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define VsrB(i) u8[i]
|
||||
#define VsrSB(i) s8[i]
|
||||
#define VsrH(i) u16[i]
|
||||
|
|
|
@ -425,7 +425,7 @@ uint64_t helper_PEXTD(uint64_t src, uint64_t mask)
|
|||
|
||||
/*****************************************************************************/
|
||||
/* Altivec extension helpers */
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define VECTOR_FOR_INORDER_I(index, element) \
|
||||
for (index = 0; index < ARRAY_SIZE(r->element); index++)
|
||||
#else
|
||||
|
@ -1177,7 +1177,7 @@ XXGENPCV(XXGENPCVDM, 8)
|
|||
#undef XXGENPCV_LE_COMP
|
||||
#undef XXGENPCV
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define VBPERMQ_INDEX(avr, i) ((avr)->u8[(i)])
|
||||
#define VBPERMD_INDEX(i) (i)
|
||||
#define VBPERMQ_DW(index) (((index) & 0x40) != 0)
|
||||
|
@ -1298,7 +1298,7 @@ void helper_vpmsumd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
}
|
||||
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define PKBIG 1
|
||||
#else
|
||||
#define PKBIG 0
|
||||
|
@ -1307,7 +1307,7 @@ void helper_vpkpx(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
{
|
||||
int i, j;
|
||||
ppc_avr_t result;
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
const ppc_avr_t *x[2] = { a, b };
|
||||
#else
|
||||
const ppc_avr_t *x[2] = { b, a };
|
||||
|
@ -1516,7 +1516,7 @@ void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
{
|
||||
int sh = (b->VsrB(0xf) >> 3) & 0xf;
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
memmove(&r->u8[0], &a->u8[sh], 16 - sh);
|
||||
memset(&r->u8[16 - sh], 0, sh);
|
||||
#else
|
||||
|
@ -1525,7 +1525,7 @@ void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
#endif
|
||||
}
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define ELEM_ADDR(VEC, IDX, SIZE) (&(VEC)->u8[IDX])
|
||||
#else
|
||||
#define ELEM_ADDR(VEC, IDX, SIZE) (&(VEC)->u8[15 - (IDX)] - (SIZE) + 1)
|
||||
|
@ -1554,7 +1554,7 @@ VINSX(W, uint32_t)
|
|||
VINSX(D, uint64_t)
|
||||
#undef ELEM_ADDR
|
||||
#undef VINSX
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define VEXTDVLX(NAME, SIZE) \
|
||||
void helper_##NAME(CPUPPCState *env, ppc_avr_t *t, ppc_avr_t *a, ppc_avr_t *b, \
|
||||
target_ulong index) \
|
||||
|
@ -1593,7 +1593,7 @@ VEXTDVLX(VEXTDUHVLX, 2)
|
|||
VEXTDVLX(VEXTDUWVLX, 4)
|
||||
VEXTDVLX(VEXTDDVLX, 8)
|
||||
#undef VEXTDVLX
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define VEXTRACT(suffix, element) \
|
||||
void helper_vextract##suffix(ppc_avr_t *r, ppc_avr_t *b, uint32_t index) \
|
||||
{ \
|
||||
|
@ -1750,7 +1750,7 @@ void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
{
|
||||
int sh = (b->VsrB(0xf) >> 3) & 0xf;
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
memmove(&r->u8[sh], &a->u8[0], 16 - sh);
|
||||
memset(&r->u8[0], 0, sh);
|
||||
#else
|
||||
|
@ -1867,7 +1867,7 @@ void helper_vsum4ubs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define UPKHI 1
|
||||
#define UPKLO 0
|
||||
#else
|
||||
|
@ -1974,7 +1974,7 @@ VGENERIC_DO(popcntd, u64)
|
|||
|
||||
#undef VGENERIC_DO
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define QW_ONE { .u64 = { 0, 1 } }
|
||||
#else
|
||||
#define QW_ONE { .u64 = { 1, 0 } }
|
||||
|
|
|
@ -632,7 +632,7 @@ static int kvm_put_fp(CPUState *cs)
|
|||
uint64_t *fpr = cpu_fpr_ptr(&cpu->env, i);
|
||||
uint64_t *vsrl = cpu_vsrl_ptr(&cpu->env, i);
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
vsr[0] = float64_val(*fpr);
|
||||
vsr[1] = *vsrl;
|
||||
#else
|
||||
|
@ -710,7 +710,7 @@ static int kvm_get_fp(CPUState *cs)
|
|||
strerror(errno));
|
||||
return ret;
|
||||
} else {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
*fpr = vsr[0];
|
||||
if (vsx) {
|
||||
*vsrl = vsr[1];
|
||||
|
|
|
@ -461,7 +461,7 @@ uint32_t helper_stqcx_be_parallel(CPUPPCState *env, target_ulong addr,
|
|||
|
||||
/*****************************************************************************/
|
||||
/* Altivec extension helpers */
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define HI_IDX 0
|
||||
#define LO_IDX 1
|
||||
#else
|
||||
|
|
|
@ -173,7 +173,7 @@ static void gen_mtvscr(DisasContext *ctx)
|
|||
|
||||
val = tcg_temp_new_i32();
|
||||
bofs = avr_full_offset(rB(ctx->opcode));
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
bofs += 3 * 4;
|
||||
#endif
|
||||
|
||||
|
@ -1692,7 +1692,7 @@ static void gen_vsplt(DisasContext *ctx, int vece)
|
|||
|
||||
/* Experimental testing shows that hardware masks the immediate. */
|
||||
bofs += (uimm << vece) & 15;
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
bofs ^= 15;
|
||||
bofs &= ~((1 << vece) - 1);
|
||||
#endif
|
||||
|
|
|
@ -1552,7 +1552,7 @@ static bool trans_XXSPLTW(DisasContext *ctx, arg_XX2_uim2 *a)
|
|||
tofs = vsr_full_offset(a->xt);
|
||||
bofs = vsr_full_offset(a->xb);
|
||||
bofs += a->uim << MO_32;
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
bofs ^= 8 | 4;
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue