Message ID | 1341494619-4714-3-git-send-email-yeongkyoon.lee@samsung.com |
---|---|
State | New |
Headers | show |
On 5 July 2012 14:23, Yeongkyoon Lee <yeongkyoon.lee@samsung.com> wrote: > Add extended MMU helpers to softmmu targets, where the targets are alpha, arm, cris, i386, lm32, m68k, microblaze, mips, ppc, s390x, sh4, sparc and xtensa. > > Signed-off-by: Yeongkyoon Lee <yeongkyoon.lee@samsung.com> > --- > target-alpha/mem_helper.c | 22 ++++++++++++++++++++++ > target-arm/op_helper.c | 23 +++++++++++++++++++++++ > target-cris/op_helper.c | 22 ++++++++++++++++++++++ > target-i386/mem_helper.c | 22 ++++++++++++++++++++++ > target-lm32/op_helper.c | 23 ++++++++++++++++++++++- > target-m68k/op_helper.c | 22 ++++++++++++++++++++++ > target-microblaze/op_helper.c | 22 ++++++++++++++++++++++ > target-mips/op_helper.c | 22 ++++++++++++++++++++++ > target-ppc/mem_helper.c | 22 ++++++++++++++++++++++ > target-s390x/op_helper.c | 22 ++++++++++++++++++++++ > target-sh4/op_helper.c | 22 ++++++++++++++++++++++ > target-sparc/ldst_helper.c | 23 +++++++++++++++++++++++ > target-xtensa/op_helper.c | 22 ++++++++++++++++++++++ > 13 files changed, 288 insertions(+), 1 deletions(-) This makes the already slightly repetitive inclusion of the softmmu_templates even more repetitive. Perhaps we could abstract it all out into a single header which the targets can include? > > diff --git a/target-alpha/mem_helper.c b/target-alpha/mem_helper.c > index 87cada4..ef880a7 100644 > --- a/target-alpha/mem_helper.c > +++ b/target-alpha/mem_helper.c > @@ -132,6 +132,28 @@ void cpu_unassigned_access(CPUAlphaState *env, target_phys_addr_t addr, > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization "Extended". > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c > index 490111c..8ff1209 100644 > --- a/target-arm/op_helper.c > +++ b/target-arm/op_helper.c > @@ -69,6 +69,29 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, > #define SHIFT 3 > #include "softmmu_template.h" > > + > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c > index ac7c98c..cc34f3c 100644 > --- a/target-cris/op_helper.c > +++ b/target-cris/op_helper.c > @@ -52,6 +52,28 @@ > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* Try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-i386/mem_helper.c b/target-i386/mem_helper.c > index 91353c0..59fb03c 100644 > --- a/target-i386/mem_helper.c > +++ b/target-i386/mem_helper.c > @@ -126,6 +126,28 @@ void helper_boundl(target_ulong a0, int v) > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > #endif > > #if !defined(CONFIG_USER_ONLY) > diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c > index 51edc1a..bcdddf7 100644 > --- a/target-lm32/op_helper.c > +++ b/target-lm32/op_helper.c > @@ -18,6 +18,28 @@ > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > void helper_raise_exception(uint32_t index) > { > env->exception_index = index; > @@ -101,4 +123,3 @@ void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx, > env = saved_env; > } > #endif > - > diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c > index 1971a57..454fd71 100644 > --- a/target-m68k/op_helper.c > +++ b/target-m68k/op_helper.c > @@ -51,6 +51,28 @@ extern int semihosting_enabled; > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* Try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c > index 3b1f072..12be3bd 100644 > --- a/target-microblaze/op_helper.c > +++ b/target-microblaze/op_helper.c > @@ -39,6 +39,28 @@ > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* Try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c > index 66037ac..c2fd2db 100644 > --- a/target-mips/op_helper.c > +++ b/target-mips/op_helper.c > @@ -2303,6 +2303,28 @@ static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write, > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > static void do_unaligned_access(target_ulong addr, int is_write, > int is_user, uintptr_t retaddr) > { > diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c > index 5b5f1bd..01a9ac6 100644 > --- a/target-ppc/mem_helper.c > +++ b/target-ppc/mem_helper.c > @@ -268,6 +268,28 @@ STVE(stvewx, cpu_stl_data, bswap32, u32) > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c > index 7b72473..05109c5 100644 > --- a/target-s390x/op_helper.c > +++ b/target-s390x/op_helper.c > @@ -52,6 +52,28 @@ > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > /* try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c > index 4054791..f7c1f67 100644 > --- a/target-sh4/op_helper.c > +++ b/target-sh4/op_helper.c > @@ -53,6 +53,28 @@ static void cpu_restore_state_from_retaddr(uintptr_t retaddr) > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > void tlb_fill(CPUSH4State *env1, target_ulong addr, int is_write, int mmu_idx, > uintptr_t retaddr) > { > diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c > index 9bec7a9..1ceb588 100644 > --- a/target-sparc/ldst_helper.c > +++ b/target-sparc/ldst_helper.c > @@ -80,6 +80,29 @@ > > #define SHIFT 3 > #include "softmmu_template.h" > + > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > #endif > > #if defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) > diff --git a/target-xtensa/op_helper.c b/target-xtensa/op_helper.c > index 2659c0e..536e1fb 100644 > --- a/target-xtensa/op_helper.c > +++ b/target-xtensa/op_helper.c > @@ -47,6 +47,28 @@ static void do_unaligned_access(CPUXtensaState *env, > #define SHIFT 3 > #include "softmmu_template.h" > > +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) > +/* Exteneded MMU helper funtions for qemu_ld/st optimization > + Note that normal helper functions should be defined above > + to avoid duplication of common functions, slow_ld/st and io_read/write. > + */ > +#define USE_EXTENDED_HELPER > + > +#define SHIFT 0 > +#include "softmmu_template.h" > + > +#define SHIFT 1 > +#include "softmmu_template.h" > + > +#define SHIFT 2 > +#include "softmmu_template.h" > + > +#define SHIFT 3 > +#include "softmmu_template.h" > + > +#undef USE_EXTENDED_HELPER > +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ > + > static void do_restore_state(CPUXtensaState *env, uintptr_t pc) > { > TranslationBlock *tb; > -- > 1.7.4.1 > -- PMM
On Thu, Jul 5, 2012 at 1:43 PM, Peter Maydell <peter.maydell@linaro.org> wrote: > On 5 July 2012 14:23, Yeongkyoon Lee <yeongkyoon.lee@samsung.com> wrote: >> Add extended MMU helpers to softmmu targets, where the targets are alpha, arm, cris, i386, lm32, m68k, microblaze, mips, ppc, s390x, sh4, sparc and xtensa. >> >> Signed-off-by: Yeongkyoon Lee <yeongkyoon.lee@samsung.com> >> --- >> target-alpha/mem_helper.c | 22 ++++++++++++++++++++++ >> target-arm/op_helper.c | 23 +++++++++++++++++++++++ >> target-cris/op_helper.c | 22 ++++++++++++++++++++++ >> target-i386/mem_helper.c | 22 ++++++++++++++++++++++ >> target-lm32/op_helper.c | 23 ++++++++++++++++++++++- >> target-m68k/op_helper.c | 22 ++++++++++++++++++++++ >> target-microblaze/op_helper.c | 22 ++++++++++++++++++++++ >> target-mips/op_helper.c | 22 ++++++++++++++++++++++ >> target-ppc/mem_helper.c | 22 ++++++++++++++++++++++ >> target-s390x/op_helper.c | 22 ++++++++++++++++++++++ >> target-sh4/op_helper.c | 22 ++++++++++++++++++++++ >> target-sparc/ldst_helper.c | 23 +++++++++++++++++++++++ >> target-xtensa/op_helper.c | 22 ++++++++++++++++++++++ >> 13 files changed, 288 insertions(+), 1 deletions(-) > > This makes the already slightly repetitive inclusion of the > softmmu_templates even more repetitive. Perhaps we could abstract > it all out into a single header which the targets can include? I'd just replace standard versions with extended versions unconditionally, no CONFIG_*. Both AREG0 and !AREG0 cases must be handled. >> >> diff --git a/target-alpha/mem_helper.c b/target-alpha/mem_helper.c >> index 87cada4..ef880a7 100644 >> --- a/target-alpha/mem_helper.c >> +++ b/target-alpha/mem_helper.c >> @@ -132,6 +132,28 @@ void cpu_unassigned_access(CPUAlphaState *env, target_phys_addr_t addr, >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization > > "Extended". > >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c >> index 490111c..8ff1209 100644 >> --- a/target-arm/op_helper.c >> +++ b/target-arm/op_helper.c >> @@ -69,6 +69,29 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> + >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c >> index ac7c98c..cc34f3c 100644 >> --- a/target-cris/op_helper.c >> +++ b/target-cris/op_helper.c >> @@ -52,6 +52,28 @@ >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* Try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-i386/mem_helper.c b/target-i386/mem_helper.c >> index 91353c0..59fb03c 100644 >> --- a/target-i386/mem_helper.c >> +++ b/target-i386/mem_helper.c >> @@ -126,6 +126,28 @@ void helper_boundl(target_ulong a0, int v) >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> #endif >> >> #if !defined(CONFIG_USER_ONLY) >> diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c >> index 51edc1a..bcdddf7 100644 >> --- a/target-lm32/op_helper.c >> +++ b/target-lm32/op_helper.c >> @@ -18,6 +18,28 @@ >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> void helper_raise_exception(uint32_t index) >> { >> env->exception_index = index; >> @@ -101,4 +123,3 @@ void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx, >> env = saved_env; >> } >> #endif >> - >> diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c >> index 1971a57..454fd71 100644 >> --- a/target-m68k/op_helper.c >> +++ b/target-m68k/op_helper.c >> @@ -51,6 +51,28 @@ extern int semihosting_enabled; >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* Try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c >> index 3b1f072..12be3bd 100644 >> --- a/target-microblaze/op_helper.c >> +++ b/target-microblaze/op_helper.c >> @@ -39,6 +39,28 @@ >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* Try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c >> index 66037ac..c2fd2db 100644 >> --- a/target-mips/op_helper.c >> +++ b/target-mips/op_helper.c >> @@ -2303,6 +2303,28 @@ static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write, >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> static void do_unaligned_access(target_ulong addr, int is_write, >> int is_user, uintptr_t retaddr) >> { >> diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c >> index 5b5f1bd..01a9ac6 100644 >> --- a/target-ppc/mem_helper.c >> +++ b/target-ppc/mem_helper.c >> @@ -268,6 +268,28 @@ STVE(stvewx, cpu_stl_data, bswap32, u32) >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c >> index 7b72473..05109c5 100644 >> --- a/target-s390x/op_helper.c >> +++ b/target-s390x/op_helper.c >> @@ -52,6 +52,28 @@ >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> /* try to fill the TLB and return an exception if error. If retaddr is >> NULL, it means that the function was called in C code (i.e. not >> from generated code or from helper.c) */ >> diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c >> index 4054791..f7c1f67 100644 >> --- a/target-sh4/op_helper.c >> +++ b/target-sh4/op_helper.c >> @@ -53,6 +53,28 @@ static void cpu_restore_state_from_retaddr(uintptr_t retaddr) >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> void tlb_fill(CPUSH4State *env1, target_ulong addr, int is_write, int mmu_idx, >> uintptr_t retaddr) >> { >> diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c >> index 9bec7a9..1ceb588 100644 >> --- a/target-sparc/ldst_helper.c >> +++ b/target-sparc/ldst_helper.c >> @@ -80,6 +80,29 @@ >> >> #define SHIFT 3 >> #include "softmmu_template.h" >> + >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> #endif >> >> #if defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) >> diff --git a/target-xtensa/op_helper.c b/target-xtensa/op_helper.c >> index 2659c0e..536e1fb 100644 >> --- a/target-xtensa/op_helper.c >> +++ b/target-xtensa/op_helper.c >> @@ -47,6 +47,28 @@ static void do_unaligned_access(CPUXtensaState *env, >> #define SHIFT 3 >> #include "softmmu_template.h" >> >> +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) >> +/* Exteneded MMU helper funtions for qemu_ld/st optimization >> + Note that normal helper functions should be defined above >> + to avoid duplication of common functions, slow_ld/st and io_read/write. >> + */ >> +#define USE_EXTENDED_HELPER >> + >> +#define SHIFT 0 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 1 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 2 >> +#include "softmmu_template.h" >> + >> +#define SHIFT 3 >> +#include "softmmu_template.h" >> + >> +#undef USE_EXTENDED_HELPER >> +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ >> + >> static void do_restore_state(CPUXtensaState *env, uintptr_t pc) >> { >> TranslationBlock *tb; >> -- >> 1.7.4.1 >> > > -- PMM >
On 2012년 07월 06일 03:49, Blue Swirl wrote: > On Thu, Jul 5, 2012 at 1:43 PM, Peter Maydell <peter.maydell@linaro.org> wrote: >> On 5 July 2012 14:23, Yeongkyoon Lee <yeongkyoon.lee@samsung.com> wrote: >>> Add extended MMU helpers to softmmu targets, where the targets are alpha, arm, cris, i386, lm32, m68k, microblaze, mips, ppc, s390x, sh4, sparc and xtensa. >>> >>> Signed-off-by: Yeongkyoon Lee <yeongkyoon.lee@samsung.com> >>> --- >>> target-alpha/mem_helper.c | 22 ++++++++++++++++++++++ >>> target-arm/op_helper.c | 23 +++++++++++++++++++++++ >>> target-cris/op_helper.c | 22 ++++++++++++++++++++++ >>> target-i386/mem_helper.c | 22 ++++++++++++++++++++++ >>> target-lm32/op_helper.c | 23 ++++++++++++++++++++++- >>> target-m68k/op_helper.c | 22 ++++++++++++++++++++++ >>> target-microblaze/op_helper.c | 22 ++++++++++++++++++++++ >>> target-mips/op_helper.c | 22 ++++++++++++++++++++++ >>> target-ppc/mem_helper.c | 22 ++++++++++++++++++++++ >>> target-s390x/op_helper.c | 22 ++++++++++++++++++++++ >>> target-sh4/op_helper.c | 22 ++++++++++++++++++++++ >>> target-sparc/ldst_helper.c | 23 +++++++++++++++++++++++ >>> target-xtensa/op_helper.c | 22 ++++++++++++++++++++++ >>> 13 files changed, 288 insertions(+), 1 deletions(-) >> This makes the already slightly repetitive inclusion of the >> softmmu_templates even more repetitive. Perhaps we could abstract >> it all out into a single header which the targets can include? > I'd just replace standard versions with extended versions > unconditionally, no CONFIG_*. Both AREG0 and !AREG0 cases must be > handled. > I've only modified the code related to the MMU call from generated code because this patch is focused optimize that kind of runtime generated code. As I mentioned another thread, basically I agree to apply AREG0 case if ldst optimization is accepted as default (no macros). But when replacing standard versions with extended versions, there is an issue of non-x86 (and x64) hosts which has no ldst optimization impl. It needs to conserve the usage of conditional macro for standard versions, however, it looks better have a type of version per a host, which is different from current my patch. How do you think about it?
diff --git a/target-alpha/mem_helper.c b/target-alpha/mem_helper.c index 87cada4..ef880a7 100644 --- a/target-alpha/mem_helper.c +++ b/target-alpha/mem_helper.c @@ -132,6 +132,28 @@ void cpu_unassigned_access(CPUAlphaState *env, target_phys_addr_t addr, #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c index 490111c..8ff1209 100644 --- a/target-arm/op_helper.c +++ b/target-arm/op_helper.c @@ -69,6 +69,29 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, #define SHIFT 3 #include "softmmu_template.h" + +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c index ac7c98c..cc34f3c 100644 --- a/target-cris/op_helper.c +++ b/target-cris/op_helper.c @@ -52,6 +52,28 @@ #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* Try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-i386/mem_helper.c b/target-i386/mem_helper.c index 91353c0..59fb03c 100644 --- a/target-i386/mem_helper.c +++ b/target-i386/mem_helper.c @@ -126,6 +126,28 @@ void helper_boundl(target_ulong a0, int v) #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + #endif #if !defined(CONFIG_USER_ONLY) diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c index 51edc1a..bcdddf7 100644 --- a/target-lm32/op_helper.c +++ b/target-lm32/op_helper.c @@ -18,6 +18,28 @@ #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + void helper_raise_exception(uint32_t index) { env->exception_index = index; @@ -101,4 +123,3 @@ void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx, env = saved_env; } #endif - diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c index 1971a57..454fd71 100644 --- a/target-m68k/op_helper.c +++ b/target-m68k/op_helper.c @@ -51,6 +51,28 @@ extern int semihosting_enabled; #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* Try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c index 3b1f072..12be3bd 100644 --- a/target-microblaze/op_helper.c +++ b/target-microblaze/op_helper.c @@ -39,6 +39,28 @@ #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* Try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c index 66037ac..c2fd2db 100644 --- a/target-mips/op_helper.c +++ b/target-mips/op_helper.c @@ -2303,6 +2303,28 @@ static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write, #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + static void do_unaligned_access(target_ulong addr, int is_write, int is_user, uintptr_t retaddr) { diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c index 5b5f1bd..01a9ac6 100644 --- a/target-ppc/mem_helper.c +++ b/target-ppc/mem_helper.c @@ -268,6 +268,28 @@ STVE(stvewx, cpu_stl_data, bswap32, u32) #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c index 7b72473..05109c5 100644 --- a/target-s390x/op_helper.c +++ b/target-s390x/op_helper.c @@ -52,6 +52,28 @@ #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + /* try to fill the TLB and return an exception if error. If retaddr is NULL, it means that the function was called in C code (i.e. not from generated code or from helper.c) */ diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c index 4054791..f7c1f67 100644 --- a/target-sh4/op_helper.c +++ b/target-sh4/op_helper.c @@ -53,6 +53,28 @@ static void cpu_restore_state_from_retaddr(uintptr_t retaddr) #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + void tlb_fill(CPUSH4State *env1, target_ulong addr, int is_write, int mmu_idx, uintptr_t retaddr) { diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c index 9bec7a9..1ceb588 100644 --- a/target-sparc/ldst_helper.c +++ b/target-sparc/ldst_helper.c @@ -80,6 +80,29 @@ #define SHIFT 3 #include "softmmu_template.h" + +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + #endif #if defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) diff --git a/target-xtensa/op_helper.c b/target-xtensa/op_helper.c index 2659c0e..536e1fb 100644 --- a/target-xtensa/op_helper.c +++ b/target-xtensa/op_helper.c @@ -47,6 +47,28 @@ static void do_unaligned_access(CPUXtensaState *env, #define SHIFT 3 #include "softmmu_template.h" +#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) +/* Exteneded MMU helper funtions for qemu_ld/st optimization + Note that normal helper functions should be defined above + to avoid duplication of common functions, slow_ld/st and io_read/write. + */ +#define USE_EXTENDED_HELPER + +#define SHIFT 0 +#include "softmmu_template.h" + +#define SHIFT 1 +#include "softmmu_template.h" + +#define SHIFT 2 +#include "softmmu_template.h" + +#define SHIFT 3 +#include "softmmu_template.h" + +#undef USE_EXTENDED_HELPER +#endif /* CONFIG_QEMU_LDST_OPTIMIZATION */ + static void do_restore_state(CPUXtensaState *env, uintptr_t pc) { TranslationBlock *tb;
Add extended MMU helpers to softmmu targets, where the targets are alpha, arm, cris, i386, lm32, m68k, microblaze, mips, ppc, s390x, sh4, sparc and xtensa. Signed-off-by: Yeongkyoon Lee <yeongkyoon.lee@samsung.com> --- target-alpha/mem_helper.c | 22 ++++++++++++++++++++++ target-arm/op_helper.c | 23 +++++++++++++++++++++++ target-cris/op_helper.c | 22 ++++++++++++++++++++++ target-i386/mem_helper.c | 22 ++++++++++++++++++++++ target-lm32/op_helper.c | 23 ++++++++++++++++++++++- target-m68k/op_helper.c | 22 ++++++++++++++++++++++ target-microblaze/op_helper.c | 22 ++++++++++++++++++++++ target-mips/op_helper.c | 22 ++++++++++++++++++++++ target-ppc/mem_helper.c | 22 ++++++++++++++++++++++ target-s390x/op_helper.c | 22 ++++++++++++++++++++++ target-sh4/op_helper.c | 22 ++++++++++++++++++++++ target-sparc/ldst_helper.c | 23 +++++++++++++++++++++++ target-xtensa/op_helper.c | 22 ++++++++++++++++++++++ 13 files changed, 288 insertions(+), 1 deletions(-)