@ -364,6 +364,19 @@ static inline void tcg_gen_helperN(void *func, int flags, int sizemask,
tcg_temp_free_ptr ( fn ) ;
}
/* FIXME: Should this be pure? */
static inline void tcg_gen_helper32 ( void * func , TCGv_i32 ret ,
TCGv_i32 a , TCGv_i32 b )
{
TCGv_ptr fn ;
TCGArg args [ 2 ] ;
fn = tcg_const_ptr ( ( tcg_target_long ) func ) ;
args [ 0 ] = GET_TCGV_I32 ( a ) ;
args [ 1 ] = GET_TCGV_I32 ( b ) ;
tcg_gen_callN ( & tcg_ctx , fn , 0 , 0 , GET_TCGV_I32 ( ret ) , 2 , args ) ;
tcg_temp_free_ptr ( fn ) ;
}
/* FIXME: Should this be pure? */
static inline void tcg_gen_helper64 ( void * func , TCGv_i64 ret ,
TCGv_i64 a , TCGv_i64 b )
@ -635,7 +648,7 @@ static inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
{
tcg_gen_op3_i32 ( INDEX_op_remu_i32 , ret , arg1 , arg2 ) ;
}
# else
# elif defined(TCG_TARGET_HAS_div2_i32)
static inline void tcg_gen_div_i32 ( TCGv_i32 ret , TCGv_i32 arg1 , TCGv_i32 arg2 )
{
TCGv_i32 t0 ;
@ -671,6 +684,26 @@ static inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
tcg_gen_op5_i32 ( INDEX_op_divu2_i32 , t0 , ret , arg1 , t0 , arg2 ) ;
tcg_temp_free_i32 ( t0 ) ;
}
# else
static inline void tcg_gen_div_i32 ( TCGv_i32 ret , TCGv_i32 arg1 , TCGv_i32 arg2 )
{
tcg_gen_helper32 ( tcg_helper_div_i32 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_rem_i32 ( TCGv_i32 ret , TCGv_i32 arg1 , TCGv_i32 arg2 )
{
tcg_gen_helper32 ( tcg_helper_rem_i32 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_divu_i32 ( TCGv_i32 ret , TCGv_i32 arg1 , TCGv_i32 arg2 )
{
tcg_gen_helper32 ( tcg_helper_divu_i32 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_remu_i32 ( TCGv_i32 ret , TCGv_i32 arg1 , TCGv_i32 arg2 )
{
tcg_gen_helper32 ( tcg_helper_remu_i32 , ret , arg1 , arg2 ) ;
}
# endif
# if TCG_TARGET_REG_BITS == 32
@ -1135,7 +1168,7 @@ static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
{
tcg_gen_op3_i64 ( INDEX_op_remu_i64 , ret , arg1 , arg2 ) ;
}
# else
# elif defined(TCG_TARGET_HAS_div2_i64)
static inline void tcg_gen_div_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
TCGv_i64 t0 ;
@ -1171,6 +1204,26 @@ static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
tcg_gen_op5_i64 ( INDEX_op_divu2_i64 , t0 , ret , arg1 , t0 , arg2 ) ;
tcg_temp_free_i64 ( t0 ) ;
}
# else
static inline void tcg_gen_div_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_helper64 ( tcg_helper_div_i64 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_rem_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_helper64 ( tcg_helper_rem_i64 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_divu_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_helper64 ( tcg_helper_divu_i64 , ret , arg1 , arg2 ) ;
}
static inline void tcg_gen_remu_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_helper64 ( tcg_helper_remu_i64 , ret , arg1 , arg2 ) ;
}
# endif
# endif