x86 AREG0 conversion, part deux
cover x86 AREG0 conversion, part deux
These still fail the test but I'll send them for review and to complement the first series.
Blue Swirl (9):
x86: avoid AREG0 for FPU helpers
x86: avoid AREG0 for condition code helpers
x86: avoid AREG0 for integer helpers
x86: avoid AREG0 for SVM helpers
x86: avoid AREG0 for SMM helpers
x86: avoid AREG0 for misc helpers
x86: use wrappers for memory access helpers
x86: avoid AREG0 in segmentation helpers
x86: switch to AREG0 free mode
configure | 2 +- cpu-all.h | 22 + target-i386/Makefile.objs | 9 - target-i386/cc_helper.c | 199 ++++---- target-i386/cc_helper_template.h | 36 +- target-i386/fpu_helper.c | 429 ++++++++--------- target-i386/helper.h | 352 +++++++------- target-i386/int_helper.c | 44 +- target-i386/mem_helper.c | 46 +- target-i386/misc_helper.c | 75 ++-- target-i386/ops_sse.h | 378 ++++++++------- target-i386/ops_sse_header.h | 334 +++++++------- target-i386/seg_helper.c | 434 ++++++++--------- target-i386/shift_helper_template.h | 10 +- target-i386/smm_helper.c | 14 +- target-i386/svm_helper.c | 185 ++++---- target-i386/translate.c | 923 +++++++++++++++++++---------------- 17 files changed, 1781 insertions(+), 1711 deletions(-)
Signature · 1 line
1.7.2.5
PATCH 1/9 x86: avoid AREG0 for FPU helpers
Make FPU helpers take a parameter for CPUState instead of relying on global env.
Introduce temporary wrappers for FPU load and store ops. Remove wrappers for non-AREG0 code. Don't call unconverted helpers directly.
--- target-i386/Makefile.objs | 1 - target-i386/cpu.h | 11 + target-i386/fpu_helper.c | 433 ++++++++++++++++++-------------------- target-i386/helper.h | 172 ++++++++-------- target-i386/mem_helper.c | 49 +++++ target-i386/ops_sse.h | 378 +++++++++++++++++---------------- target-i386/ops_sse_header.h | 334 +++++++++++++++--------------- target-i386/translate.c | 486 ++++++++++++++++++++++-------------------- 8 files changed, 977 insertions(+), 887 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/fpu_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/cc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/int_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/svm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/cpu.h +11 -0
@@ -1134,4 +1134,15 @@ void do_smm_enter(CPUX86State *env1);void cpu_report_tpr_access (CPUX86State *env,TPRAccess access); +/* temporary wrappers */ +uint32_t cpu_ldub_data (CPUX86State *env,target_ulong ptr); +uint32_t cpu_lduw_data (CPUX86State *env,target_ulong ptr); +uint32_t cpu_ldl_data (CPUX86State *env,target_ulong ptr); +uint64_t cpu_ldq_data (CPUX86State *env,target_ulong ptr); + +void cpu_stb_data (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stw_data (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stl_data (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stq_data (CPUX86State *env,target_ulong ptr,uint64_t data); +#endif /* CPU_I386_H */
target-i386/fpu_helper.c +207 -226
1,116 lines not on this page · raw message
target-i386/helper.h +86 -86
184 lines not on this page · raw message
target-i386/mem_helper.c +49 -0
52 lines not on this page · raw message
target-i386/ops_sse.h +197 -181
1,110 lines not on this page · raw message
target-i386/ops_sse_header.h +167 -167
408 lines not on this page · raw message
target-i386/translate.c +260 -226
108 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.2.5
Part of the diff is not shown here. View the raw message.
PATCH 2/9 x86: avoid AREG0 for condition code helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
--- target-i386/Makefile.objs | 1 - target-i386/cc_helper.c | 199 +++++++++++++++++------------------ target-i386/cc_helper_template.h | 36 +++--- target-i386/helper.h | 20 ++-- target-i386/int_helper.c | 8 +- target-i386/mem_helper.c | 4 +- target-i386/misc_helper.c | 2 +- target-i386/seg_helper.c | 8 +- target-i386/shift_helper_template.h | 4 +- target-i386/translate.c | 66 ++++++++---- 10 files changed, 179 insertions(+), 169 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/cc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/int_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/svm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/smm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/cc_helper.c +96 -103
410 lines not on this page · raw message
target-i386/cc_helper_template.h +18 -18
@@ -42,7 +42,7 @@/* dynamic flags computation */ -static int glue (compute_all_add ,SUFFIX )(void ) +static int glue (compute_all_add ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -58,7 +58,7 @@ static int glue(compute_all_add, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_c_add ,SUFFIX )(void ) +static int glue (compute_c_add ,SUFFIX )(CPUX86State *env) {int cf;target_long src1;
@@ -68,7 +68,7 @@ static int glue(compute_c_add, SUFFIX)(void)return cf; } -static int glue (compute_all_adc ,SUFFIX )(void ) +static int glue (compute_all_adc ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -84,7 +84,7 @@ static int glue(compute_all_adc, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_c_adc ,SUFFIX )(void ) +static int glue (compute_c_adc ,SUFFIX )(CPUX86State *env) {int cf;target_long src1;
@@ -94,7 +94,7 @@ static int glue(compute_c_adc, SUFFIX)(void)return cf; } -static int glue (compute_all_sub ,SUFFIX )(void ) +static int glue (compute_all_sub ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -110,7 +110,7 @@ static int glue(compute_all_sub, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_c_sub ,SUFFIX )(void ) +static int glue (compute_c_sub ,SUFFIX )(CPUX86State *env) {int cf;target_long src1, src2;
@@ -121,7 +121,7 @@ static int glue(compute_c_sub, SUFFIX)(void)return cf; } -static int glue (compute_all_sbb ,SUFFIX )(void ) +static int glue (compute_all_sbb ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -137,7 +137,7 @@ static int glue(compute_all_sbb, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_c_sbb ,SUFFIX )(void ) +static int glue (compute_c_sbb ,SUFFIX )(CPUX86State *env) {int cf;target_long src1, src2;
@@ -148,7 +148,7 @@ static int glue(compute_c_sbb, SUFFIX)(void)return cf; } -static int glue (compute_all_logic ,SUFFIX )(void ) +static int glue (compute_all_logic ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;
@@ -166,7 +166,7 @@ static int glue(compute_c_logic, SUFFIX)(void)return 0 ; } -static int glue (compute_all_inc ,SUFFIX )(void ) +static int glue (compute_all_inc ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -183,13 +183,13 @@ static int glue(compute_all_inc, SUFFIX)(void) }#if DATA_BITS ==32 -static int glue (compute_c_inc ,SUFFIX )(void ) +static int glue (compute_c_inc ,SUFFIX )(CPUX86State *env) {return CC_SRC ; }#endif -static int glue (compute_all_dec ,SUFFIX )(void ) +static int glue (compute_all_dec ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;target_long src1, src2;
@@ -205,7 +205,7 @@ static int glue(compute_all_dec, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_all_shl ,SUFFIX )(void ) +static int glue (compute_all_shl ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;
@@ -219,19 +219,19 @@ static int glue(compute_all_shl, SUFFIX)(void)return cf | pf | af | zf | sf | of; } -static int glue (compute_c_shl ,SUFFIX )(void ) +static int glue (compute_c_shl ,SUFFIX )(CPUX86State *env) {return (CC_SRC >> (DATA_BITS -1 )) &CC_C ; }#if DATA_BITS ==32 -static int glue (compute_c_sar ,SUFFIX )(void ) +static int glue (compute_c_sar ,SUFFIX )(CPUX86State *env) {return CC_SRC &1 ; }#endif -static int glue (compute_all_sar ,SUFFIX )(void ) +static int glue (compute_all_sar ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;
@@ -246,7 +246,7 @@ static int glue(compute_all_sar, SUFFIX)(void) }#if DATA_BITS ==32 -static int glue (compute_c_mul ,SUFFIX )(void ) +static int glue (compute_c_mul ,SUFFIX )(CPUX86State *env) {int cf;
@@ -257,7 +257,7 @@ static int glue(compute_c_mul, SUFFIX)(void)/* NOTE: we compute the flags like the P4. On olders CPUs, only OF and CF are modified and it is slower to do that. */ -static int glue (compute_all_mul ,SUFFIX )(void ) +static int glue (compute_all_mul ,SUFFIX )(CPUX86State *env) {int cf, pf, af, zf, sf, of;
target-i386/helper.h +10 -10
@@ -1,12 +1,12 @@#include "def-helper.h" -DEF_HELPER_FLAGS_1(cc_compute_all, TCG_CALL_PURE, i32, int) -DEF_HELPER_FLAGS_1(cc_compute_c, TCG_CALL_PURE, i32, int) +DEF_HELPER_FLAGS_2(cc_compute_all, TCG_CALL_PURE, i32, env, int) +DEF_HELPER_FLAGS_2(cc_compute_c, TCG_CALL_PURE, i32, env, int) DEF_HELPER_0(lock, void) DEF_HELPER_0(unlock, void) -DEF_HELPER_2(write_eflags, void, tl, i32) -DEF_HELPER_0(read_eflags, tl) +DEF_HELPER_3(write_eflags, void, env, tl, i32) +DEF_HELPER_1(read_eflags, tl, env) DEF_HELPER_1(divb_AL, void, tl) DEF_HELPER_1(idivb_AL, void, tl)DEF_HELPER_1 (divw_AX, void, tl)
@@ -44,7 +44,7 @@ DEF_HELPER_2(lret_protected, void, int, int) DEF_HELPER_1(read_crN, tl, int) DEF_HELPER_2(write_crN, void, int, tl) DEF_HELPER_1(lmsw, void, tl) -DEF_HELPER_0(clts, void) +DEF_HELPER_1(clts, void, env) DEF_HELPER_2(movl_drN_T0, void, int, tl)DEF_HELPER_1 (invlpg, void, tl)
@@ -62,13 +62,13 @@ DEF_HELPER_1(hlt, void, int) DEF_HELPER_1(monitor, void, tl) DEF_HELPER_1(mwait, void, int) DEF_HELPER_0(debug, void) -DEF_HELPER_0(reset_rf, void) +DEF_HELPER_1(reset_rf, void, env) DEF_HELPER_3(raise_interrupt, void, env, int, int) DEF_HELPER_2(raise_exception, void, env, int) -DEF_HELPER_0(cli, void) -DEF_HELPER_0(sti, void) -DEF_HELPER_0(set_inhibit_irq, void) -DEF_HELPER_0(reset_inhibit_irq, void) +DEF_HELPER_1(cli, void, env) +DEF_HELPER_1(sti, void, env) +DEF_HELPER_1(set_inhibit_irq, void, env) +DEF_HELPER_1(reset_inhibit_irq, void, env) DEF_HELPER_2(boundw, void, tl, int) DEF_HELPER_2(boundl, void, tl, int)DEF_HELPER_0 (rsm, void)
target-i386/int_helper.c +4 -4
@@ -185,7 +185,7 @@ void helper_aaa(void)int al, ah, af;int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); af = eflags &CC_A ; al =EAX &0xff ; ah = (EAX >>8 ) &0xff ;
@@ -209,7 +209,7 @@ void helper_aas(void)int al, ah, af;int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); af = eflags &CC_A ; al =EAX &0xff ; ah = (EAX >>8 ) &0xff ;
@@ -232,7 +232,7 @@ void helper_daa(void)int old_al, al, af, cf;int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); cf = eflags &CC_C ; af = eflags &CC_A ; old_al = al =EAX &0xff ;
@@ -259,7 +259,7 @@ void helper_das(void)int al, al1, af, cf;int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); cf = eflags &CC_C ; af = eflags &CC_A ; al =EAX &0xff ;
target-i386/mem_helper.c +2 -2
@@ -44,7 +44,7 @@ void helper_cmpxchg8b(target_ulong a0)uint64_t d;int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); d =ldq (a0);if (d == (((uint64_t )EDX <<32 ) | (uint32_t )EAX )) {stq (a0, ((uint64_t )ECX <<32 ) | (uint32_t )EBX );
@@ -68,7 +68,7 @@ void helper_cmpxchg16b(target_ulong a0)if ((a0 &0xf ) !=0 ) {raise_exception (env,EXCP0D_GPF ); } - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP ); d0 =ldq (a0); d1 =ldq (a0 +8 );if (d0 ==EAX && d1 ==EDX ) {
target-i386/misc_helper.c +1 -1
@@ -102,7 +102,7 @@ void helper_into(int next_eip_addend) {int eflags; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP );if (eflags &CC_O ) {raise_interrupt (env,EXCP04_INTO ,1 ,0 , next_eip_addend); }
target-i386/seg_helper.c +4 -4
@@ -2294,7 +2294,7 @@ target_ulong helper_lsl(target_ulong selector1)int rpl, dpl, cpl, type; selector = selector1 &0xffff ; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP );if ((selector &0xfffc ) ==0 ) { goto fail; }
@@ -2341,7 +2341,7 @@ target_ulong helper_lar(target_ulong selector1)int rpl, dpl, cpl, type; selector = selector1 &0xffff ; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP );if ((selector &0xfffc ) ==0 ) { goto fail; }
@@ -2390,7 +2390,7 @@ void helper_verr(target_ulong selector1)int rpl, dpl, cpl; selector = selector1 &0xffff ; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP );if ((selector &0xfffc ) ==0 ) { goto fail; }
@@ -2428,7 +2428,7 @@ void helper_verw(target_ulong selector1)int rpl, dpl, cpl; selector = selector1 &0xffff ; - eflags =helper_cc_compute_all (CC_OP ); + eflags =cpu_cc_compute_all (env,CC_OP );if ((selector &0xfffc ) ==0 ) { goto fail; }
target-i386/shift_helper_template.h +2 -2
@@ -54,7 +54,7 @@ target_ulong glue(helper_rcl, SUFFIX)(target_ulong t0, target_ulong t1) count = rclb_table[count];#endif if (count) { - eflags =helper_cc_compute_all (CC_OP ); + eflags =helper_cc_compute_all (env,CC_OP ); t0 &=DATA_MASK ; src = t0; res = (t0 << count) | ((target_ulong)(eflags &CC_C ) << (count -1 ));
@@ -84,7 +84,7 @@ target_ulong glue(helper_rcr, SUFFIX)(target_ulong t0, target_ulong t1) count = rclb_table[count];#endif if (count) { - eflags =helper_cc_compute_all (CC_OP ); + eflags =helper_cc_compute_all (env,CC_OP ); t0 &=DATA_MASK ; src = t0; res = (t0 >> count) |
target-i386/translate.c +42 -24
147 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH 3/9 x86: avoid AREG0 for integer helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
--- target-i386/Makefile.objs | 1 - target-i386/helper.h | 50 +++++++++++++------------- target-i386/int_helper.c | 36 +++++++++--------- target-i386/shift_helper_template.h | 6 ++- target-i386/translate.c | 66 +++++++++++++++++++++------------- 5 files changed, 88 insertions(+), 71 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/int_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/svm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/smm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/misc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/helper.h +25 -25
66 lines not on this page · raw message
target-i386/int_helper.c +18 -18
@@ -18,7 +18,6 @@*/ #include "cpu.h" -#include "dyngen-exec.h" #include "host-utils.h" #include "helper.h"
@@ -42,7 +41,7 @@ static const uint8_t rclw_table[32] = {/* division, flags are undefined */ -void helper_divb_AL (target_ulong t0) +void helper_divb_AL (CPUX86State *env,target_ulong t0) {unsigned int num, den, q, r;
@@ -60,7 +59,7 @@ void helper_divb_AL(target_ulong t0)EAX = (EAX & ~0xffff ) | (r <<8 ) | q; } -void helper_idivb_AL (target_ulong t0) +void helper_idivb_AL (CPUX86State *env,target_ulong t0) {int num, den, q, r;
@@ -78,7 +77,7 @@ void helper_idivb_AL(target_ulong t0)EAX = (EAX & ~0xffff ) | (r <<8 ) | q; } -void helper_divw_AX (target_ulong t0) +void helper_divw_AX (CPUX86State *env,target_ulong t0) {unsigned int num, den, q, r;
@@ -97,7 +96,7 @@ void helper_divw_AX(target_ulong t0)EDX = (EDX & ~0xffff ) | r; } -void helper_idivw_AX (target_ulong t0) +void helper_idivw_AX (CPUX86State *env,target_ulong t0) {int num, den, q, r;
@@ -116,7 +115,7 @@ void helper_idivw_AX(target_ulong t0)EDX = (EDX & ~0xffff ) | r; } -void helper_divl_EAX (target_ulong t0) +void helper_divl_EAX (CPUX86State *env,target_ulong t0) {unsigned int den, r;uint64_t num, q;
@@ -135,7 +134,7 @@ void helper_divl_EAX(target_ulong t0)EDX = (uint32_t )r; } -void helper_idivl_EAX (target_ulong t0) +void helper_idivl_EAX (CPUX86State *env,target_ulong t0) {int den, r;int64_t num, q;
@@ -157,7 +156,7 @@ void helper_idivl_EAX(target_ulong t0)/* bcd */ /* XXX: exception */ -void helper_aam (int base) +void helper_aam (CPUX86State *env,int base) {int al, ah;
@@ -168,7 +167,7 @@ void helper_aam(int base)CC_DST = al; } -void helper_aad (int base) +void helper_aad (CPUX86State *env,int base) {int al, ah;
@@ -179,7 +178,7 @@ void helper_aad(int base)CC_DST = al; } -void helper_aaa (void ) +void helper_aaa (CPUX86State *env) {int icarry;int al, ah, af;
@@ -203,7 +202,7 @@ void helper_aaa(void)CC_SRC = eflags; } -void helper_aas (void ) +void helper_aas (CPUX86State *env) {int icarry;int al, ah, af;
@@ -227,7 +226,7 @@ void helper_aas(void)CC_SRC = eflags; } -void helper_daa (void ) +void helper_daa (CPUX86State *env) {int old_al, al, af, cf;int eflags;
@@ -254,7 +253,7 @@ void helper_daa(void)CC_SRC = eflags; } -void helper_das (void ) +void helper_das (CPUX86State *env) {int al, al1, af, cf;int eflags;
@@ -375,7 +374,7 @@ static int idiv64(uint64_t *plow, uint64_t *phigh, int64_t b)return 0 ; } -void helper_mulq_EAX_T0 (target_ulong t0) +void helper_mulq_EAX_T0 (CPUX86State *env,target_ulong t0) {uint64_t r0, r1;
@@ -386,7 +385,7 @@ void helper_mulq_EAX_T0(target_ulong t0)CC_SRC = r1; } -void helper_imulq_EAX_T0 (target_ulong t0) +void helper_imulq_EAX_T0 (CPUX86State *env,target_ulong t0) {uint64_t r0, r1;
@@ -397,7 +396,8 @@ void helper_imulq_EAX_T0(target_ulong t0)CC_SRC = ((int64_t )r1 != ((int64_t )r0 >>63 )); } -target_ulong helper_imulq_T0_T1 (target_ulong t0,target_ulong t1) +target_ulong helper_imulq_T0_T1 (CPUX86State *env,target_ulong t0, +target_ulong t1) {uint64_t r0, r1;
@@ -407,7 +407,7 @@ target_ulong helper_imulq_T0_T1(target_ulong t0, target_ulong t1)return r0; } -void helper_divq_EAX (target_ulong t0) +void helper_divq_EAX (CPUX86State *env,target_ulong t0) {uint64_t r0, r1;
@@ -423,7 +423,7 @@ void helper_divq_EAX(target_ulong t0)EDX = r1; } -void helper_idivq_EAX (target_ulong t0) +void helper_idivq_EAX (CPUX86State *env,target_ulong t0) {uint64_t r0, r1;
target-i386/shift_helper_template.h +4 -2
@@ -41,7 +41,8 @@#error unhandled operand size#endif -target_ulong glue (helper_rcl ,SUFFIX )(target_ulong t0,target_ulong t1) +target_ulong glue (helper_rcl ,SUFFIX )(CPUX86State *env,target_ulong t0, +target_ulong t1) {int count, eflags;target_ulong src;
@@ -71,7 +72,8 @@ target_ulong glue(helper_rcl, SUFFIX)(target_ulong t0, target_ulong t1)return t0; } -target_ulong glue (helper_rcr ,SUFFIX )(target_ulong t0,target_ulong t1) +target_ulong glue (helper_rcr ,SUFFIX )(CPUX86State *env,target_ulong t0, +target_ulong t1) {int count, eflags;target_ulong src;
target-i386/translate.c +41 -25
166 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH 4/9 x86: avoid AREG0 for SVM helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
--- target-i386/Makefile.objs | 1 - target-i386/helper.h | 22 +++--- target-i386/svm_helper.c | 181 ++++++++++++++++++++++----------------------- target-i386/translate.c | 21 +++--- 4 files changed, 110 insertions(+), 115 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/svm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/smm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/misc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/mem_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/helper.h +11 -11
@@ -95,17 +95,17 @@ DEF_HELPER_1(inw, tl, i32) DEF_HELPER_2(outl, void, i32, i32) DEF_HELPER_1(inl, tl, i32) -DEF_HELPER_2(svm_check_intercept_param, void, i32, i64) -DEF_HELPER_2(vmexit, void, i32, i64) -DEF_HELPER_3(svm_check_io, void, i32, i32, i32) -DEF_HELPER_2(vmrun, void, int, int) -DEF_HELPER_0(vmmcall, void) -DEF_HELPER_1(vmload, void, int) -DEF_HELPER_1(vmsave, void, int) -DEF_HELPER_0(stgi, void) -DEF_HELPER_0(clgi, void) -DEF_HELPER_0(skinit, void) -DEF_HELPER_1 (invlpga, void, int) +DEF_HELPER_3(svm_check_intercept_param, void, env, i32, i64) +DEF_HELPER_3(vmexit, void, env, i32, i64) +DEF_HELPER_4(svm_check_io, void, env, i32, i32, i32) +DEF_HELPER_3(vmrun, void, env, int, int) +DEF_HELPER_1(vmmcall, void, env) +DEF_HELPER_2(vmload, void, env, int) +DEF_HELPER_2(vmsave, void, env, int) +DEF_HELPER_1(stgi, void, env) +DEF_HELPER_1(clgi, void, env) +DEF_HELPER_1(skinit, void, env) +DEF_HELPER_2 (invlpga, void, env, int)/* x86 FPU */
target-i386/svm_helper.c +88 -93
426 lines not on this page · raw message
target-i386/translate.c +11 -10
@@ -744,7 +744,8 @@ static void gen_check_io(DisasContext *s, int ot, target_ulong cur_eip, svm_flags |= (1 << (4 + ot)); next_eip = s->pc - s->cs_base;tcg_gen_trunc_tl_i32 (cpu_tmp2_i32, cpu_T[0 ]); -gen_helper_svm_check_io (cpu_tmp2_i32,tcg_const_i32 (svm_flags), +gen_helper_svm_check_io (cpu_env, cpu_tmp2_i32, +tcg_const_i32 (svm_flags),tcg_const_i32 (next_eip - cur_eip)); } }
@@ -2455,7 +2456,7 @@ gen_svm_check_intercept_param(DisasContext *s, target_ulong pc_start,if (s->cc_op !=CC_OP_DYNAMIC )gen_op_set_cc_op (s->cc_op);gen_jmp_im (pc_start - s->cs_base); -gen_helper_svm_check_intercept_param (tcg_const_i32 (type), +gen_helper_svm_check_intercept_param (cpu_env,tcg_const_i32 (type),tcg_const_i64 (param)); }
@@ -7204,7 +7205,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_vmrun (tcg_const_i32 (s->aflag), +gen_helper_vmrun (cpu_env,tcg_const_i32 (s->aflag),tcg_const_i32 (s->pc - pc_start));tcg_gen_exit_tb (0 ); s->is_jmp =DISAS_TB_JUMP ;
@@ -7213,7 +7214,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)case 1 :/* VMMCALL */ if (!(s->flags &HF_SVME_MASK )) goto illegal_op; -gen_helper_vmmcall (); +gen_helper_vmmcall (cpu_env);break ;case 2 :/* VMLOAD */ if (!(s->flags &HF_SVME_MASK ) || !s->pe)
@@ -7222,7 +7223,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_vmload (tcg_const_i32 (s->aflag)); +gen_helper_vmload (cpu_env,tcg_const_i32 (s->aflag)); }break ;case 3 :/* VMSAVE */
@@ -7232,7 +7233,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_vmsave (tcg_const_i32 (s->aflag)); +gen_helper_vmsave (cpu_env,tcg_const_i32 (s->aflag)); }break ;case 4 :/* STGI */
@@ -7244,7 +7245,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_stgi (); +gen_helper_stgi (cpu_env); }break ;case 5 :/* CLGI */
@@ -7254,7 +7255,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_clgi (); +gen_helper_clgi (cpu_env); }break ;case 6 :/* SKINIT */
@@ -7262,7 +7263,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) !(s->cpuid_ext3_features & CPUID_EXT3_SKINIT)) || !s->pe) goto illegal_op; -gen_helper_skinit (); +gen_helper_skinit (cpu_env);break ;case 7 :/* INVLPGA */ if (!(s->flags &HF_SVME_MASK ) || !s->pe)
@@ -7271,7 +7272,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)gen_exception (s,EXCP0D_GPF , pc_start - s->cs_base);break ; }else { -gen_helper_invlpga (tcg_const_i32 (s->aflag)); +gen_helper_invlpga (cpu_env,tcg_const_i32 (s->aflag)); }break ;default :
Signature · 1 line
1.7.2.5
PATCH 5/9 x86: avoid AREG0 for SMM helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
--- target-i386/Makefile.objs | 1 - target-i386/helper.h | 2 +- target-i386/smm_helper.c | 14 ++++---------- target-i386/translate.c | 2 +- 4 files changed, 6 insertions(+), 13 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/smm_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/misc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/mem_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/seg_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/helper.h +1 -1
@@ -71,7 +71,7 @@ DEF_HELPER_1(set_inhibit_irq, void, env) DEF_HELPER_1(reset_inhibit_irq, void, env) DEF_HELPER_2(boundw, void, tl, int) DEF_HELPER_2(boundl, void, tl, int) -DEF_HELPER_0(rsm, void) +DEF_HELPER_1(rsm, void, env) DEF_HELPER_1(into, void, int) DEF_HELPER_1(cmpxchg8b, void, tl)#ifdef TARGET_X86_64
target-i386/smm_helper.c +4 -10
@@ -18,18 +18,17 @@*/ #include "cpu.h" -#include "dyngen-exec.h" #include "helper.h" /* SMM support */ #if defined(CONFIG_USER_ONLY ) -void do_smm_enter (CPUX86State *env1) +void do_smm_enter (CPUX86State *env) { } -void helper_rsm (void ) +void helper_rsm (CPUX86State *env) { }
@@ -41,15 +40,11 @@ void helper_rsm(void)#define SMM_REVISION_ID 0x00020000#endif -void do_smm_enter (CPUX86State *env1) +void do_smm_enter (CPUX86State *env) {target_ulong sm_state;SegmentCache *dt;int i, offset; -CPUX86State *saved_env; - - saved_env = env; - env = env1;qemu_log_mask (CPU_LOG_INT ,"SMM: enter\n" );log_cpu_state_mask (CPU_LOG_INT , env,X86_DUMP_CCOP );
@@ -180,10 +175,9 @@ void do_smm_enter(CPUX86State *env1)cpu_x86_update_cr4 (env,0 ); env->dr[7 ] =0x00000400 ;CC_OP =CC_OP_EFLAGS ; - env = saved_env; } -void helper_rsm (void ) +void helper_rsm (CPUX86State *env) {target_ulong sm_state;int i, offset;
target-i386/translate.c +1 -1
@@ -7700,7 +7700,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start) goto illegal_op;gen_update_cc_op (s);gen_jmp_im (s->pc - s->cs_base); -gen_helper_rsm (); +gen_helper_rsm (cpu_env);gen_eob (s);break ;case 0x1b8 :/* SSE4.2 popcnt */
Signature · 1 line
1.7.2.5
PATCH 6/9 x86: avoid AREG0 for misc helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
--- target-i386/Makefile.objs | 1 - target-i386/helper.h | 40 ++++++++++++------------ target-i386/misc_helper.c | 73 ++++++++++++++++++++++----------------------- target-i386/translate.c | 49 +++++++++++++++++------------- 4 files changed, 84 insertions(+), 79 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -6,6 +6,5 @@ obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o -$(obj)/misc_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/mem_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) $(obj)/seg_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/helper.h +20 -20
@@ -41,12 +41,12 @@ DEF_HELPER_4(lcall_protected, void, int, tl, int, int) DEF_HELPER_1(iret_real, void, int) DEF_HELPER_2(iret_protected, void, int, int) DEF_HELPER_2(lret_protected, void, int, int) -DEF_HELPER_1(read_crN, tl, int) -DEF_HELPER_2(write_crN, void, int, tl) -DEF_HELPER_1(lmsw, void, tl) +DEF_HELPER_2(read_crN, tl, env, int) +DEF_HELPER_3(write_crN, void, env, int, tl) +DEF_HELPER_2(lmsw, void, env, tl) DEF_HELPER_1(clts, void, env) -DEF_HELPER_2(movl_drN_T0, void, int, tl) -DEF_HELPER_1(invlpg, void, tl) +DEF_HELPER_3(movl_drN_T0, void, env, int, tl) +DEF_HELPER_2(invlpg, void, env, tl) DEF_HELPER_3(enter_level, void, int, int, tl)#ifdef TARGET_X86_64
@@ -58,10 +58,10 @@ DEF_HELPER_1(sysexit, void, int) DEF_HELPER_1(syscall, void, int) DEF_HELPER_1(sysret, void, int)#endif -DEF_HELPER_1(hlt, void, int) -DEF_HELPER_1(monitor, void, tl) -DEF_HELPER_1(mwait, void, int) -DEF_HELPER_0(debug, void) +DEF_HELPER_2(hlt, void, env, int) +DEF_HELPER_2(monitor, void, env, tl) +DEF_HELPER_2(mwait, void, env, int) +DEF_HELPER_1(debug, void, env) DEF_HELPER_1(reset_rf, void, env) DEF_HELPER_3(raise_interrupt, void, env, int, int)DEF_HELPER_2 (raise_exception, void, env, int)
@@ -72,22 +72,22 @@ DEF_HELPER_1(reset_inhibit_irq, void, env) DEF_HELPER_2(boundw, void, tl, int) DEF_HELPER_2(boundl, void, tl, int) DEF_HELPER_1(rsm, void, env) -DEF_HELPER_1(into, void, int) +DEF_HELPER_2(into, void, env, int) DEF_HELPER_1(cmpxchg8b, void, tl)#ifdef TARGET_X86_64 DEF_HELPER_1(cmpxchg16b, void, tl)#endif -DEF_HELPER_0(single_step, void) -DEF_HELPER_0(cpuid, void) -DEF_HELPER_0(rdtsc, void) -DEF_HELPER_0(rdtscp, void) -DEF_HELPER_0(rdpmc, void) -DEF_HELPER_0(rdmsr, void) -DEF_HELPER_0(wrmsr, void) +DEF_HELPER_1(single_step, void, env) +DEF_HELPER_1(cpuid, void, env) +DEF_HELPER_1(rdtsc, void, env) +DEF_HELPER_1(rdtscp, void, env) +DEF_HELPER_1(rdpmc, void, env) +DEF_HELPER_1(rdmsr, void, env) +DEF_HELPER_1(wrmsr, void, env) -DEF_HELPER_1(check_iob, void, i32) -DEF_HELPER_1(check_iow, void, i32) -DEF_HELPER_1(check_iol, void, i32) +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_2(outb, void, i32, i32) DEF_HELPER_1(inb, tl, i32)DEF_HELPER_2 (outw, void, i32, i32)
target-i386/misc_helper.c +36 -37
233 lines not on this page · raw message
target-i386/translate.c +28 -21
150 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH 7/9 x86: use wrappers for memory access helpers
In reply to Blue SwirlSwitch to wrapped versions of memory access functions.
--- target-i386/cpu.h | 10 ++ target-i386/mem_helper.c | 10 ++ target-i386/seg_helper.c | 209 +++++++++++++++++++++++----------------------- 3 files changed, 126 insertions(+), 103 deletions(-)
target-i386/cpu.h +10 -0
@@ -1145,4 +1145,14 @@ void cpu_stw_data(CPUX86State *env, target_ulong ptr, uint32_t data);void cpu_stl_data (CPUX86State *env,target_ulong ptr,uint32_t data);void cpu_stq_data (CPUX86State *env,target_ulong ptr,uint64_t data); +uint32_t cpu_ldub_kernel (CPUX86State *env,target_ulong ptr); +uint32_t cpu_lduw_kernel (CPUX86State *env,target_ulong ptr); +uint32_t cpu_ldl_kernel (CPUX86State *env,target_ulong ptr); +uint64_t cpu_ldq_kernel (CPUX86State *env,target_ulong ptr); + +void cpu_stb_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stw_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stl_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); +void cpu_stq_kernel (CPUX86State *env,target_ulong ptr,uint64_t data); +#endif /* CPU_I386_H */
target-i386/mem_helper.c +10 -0
@@ -190,6 +190,11 @@ WRAP_LD(uint32_t, ldub_data) WRAP_LD(uint32_t, lduw_data) WRAP_LD(uint32_t, ldl_data) WRAP_LD(uint64_t, ldq_data) + +WRAP_LD(uint32_t, ldub_kernel) +WRAP_LD(uint32_t, lduw_kernel) +WRAP_LD(uint32_t, ldl_kernel) +WRAP_LD(uint64_t, ldq_kernel)#undef WRAP_LD#define WRAP_ST (datatype, fn) \
@@ -207,4 +212,9 @@ WRAP_ST(uint32_t, stb_data) WRAP_ST(uint32_t, stw_data) WRAP_ST(uint32_t, stl_data) WRAP_ST(uint64_t, stq_data) + +WRAP_ST(uint32_t, stb_kernel) +WRAP_ST(uint32_t, stw_kernel) +WRAP_ST(uint32_t, stl_kernel) +WRAP_ST(uint64_t, stq_kernel)#undef WRAP_ST
target-i386/seg_helper.c +106 -103
442 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH 8/9 x86: avoid AREG0 in segmentation helpers
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
Rename remains of op_helper.c to seg_helper.c.
--- target-i386/Makefile.objs | 1 - target-i386/helper.h | 38 ++++---- target-i386/seg_helper.c | 217 +++++++++++++++++++++------------------------ target-i386/translate.c | 54 ++++++------ 4 files changed, 150 insertions(+), 160 deletions(-)
target-i386/Makefile.objs +0 -1
@@ -7,4 +7,3 @@ obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o $(obj)/mem_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) -$(obj)/seg_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/helper.h +19 -19
@@ -28,19 +28,19 @@ DEF_HELPER_1(aas, void, env) DEF_HELPER_1(daa, void, env) DEF_HELPER_1(das, void, env) -DEF_HELPER_1(lsl, tl, tl) -DEF_HELPER_1(lar, tl, tl) -DEF_HELPER_1(verr, void, tl) -DEF_HELPER_1(verw, void, tl) -DEF_HELPER_1(lldt, void, int) -DEF_HELPER_1(ltr, void, int) -DEF_HELPER_2(load_seg, void, int, int) -DEF_HELPER_3(ljmp_protected, void, int, tl, int) -DEF_HELPER_4(lcall_real, void, int, tl, int, int) -DEF_HELPER_4(lcall_protected, void, int, tl, int, int) -DEF_HELPER_1(iret_real, void, int) -DEF_HELPER_2(iret_protected, void, int, int) -DEF_HELPER_2(lret_protected, void, int, int) +DEF_HELPER_2(lsl, tl, env, tl) +DEF_HELPER_2(lar, tl, env, tl) +DEF_HELPER_2(verr, void, env, tl) +DEF_HELPER_2(verw, void, env, tl) +DEF_HELPER_2(lldt, void, env, int) +DEF_HELPER_2(ltr, void, env, int) +DEF_HELPER_3(load_seg, void, env, int, int) +DEF_HELPER_4(ljmp_protected, void, env, int, tl, int) +DEF_HELPER_5(lcall_real, void, env, int, tl, int, int) +DEF_HELPER_5(lcall_protected, void, env, int, tl, int, int) +DEF_HELPER_2(iret_real, void, env, int) +DEF_HELPER_3(iret_protected, void, env, int, int) +DEF_HELPER_3(lret_protected, void, env, int, int) DEF_HELPER_2(read_crN, tl, env, int) DEF_HELPER_3(write_crN, void, env, int, tl)DEF_HELPER_2 (lmsw, void, env, tl)
@@ -48,15 +48,15 @@ DEF_HELPER_1(clts, void, env) DEF_HELPER_3(movl_drN_T0, void, env, int, tl) DEF_HELPER_2(invlpg, void, env, tl) -DEF_HELPER_3(enter_level, void, int, int, tl) +DEF_HELPER_4(enter_level, void, env, int, int, tl)#ifdef TARGET_X86_64 -DEF_HELPER_3(enter64_level, void, int, int, tl) +DEF_HELPER_4(enter64_level, void, env, int, int, tl)#endif -DEF_HELPER_0(sysenter, void) -DEF_HELPER_1(sysexit, void, int) +DEF_HELPER_1(sysenter, void, env) +DEF_HELPER_2(sysexit, void, env, int)#ifdef TARGET_X86_64 -DEF_HELPER_1(syscall, void, int) -DEF_HELPER_1(sysret, void, int) +DEF_HELPER_2(syscall, void, env, int) +DEF_HELPER_2(sysret, void, env, int)#endif DEF_HELPER_2(hlt, void, env, int)DEF_HELPER_2 (monitor, void, env, tl)
target-i386/seg_helper.c +103 -114
650 lines not on this page · raw message
target-i386/translate.c +28 -26
158 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH 9/9 x86: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUX86State parameter instead of relying on AREG0.
Remove temporary wrappers and switch to AREG0 free mode.
--- configure | 2 +- cpu-all.h | 22 ++++++ target-i386/Makefile.objs | 2 - target-i386/cpu.h | 21 ----- target-i386/fpu_helper.c | 4 + target-i386/helper.h | 8 +- target-i386/mem_helper.c | 101 +++++--------------------- target-i386/seg_helper.c | 4 + target-i386/svm_helper.c | 4 + target-i386/translate.c | 179 +++++++++++++++++++++++---------------------- 10 files changed, 147 insertions(+), 200 deletions(-)
configure +1 -1
@@ -3679,7 +3679,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | sparc* | xtensa*) + alpha | i386 | sparc* | x86_64 | xtensa*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
cpu-all.h +22 -0
@@ -274,6 +274,28 @@ extern unsigned long reserved_va;#define cpu_ldsw_code (env1, p) ldsw_raw(p)#define cpu_ldl_code (env1, p) ldl_raw(p)#define cpu_ldq_code (env1, p) ldq_raw(p) + +#define cpu_ldub_data (env, addr) ldub_raw(addr) +#define cpu_lduw_data (env, addr) lduw_raw(addr) +#define cpu_ldsw_data (env, addr) ldsw_raw(addr) +#define cpu_ldl_data (env, addr) ldl_raw(addr) +#define cpu_ldq_data (env, addr) ldq_raw(addr) + +#define cpu_stb_data (env, addr, data) stb_raw(addr, data) +#define cpu_stw_data (env, addr, data) stw_raw(addr, data) +#define cpu_stl_data (env, addr, data) stl_raw(addr, data) +#define cpu_stq_data (env, addr, data) stq_raw(addr, data) + +#define cpu_ldub_kernel (env, addr) ldub_raw(addr) +#define cpu_lduw_kernel (env, addr) lduw_raw(addr) +#define cpu_ldsw_kernel (env, addr) ldsw_raw(addr) +#define cpu_ldl_kernel (env, addr) ldl_raw(addr) +#define cpu_ldq_kernel (env, addr) ldq_raw(addr) + +#define cpu_stb_kernel (env, addr, data) stb_raw(addr, data) +#define cpu_stw_kernel (env, addr, data) stw_raw(addr, data) +#define cpu_stl_kernel (env, addr, data) stl_raw(addr, data) +#define cpu_stq_kernel (env, addr, data) stq_raw(addr, data)#endif #define ldub_kernel (p) ldub_raw(p)
target-i386/Makefile.objs +0 -2
@@ -5,5 +5,3 @@ obj-$(CONFIG_SOFTMMU) += machine.o arch_memory_mapping.o arch_dump.o obj-$(CONFIG_KVM) += kvm.o hyperv.o obj-$(CONFIG_LINUX_USER) += ioport-user.o obj-$(CONFIG_BSD_USER) += ioport-user.o - -$(obj)/mem_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-i386/cpu.h +0 -21
@@ -1134,25 +1134,4 @@ void do_smm_enter(CPUX86State *env1);void cpu_report_tpr_access (CPUX86State *env,TPRAccess access); -/* temporary wrappers */ -uint32_t cpu_ldub_data (CPUX86State *env,target_ulong ptr); -uint32_t cpu_lduw_data (CPUX86State *env,target_ulong ptr); -uint32_t cpu_ldl_data (CPUX86State *env,target_ulong ptr); -uint64_t cpu_ldq_data (CPUX86State *env,target_ulong ptr); - -void cpu_stb_data (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stw_data (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stl_data (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stq_data (CPUX86State *env,target_ulong ptr,uint64_t data); - -uint32_t cpu_ldub_kernel (CPUX86State *env,target_ulong ptr); -uint32_t cpu_lduw_kernel (CPUX86State *env,target_ulong ptr); -uint32_t cpu_ldl_kernel (CPUX86State *env,target_ulong ptr); -uint64_t cpu_ldq_kernel (CPUX86State *env,target_ulong ptr); - -void cpu_stb_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stw_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stl_kernel (CPUX86State *env,target_ulong ptr,uint32_t data); -void cpu_stq_kernel (CPUX86State *env,target_ulong ptr,uint64_t data); -#endif /* CPU_I386_H */
target-i386/fpu_helper.c +4 -0
@@ -21,6 +21,10 @@#include "cpu.h" #include "helper.h" +#if !defined(CONFIG_USER_ONLY ) +#include "softmmu_exec.h" +#endif /* !defined(CONFIG_USER_ONLY) */ +#define FPU_RC_MASK 0xc00#define FPU_RC_NEAR 0x000#define FPU_RC_DOWN 0x400
target-i386/helper.h +4 -4
@@ -69,13 +69,13 @@ DEF_HELPER_1(cli, void, env) DEF_HELPER_1(sti, void, env) DEF_HELPER_1(set_inhibit_irq, void, env) DEF_HELPER_1(reset_inhibit_irq, void, env) -DEF_HELPER_2(boundw, void, tl, int) -DEF_HELPER_2(boundl, void, tl, int) +DEF_HELPER_3(boundw, void, env, tl, int) +DEF_HELPER_3(boundl, void, env, tl, int) DEF_HELPER_1(rsm, void, env) DEF_HELPER_2(into, void, env, int) -DEF_HELPER_1(cmpxchg8b, void, tl) +DEF_HELPER_2(cmpxchg8b, void, env, tl)#ifdef TARGET_X86_64 -DEF_HELPER_1(cmpxchg16b, void, tl) +DEF_HELPER_2(cmpxchg16b, void, env, tl)#endif DEF_HELPER_1(single_step, void, env)DEF_HELPER_1 (cpuid, void, env)
target-i386/mem_helper.c +18 -83
171 lines not on this page · raw message
target-i386/seg_helper.c +4 -0
@@ -24,6 +24,10 @@//#define DEBUG_PCALL +#if !defined(CONFIG_USER_ONLY ) +#include "softmmu_exec.h" +#endif /* !defined(CONFIG_USER_ONLY) */ +#ifdef DEBUG_PCALL # define LOG_PCALL (...) qemu_log_mask(CPU_LOG_PCALL, ## __VA_ARGS__)# define LOG_PCALL_STATE (env) \
target-i386/svm_helper.c +4 -0
@@ -21,6 +21,10 @@#include "cpu-all.h" #include "helper.h" +#if !defined(CONFIG_USER_ONLY ) +#include "softmmu_exec.h" +#endif /* !defined(CONFIG_USER_ONLY) */ +/* Secure Virtual Machine helpers */ #if defined(CONFIG_USER_ONLY )
target-i386/translate.c +90 -89
673 lines not on this page · raw message
Signature · 1 line
1.7.2.5