mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
Hexagon (target/hexagon) Remove gen_log_predicated_reg_write[_pair]
We assign the instruction destination register to hex_new_value[num] instead of a TCG temp that gets copied back to hex_new_value[num]. We introduce new functions get_result_gpr[_pair] to facilitate getting the proper destination register. Since we preload hex_new_value for predicated instructions, we don't need the check for slot_cancelled. So, we call gen_log_reg_write instead. We update the helper function generation and gen_tcg.h to maintain the disable-hexagon-idef-parser configuration. Here is a simple example of the differences in the TCG code generated: IN: 0x00400094: 0xf900c102 { if (P0) R2 = and(R0,R1) } BEFORE ---- 00400094 mov_i32 slot_cancelled,$0x0 mov_i32 new_r2,r2 mov_i32 loc2,$0x0 and_i32 tmp0,p0,$0x1 brcond_i32 tmp0,$0x0,eq,$L1 and_i32 tmp0,r0,r1 mov_i32 loc2,tmp0 br $L2 set_label $L1 or_i32 slot_cancelled,slot_cancelled,$0x8 set_label $L2 and_i32 tmp0,slot_cancelled,$0x8 movcond_i32 new_r2,tmp0,$0x0,loc2,new_r2,eq mov_i32 r2,new_r2 AFTER ---- 00400094 mov_i32 slot_cancelled,$0x0 mov_i32 new_r2,r2 and_i32 tmp0,p0,$0x1 brcond_i32 tmp0,$0x0,eq,$L1 and_i32 tmp0,r0,r1 mov_i32 new_r2,tmp0 br $L2 set_label $L1 or_i32 slot_cancelled,slot_cancelled,$0x8 set_label $L2 mov_i32 r2,new_r2 We'll remove the unnecessary manipulation of slot_cancelled in a subsequent patch. Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Reviewed-by: Anton Johansson <anjo@rev.ng> Message-Id: <20230307025828.1612809-13-tsimpson@quicinc.com>
This commit is contained in:
parent
1a442c0931
commit
e28b77a6b4
8 changed files with 110 additions and 152 deletions
|
@ -332,8 +332,6 @@
|
|||
tcg_gen_movi_tl(EA, 0); \
|
||||
PRED; \
|
||||
CHECK_NOSHUF_PRED(GET_EA, SIZE, LSB); \
|
||||
PRED_LOAD_CANCEL(LSB, EA); \
|
||||
tcg_gen_movi_tl(RdV, 0); \
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, label); \
|
||||
fLOAD(1, SIZE, SIGN, EA, RdV); \
|
||||
gen_set_label(label); \
|
||||
|
@ -391,8 +389,6 @@
|
|||
tcg_gen_movi_tl(EA, 0); \
|
||||
PRED; \
|
||||
CHECK_NOSHUF_PRED(GET_EA, 8, LSB); \
|
||||
PRED_LOAD_CANCEL(LSB, EA); \
|
||||
tcg_gen_movi_i64(RddV, 0); \
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, label); \
|
||||
fLOAD(1, 8, u, EA, RddV); \
|
||||
gen_set_label(label); \
|
||||
|
@ -504,7 +500,7 @@
|
|||
*/
|
||||
#define fGEN_TCG_SL2_return(SHORTCODE) \
|
||||
do { \
|
||||
TCGv_i64 RddV = tcg_temp_new_i64(); \
|
||||
TCGv_i64 RddV = get_result_gpr_pair(ctx, HEX_REG_FP); \
|
||||
gen_return(ctx, RddV, hex_gpr[HEX_REG_FP]); \
|
||||
gen_log_reg_write_pair(HEX_REG_FP, RddV); \
|
||||
} while (0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue