Commit 538a4673 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc-signed' into staging



qemu-sparc update

# gpg: Signature made Fri 15 Apr 2016 09:30:58 BST using RSA key ID AE0F321F
# gpg: Good signature from "Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>"

* remotes/mcayland/tags/qemu-sparc-signed:
  target-sparc: fix Trap Based Address Register behavior for sparc64
  target-sparc: fix Nucleus quad LDD 128 bit access for windowed registers

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents bc8995ca de5f1077
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -158,9 +158,8 @@ void sparc_cpu_do_interrupt(CPUState *cs)
    } else if ((intno & 0x1c0) == TT_FILL) {
        cpu_set_cwp(env, cpu_cwp_inc(env, env->cwp + 1));
    }
    env->tbr &= ~0x7fffULL;
    env->tbr |= ((env->tl > 1) ? 1 << 14 : 0) | (intno << 5);
    env->pc = env->tbr;
    env->pc = env->tbr  & ~0x7fffULL;
    env->pc |= ((env->tl > 1) ? 1 << 14 : 0) | (intno << 5);
    env->npc = env->pc + 4;
    cs->exception_index = -1;
}
+6 −6
Original line number Diff line number Diff line
@@ -2059,11 +2059,11 @@ void helper_ldda_asi(CPUSPARCState *env, target_ulong addr, int asi, int rd)
                bswap64s(&env->gregs[rd + 1]);
            }
        } else {
            env->regwptr[rd] = cpu_ldq_nucleus(env, addr);
            env->regwptr[rd + 1] = cpu_ldq_nucleus(env, addr + 8);
            env->regwptr[rd - 8] = cpu_ldq_nucleus(env, addr);
            env->regwptr[rd + 1 - 8] = cpu_ldq_nucleus(env, addr + 8);
            if (asi == 0x2c) {
                bswap64s(&env->regwptr[rd]);
                bswap64s(&env->regwptr[rd + 1]);
                bswap64s(&env->regwptr[rd - 8]);
                bswap64s(&env->regwptr[rd + 1 - 8]);
            }
        }
        break;
@@ -2076,8 +2076,8 @@ void helper_ldda_asi(CPUSPARCState *env, target_ulong addr, int asi, int rd)
            env->gregs[rd] = helper_ld_asi(env, addr, asi, 4, 0);
            env->gregs[rd + 1] = helper_ld_asi(env, addr + 4, asi, 4, 0);
        } else {
            env->regwptr[rd] = helper_ld_asi(env, addr, asi, 4, 0);
            env->regwptr[rd + 1] = helper_ld_asi(env, addr + 4, asi, 4, 0);
            env->regwptr[rd - 8] = helper_ld_asi(env, addr, asi, 4, 0);
            env->regwptr[rd + 1 - 8] = helper_ld_asi(env, addr + 4, asi, 4, 0);
        }
        break;
    }