From: blueswir1 Date: Fri, 21 Mar 2008 18:08:59 +0000 (+0000) Subject: Convert align checks to TCG X-Git-Tag: TizenStudio_2.0_p2.3~12125 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2b29924f8c65fda8047e5c19f616ac5617b75a14;p=sdk%2Femulator%2Fqemu.git Convert align checks to TCG git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4097 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/target-sparc/helper.h b/target-sparc/helper.h index 4bf363b..39dac74 100644 --- a/target-sparc/helper.h +++ b/target-sparc/helper.h @@ -37,6 +37,7 @@ void TCG_HELPER_PROTO helper_tick_set_limit(void *opaque, uint64_t limit); void TCG_HELPER_PROTO helper_trap(target_ulong nb_trap); void TCG_HELPER_PROTO helper_trapcc(target_ulong nb_trap, target_ulong do_trap); +void TCG_HELPER_PROTO helper_check_align(target_ulong addr, uint32_t align); void TCG_HELPER_PROTO helper_debug(void); void TCG_HELPER_PROTO helper_save(void); void TCG_HELPER_PROTO helper_restore(void); diff --git a/target-sparc/op.c b/target-sparc/op.c index cc4aa14..e06cd81 100644 --- a/target-sparc/op.c +++ b/target-sparc/op.c @@ -36,15 +36,3 @@ #include "op_mem.h" #endif #endif - -#define CHECK_ALIGN_OP(align) \ - void OPPROTO op_check_align_T0_ ## align (void) \ - { \ - if (T0 & align) \ - raise_exception(TT_UNALIGNED); \ - FORCE_RET(); \ - } - -CHECK_ALIGN_OP(1) -CHECK_ALIGN_OP(3) -CHECK_ALIGN_OP(7) diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 6e64eb8..bc9bb17 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -50,6 +50,12 @@ void helper_trapcc(target_ulong nb_trap, target_ulong do_trap) } } +void helper_check_align(target_ulong addr, uint32_t align) +{ + if (addr & align) + raise_exception(TT_UNALIGNED); +} + #define F_HELPER(name, p) void helper_f##name##p(void) #if defined(CONFIG_USER_ONLY) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 69ce4cb..eb1906d 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -1664,6 +1664,26 @@ static inline void gen_clear_float_exceptions(void) tcg_gen_helper_0_0(helper_clear_float_exceptions); } +static inline void gen_check_align(TCGv r_addr, int align) +{ + tcg_gen_helper_0_2(helper_check_align, r_addr, tcg_const_i32(align)); +} + +static inline void gen_op_check_align_T0_1(void) +{ + gen_check_align(cpu_T[0], 1); +} + +static inline void gen_op_check_align_T0_3(void) +{ + gen_check_align(cpu_T[0], 3); +} + +static inline void gen_op_check_align_T0_7(void) +{ + gen_check_align(cpu_T[0], 7); +} + /* asi moves */ #ifdef TARGET_SPARC64 static inline TCGv gen_get_asi(int insn, TCGv r_addr)