mirror of https://github.com/xemu-project/xemu.git
Hexagon (target/hexagon) Mark new_read_idx in trans functions
Check that the value matches opcode_reginfo Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com> Reviewed-by: Brian Cain <bcain@quicinc.com> Message-Id: <20240307032327.4799-3-ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <bcain@quicinc.com>
This commit is contained in:
parent
2720bd1dbd
commit
9196381993
|
@ -131,6 +131,8 @@ decode_fill_newvalue_regno(Packet *packet)
|
|||
use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
|
||||
opcode_reginfo[use_opcode];
|
||||
}
|
||||
g_assert(packet->insn[i].new_read_idx != -1 &&
|
||||
packet->insn[i].new_read_idx == use_regidx);
|
||||
|
||||
/*
|
||||
* What's encoded at the N-field is the offset to who's producing
|
||||
|
|
|
@ -68,6 +68,7 @@ def mark_which_imm_extended(f, tag):
|
|||
## insn->regno[0] = args->Rd;
|
||||
## insn->regno[1] = args->Rs;
|
||||
## insn->regno[2] = args->Rt;
|
||||
## insn->new_read_idx = -1;
|
||||
## return true;
|
||||
## }
|
||||
##
|
||||
|
@ -84,14 +85,14 @@ def gen_trans_funcs(f):
|
|||
insn->opcode = {tag};
|
||||
"""))
|
||||
|
||||
regno = 0
|
||||
for reg in regs:
|
||||
reg_type = reg[0]
|
||||
reg_id = reg[1]
|
||||
new_read_idx = -1
|
||||
for regno, (reg_type, reg_id, *_) in enumerate(regs):
|
||||
reg = hex_common.get_register(tag, reg_type, reg_id)
|
||||
f.write(code_fmt(f"""\
|
||||
insn->regno[{regno}] = args->{reg_type}{reg_id};
|
||||
"""))
|
||||
regno += 1
|
||||
if reg.is_read() and reg.is_new():
|
||||
new_read_idx = regno
|
||||
|
||||
if len(imms) != 0:
|
||||
mark_which_imm_extended(f, tag)
|
||||
|
@ -112,6 +113,9 @@ def gen_trans_funcs(f):
|
|||
insn->immed[{immno}] = args->{imm_type}{imm_letter};
|
||||
"""))
|
||||
|
||||
f.write(code_fmt(f"""\
|
||||
insn->new_read_idx = {new_read_idx};
|
||||
"""))
|
||||
f.write(textwrap.dedent(f"""\
|
||||
return true;
|
||||
{close_curly}
|
||||
|
@ -120,5 +124,6 @@ def gen_trans_funcs(f):
|
|||
|
||||
if __name__ == "__main__":
|
||||
hex_common.read_semantics_file(sys.argv[1])
|
||||
hex_common.init_registers()
|
||||
with open(sys.argv[2], "w") as f:
|
||||
gen_trans_funcs(f)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright(c) 2019-2022 Qualcomm Innovation Center, Inc. All Rights Reserved.
|
||||
* Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -39,6 +39,7 @@ struct Instruction {
|
|||
uint32_t slot:3;
|
||||
uint32_t which_extended:1; /* If has an extender, which immediate */
|
||||
uint32_t new_value_producer_slot:4;
|
||||
int32_t new_read_idx;
|
||||
|
||||
bool part1; /*
|
||||
* cmp-jumps are split into two insns.
|
||||
|
|
|
@ -41,6 +41,8 @@ check_new_value(Packet *pkt)
|
|||
GET_ATTRIB(use_opcode, A_STORE)) {
|
||||
int use_regidx = strchr(opcode_reginfo[use_opcode], 's') -
|
||||
opcode_reginfo[use_opcode];
|
||||
g_assert(pkt->insn[i].new_read_idx != -1 &&
|
||||
pkt->insn[i].new_read_idx == use_regidx);
|
||||
/*
|
||||
* What's encoded at the N-field is the offset to who's producing
|
||||
* the value.
|
||||
|
|
Loading…
Reference in New Issue