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:
Sven Schnelle 2019-02-11 19:19:03 +01:00 committed by Richard Henderson
parent 31274b46e4
commit 5010e5c4f4
1 changed files with 6 additions and 10 deletions

View File

@ -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,