mirror of
https://github.com/qemu/qemu.git
synced 2025-08-10 03:59:16 +00:00
target-ppc: move ppc_vsr_t to common header
The structure and corresponding defines and functions need to be used outside of fpu_helper.c as well. Add u8, u16, u32 and Int128 to the structure. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
1c7ad77e56
commit
f9f2ed5ae0
@ -1777,43 +1777,6 @@ uint32_t helper_efdcmpeq(CPUPPCState *env, uint64_t op1, uint64_t op2)
|
|||||||
return helper_efdtsteq(env, op1, op2);
|
return helper_efdtsteq(env, op1, op2);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef union _ppc_vsr_t {
|
|
||||||
uint64_t u64[2];
|
|
||||||
uint32_t u32[4];
|
|
||||||
float32 f32[4];
|
|
||||||
float64 f64[2];
|
|
||||||
} ppc_vsr_t;
|
|
||||||
|
|
||||||
#if defined(HOST_WORDS_BIGENDIAN)
|
|
||||||
#define VsrW(i) u32[i]
|
|
||||||
#define VsrD(i) u64[i]
|
|
||||||
#else
|
|
||||||
#define VsrW(i) u32[3-(i)]
|
|
||||||
#define VsrD(i) u64[1-(i)]
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void getVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
|
|
||||||
{
|
|
||||||
if (n < 32) {
|
|
||||||
vsr->VsrD(0) = env->fpr[n];
|
|
||||||
vsr->VsrD(1) = env->vsr[n];
|
|
||||||
} else {
|
|
||||||
vsr->u64[0] = env->avr[n-32].u64[0];
|
|
||||||
vsr->u64[1] = env->avr[n-32].u64[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void putVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
|
|
||||||
{
|
|
||||||
if (n < 32) {
|
|
||||||
env->fpr[n] = vsr->VsrD(0);
|
|
||||||
env->vsr[n] = vsr->VsrD(1);
|
|
||||||
} else {
|
|
||||||
env->avr[n-32].u64[0] = vsr->u64[0];
|
|
||||||
env->avr[n-32].u64[1] = vsr->u64[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define float64_to_float64(x, env) x
|
#define float64_to_float64(x, env) x
|
||||||
|
|
||||||
|
|
||||||
|
@ -199,4 +199,46 @@ EXTRACT_HELPER(SHW, 8, 2);
|
|||||||
EXTRACT_HELPER(SP, 19, 2);
|
EXTRACT_HELPER(SP, 19, 2);
|
||||||
EXTRACT_HELPER(IMM8, 11, 8);
|
EXTRACT_HELPER(IMM8, 11, 8);
|
||||||
|
|
||||||
|
typedef union _ppc_vsr_t {
|
||||||
|
uint8_t u8[16];
|
||||||
|
uint16_t u16[8];
|
||||||
|
uint32_t u32[4];
|
||||||
|
uint64_t u64[2];
|
||||||
|
float32 f32[4];
|
||||||
|
float64 f64[2];
|
||||||
|
Int128 s128;
|
||||||
|
} ppc_vsr_t;
|
||||||
|
|
||||||
|
#if defined(HOST_WORDS_BIGENDIAN)
|
||||||
|
#define VsrB(i) u8[i]
|
||||||
|
#define VsrW(i) u32[i]
|
||||||
|
#define VsrD(i) u64[i]
|
||||||
|
#else
|
||||||
|
#define VsrB(i) u8[15 - (i)]
|
||||||
|
#define VsrW(i) u32[3 - (i)]
|
||||||
|
#define VsrD(i) u64[1 - (i)]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline void getVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
|
||||||
|
{
|
||||||
|
if (n < 32) {
|
||||||
|
vsr->VsrD(0) = env->fpr[n];
|
||||||
|
vsr->VsrD(1) = env->vsr[n];
|
||||||
|
} else {
|
||||||
|
vsr->u64[0] = env->avr[n - 32].u64[0];
|
||||||
|
vsr->u64[1] = env->avr[n - 32].u64[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void putVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env)
|
||||||
|
{
|
||||||
|
if (n < 32) {
|
||||||
|
env->fpr[n] = vsr->VsrD(0);
|
||||||
|
env->vsr[n] = vsr->VsrD(1);
|
||||||
|
} else {
|
||||||
|
env->avr[n - 32].u64[0] = vsr->u64[0];
|
||||||
|
env->avr[n - 32].u64[1] = vsr->u64[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* PPC_INTERNAL_H */
|
#endif /* PPC_INTERNAL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user