[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 48/50] target/i386: Create helper_check_io
From: |
Richard Henderson |
Subject: |
[PATCH 48/50] target/i386: Create helper_check_io |
Date: |
Sun, 28 Feb 2021 15:23:19 -0800 |
Drop helper_check_io[bwl] and expose their common
subroutine to tcg directly.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/i386/helper.h | 4 +---
target/i386/tcg/seg_helper.c | 21 +++------------------
target/i386/tcg/translate.c | 14 +-------------
3 files changed, 5 insertions(+), 34 deletions(-)
diff --git a/target/i386/helper.h b/target/i386/helper.h
index 1d85f033df..47d0d67699 100644
--- a/target/i386/helper.h
+++ b/target/i386/helper.h
@@ -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)
diff --git a/target/i386/tcg/seg_helper.c b/target/i386/tcg/seg_helper.c
index cf3f051524..69d6e8f602 100644
--- a/target/i386/tcg/seg_helper.c
+++ b/target/i386/tcg/seg_helper.c
@@ -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());
-}
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index 0937c136ff..d395ae090e 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -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;
--
2.25.1
- [PATCH 40/50] target/i386: Pass env to do_pause and do_hlt, (continued)
- [PATCH 40/50] target/i386: Pass env to do_pause and do_hlt, Richard Henderson, 2021/02/28
- [PATCH 41/50] target/i386: Move invlpg, hlt, monitor, mwait to sysemu, Richard Henderson, 2021/02/28
- [PATCH 43/50] target/i386: Inline user cpu_svm_check_intercept_param, Richard Henderson, 2021/02/28
- [PATCH 44/50] target/i386: Eliminate user stubs for read/write_crN, rd/wrmsr, Richard Henderson, 2021/02/28
- [PATCH 45/50] target/i386: Exit tb after wrmsr, Richard Henderson, 2021/02/28
- [PATCH 42/50] target/i386: Unify invlpg, invlpga, Richard Henderson, 2021/02/28
- [PATCH 46/50] target/i386: Tidy gen_check_io, Richard Henderson, 2021/02/28
- [PATCH 47/50] target/i386: Pass in port to gen_check_io, Richard Henderson, 2021/02/28
- [PATCH 49/50] target/i386: Move helper_check_io to sysemu, Richard Henderson, 2021/02/28
- [PATCH 50/50] target/i386: Remove user-only i/o stubs, Richard Henderson, 2021/02/28
- [PATCH 48/50] target/i386: Create helper_check_io,
Richard Henderson <=
- Re: [PATCH 00/50] i386 cleanup part 3, no-reply, 2021/02/28