mirror of
https://github.com/qemu/qemu.git
synced 2024-12-13 22:43:32 +08:00
target/i386: Create helper_check_io
Drop helper_check_io[bwl] and expose their common subroutine to tcg directly. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210514151342.384376-49-richard.henderson@linaro.org>
This commit is contained in:
parent
1bca40fe42
commit
e497803556
@ -86,9 +86,7 @@ DEF_HELPER_1(rdtsc, void, env)
|
||||
DEF_HELPER_1(rdtscp, void, env)
|
||||
DEF_HELPER_FLAGS_1(rdpmc, TCG_CALL_NO_WG, noreturn, env)
|
||||
|
||||
DEF_HELPER_2(check_iob, void, env, i32)
|
||||
DEF_HELPER_2(check_iow, void, env, i32)
|
||||
DEF_HELPER_2(check_iol, void, env, i32)
|
||||
DEF_HELPER_FLAGS_3(check_io, TCG_CALL_NO_WG, void, env, i32, i32)
|
||||
DEF_HELPER_3(outb, void, env, i32, i32)
|
||||
DEF_HELPER_2(inb, tl, env, i32)
|
||||
DEF_HELPER_3(outw, void, env, i32, i32)
|
||||
|
@ -2418,10 +2418,10 @@ void helper_verw(CPUX86State *env, target_ulong selector1)
|
||||
}
|
||||
|
||||
/* check if Port I/O is allowed in TSS */
|
||||
static inline void check_io(CPUX86State *env, int addr, int size,
|
||||
uintptr_t retaddr)
|
||||
void helper_check_io(CPUX86State *env, uint32_t addr, uint32_t size)
|
||||
{
|
||||
int io_offset, val, mask;
|
||||
uintptr_t retaddr = GETPC();
|
||||
uint32_t io_offset, val, mask;
|
||||
|
||||
/* TSS must be a valid 32 bit one */
|
||||
if (!(env->tr.flags & DESC_P_MASK) ||
|
||||
@ -2444,18 +2444,3 @@ static inline void check_io(CPUX86State *env, int addr, int size,
|
||||
raise_exception_err_ra(env, EXCP0D_GPF, 0, retaddr);
|
||||
}
|
||||
}
|
||||
|
||||
void helper_check_iob(CPUX86State *env, uint32_t t0)
|
||||
{
|
||||
check_io(env, t0, 1, GETPC());
|
||||
}
|
||||
|
||||
void helper_check_iow(CPUX86State *env, uint32_t t0)
|
||||
{
|
||||
check_io(env, t0, 2, GETPC());
|
||||
}
|
||||
|
||||
void helper_check_iol(CPUX86State *env, uint32_t t0)
|
||||
{
|
||||
check_io(env, t0, 4, GETPC());
|
||||
}
|
||||
|
@ -682,19 +682,7 @@ static bool gen_check_io(DisasContext *s, MemOp ot, TCGv_i32 port,
|
||||
uint32_t svm_flags)
|
||||
{
|
||||
if (PE(s) && (CPL(s) > IOPL(s) || VM86(s))) {
|
||||
switch (ot) {
|
||||
case MO_8:
|
||||
gen_helper_check_iob(cpu_env, port);
|
||||
break;
|
||||
case MO_16:
|
||||
gen_helper_check_iow(cpu_env, port);
|
||||
break;
|
||||
case MO_32:
|
||||
gen_helper_check_iol(cpu_env, port);
|
||||
break;
|
||||
default:
|
||||
tcg_abort();
|
||||
}
|
||||
gen_helper_check_io(cpu_env, port, tcg_constant_i32(1 << ot));
|
||||
}
|
||||
if (GUEST(s)) {
|
||||
target_ulong cur_eip = s->base.pc_next - s->cs_base;
|
||||
|
Loading…
Reference in New Issue
Block a user