Hi, I'd like to use TCG for the remaining Sparc ops, the attached patch converts addcc for Sparc32. But I have a problem with register handling. I'd like to use some registers across basic blocks, but currently they get eliminated like tmp0 and tmp3 below. Is it possible to add some kind of register locking to prevent this? Or would you have other suggestions?
IN: 0xffd0ea84: addcc %i1, %g3, %i1 OP: ld_i64 tmp1,env,$0x20 ld_i32 T0,tmp1,$0x44 ld_i32 T1,env,$0xc mov_i32 tmp0,T0 add_i32 T0,T0,T1 movi_i32 tmp2,$0x0 mov_i32 tmp3,tmp2 brcond_i32 T0,tmp2,$0x1,$0x0 movi_i32 tmp3,$0x400000 set_label $0x0 brcond_i32 T0,tmp2,$0x3,$0x1 or_i32 tmp3,tmp3,$0x800000 set_label $0x1 st_i32 tmp3,env,$0xb4 brcond_i32 T0,tmp0,$0x7,$0x2 ld_i32 tmp5,env,$0xb4 or_i32 tmp5,tmp5,$0x100000 st_i32 tmp5,env,$0xb4 set_label $0x2 xor_i32 tmp7,tmp0,T1 xor_i32 tmp7,tmp7,$0xffffffffffffffff xor_i32 tmp8,tmp0,T0 and_i32 tmp7,tmp7,tmp8 and_i32 tmp7,tmp7,$0xffffffff80000000 movi_i32 tmp9,$0x0 brcond_i32 tmp7,tmp9,$0x0,$0x3 ld_i32 tmp12,env,$0xb4 or_i32 tmp12,tmp12,$0x200000 st_i32 tmp12,env,$0xb4 set_label $0x3 ld_i64 tmp1,env,$0x20 st_i32 T0,tmp1,$0x44 movi_i32 tmp0,$0xffffffffffd0ea88 st_i32 tmp0,env,$0xa8 movi_i32 tmp0,$0xffffffffffd0ea8c st_i32 tmp0,env,$0xac call $0x48b7e0,$0x0,$0x4 exit_tb $0x0 OP after la: ld_i64 tmp1,env,$0x20 ld_i32 T0,tmp1,$0x44 ld_i32 T1,env,$0xc nopn $0x2,$0x2 add_i32 T0,T0,T1 movi_i32 tmp2,$0x0 nopn $0x2,$0x2 brcond_i32 T0,tmp2,$0x1,$0x0 nopn $0x2,$0x2 set_label $0x0 brcond_i32 T0,tmp2,$0x3,$0x1 nopn $0x3,$0x7,$0x3 set_label $0x1 st_i32 tmp3,env,$0xb4 brcond_i32 T0,tmp0,$0x7,$0x2 ld_i32 tmp5,env,$0xb4 or_i32 tmp5,tmp5,$0x100000 st_i32 tmp5,env,$0xb4 set_label $0x2 xor_i32 tmp7,tmp0,T1 xor_i32 tmp7,tmp7,$0xffffffffffffffff xor_i32 tmp8,tmp0,T0 and_i32 tmp7,tmp7,tmp8 and_i32 tmp7,tmp7,$0xffffffff80000000 movi_i32 tmp9,$0x0 brcond_i32 tmp7,tmp9,$0x0,$0x3 ld_i32 tmp12,env,$0xb4 or_i32 tmp12,tmp12,$0x200000 st_i32 tmp12,env,$0xb4 set_label $0x3 ld_i64 tmp1,env,$0x20 st_i32 T0,tmp1,$0x44 movi_i32 tmp0,$0xffffffffffd0ea88 st_i32 tmp0,env,$0xa8 movi_i32 tmp0,$0xffffffffffd0ea8c st_i32 tmp0,env,$0xac call $0x48b7e0,$0x0,$0x4 exit_tb $0x0 end
tcg_addcc.diff
Description: plain/text