@ -28,16 +28,8 @@
# include "tcg/tcg-op.h"
# include "tcg/tcg-mo.h"
# include "exec/plugin-gen.h"
# include "tcg-internal.h"
/* Reduce the number of ifdefs below. This assumes that all uses of
TCGV_HIGH and TCGV_LOW are properly protected by a conditional that
the compiler can eliminate . */
# if TCG_TARGET_REG_BITS == 64
extern TCGv_i32 TCGV_LOW_link_error ( TCGv_i64 ) ;
extern TCGv_i32 TCGV_HIGH_link_error ( TCGv_i64 ) ;
# define TCGV_LOW TCGV_LOW_link_error
# define TCGV_HIGH TCGV_HIGH_link_error
# endif
void tcg_gen_op1 ( TCGOpcode opc , TCGArg a1 )
{
@ -1171,6 +1163,21 @@ void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2, tcg_target_long offset)
# endif
}
void tcg_gen_st8_i64 ( TCGv_i64 arg1 , TCGv_ptr arg2 , tcg_target_long offset )
{
tcg_gen_st8_i32 ( TCGV_LOW ( arg1 ) , arg2 , offset ) ;
}
void tcg_gen_st16_i64 ( TCGv_i64 arg1 , TCGv_ptr arg2 , tcg_target_long offset )
{
tcg_gen_st16_i32 ( TCGV_LOW ( arg1 ) , arg2 , offset ) ;
}
void tcg_gen_st32_i64 ( TCGv_i64 arg1 , TCGv_ptr arg2 , tcg_target_long offset )
{
tcg_gen_st_i32 ( TCGV_LOW ( arg1 ) , arg2 , offset ) ;
}
void tcg_gen_st_i64 ( TCGv_i64 arg1 , TCGv_ptr arg2 , tcg_target_long offset )
{
# if HOST_BIG_ENDIAN
@ -1182,6 +1189,18 @@ void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2, tcg_target_long offset)
# endif
}
void tcg_gen_add_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_add2_i32 ( TCGV_LOW ( ret ) , TCGV_HIGH ( ret ) , TCGV_LOW ( arg1 ) ,
TCGV_HIGH ( arg1 ) , TCGV_LOW ( arg2 ) , TCGV_HIGH ( arg2 ) ) ;
}
void tcg_gen_sub_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_sub2_i32 ( TCGV_LOW ( ret ) , TCGV_HIGH ( ret ) , TCGV_LOW ( arg1 ) ,
TCGV_HIGH ( arg1 ) , TCGV_LOW ( arg2 ) , TCGV_HIGH ( arg2 ) ) ;
}
void tcg_gen_and_i64 ( TCGv_i64 ret , TCGv_i64 arg1 , TCGv_i64 arg2 )
{
tcg_gen_and_i32 ( TCGV_LOW ( ret ) , TCGV_LOW ( arg1 ) , TCGV_LOW ( arg2 ) ) ;