Loading tcg/tcg.c +18 −13 Original line number Diff line number Diff line Loading @@ -246,15 +246,11 @@ static void tcg_out_label(TCGContext *s, TCGLabel *l, tcg_insn_unit *ptr) TCGLabel *gen_new_label(void) { TCGContext *s = &tcg_ctx; int idx; TCGLabel *l; TCGLabel *l = tcg_malloc(sizeof(TCGLabel)); if (s->nb_labels >= TCG_MAX_LABELS) tcg_abort(); idx = s->nb_labels++; l = &s->labels[idx]; l->has_value = 0; l->u.first_reloc = NULL; *l = (TCGLabel){ .id = s->nb_labels++ }; return l; } Loading Loading @@ -1086,11 +1082,20 @@ void tcg_dump_ops(TCGContext *s) i = 0; break; } for (; i < nb_cargs; i++) { if (k != 0) { qemu_log(","); switch (c) { case INDEX_op_set_label: case INDEX_op_br: case INDEX_op_brcond_i32: case INDEX_op_brcond_i64: case INDEX_op_brcond2_i32: qemu_log("%s$L%d", k ? "," : "", arg_label(args[k])->id); i++, k++; break; default: break; } qemu_log("$0x%" TCG_PRIlx, args[k++]); for (; i < nb_cargs; i++, k++) { qemu_log("%s$0x%" TCG_PRIlx, k ? "," : "", args[k]); } } qemu_log("\n"); Loading tcg/tcg.h +5 −11 Original line number Diff line number Diff line Loading @@ -167,7 +167,8 @@ typedef struct TCGRelocation { } TCGRelocation; typedef struct TCGLabel { int has_value; unsigned has_value : 1; unsigned id : 31; union { uintptr_t value; tcg_insn_unit *value_ptr; Loading @@ -183,8 +184,6 @@ typedef struct TCGPool { #define TCG_POOL_CHUNK_SIZE 32768 #define TCG_MAX_LABELS 512 #define TCG_MAX_TEMPS 512 /* when the size of the arguments of a called function is smaller than Loading Loading @@ -556,8 +555,6 @@ struct TCGContext { target_ulong gen_opc_pc[OPC_BUF_SIZE]; uint16_t gen_opc_icount[OPC_BUF_SIZE]; uint8_t gen_opc_instr_start[OPC_BUF_SIZE]; TCGLabel labels[TCG_MAX_LABELS]; }; extern TCGContext tcg_ctx; Loading Loading @@ -766,9 +763,7 @@ TCGLabel *gen_new_label(void); static inline TCGArg label_arg(TCGLabel *l) { ptrdiff_t idx = l - tcg_ctx.labels; tcg_debug_assert(idx >= 0 && idx < tcg_ctx.nb_labels); return idx; return (uintptr_t)l; } /** Loading @@ -779,10 +774,9 @@ static inline TCGArg label_arg(TCGLabel *l) * encoding of the TCG opcode stream. */ static inline TCGLabel *arg_label(TCGArg idx) static inline TCGLabel *arg_label(TCGArg i) { tcg_debug_assert(idx < tcg_ctx.nb_labels); return &tcg_ctx.labels[idx]; return (TCGLabel *)(uintptr_t)i; } /** Loading Loading
tcg/tcg.c +18 −13 Original line number Diff line number Diff line Loading @@ -246,15 +246,11 @@ static void tcg_out_label(TCGContext *s, TCGLabel *l, tcg_insn_unit *ptr) TCGLabel *gen_new_label(void) { TCGContext *s = &tcg_ctx; int idx; TCGLabel *l; TCGLabel *l = tcg_malloc(sizeof(TCGLabel)); if (s->nb_labels >= TCG_MAX_LABELS) tcg_abort(); idx = s->nb_labels++; l = &s->labels[idx]; l->has_value = 0; l->u.first_reloc = NULL; *l = (TCGLabel){ .id = s->nb_labels++ }; return l; } Loading Loading @@ -1086,11 +1082,20 @@ void tcg_dump_ops(TCGContext *s) i = 0; break; } for (; i < nb_cargs; i++) { if (k != 0) { qemu_log(","); switch (c) { case INDEX_op_set_label: case INDEX_op_br: case INDEX_op_brcond_i32: case INDEX_op_brcond_i64: case INDEX_op_brcond2_i32: qemu_log("%s$L%d", k ? "," : "", arg_label(args[k])->id); i++, k++; break; default: break; } qemu_log("$0x%" TCG_PRIlx, args[k++]); for (; i < nb_cargs; i++, k++) { qemu_log("%s$0x%" TCG_PRIlx, k ? "," : "", args[k]); } } qemu_log("\n"); Loading
tcg/tcg.h +5 −11 Original line number Diff line number Diff line Loading @@ -167,7 +167,8 @@ typedef struct TCGRelocation { } TCGRelocation; typedef struct TCGLabel { int has_value; unsigned has_value : 1; unsigned id : 31; union { uintptr_t value; tcg_insn_unit *value_ptr; Loading @@ -183,8 +184,6 @@ typedef struct TCGPool { #define TCG_POOL_CHUNK_SIZE 32768 #define TCG_MAX_LABELS 512 #define TCG_MAX_TEMPS 512 /* when the size of the arguments of a called function is smaller than Loading Loading @@ -556,8 +555,6 @@ struct TCGContext { target_ulong gen_opc_pc[OPC_BUF_SIZE]; uint16_t gen_opc_icount[OPC_BUF_SIZE]; uint8_t gen_opc_instr_start[OPC_BUF_SIZE]; TCGLabel labels[TCG_MAX_LABELS]; }; extern TCGContext tcg_ctx; Loading Loading @@ -766,9 +763,7 @@ TCGLabel *gen_new_label(void); static inline TCGArg label_arg(TCGLabel *l) { ptrdiff_t idx = l - tcg_ctx.labels; tcg_debug_assert(idx >= 0 && idx < tcg_ctx.nb_labels); return idx; return (uintptr_t)l; } /** Loading @@ -779,10 +774,9 @@ static inline TCGArg label_arg(TCGLabel *l) * encoding of the TCG opcode stream. */ static inline TCGLabel *arg_label(TCGArg idx) static inline TCGLabel *arg_label(TCGArg i) { tcg_debug_assert(idx < tcg_ctx.nb_labels); return &tcg_ctx.labels[idx]; return (TCGLabel *)(uintptr_t)i; } /** Loading