mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target-sparc: Change fpr representation to doubles.
This allows a more efficient representation for 64-bit hosts. It should be about the same for 32-bit hosts, as we can still access the individual pieces of the double. Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
45c7b743cd
commit
30038fd818
8 changed files with 202 additions and 211 deletions
|
@ -2296,12 +2296,14 @@ void sparc64_set_context(CPUSPARCState *env)
|
|||
*/
|
||||
err |= __get_user(env->fprs, &(ucp->tuc_mcontext.mc_fpregs.mcfpu_fprs));
|
||||
{
|
||||
uint32_t *src, *dst;
|
||||
src = ucp->tuc_mcontext.mc_fpregs.mcfpu_fregs.sregs;
|
||||
dst = env->fpr;
|
||||
/* XXX: check that the CPU storage is the same as user context */
|
||||
for (i = 0; i < 64; i++, dst++, src++)
|
||||
err |= __get_user(*dst, src);
|
||||
uint32_t *src = ucp->tuc_mcontext.mc_fpregs.mcfpu_fregs.sregs;
|
||||
for (i = 0; i < 64; i++, src++) {
|
||||
if (i & 1) {
|
||||
err |= __get_user(env->fpr[i/2].l.lower, src);
|
||||
} else {
|
||||
err |= __get_user(env->fpr[i/2].l.upper, src);
|
||||
}
|
||||
}
|
||||
}
|
||||
err |= __get_user(env->fsr,
|
||||
&(ucp->tuc_mcontext.mc_fpregs.mcfpu_fsr));
|
||||
|
@ -2390,12 +2392,14 @@ void sparc64_get_context(CPUSPARCState *env)
|
|||
err |= __put_user(i7, &(mcp->mc_i7));
|
||||
|
||||
{
|
||||
uint32_t *src, *dst;
|
||||
src = env->fpr;
|
||||
dst = ucp->tuc_mcontext.mc_fpregs.mcfpu_fregs.sregs;
|
||||
/* XXX: check that the CPU storage is the same as user context */
|
||||
for (i = 0; i < 64; i++, dst++, src++)
|
||||
err |= __put_user(*src, dst);
|
||||
uint32_t *dst = ucp->tuc_mcontext.mc_fpregs.mcfpu_fregs.sregs;
|
||||
for (i = 0; i < 64; i++, dst++) {
|
||||
if (i & 1) {
|
||||
err |= __put_user(env->fpr[i/2].l.lower, dst);
|
||||
} else {
|
||||
err |= __put_user(env->fpr[i/2].l.upper, dst);
|
||||
}
|
||||
}
|
||||
}
|
||||
err |= __put_user(env->fsr, &(mcp->mc_fpregs.mcfpu_fsr));
|
||||
err |= __put_user(env->gsr, &(mcp->mc_fpregs.mcfpu_gsr));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue