mirror of https://gitlab.com/qemu-project/qemu
target/hppa: move GETPC to HELPER() functions
When QEMU is compiled with -O0, these functions are inlined which will cause a wrong restart address generated for the TB. Signed-off-by: Sven Schnelle <svens@stackframe.org> Message-Id: <20190211181907.2219-2-svens@stackframe.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
31274b46e4
commit
5010e5c4f4
|
@ -81,10 +81,8 @@ static void atomic_store_3(CPUHPPAState *env, target_ulong addr, uint32_t val,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_stby_b(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
static void do_stby_b(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
||||||
bool parallel)
|
bool parallel, uintptr_t ra)
|
||||||
{
|
{
|
||||||
uintptr_t ra = GETPC();
|
|
||||||
|
|
||||||
switch (addr & 3) {
|
switch (addr & 3) {
|
||||||
case 3:
|
case 3:
|
||||||
cpu_stb_data_ra(env, addr, val, ra);
|
cpu_stb_data_ra(env, addr, val, ra);
|
||||||
|
@ -109,20 +107,18 @@ static void do_stby_b(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
||||||
|
|
||||||
void HELPER(stby_b)(CPUHPPAState *env, target_ulong addr, target_ureg val)
|
void HELPER(stby_b)(CPUHPPAState *env, target_ulong addr, target_ureg val)
|
||||||
{
|
{
|
||||||
do_stby_b(env, addr, val, false);
|
do_stby_b(env, addr, val, false, GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
void HELPER(stby_b_parallel)(CPUHPPAState *env, target_ulong addr,
|
void HELPER(stby_b_parallel)(CPUHPPAState *env, target_ulong addr,
|
||||||
target_ureg val)
|
target_ureg val)
|
||||||
{
|
{
|
||||||
do_stby_b(env, addr, val, true);
|
do_stby_b(env, addr, val, true, GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_stby_e(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
static void do_stby_e(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
||||||
bool parallel)
|
bool parallel, uintptr_t ra)
|
||||||
{
|
{
|
||||||
uintptr_t ra = GETPC();
|
|
||||||
|
|
||||||
switch (addr & 3) {
|
switch (addr & 3) {
|
||||||
case 3:
|
case 3:
|
||||||
/* The 3 byte store must appear atomic. */
|
/* The 3 byte store must appear atomic. */
|
||||||
|
@ -151,13 +147,13 @@ static void do_stby_e(CPUHPPAState *env, target_ulong addr, target_ureg val,
|
||||||
|
|
||||||
void HELPER(stby_e)(CPUHPPAState *env, target_ulong addr, target_ureg val)
|
void HELPER(stby_e)(CPUHPPAState *env, target_ulong addr, target_ureg val)
|
||||||
{
|
{
|
||||||
do_stby_e(env, addr, val, false);
|
do_stby_e(env, addr, val, false, GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
void HELPER(stby_e_parallel)(CPUHPPAState *env, target_ulong addr,
|
void HELPER(stby_e_parallel)(CPUHPPAState *env, target_ulong addr,
|
||||||
target_ureg val)
|
target_ureg val)
|
||||||
{
|
{
|
||||||
do_stby_e(env, addr, val, true);
|
do_stby_e(env, addr, val, true, GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
target_ureg HELPER(probe)(CPUHPPAState *env, target_ulong addr,
|
target_ureg HELPER(probe)(CPUHPPAState *env, target_ulong addr,
|
||||||
|
|
Loading…
Reference in New Issue