@ -10,22 +10,19 @@
# define dh_is_signed_f80 dh_is_signed_ptr
DEF_HELPER_2 ( raise_exception , noreturn , env , int )
DEF_HELPER_1 ( syscall , noreturn , env )
DEF_HELPER_1 ( break_restore_state , void , env )
DEF_HELPER_1 ( expand_stacks , void , env )
DEF_HELPER_4 ( call , void , env , i64 , int , tl )
DEF_HELPER_2 ( prep_return , i64 , env , int )
DEF_HELPER_1 ( return , void , env )
DEF_HELPER_1 ( signal_return , void , env )
DEF_HELPER_4 ( call , void , env , i64 , int , tl )
DEF_HELPER_1 ( expand_stacks , void , env )
DEF_HELPER_1 ( syscall , void , env )
DEF_HELPER_2 ( sxt , i64 , i64 , i32 )
DEF_HELPER_2 ( state_reg_read_i64 , i64 , env , int )
DEF_HELPER_2 ( state_reg_read_i32 , i32 , env , int )
DEF_HELPER_3 ( state_reg_write_i64 , void , env , int , i64 )
DEF_HELPER_3 ( state_reg_write_i32 , void , env , int , i32 )
DEF_HELPER_2 ( getsp , i64 , env , i32 ) /* FIXME: return tl? */
DEF_HELPER_1 ( break_restore_state , void , env )
DEF_HELPER_4 ( setwd , void , env , int , int , int )
DEF_HELPER_2 ( probe_read_access , int , env , tl )
DEF_HELPER_2 ( probe_write_access , int , env , tl )
DEF_HELPER_FLAGS_2 ( probe_read_access , TCG_CALL_NO_RWG , int , env , tl )
DEF_HELPER_FLAGS_2 ( probe_write_access , TCG_CALL_NO_RWG , int , env , tl )
DEF_HELPER_1 ( aau_load_program , void , env )
DEF_HELPER_4 ( mova_ptr , tl , env , int , int , int )
@ -33,214 +30,259 @@ DEF_HELPER_3(aau_am, void, env, int, int)
DEF_HELPER_4 ( dam_lock_addr , void , env , i64 , int , int )
DEF_HELPER_4 ( dam_unlock_addr , int , env , i64 , int , int )
DEF_HELPER_2 ( getsp , i64 , env , i32 )
DEF_HELPER_FLAGS_2 ( rrd , TCG_CALL_NO_WG_SE , i64 , env , int )
DEF_HELPER_3 ( rwd , void , env , int , i64 )
DEF_HELPER_3 ( rws , void , env , int , i32 )
DEF_HELPER_FLAGS_2 ( sxt , TCG_CALL_NO_RWG_SE , i64 , i64 , i32 )
/* Packed Min/Max */
DEF_HELPER_2 ( pminub , i64 , i64 , i64 )
DEF_HELPER_2 ( pminsb , i64 , i64 , i64 )
DEF_HELPER_2 ( pminuh , i64 , i64 , i64 )
DEF_HELPER_2 ( pminsh , i64 , i64 , i64 )
DEF_HELPER_2 ( pminuw , i64 , i64 , i64 )
DEF_HELPER_2 ( pminsw , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxub , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxsb , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxuh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxsh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxuw , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaxsw , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminub , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminsb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminuh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminuw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pminsw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxub , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxsb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxuh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxuw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaxsw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Cmp */
DEF_HELPER_2 ( pcmpeqb , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpeqh , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpeqw , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpeqd , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpgtb , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpgth , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpgtw , i64 , i64 , i64 )
DEF_HELPER_2 ( pcmpgtd , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpeqb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpeqh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpeqw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpeqd , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpgtb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpgth , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpgtw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pcmpgtd , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Pached Horizontal Add */
DEF_HELPER_2 ( phaddh , i64 , i64 , i64 )
DEF_HELPER_2 ( phaddw , i64 , i64 , i64 )
DEF_HELPER_2 ( phaddsh , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phaddh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phaddw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phaddsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Horizontal Sub */
DEF_HELPER_2 ( phsubh , i64 , i64 , i64 )
DEF_HELPER_2 ( phsubw , i64 , i64 , i64 )
DEF_HELPER_2 ( phsubsh , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phsubh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phsubw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phsubsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Add using saturation */
DEF_HELPER_2 ( paddsb , i64 , i64 , i64 )
DEF_HELPER_2 ( paddsh , i64 , i64 , i64 )
DEF_HELPER_2 ( paddusb , i64 , i64 , i64 )
DEF_HELPER_2 ( paddush , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( paddsb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( paddsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( paddusb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( paddush , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Sub using saturation */
DEF_HELPER_2 ( psubsb , i64 , i64 , i64 )
DEF_HELPER_2 ( psubsh , i64 , i64 , i64 )
DEF_HELPER_2 ( psubusb , i64 , i64 , i64 )
DEF_HELPER_2 ( psubush , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psubsb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psubsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psubusb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psubush , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed shifts */
DEF_HELPER_2 ( psllh , i64 , i64 , i64 )
DEF_HELPER_2 ( psllw , i64 , i64 , i64 )
DEF_HELPER_2 ( psrlh , i64 , i64 , i64 )
DEF_HELPER_2 ( psrlw , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psllh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psllw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psrlh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psrlw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed shifts with sign */
DEF_HELPER_2 ( psrah , i64 , i64 , i64 )
DEF_HELPER_2 ( psraw , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psrah , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psraw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Mul */
DEF_HELPER_2 ( pmaddh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmaddubsh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmulhh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmullh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmulhuh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmulubhh , i64 , i64 , i64 )
DEF_HELPER_2 ( pmulhrsh , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaddh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmaddubsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmulhh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmullh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmulhuh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmulubhh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmulhrsh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Sign Mul */
DEF_HELPER_2 ( psignb , i64 , i64 , i64 )
DEF_HELPER_2 ( psignh , i64 , i64 , i64 )
DEF_HELPER_2 ( psignw , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psignb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psignh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psignw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed Move Mask */
DEF_HELPER_2 ( pmovmskb , i64 , i64 , i64 )
DEF_HELPER_2 ( pmovmskps , i64 , i64 , i64 )
DEF_HELPER_2 ( pmovmskpd , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmovmskb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmovmskps , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pmovmskpd , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed packs */
DEF_HELPER_2 ( packsshb , i64 , i64 , i64 )
DEF_HELPER_2 ( packushb , i64 , i64 , i64 )
DEF_HELPER_2 ( packsswh , i64 , i64 , i64 )
DEF_HELPER_2 ( packuswh , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( packsshb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( packushb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( packsswh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( packuswh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed unpacks */
DEF_HELPER_2 ( punpcklbh , i64 , i64 , i64 )
DEF_HELPER_2 ( punpcklhw , i64 , i64 , i64 )
DEF_HELPER_2 ( punpcklwd , i64 , i64 , i64 )
DEF_HELPER_2 ( punpckhbh , i64 , i64 , i64 )
DEF_HELPER_2 ( punpckhhw , i64 , i64 , i64 )
DEF_HELPER_2 ( punpckhwd , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpcklbh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpcklhw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpcklwd , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpckhbh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpckhhw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( punpckhwd , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
/* Packed shuffle */
DEF_HELPER_3 ( pshufb , i64 , i64 , i64 , i64 )
DEF_HELPER_3 ( pmerge , i64 , i64 , i64 , i64 )
DEF_HELPER_2 ( pshufh , i64 , i64 , i32 )
DEF_HELPER_3 ( pshufw , i64 , i64 , i64 , i32 )
DEF_HELPER_FLAGS_ 3 ( pshufb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pmerge , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pshufh , TCG_CALL_NO_RWG_SE , i64 , i64 , i32 )
DEF_HELPER_FLAGS_ 3 ( pshufw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 , i32 )
/* Packed uncategorized */
DEF_HELPER_2 ( psadbw , i64 , i64 , i64 )
DEF_HELPER_2 ( pavgusb , i64 , i64 , i64 )
DEF_HELPER_2 ( pavgush , i64 , i64 , i64 )
DEF_HELPER_2 ( phminposuh , i64 , i64 , i64 )
DEF_HELPER_2 ( mpsadbh , i64 , i64 , i64 )
DEF_HELPER_4 ( plog , i64 , i32 , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( psadbw , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pavgusb , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pavgush , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( phminposuh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( mpsadbh , TCG_CALL_NO_RWG_SE , i64 , i64 , i64 )
DEF_HELPER_FLAGS_ 4 ( plog , TCG_CALL_NO_RWG_SE , i64 , i32 , i64 , i64 , i64 )
/* Float 32/64 Ops */
# define DEF_HELPER_3_32_64(name) \
DEF_HELPER_3 ( name # # s , i32 , env , i32 , i32 ) \
DEF_HELPER_3 ( name # # d , i64 , env , i64 , i64 )
DEF_HELPER_3_32_64 ( fadd )
DEF_HELPER_3_32_64 ( fsub )
DEF_HELPER_3_32_64 ( fmin )
DEF_HELPER_3_32_64 ( fmax )
DEF_HELPER_3_32_64 ( fmul )
DEF_HELPER_3_32_64 ( fdiv )
DEF_HELPER_3 ( fscaled , i64 , env , i64 , i32 )
DEF_HELPER_3 ( fscales , i32 , env , i32 , i32 )
DEF_HELPER_2 ( frcps , i32 , env , i32 )
DEF_HELPER_2 ( fsqrts , i32 , env , i32 )
DEF_HELPER_2 ( frsqrts , i32 , env , i32 )
DEF_HELPER_3 ( fsqrttd , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fadds , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fsubs , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fmuls , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fdivs , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fmins , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fmaxs , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fscales , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( faddd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fsubd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fmuld , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fdivd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fmind , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fmaxd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fscaled , TCG_CALL_NO_RWG , i64 , env , i64 , i32 )
DEF_HELPER_FLAGS_2 ( frcps , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_2 ( fsqrts , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_2 ( frsqrts , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_3 ( fsqrttd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
/* Packed Float ops */
DEF_HELPER_3 ( pfadds , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfsubs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfmuls , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfmaxs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfmins , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfhadds , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfhsubs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfaddsubs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfstoifs , i64 , env , i64 , i64 )
DEF_HELPER_2 ( pistofs , i64 , env , i64 )
DEF_HELPER_2 ( pfstois , i64 , env , i64 )
DEF_HELPER_2 ( pfstoistr , i64 , env , i64 )
DEF_HELPER_3 ( pfcmpeqs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmplts , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmples , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmpuods , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmpneqs , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmpnlts , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmpnles , i64 , env , i64 , i64 )
DEF_HELPER_3 ( pfcmpods , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfadds , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfsubs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfmuls , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfmaxs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfmins , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfhadds , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfhsubs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfaddsubs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfstoifs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 2 ( pistofs , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_ 2 ( pfstois , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_ 2 ( pfstoistr , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpeqs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmplts , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmples , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpuods , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpneqs , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpnlts , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpnles , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_ 3 ( pfcmpods , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
/* Float x80 ops */
DEF_HELPER_3 ( fxaddxx , void , env , f80 , f80 )
DEF_HELPER_3 ( fxsubxx , void , env , f80 , f80 )
DEF_HELPER_3 ( fxrsubxx , void , env , f80 , f80 )
DEF_HELPER_3 ( fxmulxx , void , env , f80 , f80 )
DEF_HELPER_3 ( fxdivxx , void , env , f80 , f80 )
DEF_HELPER_3 ( fxscalesx , void , env , f80 , i32 )
DEF_HELPER_3 ( fxsqrttxx , void , env , f80 , f80 )
/* Float 32/64/80 Comparisons */
# define DEF_HELPER_3_32_64_80(name) \
DEF_HELPER_3_32_64 ( f # # name ) \
DEF_HELPER_3 ( fx # # name # # x , i64 , env , f80 , f80 )
DEF_HELPER_3_32_64_80 ( cmpeq )
DEF_HELPER_3_32_64_80 ( cmpneq )
DEF_HELPER_3_32_64_80 ( cmple )
DEF_HELPER_3_32_64_80 ( cmpnle )
DEF_HELPER_3_32_64_80 ( cmplt )
DEF_HELPER_3_32_64_80 ( cmpnlt )
DEF_HELPER_3_32_64_80 ( cmpuod )
DEF_HELPER_3_32_64_80 ( cmpod )
# define DEF_FX_OP2(op) \
DEF_HELPER_FLAGS_3 ( glue ( op , ss ) , TCG_CALL_NO_RWG , i32 , env , f80 , i32 ) \
DEF_HELPER_FLAGS_3 ( glue ( op , dd ) , TCG_CALL_NO_RWG , i64 , env , f80 , i64 ) \
DEF_HELPER_FLAGS_4 ( glue ( op , sx ) , TCG_CALL_NO_RWG , void , f80 , env , f80 , i32 ) \
DEF_HELPER_FLAGS_4 ( glue ( op , dx ) , TCG_CALL_NO_RWG , void , f80 , env , f80 , i64 ) \
DEF_HELPER_FLAGS_4 ( glue ( op , xx ) , TCG_CALL_NO_RWG , void , f80 , env , f80 , f80 ) \
DEF_HELPER_FLAGS_3 ( glue ( op , xd ) , TCG_CALL_NO_RWG , i64 , env , f80 , f80 ) \
DEF_HELPER_FLAGS_3 ( glue ( op , xs ) , TCG_CALL_NO_RWG , i32 , env , f80 , f80 )
DEF_FX_OP2 ( fxadd )
DEF_FX_OP2 ( fxsub )
DEF_FX_OP2 ( fxmul )
DEF_FX_OP2 ( fxdiv )
# undef DEF_FX_OP2
DEF_HELPER_FLAGS_3 ( fxdivtss , TCG_CALL_NO_RWG , f32 , env , f32 , f80 )
DEF_HELPER_FLAGS_3 ( fxdivtdd , TCG_CALL_NO_RWG , f64 , env , f64 , f80 )
DEF_HELPER_FLAGS_4 ( fxdivtsx , TCG_CALL_NO_RWG , void , f80 , env , f32 , f80 )
DEF_HELPER_FLAGS_4 ( fxdivtdx , TCG_CALL_NO_RWG , void , f80 , env , f64 , f80 )
DEF_HELPER_FLAGS_3 ( fxrsubss , TCG_CALL_NO_RWG , i32 , env , f80 , i32 )
DEF_HELPER_FLAGS_3 ( fxrsubdd , TCG_CALL_NO_RWG , i64 , env , f80 , i64 )
DEF_HELPER_FLAGS_4 ( fxrsubsx , TCG_CALL_NO_RWG , void , f80 , env , f80 , i32 )
DEF_HELPER_FLAGS_4 ( fxrsubdx , TCG_CALL_NO_RWG , void , f80 , env , f80 , i64 )
DEF_HELPER_FLAGS_4 ( fxsqrttsx , TCG_CALL_NO_RWG , void , f80 , env , i32 , f80 )
DEF_HELPER_FLAGS_4 ( fxsqrttdx , TCG_CALL_NO_RWG , void , f80 , env , i64 , f80 )
DEF_HELPER_FLAGS_4 ( fxsqrttxx , TCG_CALL_NO_RWG , void , f80 , env , f80 , f80 )
DEF_HELPER_FLAGS_4 ( fxscalesx , TCG_CALL_NO_RWG , void , f80 , env , f80 , i32 )
DEF_HELPER_FLAGS_3 ( fxcmpodsf , TCG_CALL_NO_RWG , i32 , env , f80 , f32 )
DEF_HELPER_FLAGS_3 ( fxcmpudsf , TCG_CALL_NO_RWG , i32 , env , f80 , f32 )
DEF_HELPER_FLAGS_3 ( fxcmpoddf , TCG_CALL_NO_RWG , i32 , env , f80 , f64 )
DEF_HELPER_FLAGS_3 ( fxcmpuddf , TCG_CALL_NO_RWG , i32 , env , f80 , f64 )
DEF_HELPER_FLAGS_3 ( fxcmpodxf , TCG_CALL_NO_RWG , i32 , env , f80 , f80 )
DEF_HELPER_FLAGS_3 ( fxcmpudxf , TCG_CALL_NO_RWG , i32 , env , f80 , f80 )
/* Float Comparisons */
# define DEF_HELPER_FP_CMP(P, S, R, A, B) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpeq ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpneq ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmple ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpnle ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmplt ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpnlt ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpuod ) , S ) , TCG_CALL_NO_RWG , R , env , A , B ) \
DEF_HELPER_FLAGS_3 ( glue ( glue ( P , cmpod ) , S ) , TCG_CALL_NO_RWG , R , env , A , B )
DEF_HELPER_FP_CMP ( f , s , i32 , i32 , i32 )
DEF_HELPER_FP_CMP ( f , d , i64 , i64 , i64 )
DEF_HELPER_FP_CMP ( fx , s , i64 , f80 , i32 )
DEF_HELPER_FP_CMP ( fx , d , i64 , f80 , i64 )
DEF_HELPER_FP_CMP ( fx , x , i64 , f80 , f80 )
/* Float Flag Comparisons */
DEF_HELPER_3 ( fcmpodsf , i32 , env , i32 , i32 )
DEF_HELPER_3 ( fcmpudsf , i32 , env , i32 , i32 )
DEF_HELPER_3 ( fcmpoddf , i32 , env , i64 , i64 )
DEF_HELPER_3 ( fcmpuddf , i32 , env , i64 , i64 )
DEF_HELPER_3 ( fxcmpodxf , i32 , env , f80 , f80 )
DEF_HELPER_3 ( fxcmpudxf , i32 , env , f80 , f80 )
DEF_HELPER_FLAGS_3 ( fcmpodsf , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fcmpudsf , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fcmpoddf , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_3 ( fcmpuddf , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )
/* Float Conversions */
DEF_HELPER_2 ( fstois , i32 , env , i32 )
DEF_HELPER_2 ( istofs , i32 , env , i32 )
DEF_HELPER_2 ( fstoistr , i32 , env , i32 )
DEF_HELPER_3 ( fstofx , void , f80 , env , i32 )
DEF_HELPER_3 ( istofx , void , f80 , env , i32 )
DEF_HELPER_2 ( fdtoid , i64 , env , i64 )
DEF_HELPER_2 ( idtofd , i64 , env , i64 )
DEF_HELPER_2 ( fdtoidtr , i64 , env , i64 )
DEF_HELPER_3 ( fdtofx , void , f80 , env , i64 )
DEF_HELPER_3 ( idtofx , void , f80 , env , i64 )
DEF_HELPER_2 ( fstofd , i64 , env , i32 )
DEF_HELPER_2 ( fstoid , i64 , env , i32 )
DEF_HELPER_2 ( istofd , i64 , env , i32 )
DEF_HELPER_2 ( fstoidtr , i64 , env , i32 )
DEF_HELPER_2 ( fdtofs , i32 , env , i64 )
DEF_HELPER_2 ( fdtois , i32 , env , i64 )
DEF_HELPER_2 ( idtofs , i32 , env , i64 )
DEF_HELPER_2 ( fdtoistr , i32 , env , i64 )
DEF_HELPER_2 ( fxtofs , i32 , env , f80 )
DEF_HELPER_2 ( fxtois , i32 , env , f80 )
DEF_HELPER_2 ( fxtoistr , i32 , env , f80 )
DEF_HELPER_2 ( fxtofd , i64 , env , f80 )
DEF_HELPER_2 ( fxtoid , i64 , env , f80 )
DEF_HELPER_2 ( fxtoidtr , i64 , env , f80 )
DEF_HELPER_FLAGS_2 ( fstofd , TCG_CALL_NO_RWG , i64 , env , i32 )
DEF_HELPER_FLAGS_3 ( fstofx , TCG_CALL_NO_RWG , void , f80 , env , i32 )
/* Float Rounding */
DEF_HELPER_3 ( fstoifs , i32 , env , i32 , i32 )
DEF_HELPER_3 ( fdtoifd , i64 , env , i64 , i64 )
DEF_HELPER_FLAGS_2 ( fdtofs , TCG_CALL_NO_RWG , i32 , env , i64 )
DEF_HELPER_FLAGS_3 ( fdtofx , TCG_CALL_NO_RWG , void , f80 , env , i64 )
DEF_HELPER_FLAGS_2 ( fxtofs , TCG_CALL_NO_RWG , i32 , env , f80 )
DEF_HELPER_FLAGS_2 ( fxtofd , TCG_CALL_NO_RWG , i64 , env , f80 )
DEF_HELPER_FLAGS_2 ( istofs , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_2 ( istofd , TCG_CALL_NO_RWG , i64 , env , i32 )
DEF_HELPER_FLAGS_3 ( istofx , TCG_CALL_NO_RWG , void , f80 , env , i32 )
# undef DEF_HELPER_3_32_64_80
# undef DEF_HELPER_3_32_64
DEF_HELPER_FLAGS_2 ( idtofs , TCG_CALL_NO_RWG , i32 , env , i64 )
DEF_HELPER_FLAGS_2 ( idtofd , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_3 ( idtofx , TCG_CALL_NO_RWG , void , f80 , env , i64 )
DEF_HELPER_FLAGS_2 ( fstois , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_2 ( fstoid , TCG_CALL_NO_RWG , i64 , env , i32 )
DEF_HELPER_FLAGS_2 ( fstoistr , TCG_CALL_NO_RWG , i32 , env , i32 )
DEF_HELPER_FLAGS_2 ( fstoidtr , TCG_CALL_NO_RWG , i64 , env , i32 )
DEF_HELPER_FLAGS_2 ( fdtois , TCG_CALL_NO_RWG , i32 , env , i64 )
DEF_HELPER_FLAGS_2 ( fdtoid , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_2 ( fdtoistr , TCG_CALL_NO_RWG , i32 , env , i64 )
DEF_HELPER_FLAGS_2 ( fdtoidtr , TCG_CALL_NO_RWG , i64 , env , i64 )
DEF_HELPER_FLAGS_2 ( fxtois , TCG_CALL_NO_RWG , i32 , env , f80 )
DEF_HELPER_FLAGS_2 ( fxtoistr , TCG_CALL_NO_RWG , i32 , env , f80 )
DEF_HELPER_FLAGS_2 ( fxtoid , TCG_CALL_NO_RWG , i64 , env , f80 )
DEF_HELPER_FLAGS_2 ( fxtoidtr , TCG_CALL_NO_RWG , i64 , env , f80 )
/* Float Rounding */
DEF_HELPER_FLAGS_3 ( fstoifs , TCG_CALL_NO_RWG , i32 , env , i32 , i32 )
DEF_HELPER_FLAGS_3 ( fdtoifd , TCG_CALL_NO_RWG , i64 , env , i64 , i64 )