mirror of https://github.com/xemu-project/xemu.git
Convert align checks to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4097 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2be17ebded
commit
2b29924f8c
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue