* [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:05 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
` (7 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/hexagon/hex_common.py | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 195620c7ec..4bacef223f 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -397,10 +397,18 @@ def is_readwrite(self):
class OldSource(Source):
def reg_tcg(self):
return f"{self.regtype}{self.regid}V"
+ def is_old(self):
+ return True
+ def is_new(self):
+ return False
class NewSource(Source):
def reg_tcg(self):
return f"{self.regtype}{self.regid}N"
+ def is_old(self):
+ return False
+ def is_new(self):
+ return True
class ReadWrite:
def reg_tcg(self):
@@ -413,6 +421,10 @@ def is_read(self):
return True
def is_readwrite(self):
return True
+ def is_old(self):
+ return True
+ def is_new(self):
+ return False
class GprDest(Register, Single, Dest):
def decl_tcg(self, f, tag, regno):
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class
2024-03-07 3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
@ 2024-03-29 1:05 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:05 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to
> Register class
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/hex_common.py | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/target/hexagon/hex_common.py
> b/target/hexagon/hex_common.py
> index 195620c7ec..4bacef223f 100755
> --- a/target/hexagon/hex_common.py
> +++ b/target/hexagon/hex_common.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -397,10 +397,18 @@ def is_readwrite(self):
> class OldSource(Source):
> def reg_tcg(self):
> return f"{self.regtype}{self.regid}V"
> + def is_old(self):
> + return True
> + def is_new(self):
> + return False
>
> class NewSource(Source):
> def reg_tcg(self):
> return f"{self.regtype}{self.regid}N"
> + def is_old(self):
> + return False
> + def is_new(self):
> + return True
>
> class ReadWrite:
> def reg_tcg(self):
> @@ -413,6 +421,10 @@ def is_read(self):
> return True
> def is_readwrite(self):
> return True
> + def is_old(self):
> + return True
> + def is_new(self):
> + return False
>
> class GprDest(Register, Single, Dest):
> def decl_tcg(self, f, tag, regno):
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
2024-03-07 3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:05 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
` (6 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Check that the value matches opcode_reginfo
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/insn.h | 3 ++-
target/hexagon/decode.c | 2 ++
target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
target/hexagon/gen_trans_funcs.py | 15 ++++++++++-----
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index 3e7a22c91e..36502bf056 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -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.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index a40210ca1e..4595e30384 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -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
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index 202d84c7c0..e9007f5d71 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -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.
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 53e844a44b..8acecdb993 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -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)
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions
2024-03-07 3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
@ 2024-03-29 1:05 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:05 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in
> trans functions
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Check that the value matches opcode_reginfo
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/insn.h | 3 ++-
> target/hexagon/decode.c | 2 ++
> target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
> target/hexagon/gen_trans_funcs.py | 15 ++++++++++-----
> 4 files changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index 3e7a22c91e..36502bf056 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -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.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index a40210ca1e..4595e30384 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -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
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index 202d84c7c0..e9007f5d71 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -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.
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 53e844a44b..8acecdb993 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -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)
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans functions
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
2024-03-07 3:23 ` [PATCH v2 1/9] Hexagon (target/hexagon) Add is_old/is_new to Register class Taylor Simpson
2024-03-07 3:23 ` [PATCH v2 2/9] Hexagon (target/hexagon) Mark new_read_idx in trans functions Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:05 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
` (5 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Check that the value matches opcode_reginfo/opcode_wregs
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/insn.h | 1 +
target/hexagon/decode.c | 2 ++
target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
target/hexagon/gen_trans_funcs.py | 6 ++++++
4 files changed, 11 insertions(+)
diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index 36502bf056..a770379958 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -40,6 +40,7 @@ struct Instruction {
uint32_t which_extended:1; /* If has an extender, which immediate */
uint32_t new_value_producer_slot:4;
int32_t new_read_idx;
+ int32_t dest_idx;
bool part1; /*
* cmp-jumps are split into two insns.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index 4595e30384..a4d8500fea 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -184,6 +184,8 @@ decode_fill_newvalue_regno(Packet *packet)
/* Now patch up the consumer with the register number */
dst_idx = dststr - opcode_reginfo[def_opcode];
+ g_assert(packet->insn[def_idx].dest_idx != -1 &&
+ packet->insn[def_idx].dest_idx == dst_idx);
packet->insn[i].regno[use_regidx] =
packet->insn[def_idx].regno[dst_idx];
/*
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index e9007f5d71..c1320406df 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -86,6 +86,8 @@ check_new_value(Packet *pkt)
/* still not there, we have a bad packet */
g_assert_not_reached();
}
+ g_assert(pkt->insn[def_idx].dest_idx != -1 &&
+ pkt->insn[def_idx].dest_idx == dststr - reginfo);
int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
/* Now patch up the consumer with the register number */
pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 8acecdb993..1201172dda 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -69,6 +69,7 @@ def mark_which_imm_extended(f, tag):
## insn->regno[1] = args->Rs;
## insn->regno[2] = args->Rt;
## insn->new_read_idx = -1;
+## insn->dest_idx = 0;
## return true;
## }
##
@@ -86,6 +87,7 @@ def gen_trans_funcs(f):
"""))
new_read_idx = -1
+ dest_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"""\
@@ -93,6 +95,9 @@ def gen_trans_funcs(f):
"""))
if reg.is_read() and reg.is_new():
new_read_idx = regno
+ # dest_idx should be the first destination, so check for -1
+ if reg.is_written() and dest_idx == -1:
+ dest_idx = regno
if len(imms) != 0:
mark_which_imm_extended(f, tag)
@@ -115,6 +120,7 @@ def gen_trans_funcs(f):
f.write(code_fmt(f"""\
insn->new_read_idx = {new_read_idx};
+ insn->dest_idx = {dest_idx};
"""))
f.write(textwrap.dedent(f"""\
return true;
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans functions
2024-03-07 3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
@ 2024-03-29 1:05 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:05 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx in trans
> functions
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Check that the value matches opcode_reginfo/opcode_wregs
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/insn.h | 1 +
> target/hexagon/decode.c | 2 ++
> target/hexagon/mmvec/decode_ext_mmvec.c | 2 ++
> target/hexagon/gen_trans_funcs.py | 6 ++++++
> 4 files changed, 11 insertions(+)
>
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index 36502bf056..a770379958 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -40,6 +40,7 @@ struct Instruction {
> uint32_t which_extended:1; /* If has an extender, which immediate */
> uint32_t new_value_producer_slot:4;
> int32_t new_read_idx;
> + int32_t dest_idx;
>
> bool part1; /*
> * cmp-jumps are split into two insns.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index 4595e30384..a4d8500fea 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -184,6 +184,8 @@ decode_fill_newvalue_regno(Packet *packet)
>
> /* Now patch up the consumer with the register number */
> dst_idx = dststr - opcode_reginfo[def_opcode];
> + g_assert(packet->insn[def_idx].dest_idx != -1 &&
> + packet->insn[def_idx].dest_idx == dst_idx);
> packet->insn[i].regno[use_regidx] =
> packet->insn[def_idx].regno[dst_idx];
> /*
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index e9007f5d71..c1320406df 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -86,6 +86,8 @@ check_new_value(Packet *pkt)
> /* still not there, we have a bad packet */
> g_assert_not_reached();
> }
> + g_assert(pkt->insn[def_idx].dest_idx != -1 &&
> + pkt->insn[def_idx].dest_idx == dststr - reginfo);
> int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
> /* Now patch up the consumer with the register number */
> pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 8acecdb993..1201172dda 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -69,6 +69,7 @@ def mark_which_imm_extended(f, tag):
> ## insn->regno[1] = args->Rs;
> ## insn->regno[2] = args->Rt;
> ## insn->new_read_idx = -1;
> +## insn->dest_idx = 0;
> ## return true;
> ## }
> ##
> @@ -86,6 +87,7 @@ def gen_trans_funcs(f):
> """))
>
> new_read_idx = -1
> + dest_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"""\
> @@ -93,6 +95,9 @@ def gen_trans_funcs(f):
> """))
> if reg.is_read() and reg.is_new():
> new_read_idx = regno
> + # dest_idx should be the first destination, so check for -1
> + if reg.is_written() and dest_idx == -1:
> + dest_idx = regno
>
> if len(imms) != 0:
> mark_which_imm_extended(f, tag)
> @@ -115,6 +120,7 @@ def gen_trans_funcs(f):
>
> f.write(code_fmt(f"""\
> insn->new_read_idx = {new_read_idx};
> + insn->dest_idx = {dest_idx};
> """))
> f.write(textwrap.dedent(f"""\
> return true;
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in trans functions
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (2 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 3/9] Hexagon (target/hexagon) Mark dest_idx " Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:04 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
` (4 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Check that the value matches opcode_wregs
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/insn.h | 1 +
target/hexagon/decode.c | 3 +++
target/hexagon/gen_trans_funcs.py | 5 +++++
3 files changed, 9 insertions(+)
diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
index a770379958..24dcf7fe9f 100644
--- a/target/hexagon/insn.h
+++ b/target/hexagon/insn.h
@@ -41,6 +41,7 @@ struct Instruction {
uint32_t new_value_producer_slot:4;
int32_t new_read_idx;
int32_t dest_idx;
+ bool has_pred_dest;
bool part1; /*
* cmp-jumps are split into two insns.
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index a4d8500fea..84a3899556 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -366,6 +366,9 @@ static void decode_shuffle_for_execution(Packet *packet)
for (flag = false, i = 0; i < last_insn + 1; i++) {
int opcode = packet->insn[i].opcode;
+ g_assert(packet->insn[i].has_pred_dest ==
+ (strstr(opcode_wregs[opcode], "Pd4") ||
+ strstr(opcode_wregs[opcode], "Pe4")));
if ((strstr(opcode_wregs[opcode], "Pd4") ||
strstr(opcode_wregs[opcode], "Pe4")) &&
GET_ATTRIB(opcode, A_STORE) == 0) {
diff --git a/target/hexagon/gen_trans_funcs.py b/target/hexagon/gen_trans_funcs.py
index 1201172dda..9f86b4edbd 100755
--- a/target/hexagon/gen_trans_funcs.py
+++ b/target/hexagon/gen_trans_funcs.py
@@ -70,6 +70,7 @@ def mark_which_imm_extended(f, tag):
## insn->regno[2] = args->Rt;
## insn->new_read_idx = -1;
## insn->dest_idx = 0;
+## insn->has_pred_dest = false;
## return true;
## }
##
@@ -88,6 +89,7 @@ def gen_trans_funcs(f):
new_read_idx = -1
dest_idx = -1
+ has_pred_dest = "false"
for regno, (reg_type, reg_id, *_) in enumerate(regs):
reg = hex_common.get_register(tag, reg_type, reg_id)
f.write(code_fmt(f"""\
@@ -98,6 +100,8 @@ def gen_trans_funcs(f):
# dest_idx should be the first destination, so check for -1
if reg.is_written() and dest_idx == -1:
dest_idx = regno
+ if reg_type == "P" and reg.is_written() and not reg.is_read():
+ has_pred_dest = "true"
if len(imms) != 0:
mark_which_imm_extended(f, tag)
@@ -121,6 +125,7 @@ def gen_trans_funcs(f):
f.write(code_fmt(f"""\
insn->new_read_idx = {new_read_idx};
insn->dest_idx = {dest_idx};
+ insn->has_pred_dest = {has_pred_dest};
"""))
f.write(textwrap.dedent(f"""\
return true;
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in trans functions
2024-03-07 3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
@ 2024-03-29 1:04 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:04 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest in
> trans functions
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Check that the value matches opcode_wregs
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/insn.h | 1 +
> target/hexagon/decode.c | 3 +++
> target/hexagon/gen_trans_funcs.py | 5 +++++
> 3 files changed, 9 insertions(+)
>
> diff --git a/target/hexagon/insn.h b/target/hexagon/insn.h
> index a770379958..24dcf7fe9f 100644
> --- a/target/hexagon/insn.h
> +++ b/target/hexagon/insn.h
> @@ -41,6 +41,7 @@ struct Instruction {
> uint32_t new_value_producer_slot:4;
> int32_t new_read_idx;
> int32_t dest_idx;
> + bool has_pred_dest;
>
> bool part1; /*
> * cmp-jumps are split into two insns.
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index a4d8500fea..84a3899556 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -366,6 +366,9 @@ static void decode_shuffle_for_execution(Packet
> *packet)
> for (flag = false, i = 0; i < last_insn + 1; i++) {
> int opcode = packet->insn[i].opcode;
>
> + g_assert(packet->insn[i].has_pred_dest ==
> + (strstr(opcode_wregs[opcode], "Pd4") ||
> + strstr(opcode_wregs[opcode], "Pe4")));
> if ((strstr(opcode_wregs[opcode], "Pd4") ||
> strstr(opcode_wregs[opcode], "Pe4")) &&
> GET_ATTRIB(opcode, A_STORE) == 0) {
> diff --git a/target/hexagon/gen_trans_funcs.py
> b/target/hexagon/gen_trans_funcs.py
> index 1201172dda..9f86b4edbd 100755
> --- a/target/hexagon/gen_trans_funcs.py
> +++ b/target/hexagon/gen_trans_funcs.py
> @@ -70,6 +70,7 @@ def mark_which_imm_extended(f, tag):
> ## insn->regno[2] = args->Rt;
> ## insn->new_read_idx = -1;
> ## insn->dest_idx = 0;
> +## insn->has_pred_dest = false;
> ## return true;
> ## }
> ##
> @@ -88,6 +89,7 @@ def gen_trans_funcs(f):
>
> new_read_idx = -1
> dest_idx = -1
> + has_pred_dest = "false"
> for regno, (reg_type, reg_id, *_) in enumerate(regs):
> reg = hex_common.get_register(tag, reg_type, reg_id)
> f.write(code_fmt(f"""\
> @@ -98,6 +100,8 @@ def gen_trans_funcs(f):
> # dest_idx should be the first destination, so check for -1
> if reg.is_written() and dest_idx == -1:
> dest_idx = regno
> + if reg_type == "P" and reg.is_written() and not reg.is_read():
> + has_pred_dest = "true"
>
> if len(imms) != 0:
> mark_which_imm_extended(f, tag)
> @@ -121,6 +125,7 @@ def gen_trans_funcs(f):
> f.write(code_fmt(f"""\
> insn->new_read_idx = {new_read_idx};
> insn->dest_idx = {dest_idx};
> + insn->has_pred_dest = {has_pred_dest};
> """))
> f.write(textwrap.dedent(f"""\
> return true;
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (3 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 4/9] Hexagon (target/hexagon) Mark has_pred_dest " Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:05 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
` (3 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Make sure the decoding of HVX .new is correctly handling this case
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
tests/tcg/hexagon/hvx_misc.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c
index b45170acd1..1fe14b5158 100644
--- a/tests/tcg/hexagon/hvx_misc.c
+++ b/tests/tcg/hexagon/hvx_misc.c
@@ -1,5 +1,5 @@
/*
- * Copyright(c) 2021-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+ * Copyright(c) 2021-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
@@ -231,6 +231,7 @@ static void test_masked_store(bool invert)
static void test_new_value_store(void)
{
void *p0 = buffer0;
+ void *p1 = buffer1;
void *pout = output;
asm("{\n\t"
@@ -242,6 +243,19 @@ static void test_new_value_store(void)
expect[0] = buffer0[0];
check_output_w(__LINE__, 1);
+
+ /* Test the .new read from the high half of a pair */
+ asm("v7 = vmem(%0 + #0)\n\t"
+ "v12 = vmem(%1 + #0)\n\t"
+ "{\n\t"
+ " v5:4 = vcombine(v12, v7)\n\t"
+ " vmem(%2 + #0) = v5.new\n\t"
+ "}\n\t"
+ : : "r"(p0), "r"(p1), "r"(pout) : "v4", "v5", "v7", "v12", "memory");
+
+ expect[0] = buffer1[0];
+
+ check_output_w(__LINE__, 1);
}
static void test_max_temps()
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair
2024-03-07 3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
@ 2024-03-29 1:05 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:05 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read
> from high half of pair
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Make sure the decoding of HVX .new is correctly handling this case
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> tests/tcg/hexagon/hvx_misc.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/tests/tcg/hexagon/hvx_misc.c b/tests/tcg/hexagon/hvx_misc.c
> index b45170acd1..1fe14b5158 100644
> --- a/tests/tcg/hexagon/hvx_misc.c
> +++ b/tests/tcg/hexagon/hvx_misc.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright(c) 2021-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> + * Copyright(c) 2021-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
> @@ -231,6 +231,7 @@ static void test_masked_store(bool invert)
> static void test_new_value_store(void)
> {
> void *p0 = buffer0;
> + void *p1 = buffer1;
> void *pout = output;
>
> asm("{\n\t"
> @@ -242,6 +243,19 @@ static void test_new_value_store(void)
> expect[0] = buffer0[0];
>
> check_output_w(__LINE__, 1);
> +
> + /* Test the .new read from the high half of a pair */
> + asm("v7 = vmem(%0 + #0)\n\t"
> + "v12 = vmem(%1 + #0)\n\t"
> + "{\n\t"
> + " v5:4 = vcombine(v12, v7)\n\t"
> + " vmem(%2 + #0) = v5.new\n\t"
> + "}\n\t"
> + : : "r"(p0), "r"(p1), "r"(pout) : "v4", "v5", "v7", "v12", "memory");
> +
> + expect[0] = buffer1[0];
> +
> + check_output_w(__LINE__, 1);
> }
>
> static void test_max_temps()
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (4 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 5/9] Hexagon (tests/tcg/hexagon) Test HVX .new read from high half of pair Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:04 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
` (2 subsequent siblings)
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/opcodes.h | 4 --
target/hexagon/decode.c | 57 +++----------------------
target/hexagon/mmvec/decode_ext_mmvec.c | 34 +++------------
target/hexagon/opcodes.c | 28 ------------
4 files changed, 13 insertions(+), 110 deletions(-)
diff --git a/target/hexagon/opcodes.h b/target/hexagon/opcodes.h
index fa7e321950..0ee11bd445 100644
--- a/target/hexagon/opcodes.h
+++ b/target/hexagon/opcodes.h
@@ -40,10 +40,6 @@ typedef enum {
extern const char * const opcode_names[];
-extern const char * const opcode_reginfo[];
-extern const char * const opcode_rregs[];
-extern const char * const opcode_wregs[];
-
typedef struct {
const char * const encoding;
const EncClass enc_class;
diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
index 84a3899556..23deba2426 100644
--- a/target/hexagon/decode.c
+++ b/target/hexagon/decode.c
@@ -115,24 +115,13 @@ static void
decode_fill_newvalue_regno(Packet *packet)
{
int i, use_regidx, offset, def_idx, dst_idx;
- uint16_t def_opcode, use_opcode;
- char *dststr;
for (i = 1; i < packet->num_insns; i++) {
if (GET_ATTRIB(packet->insn[i].opcode, A_DOTNEWVALUE) &&
!GET_ATTRIB(packet->insn[i].opcode, A_EXTENSION)) {
- use_opcode = packet->insn[i].opcode;
-
- /* It's a store, so we're adjusting the Nt field */
- if (GET_ATTRIB(use_opcode, A_STORE)) {
- use_regidx = strchr(opcode_reginfo[use_opcode], 't') -
- opcode_reginfo[use_opcode];
- } else { /* It's a Jump, so we're adjusting the Ns field */
- 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);
+
+ g_assert(packet->insn[i].new_read_idx != -1);
+ use_regidx = packet->insn[i].new_read_idx;
/*
* What's encoded at the N-field is the offset to who's producing
@@ -153,39 +142,9 @@ decode_fill_newvalue_regno(Packet *packet)
*/
g_assert(!((def_idx < 0) || (def_idx > (packet->num_insns - 1))));
- /*
- * packet->insn[def_idx] is the producer
- * Figure out which type of destination it produces
- * and the corresponding index in the reginfo
- */
- def_opcode = packet->insn[def_idx].opcode;
- dststr = strstr(opcode_wregs[def_opcode], "Rd");
- if (dststr) {
- dststr = strchr(opcode_reginfo[def_opcode], 'd');
- } else {
- dststr = strstr(opcode_wregs[def_opcode], "Rx");
- if (dststr) {
- dststr = strchr(opcode_reginfo[def_opcode], 'x');
- } else {
- dststr = strstr(opcode_wregs[def_opcode], "Re");
- if (dststr) {
- dststr = strchr(opcode_reginfo[def_opcode], 'e');
- } else {
- dststr = strstr(opcode_wregs[def_opcode], "Ry");
- if (dststr) {
- dststr = strchr(opcode_reginfo[def_opcode], 'y');
- } else {
- g_assert_not_reached();
- }
- }
- }
- }
- g_assert(dststr != NULL);
-
/* Now patch up the consumer with the register number */
- dst_idx = dststr - opcode_reginfo[def_opcode];
- g_assert(packet->insn[def_idx].dest_idx != -1 &&
- packet->insn[def_idx].dest_idx == dst_idx);
+ g_assert(packet->insn[def_idx].dest_idx != -1);
+ dst_idx = packet->insn[def_idx].dest_idx;
packet->insn[i].regno[use_regidx] =
packet->insn[def_idx].regno[dst_idx];
/*
@@ -366,11 +325,7 @@ static void decode_shuffle_for_execution(Packet *packet)
for (flag = false, i = 0; i < last_insn + 1; i++) {
int opcode = packet->insn[i].opcode;
- g_assert(packet->insn[i].has_pred_dest ==
- (strstr(opcode_wregs[opcode], "Pd4") ||
- strstr(opcode_wregs[opcode], "Pe4")));
- if ((strstr(opcode_wregs[opcode], "Pd4") ||
- strstr(opcode_wregs[opcode], "Pe4")) &&
+ if (packet->insn[i].has_pred_dest &&
GET_ATTRIB(opcode, A_STORE) == 0) {
/* This should be a compare (not a store conditional) */
if (flag) {
diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c b/target/hexagon/mmvec/decode_ext_mmvec.c
index c1320406df..f850d0154d 100644
--- a/target/hexagon/mmvec/decode_ext_mmvec.c
+++ b/target/hexagon/mmvec/decode_ext_mmvec.c
@@ -28,21 +28,15 @@ check_new_value(Packet *pkt)
{
/* .new value for a MMVector store */
int i, j;
- const char *reginfo;
- const char *destletters;
- const char *dststr = NULL;
uint16_t def_opcode;
- char letter;
for (i = 1; i < pkt->num_insns; i++) {
uint16_t use_opcode = pkt->insn[i].opcode;
if (GET_ATTRIB(use_opcode, A_DOTNEWVALUE) &&
GET_ATTRIB(use_opcode, A_CVI) &&
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);
+ int use_regidx = pkt->insn[i].new_read_idx;
+ g_assert(pkt->insn[i].new_read_idx != -1);
/*
* What's encoded at the N-field is the offset to who's producing
* the value.
@@ -70,33 +64,19 @@ check_new_value(Packet *pkt)
/* def_idx is the index of the producer */
def_opcode = pkt->insn[def_idx].opcode;
- reginfo = opcode_reginfo[def_opcode];
- destletters = "dexy";
- for (j = 0; (letter = destletters[j]) != 0; j++) {
- dststr = strchr(reginfo, letter);
- if (dststr != NULL) {
- break;
- }
- }
- if ((dststr == NULL) && GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
+ if ((pkt->insn[def_idx].dest_idx == -1) &&
+ GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
pkt->insn[i].regno[use_regidx] = def_oreg;
pkt->insn[i].new_value_producer_slot = pkt->insn[def_idx].slot;
} else {
- if (dststr == NULL) {
+ if (pkt->insn[def_idx].dest_idx == -1) {
/* still not there, we have a bad packet */
g_assert_not_reached();
}
- g_assert(pkt->insn[def_idx].dest_idx != -1 &&
- pkt->insn[def_idx].dest_idx == dststr - reginfo);
- int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
+ int def_regnum =
+ pkt->insn[def_idx].regno[pkt->insn[def_idx].dest_idx];
/* Now patch up the consumer with the register number */
pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
- /* special case for (Vx,Vy) */
- dststr = strchr(reginfo, 'y');
- if (def_oreg && strchr(reginfo, 'x') && dststr) {
- def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
- pkt->insn[i].regno[use_regidx] = def_regnum;
- }
/*
* We need to remember who produces this value to later
* check if it was dynamically cancelled
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 1f7f3def38..02ae9cf787 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -36,34 +36,6 @@ const char * const opcode_names[] = {
#undef OPCODE
};
-const char * const opcode_reginfo[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) REGINFO,
-#include "op_regs_generated.h.inc"
- NULL
-#undef REGINFO
-#undef IMMINFO
-};
-
-
-const char * const opcode_rregs[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) RREGS,
-#include "op_regs_generated.h.inc"
- NULL
-#undef REGINFO
-#undef IMMINFO
-};
-
-
-const char * const opcode_wregs[] = {
-#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /* nothing */
-#define REGINFO(TAG, REGINFO, RREGS, WREGS) WREGS,
-#include "op_regs_generated.h.inc"
- NULL
-#undef REGINFO
-#undef IMMINFO
-};
const char * const opcode_short_semantics[] = {
#define DEF_SHORTCODE(TAG, SHORTCODE) [TAG] = #SHORTCODE,
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc
2024-03-07 3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
@ 2024-03-29 1:04 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:04 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of
> op_regs_generated.h.inc
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/opcodes.h | 4 --
> target/hexagon/decode.c | 57 +++----------------------
> target/hexagon/mmvec/decode_ext_mmvec.c | 34 +++------------
> target/hexagon/opcodes.c | 28 ------------
> 4 files changed, 13 insertions(+), 110 deletions(-)
>
> diff --git a/target/hexagon/opcodes.h b/target/hexagon/opcodes.h
> index fa7e321950..0ee11bd445 100644
> --- a/target/hexagon/opcodes.h
> +++ b/target/hexagon/opcodes.h
> @@ -40,10 +40,6 @@ typedef enum {
>
> extern const char * const opcode_names[];
>
> -extern const char * const opcode_reginfo[];
> -extern const char * const opcode_rregs[];
> -extern const char * const opcode_wregs[];
> -
> typedef struct {
> const char * const encoding;
> const EncClass enc_class;
> diff --git a/target/hexagon/decode.c b/target/hexagon/decode.c
> index 84a3899556..23deba2426 100644
> --- a/target/hexagon/decode.c
> +++ b/target/hexagon/decode.c
> @@ -115,24 +115,13 @@ static void
> decode_fill_newvalue_regno(Packet *packet)
> {
> int i, use_regidx, offset, def_idx, dst_idx;
> - uint16_t def_opcode, use_opcode;
> - char *dststr;
>
> for (i = 1; i < packet->num_insns; i++) {
> if (GET_ATTRIB(packet->insn[i].opcode, A_DOTNEWVALUE) &&
> !GET_ATTRIB(packet->insn[i].opcode, A_EXTENSION)) {
> - use_opcode = packet->insn[i].opcode;
> -
> - /* It's a store, so we're adjusting the Nt field */
> - if (GET_ATTRIB(use_opcode, A_STORE)) {
> - use_regidx = strchr(opcode_reginfo[use_opcode], 't') -
> - opcode_reginfo[use_opcode];
> - } else { /* It's a Jump, so we're adjusting the Ns field */
> - 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);
> +
> + g_assert(packet->insn[i].new_read_idx != -1);
> + use_regidx = packet->insn[i].new_read_idx;
>
> /*
> * What's encoded at the N-field is the offset to who's producing
> @@ -153,39 +142,9 @@ decode_fill_newvalue_regno(Packet *packet)
> */
> g_assert(!((def_idx < 0) || (def_idx > (packet->num_insns - 1))));
>
> - /*
> - * packet->insn[def_idx] is the producer
> - * Figure out which type of destination it produces
> - * and the corresponding index in the reginfo
> - */
> - def_opcode = packet->insn[def_idx].opcode;
> - dststr = strstr(opcode_wregs[def_opcode], "Rd");
> - if (dststr) {
> - dststr = strchr(opcode_reginfo[def_opcode], 'd');
> - } else {
> - dststr = strstr(opcode_wregs[def_opcode], "Rx");
> - if (dststr) {
> - dststr = strchr(opcode_reginfo[def_opcode], 'x');
> - } else {
> - dststr = strstr(opcode_wregs[def_opcode], "Re");
> - if (dststr) {
> - dststr = strchr(opcode_reginfo[def_opcode], 'e');
> - } else {
> - dststr = strstr(opcode_wregs[def_opcode], "Ry");
> - if (dststr) {
> - dststr = strchr(opcode_reginfo[def_opcode], 'y');
> - } else {
> - g_assert_not_reached();
> - }
> - }
> - }
> - }
> - g_assert(dststr != NULL);
> -
> /* Now patch up the consumer with the register number */
> - dst_idx = dststr - opcode_reginfo[def_opcode];
> - g_assert(packet->insn[def_idx].dest_idx != -1 &&
> - packet->insn[def_idx].dest_idx == dst_idx);
> + g_assert(packet->insn[def_idx].dest_idx != -1);
> + dst_idx = packet->insn[def_idx].dest_idx;
> packet->insn[i].regno[use_regidx] =
> packet->insn[def_idx].regno[dst_idx];
> /*
> @@ -366,11 +325,7 @@ static void decode_shuffle_for_execution(Packet
> *packet)
> for (flag = false, i = 0; i < last_insn + 1; i++) {
> int opcode = packet->insn[i].opcode;
>
> - g_assert(packet->insn[i].has_pred_dest ==
> - (strstr(opcode_wregs[opcode], "Pd4") ||
> - strstr(opcode_wregs[opcode], "Pe4")));
> - if ((strstr(opcode_wregs[opcode], "Pd4") ||
> - strstr(opcode_wregs[opcode], "Pe4")) &&
> + if (packet->insn[i].has_pred_dest &&
> GET_ATTRIB(opcode, A_STORE) == 0) {
> /* This should be a compare (not a store conditional) */
> if (flag) {
> diff --git a/target/hexagon/mmvec/decode_ext_mmvec.c
> b/target/hexagon/mmvec/decode_ext_mmvec.c
> index c1320406df..f850d0154d 100644
> --- a/target/hexagon/mmvec/decode_ext_mmvec.c
> +++ b/target/hexagon/mmvec/decode_ext_mmvec.c
> @@ -28,21 +28,15 @@ check_new_value(Packet *pkt)
> {
> /* .new value for a MMVector store */
> int i, j;
> - const char *reginfo;
> - const char *destletters;
> - const char *dststr = NULL;
> uint16_t def_opcode;
> - char letter;
>
> for (i = 1; i < pkt->num_insns; i++) {
> uint16_t use_opcode = pkt->insn[i].opcode;
> if (GET_ATTRIB(use_opcode, A_DOTNEWVALUE) &&
> GET_ATTRIB(use_opcode, A_CVI) &&
> 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);
> + int use_regidx = pkt->insn[i].new_read_idx;
> + g_assert(pkt->insn[i].new_read_idx != -1);
> /*
> * What's encoded at the N-field is the offset to who's producing
> * the value.
> @@ -70,33 +64,19 @@ check_new_value(Packet *pkt)
>
> /* def_idx is the index of the producer */
> def_opcode = pkt->insn[def_idx].opcode;
> - reginfo = opcode_reginfo[def_opcode];
> - destletters = "dexy";
> - for (j = 0; (letter = destletters[j]) != 0; j++) {
> - dststr = strchr(reginfo, letter);
> - if (dststr != NULL) {
> - break;
> - }
> - }
> - if ((dststr == NULL) && GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
> + if ((pkt->insn[def_idx].dest_idx == -1) &&
> + GET_ATTRIB(def_opcode, A_CVI_GATHER)) {
> pkt->insn[i].regno[use_regidx] = def_oreg;
> pkt->insn[i].new_value_producer_slot = pkt->insn[def_idx].slot;
> } else {
> - if (dststr == NULL) {
> + if (pkt->insn[def_idx].dest_idx == -1) {
> /* still not there, we have a bad packet */
> g_assert_not_reached();
> }
> - g_assert(pkt->insn[def_idx].dest_idx != -1 &&
> - pkt->insn[def_idx].dest_idx == dststr - reginfo);
> - int def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
> + int def_regnum =
> + pkt->insn[def_idx].regno[pkt->insn[def_idx].dest_idx];
> /* Now patch up the consumer with the register number */
> pkt->insn[i].regno[use_regidx] = def_regnum ^ def_oreg;
> - /* special case for (Vx,Vy) */
> - dststr = strchr(reginfo, 'y');
> - if (def_oreg && strchr(reginfo, 'x') && dststr) {
> - def_regnum = pkt->insn[def_idx].regno[dststr - reginfo];
> - pkt->insn[i].regno[use_regidx] = def_regnum;
> - }
> /*
> * We need to remember who produces this value to later
> * check if it was dynamically cancelled
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 1f7f3def38..02ae9cf787 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -36,34 +36,6 @@ const char * const opcode_names[] = {
> #undef OPCODE
> };
>
> -const char * const opcode_reginfo[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) REGINFO,
> -#include "op_regs_generated.h.inc"
> - NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
> -
> -
> -const char * const opcode_rregs[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) RREGS,
> -#include "op_regs_generated.h.inc"
> - NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
> -
> -
> -const char * const opcode_wregs[] = {
> -#define IMMINFO(TAG, SIGN, SIZE, SHAMT, SIGN2, SIZE2, SHAMT2) /*
> nothing */
> -#define REGINFO(TAG, REGINFO, RREGS, WREGS) WREGS,
> -#include "op_regs_generated.h.inc"
> - NULL
> -#undef REGINFO
> -#undef IMMINFO
> -};
>
> const char * const opcode_short_semantics[] = {
> #define DEF_SHORTCODE(TAG, SHORTCODE) [TAG] = #SHORTCODE,
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (5 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 6/9] Hexagon (target/hexagon) Remove uses of op_regs_generated.h.inc Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-29 1:04 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
2024-03-07 3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
8 siblings, 1 reply; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/README | 1 -
target/hexagon/gen_op_regs.py | 125 ----------------------------------
target/hexagon/meson.build | 14 +---
3 files changed, 2 insertions(+), 138 deletions(-)
delete mode 100755 target/hexagon/gen_op_regs.py
diff --git a/target/hexagon/README b/target/hexagon/README
index 746ebec378..065c05154d 100644
--- a/target/hexagon/README
+++ b/target/hexagon/README
@@ -43,7 +43,6 @@ target/hexagon/gen_semantics.c. This step produces
That file is consumed by the following python scripts to produce the indicated
header files in <BUILD_DIR>/target/hexagon
gen_opcodes_def.py -> opcodes_def_generated.h.inc
- gen_op_regs.py -> op_regs_generated.h.inc
gen_printinsn.py -> printinsn_generated.h.inc
gen_op_attribs.py -> op_attribs_generated.h.inc
gen_helper_protos.py -> helper_protos_generated.h.inc
diff --git a/target/hexagon/gen_op_regs.py b/target/hexagon/gen_op_regs.py
deleted file mode 100755
index 7b7b33895a..0000000000
--- a/target/hexagon/gen_op_regs.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python3
-
-##
-## Copyright(c) 2019-2023 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
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, see <http://www.gnu.org/licenses/>.
-##
-
-import sys
-import re
-import string
-import hex_common
-
-
-##
-## Generate the register and immediate operands for each instruction
-##
-def calculate_regid_reg(tag):
- def letter_inc(x):
- return chr(ord(x) + 1)
-
- ordered_implregs = ["SP", "FP", "LR"]
- srcdst_lett = "X"
- src_lett = "S"
- dst_lett = "D"
- retstr = ""
- mapdict = {}
- for reg in ordered_implregs:
- reg_rd = 0
- reg_wr = 0
- if ("A_IMPLICIT_WRITES_" + reg) in hex_common.attribdict[tag]:
- reg_wr = 1
- if reg_rd and reg_wr:
- retstr += srcdst_lett
- mapdict[srcdst_lett] = reg
- srcdst_lett = letter_inc(srcdst_lett)
- elif reg_rd:
- retstr += src_lett
- mapdict[src_lett] = reg
- src_lett = letter_inc(src_lett)
- elif reg_wr:
- retstr += dst_lett
- mapdict[dst_lett] = reg
- dst_lett = letter_inc(dst_lett)
- return retstr, mapdict
-
-
-def calculate_regid_letters(tag):
- retstr, mapdict = calculate_regid_reg(tag)
- return retstr
-
-
-def strip_reg_prefix(x):
- y = x.replace("UREG.", "")
- y = y.replace("MREG.", "")
- return y.replace("GREG.", "")
-
-
-def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.init_registers()
- tagregs = hex_common.get_tagregs(full=True)
- tagimms = hex_common.get_tagimms()
-
- with open(sys.argv[3], "w") as f:
- for tag in hex_common.tags:
- regs = tagregs[tag]
- rregs = []
- wregs = []
- regids = ""
- for regtype, regid, _, numregs in regs:
- reg = hex_common.get_register(tag, regtype, regid)
- if reg.is_read():
- if regid[0] not in regids:
- regids += regid[0]
- rregs.append(regtype + regid + numregs)
- if reg.is_written():
- wregs.append(regtype + regid + numregs)
- if regid[0] not in regids:
- regids += regid[0]
- for attrib in hex_common.attribdict[tag]:
- if hex_common.attribinfo[attrib]["rreg"]:
- rregs.append(strip_reg_prefix(attribinfo[attrib]["rreg"]))
- if hex_common.attribinfo[attrib]["wreg"]:
- wregs.append(strip_reg_prefix(attribinfo[attrib]["wreg"]))
- regids += calculate_regid_letters(tag)
- f.write(
- f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
- f'\t/*WR:*/\t"{",".join(wregs)}")\n'
- )
-
- for tag in hex_common.tags:
- imms = tagimms[tag]
- f.write(f"IMMINFO({tag}")
- if not imms:
- f.write(""",'u',0,0,'U',0,0""")
- for sign, size, shamt in imms:
- if sign == "r":
- sign = "s"
- if not shamt:
- shamt = "0"
- f.write(f""",'{sign}',{size},{shamt}""")
- if len(imms) == 1:
- if sign.isupper():
- myu = "u"
- else:
- myu = "U"
- f.write(f""",'{myu}',0,0""")
- f.write(")\n")
-
-
-if __name__ == "__main__":
- main()
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index fb480afc03..b3a0944d3b 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -1,5 +1,5 @@
##
-## Copyright(c) 2020-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+## Copyright(c) 2020-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
@@ -45,7 +45,6 @@ hexagon_ss.add(semantics_generated)
# shortcode_generated.h.inc
# tcg_func_table_generated.c.inc
# printinsn_generated.h.inc
-# op_regs_generated.h.inc
# op_attribs_generated.h.inc
# opcodes_def_generated.h.inc
#
@@ -76,15 +75,6 @@ printinsn_generated = custom_target(
)
hexagon_ss.add(printinsn_generated)
-op_regs_generated = custom_target(
- 'op_regs_generated.h.inc',
- output: 'op_regs_generated.h.inc',
- depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_op_regs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
-)
-hexagon_ss.add(op_regs_generated)
-
op_attribs_generated = custom_target(
'op_attribs_generated.h.inc',
output: 'op_attribs_generated.h.inc',
@@ -110,7 +100,7 @@ hexagon_ss.add(opcodes_def_generated)
#
gen_dectree_import = executable(
'gen_dectree_import',
- 'gen_dectree_import.c', opcodes_def_generated, op_regs_generated,
+ 'gen_dectree_import.c', opcodes_def_generated,
native: true, build_by_default: false)
iset_py = custom_target(
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* RE: [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
2024-03-07 3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
@ 2024-03-29 1:04 ` Brian Cain
0 siblings, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:04 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/README | 1 -
> target/hexagon/gen_op_regs.py | 125 ----------------------------------
> target/hexagon/meson.build | 14 +---
> 3 files changed, 2 insertions(+), 138 deletions(-)
> delete mode 100755 target/hexagon/gen_op_regs.py
>
> diff --git a/target/hexagon/README b/target/hexagon/README
> index 746ebec378..065c05154d 100644
> --- a/target/hexagon/README
> +++ b/target/hexagon/README
> @@ -43,7 +43,6 @@ target/hexagon/gen_semantics.c. This step produces
> That file is consumed by the following python scripts to produce the indicated
> header files in <BUILD_DIR>/target/hexagon
> gen_opcodes_def.py -> opcodes_def_generated.h.inc
> - gen_op_regs.py -> op_regs_generated.h.inc
> gen_printinsn.py -> printinsn_generated.h.inc
> gen_op_attribs.py -> op_attribs_generated.h.inc
> gen_helper_protos.py -> helper_protos_generated.h.inc
> diff --git a/target/hexagon/gen_op_regs.py b/target/hexagon/gen_op_regs.py
> deleted file mode 100755
> index 7b7b33895a..0000000000
> --- a/target/hexagon/gen_op_regs.py
> +++ /dev/null
> @@ -1,125 +0,0 @@
> -#!/usr/bin/env python3
> -
> -##
> -## Copyright(c) 2019-2023 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
> -## the Free Software Foundation; either version 2 of the License, or
> -## (at your option) any later version.
> -##
> -## This program is distributed in the hope that it will be useful,
> -## but WITHOUT ANY WARRANTY; without even the implied warranty of
> -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -## GNU General Public License for more details.
> -##
> -## You should have received a copy of the GNU General Public License
> -## along with this program; if not, see <http://www.gnu.org/licenses/>.
> -##
> -
> -import sys
> -import re
> -import string
> -import hex_common
> -
> -
> -##
> -## Generate the register and immediate operands for each instruction
> -##
> -def calculate_regid_reg(tag):
> - def letter_inc(x):
> - return chr(ord(x) + 1)
> -
> - ordered_implregs = ["SP", "FP", "LR"]
> - srcdst_lett = "X"
> - src_lett = "S"
> - dst_lett = "D"
> - retstr = ""
> - mapdict = {}
> - for reg in ordered_implregs:
> - reg_rd = 0
> - reg_wr = 0
> - if ("A_IMPLICIT_WRITES_" + reg) in hex_common.attribdict[tag]:
> - reg_wr = 1
> - if reg_rd and reg_wr:
> - retstr += srcdst_lett
> - mapdict[srcdst_lett] = reg
> - srcdst_lett = letter_inc(srcdst_lett)
> - elif reg_rd:
> - retstr += src_lett
> - mapdict[src_lett] = reg
> - src_lett = letter_inc(src_lett)
> - elif reg_wr:
> - retstr += dst_lett
> - mapdict[dst_lett] = reg
> - dst_lett = letter_inc(dst_lett)
> - return retstr, mapdict
> -
> -
> -def calculate_regid_letters(tag):
> - retstr, mapdict = calculate_regid_reg(tag)
> - return retstr
> -
> -
> -def strip_reg_prefix(x):
> - y = x.replace("UREG.", "")
> - y = y.replace("MREG.", "")
> - return y.replace("GREG.", "")
> -
> -
> -def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.init_registers()
> - tagregs = hex_common.get_tagregs(full=True)
> - tagimms = hex_common.get_tagimms()
> -
> - with open(sys.argv[3], "w") as f:
> - for tag in hex_common.tags:
> - regs = tagregs[tag]
> - rregs = []
> - wregs = []
> - regids = ""
> - for regtype, regid, _, numregs in regs:
> - reg = hex_common.get_register(tag, regtype, regid)
> - if reg.is_read():
> - if regid[0] not in regids:
> - regids += regid[0]
> - rregs.append(regtype + regid + numregs)
> - if reg.is_written():
> - wregs.append(regtype + regid + numregs)
> - if regid[0] not in regids:
> - regids += regid[0]
> - for attrib in hex_common.attribdict[tag]:
> - if hex_common.attribinfo[attrib]["rreg"]:
> - rregs.append(strip_reg_prefix(attribinfo[attrib]["rreg"]))
> - if hex_common.attribinfo[attrib]["wreg"]:
> - wregs.append(strip_reg_prefix(attribinfo[attrib]["wreg"]))
> - regids += calculate_regid_letters(tag)
> - f.write(
> - f'REGINFO({tag},"{regids}",\t/*RD:*/\t"{",".join(rregs)}",'
> - f'\t/*WR:*/\t"{",".join(wregs)}")\n'
> - )
> -
> - for tag in hex_common.tags:
> - imms = tagimms[tag]
> - f.write(f"IMMINFO({tag}")
> - if not imms:
> - f.write(""",'u',0,0,'U',0,0""")
> - for sign, size, shamt in imms:
> - if sign == "r":
> - sign = "s"
> - if not shamt:
> - shamt = "0"
> - f.write(f""",'{sign}',{size},{shamt}""")
> - if len(imms) == 1:
> - if sign.isupper():
> - myu = "u"
> - else:
> - myu = "U"
> - f.write(f""",'{myu}',0,0""")
> - f.write(")\n")
> -
> -
> -if __name__ == "__main__":
> - main()
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index fb480afc03..b3a0944d3b 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -1,5 +1,5 @@
> ##
> -## Copyright(c) 2020-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +## Copyright(c) 2020-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
> @@ -45,7 +45,6 @@ hexagon_ss.add(semantics_generated)
> # shortcode_generated.h.inc
> # tcg_func_table_generated.c.inc
> # printinsn_generated.h.inc
> -# op_regs_generated.h.inc
> # op_attribs_generated.h.inc
> # opcodes_def_generated.h.inc
> #
> @@ -76,15 +75,6 @@ printinsn_generated = custom_target(
> )
> hexagon_ss.add(printinsn_generated)
>
> -op_regs_generated = custom_target(
> - 'op_regs_generated.h.inc',
> - output: 'op_regs_generated.h.inc',
> - depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_op_regs.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> -)
> -hexagon_ss.add(op_regs_generated)
> -
> op_attribs_generated = custom_target(
> 'op_attribs_generated.h.inc',
> output: 'op_attribs_generated.h.inc',
> @@ -110,7 +100,7 @@ hexagon_ss.add(opcodes_def_generated)
> #
> gen_dectree_import = executable(
> 'gen_dectree_import',
> - 'gen_dectree_import.c', opcodes_def_generated, op_regs_generated,
> + 'gen_dectree_import.c', opcodes_def_generated,
> native: true, build_by_default: false)
>
> iset_py = custom_target(
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (6 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 7/9] Hexagon (target/hexagon) Remove gen_op_regs.py Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-07 10:07 ` Philippe Mathieu-Daudé
2024-03-29 1:03 ` Brian Cain
2024-03-07 3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
8 siblings, 2 replies; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
This data structure is not used
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/opcodes.c | 7 ----
target/hexagon/README | 1 -
target/hexagon/gen_shortcode.py | 63 ---------------------------------
target/hexagon/meson.build | 10 ------
4 files changed, 81 deletions(-)
delete mode 100755 target/hexagon/gen_shortcode.py
diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
index 02ae9cf787..c8bde2f9e9 100644
--- a/target/hexagon/opcodes.c
+++ b/target/hexagon/opcodes.c
@@ -37,13 +37,6 @@ const char * const opcode_names[] = {
};
-const char * const opcode_short_semantics[] = {
-#define DEF_SHORTCODE(TAG, SHORTCODE) [TAG] = #SHORTCODE,
-#include "shortcode_generated.h.inc"
-#undef DEF_SHORTCODE
- NULL
-};
-
DECLARE_BITMAP(opcode_attribs[XX_LAST_OPCODE], A_ZZ_LASTATTRIB);
static void init_attribs(int tag, ...)
diff --git a/target/hexagon/README b/target/hexagon/README
index 065c05154d..65b4fcc0fa 100644
--- a/target/hexagon/README
+++ b/target/hexagon/README
@@ -46,7 +46,6 @@ header files in <BUILD_DIR>/target/hexagon
gen_printinsn.py -> printinsn_generated.h.inc
gen_op_attribs.py -> op_attribs_generated.h.inc
gen_helper_protos.py -> helper_protos_generated.h.inc
- gen_shortcode.py -> shortcode_generated.h.inc
gen_tcg_funcs.py -> tcg_funcs_generated.c.inc
gen_tcg_func_table.py -> tcg_func_table_generated.c.inc
gen_helper_funcs.py -> helper_funcs_generated.c.inc
diff --git a/target/hexagon/gen_shortcode.py b/target/hexagon/gen_shortcode.py
deleted file mode 100755
index deb94446c4..0000000000
--- a/target/hexagon/gen_shortcode.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python3
-
-##
-## Copyright(c) 2019-2023 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
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, see <http://www.gnu.org/licenses/>.
-##
-
-import sys
-import re
-import string
-import hex_common
-
-
-def gen_shortcode(f, tag):
- f.write(f"DEF_SHORTCODE({tag}, {hex_common.semdict[tag]})\n")
-
-
-def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.calculate_attribs()
- tagregs = hex_common.get_tagregs()
- tagimms = hex_common.get_tagimms()
-
- with open(sys.argv[3], "w") as f:
- f.write("#ifndef DEF_SHORTCODE\n")
- f.write("#define DEF_SHORTCODE(TAG,SHORTCODE) /* Nothing */\n")
- f.write("#endif\n")
-
- for tag in hex_common.tags:
- ## Skip the priv instructions
- if "A_PRIV" in hex_common.attribdict[tag]:
- continue
- ## Skip the guest instructions
- if "A_GUEST" in hex_common.attribdict[tag]:
- continue
- ## Skip the diag instructions
- if tag == "Y6_diag":
- continue
- if tag == "Y6_diag0":
- continue
- if tag == "Y6_diag1":
- continue
-
- gen_shortcode(f, tag)
-
- f.write("#undef DEF_SHORTCODE\n")
-
-
-if __name__ == "__main__":
- main()
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index b3a0944d3b..988e7489ba 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -42,21 +42,11 @@ hexagon_ss.add(semantics_generated)
#
# Step 2
# We use Python scripts to generate the following files
-# shortcode_generated.h.inc
# tcg_func_table_generated.c.inc
# printinsn_generated.h.inc
# op_attribs_generated.h.inc
# opcodes_def_generated.h.inc
#
-shortcode_generated = custom_target(
- 'shortcode_generated.h.inc',
- output: 'shortcode_generated.h.inc',
- depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_shortcode.py'), semantics_generated, attribs_def, '@OUTPUT@'],
-)
-hexagon_ss.add(shortcode_generated)
-
tcg_func_table_generated = custom_target(
'tcg_func_table_generated.c.inc',
output: 'tcg_func_table_generated.c.inc',
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
2024-03-07 3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
@ 2024-03-07 10:07 ` Philippe Mathieu-Daudé
2024-03-29 1:03 ` Brian Cain
1 sibling, 0 replies; 21+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-07 10:07 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
ale, anjo
On 7/3/24 04:23, Taylor Simpson wrote:
> This data structure is not used
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
> target/hexagon/opcodes.c | 7 ----
> target/hexagon/README | 1 -
> target/hexagon/gen_shortcode.py | 63 ---------------------------------
> target/hexagon/meson.build | 10 ------
> 4 files changed, 81 deletions(-)
> delete mode 100755 target/hexagon/gen_shortcode.py
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
2024-03-07 3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
2024-03-07 10:07 ` Philippe Mathieu-Daudé
@ 2024-03-29 1:03 ` Brian Cain
1 sibling, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:03 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> This data structure is not used
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/opcodes.c | 7 ----
> target/hexagon/README | 1 -
> target/hexagon/gen_shortcode.py | 63 ---------------------------------
> target/hexagon/meson.build | 10 ------
> 4 files changed, 81 deletions(-)
> delete mode 100755 target/hexagon/gen_shortcode.py
>
> diff --git a/target/hexagon/opcodes.c b/target/hexagon/opcodes.c
> index 02ae9cf787..c8bde2f9e9 100644
> --- a/target/hexagon/opcodes.c
> +++ b/target/hexagon/opcodes.c
> @@ -37,13 +37,6 @@ const char * const opcode_names[] = {
> };
>
>
> -const char * const opcode_short_semantics[] = {
> -#define DEF_SHORTCODE(TAG, SHORTCODE) [TAG] = #SHORTCODE,
> -#include "shortcode_generated.h.inc"
> -#undef DEF_SHORTCODE
> - NULL
> -};
> -
> DECLARE_BITMAP(opcode_attribs[XX_LAST_OPCODE], A_ZZ_LASTATTRIB);
>
> static void init_attribs(int tag, ...)
> diff --git a/target/hexagon/README b/target/hexagon/README
> index 065c05154d..65b4fcc0fa 100644
> --- a/target/hexagon/README
> +++ b/target/hexagon/README
> @@ -46,7 +46,6 @@ header files in <BUILD_DIR>/target/hexagon
> gen_printinsn.py -> printinsn_generated.h.inc
> gen_op_attribs.py -> op_attribs_generated.h.inc
> gen_helper_protos.py -> helper_protos_generated.h.inc
> - gen_shortcode.py -> shortcode_generated.h.inc
> gen_tcg_funcs.py -> tcg_funcs_generated.c.inc
> gen_tcg_func_table.py -> tcg_func_table_generated.c.inc
> gen_helper_funcs.py -> helper_funcs_generated.c.inc
> diff --git a/target/hexagon/gen_shortcode.py
> b/target/hexagon/gen_shortcode.py
> deleted file mode 100755
> index deb94446c4..0000000000
> --- a/target/hexagon/gen_shortcode.py
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -#!/usr/bin/env python3
> -
> -##
> -## Copyright(c) 2019-2023 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
> -## the Free Software Foundation; either version 2 of the License, or
> -## (at your option) any later version.
> -##
> -## This program is distributed in the hope that it will be useful,
> -## but WITHOUT ANY WARRANTY; without even the implied warranty of
> -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -## GNU General Public License for more details.
> -##
> -## You should have received a copy of the GNU General Public License
> -## along with this program; if not, see <http://www.gnu.org/licenses/>.
> -##
> -
> -import sys
> -import re
> -import string
> -import hex_common
> -
> -
> -def gen_shortcode(f, tag):
> - f.write(f"DEF_SHORTCODE({tag}, {hex_common.semdict[tag]})\n")
> -
> -
> -def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.calculate_attribs()
> - tagregs = hex_common.get_tagregs()
> - tagimms = hex_common.get_tagimms()
> -
> - with open(sys.argv[3], "w") as f:
> - f.write("#ifndef DEF_SHORTCODE\n")
> - f.write("#define DEF_SHORTCODE(TAG,SHORTCODE) /* Nothing */\n")
> - f.write("#endif\n")
> -
> - for tag in hex_common.tags:
> - ## Skip the priv instructions
> - if "A_PRIV" in hex_common.attribdict[tag]:
> - continue
> - ## Skip the guest instructions
> - if "A_GUEST" in hex_common.attribdict[tag]:
> - continue
> - ## Skip the diag instructions
> - if tag == "Y6_diag":
> - continue
> - if tag == "Y6_diag0":
> - continue
> - if tag == "Y6_diag1":
> - continue
> -
> - gen_shortcode(f, tag)
> -
> - f.write("#undef DEF_SHORTCODE\n")
> -
> -
> -if __name__ == "__main__":
> - main()
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index b3a0944d3b..988e7489ba 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -42,21 +42,11 @@ hexagon_ss.add(semantics_generated)
> #
> # Step 2
> # We use Python scripts to generate the following files
> -# shortcode_generated.h.inc
> # tcg_func_table_generated.c.inc
> # printinsn_generated.h.inc
> # op_attribs_generated.h.inc
> # opcodes_def_generated.h.inc
> #
> -shortcode_generated = custom_target(
> - 'shortcode_generated.h.inc',
> - output: 'shortcode_generated.h.inc',
> - depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_shortcode.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> -)
> -hexagon_ss.add(shortcode_generated)
> -
> tcg_func_table_generated = custom_target(
> 'tcg_func_table_generated.c.inc',
> output: 'tcg_func_table_generated.c.inc',
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
2024-03-07 3:23 [PATCH v2 0/9] Clean up .new decode and scripts Taylor Simpson
` (7 preceding siblings ...)
2024-03-07 3:23 ` [PATCH v2 8/9] Hexagon (target/hexagon) Remove gen_shortcode.py Taylor Simpson
@ 2024-03-07 3:23 ` Taylor Simpson
2024-03-07 10:09 ` Philippe Mathieu-Daudé
2024-03-29 1:03 ` Brian Cain
8 siblings, 2 replies; 21+ messages in thread
From: Taylor Simpson @ 2024-03-07 3:23 UTC (permalink / raw)
To: qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
philmd, ale, anjo, ltaylorsimpson
The attribinfo data structure is not used
Adjust the command-line arguments to the python scripts
Add hex_common.read_common_files for TCG/helper generation scripts
Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
---
target/hexagon/gen_analyze_funcs.py | 21 ++-------------
target/hexagon/gen_helper_funcs.py | 21 ++-------------
target/hexagon/gen_helper_protos.py | 21 ++-------------
target/hexagon/gen_idef_parser_funcs.py | 5 ++--
target/hexagon/gen_op_attribs.py | 5 ++--
target/hexagon/gen_opcodes_def.py | 4 +--
target/hexagon/gen_printinsn.py | 5 ++--
target/hexagon/gen_tcg_func_table.py | 5 ++--
target/hexagon/gen_tcg_funcs.py | 21 ++-------------
target/hexagon/hex_common.py | 35 +++++++++++++++----------
target/hexagon/meson.build | 31 +++++++++++-----------
11 files changed, 54 insertions(+), 120 deletions(-)
diff --git a/target/hexagon/gen_analyze_funcs.py b/target/hexagon/gen_analyze_funcs.py
index a9af666cef..b73b4e2349 100755
--- a/target/hexagon/gen_analyze_funcs.py
+++ b/target/hexagon/gen_analyze_funcs.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
+## Copyright(c) 2022-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
@@ -67,24 +67,7 @@ def gen_analyze_func(f, tag, regs, imms):
def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.read_overrides_file(sys.argv[3])
- hex_common.read_overrides_file(sys.argv[4])
- ## Whether or not idef-parser is enabled is
- ## determined by the number of arguments to
- ## this script:
- ##
- ## 5 args. -> not enabled,
- ## 6 args. -> idef-parser enabled.
- ##
- ## The 6:th arg. then holds a list of the successfully
- ## parsed instructions.
- is_idef_parser_enabled = len(sys.argv) > 6
- if is_idef_parser_enabled:
- hex_common.read_idef_parser_enabled_file(sys.argv[5])
- hex_common.calculate_attribs()
- hex_common.init_registers()
+ hex_common.read_common_files()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
diff --git a/target/hexagon/gen_helper_funcs.py b/target/hexagon/gen_helper_funcs.py
index 9cc3d69c49..e9685bff2f 100755
--- a/target/hexagon/gen_helper_funcs.py
+++ b/target/hexagon/gen_helper_funcs.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -102,24 +102,7 @@ def gen_helper_function(f, tag, tagregs, tagimms):
def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.read_overrides_file(sys.argv[3])
- hex_common.read_overrides_file(sys.argv[4])
- ## Whether or not idef-parser is enabled is
- ## determined by the number of arguments to
- ## this script:
- ##
- ## 5 args. -> not enabled,
- ## 6 args. -> idef-parser enabled.
- ##
- ## The 6:th arg. then holds a list of the successfully
- ## parsed instructions.
- is_idef_parser_enabled = len(sys.argv) > 6
- if is_idef_parser_enabled:
- hex_common.read_idef_parser_enabled_file(sys.argv[5])
- hex_common.calculate_attribs()
- hex_common.init_registers()
+ hex_common.read_common_files()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
diff --git a/target/hexagon/gen_helper_protos.py b/target/hexagon/gen_helper_protos.py
index c82b0f54e4..4cc72a1581 100755
--- a/target/hexagon/gen_helper_protos.py
+++ b/target/hexagon/gen_helper_protos.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -44,24 +44,7 @@ def gen_helper_prototype(f, tag, tagregs, tagimms):
def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.read_overrides_file(sys.argv[3])
- hex_common.read_overrides_file(sys.argv[4])
- ## Whether or not idef-parser is enabled is
- ## determined by the number of arguments to
- ## this script:
- ##
- ## 5 args. -> not enabled,
- ## 6 args. -> idef-parser enabled.
- ##
- ## The 6:th arg. then holds a list of the successfully
- ## parsed instructions.
- is_idef_parser_enabled = len(sys.argv) > 6
- if is_idef_parser_enabled:
- hex_common.read_idef_parser_enabled_file(sys.argv[5])
- hex_common.calculate_attribs()
- hex_common.init_registers()
+ hex_common.read_common_files()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
diff --git a/target/hexagon/gen_idef_parser_funcs.py b/target/hexagon/gen_idef_parser_funcs.py
index 550a48cb7b..eb494abba8 100644
--- a/target/hexagon/gen_idef_parser_funcs.py
+++ b/target/hexagon/gen_idef_parser_funcs.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 rev.ng Labs Srl. All Rights Reserved.
+## Copyright(c) 2019-2024 rev.ng Labs Srl. 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
@@ -44,13 +44,12 @@
##
def main():
hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
hex_common.calculate_attribs()
hex_common.init_registers()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
- with open(sys.argv[3], "w") as f:
+ with open(sys.argv[-1], "w") as f:
f.write('#include "macros.inc"\n\n')
for tag in hex_common.tags:
diff --git a/target/hexagon/gen_op_attribs.py b/target/hexagon/gen_op_attribs.py
index 41074b8573..99448220da 100755
--- a/target/hexagon/gen_op_attribs.py
+++ b/target/hexagon/gen_op_attribs.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -25,13 +25,12 @@
def main():
hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
hex_common.calculate_attribs()
##
## Generate all the attributes associated with each instruction
##
- with open(sys.argv[3], "w") as f:
+ with open(sys.argv[-1], "w") as f:
for tag in hex_common.tags:
f.write(
f"OP_ATTRIB({tag},ATTRIBS("
diff --git a/target/hexagon/gen_opcodes_def.py b/target/hexagon/gen_opcodes_def.py
index cddd868fe3..536f0eb68a 100755
--- a/target/hexagon/gen_opcodes_def.py
+++ b/target/hexagon/gen_opcodes_def.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -29,7 +29,7 @@ def main():
##
## Generate a list of all the opcodes
##
- with open(sys.argv[3], "w") as f:
+ with open(sys.argv[-1], "w") as f:
for tag in hex_common.tags:
f.write(f"OPCODE({tag}),\n")
diff --git a/target/hexagon/gen_printinsn.py b/target/hexagon/gen_printinsn.py
index e570bd7c6a..8bf4d0985c 100755
--- a/target/hexagon/gen_printinsn.py
+++ b/target/hexagon/gen_printinsn.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -97,11 +97,10 @@ def spacify(s):
def main():
hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
immext_casere = re.compile(r"IMMEXT\(([A-Za-z])")
- with open(sys.argv[3], "w") as f:
+ with open(sys.argv[-1], "w") as f:
for tag in hex_common.tags:
if not hex_common.behdict[tag]:
continue
diff --git a/target/hexagon/gen_tcg_func_table.py b/target/hexagon/gen_tcg_func_table.py
index f998ef0992..978ac1819b 100755
--- a/target/hexagon/gen_tcg_func_table.py
+++ b/target/hexagon/gen_tcg_func_table.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -25,12 +25,11 @@
def main():
hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
hex_common.calculate_attribs()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
- with open(sys.argv[3], "w") as f:
+ with open(sys.argv[-1], "w") as f:
f.write("#ifndef HEXAGON_FUNC_TABLE_H\n")
f.write("#define HEXAGON_FUNC_TABLE_H\n\n")
diff --git a/target/hexagon/gen_tcg_funcs.py b/target/hexagon/gen_tcg_funcs.py
index 3d8e3cb6a2..05aa0a7855 100755
--- a/target/hexagon/gen_tcg_funcs.py
+++ b/target/hexagon/gen_tcg_funcs.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
##
-## Copyright(c) 2019-2023 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
@@ -108,24 +108,7 @@ def gen_def_tcg_func(f, tag, tagregs, tagimms):
def main():
- hex_common.read_semantics_file(sys.argv[1])
- hex_common.read_attribs_file(sys.argv[2])
- hex_common.read_overrides_file(sys.argv[3])
- hex_common.read_overrides_file(sys.argv[4])
- hex_common.calculate_attribs()
- hex_common.init_registers()
- ## Whether or not idef-parser is enabled is
- ## determined by the number of arguments to
- ## this script:
- ##
- ## 5 args. -> not enabled,
- ## 6 args. -> idef-parser enabled.
- ##
- ## The 6:th arg. then holds a list of the successfully
- ## parsed instructions.
- is_idef_parser_enabled = len(sys.argv) > 6
- if is_idef_parser_enabled:
- hex_common.read_idef_parser_enabled_file(sys.argv[5])
+ is_idef_parser_enabled = hex_common.read_common_files()
tagregs = hex_common.get_tagregs()
tagimms = hex_common.get_tagimms()
diff --git a/target/hexagon/hex_common.py b/target/hexagon/hex_common.py
index 4bacef223f..43ca78b489 100755
--- a/target/hexagon/hex_common.py
+++ b/target/hexagon/hex_common.py
@@ -26,7 +26,6 @@
semdict = {} # tag -> semantics
attribdict = {} # tag -> attributes
macros = {} # macro -> macro information...
-attribinfo = {} # Register information and misc
registers = {} # register -> register functions
new_registers = {}
tags = [] # list of all tags
@@ -257,19 +256,6 @@ def read_semantics_file(name):
eval_line = ""
-def read_attribs_file(name):
- attribre = re.compile(
- r"DEF_ATTRIB\(([A-Za-z0-9_]+), ([^,]*), "
- + r'"([A-Za-z0-9_\.]*)", "([A-Za-z0-9_\.]*)"\)'
- )
- for line in open(name, "rt").readlines():
- if not attribre.match(line):
- continue
- (attrib_base, descr, rreg, wreg) = attribre.findall(line)[0]
- attrib_base = "A_" + attrib_base
- attribinfo[attrib_base] = {"rreg": rreg, "wreg": wreg, "descr": descr}
-
-
def read_overrides_file(name):
overridere = re.compile(r"#define fGEN_TCG_([A-Za-z0-9_]+)\(.*")
for line in open(name, "rt").readlines():
@@ -1143,3 +1129,24 @@ def helper_args(tag, regs, imms):
"uint32_t part1"
))
return args
+
+
+def read_common_files():
+ read_semantics_file(sys.argv[1])
+ read_overrides_file(sys.argv[2])
+ read_overrides_file(sys.argv[3])
+ ## Whether or not idef-parser is enabled is
+ ## determined by the number of arguments to
+ ## this script:
+ ##
+ ## 4 args. -> not enabled,
+ ## 5 args. -> idef-parser enabled.
+ ##
+ ## The 5:th arg. then holds a list of the successfully
+ ## parsed instructions.
+ is_idef_parser_enabled = len(sys.argv) > 5
+ if is_idef_parser_enabled:
+ read_idef_parser_enabled_file(sys.argv[4])
+ calculate_attribs()
+ init_registers()
+ return is_idef_parser_enabled
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
index 988e7489ba..b0b253aa6b 100644
--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -18,7 +18,6 @@
hexagon_ss = ss.source_set()
hex_common_py = 'hex_common.py'
-attribs_def = meson.current_source_dir() / 'attribs_def.h.inc'
gen_tcg_h = meson.current_source_dir() / 'gen_tcg.h'
gen_tcg_hvx_h = meson.current_source_dir() / 'gen_tcg_hvx.h'
idef_parser_dir = meson.current_source_dir() / 'idef-parser'
@@ -51,8 +50,8 @@ tcg_func_table_generated = custom_target(
'tcg_func_table_generated.c.inc',
output: 'tcg_func_table_generated.c.inc',
depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_tcg_func_table.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+ depend_files: [hex_common_py],
+ command: [python, files('gen_tcg_func_table.py'), semantics_generated, '@OUTPUT@'],
)
hexagon_ss.add(tcg_func_table_generated)
@@ -60,8 +59,8 @@ printinsn_generated = custom_target(
'printinsn_generated.h.inc',
output: 'printinsn_generated.h.inc',
depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_printinsn.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+ depend_files: [hex_common_py],
+ command: [python, files('gen_printinsn.py'), semantics_generated, '@OUTPUT@'],
)
hexagon_ss.add(printinsn_generated)
@@ -69,8 +68,8 @@ op_attribs_generated = custom_target(
'op_attribs_generated.h.inc',
output: 'op_attribs_generated.h.inc',
depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_op_attribs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+ depend_files: [hex_common_py],
+ command: [python, files('gen_op_attribs.py'), semantics_generated, '@OUTPUT@'],
)
hexagon_ss.add(op_attribs_generated)
@@ -78,8 +77,8 @@ opcodes_def_generated = custom_target(
'opcodes_def_generated.h.inc',
output: 'opcodes_def_generated.h.inc',
depends: [semantics_generated],
- depend_files: [hex_common_py, attribs_def],
- command: [python, files('gen_opcodes_def.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+ depend_files: [hex_common_py],
+ command: [python, files('gen_opcodes_def.py'), semantics_generated, '@OUTPUT@'],
)
hexagon_ss.add(opcodes_def_generated)
@@ -278,7 +277,7 @@ if idef_parser_enabled and 'hexagon-linux-user' in target_dirs
output: 'idef_parser_input.h.inc',
depends: [semantics_generated],
depend_files: [hex_common_py],
- command: [python, files('gen_idef_parser_funcs.py'), semantics_generated, attribs_def, '@OUTPUT@'],
+ command: [python, files('gen_idef_parser_funcs.py'), semantics_generated, '@OUTPUT@'],
)
preprocessed_idef_parser_input_generated = custom_target(
@@ -347,12 +346,12 @@ if idef_parser_enabled and 'hexagon-linux-user' in target_dirs
# Setup input and dependencies for the next step, this depends on whether or
# not idef-parser is enabled
helper_dep = [semantics_generated, idef_generated_tcg_c, idef_generated_tcg]
- helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h, idef_generated_list]
+ helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h, idef_generated_list]
else
# Setup input and dependencies for the next step, this depends on whether or
# not idef-parser is enabled
helper_dep = [semantics_generated]
- helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h]
+ helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h]
endif
#
@@ -366,7 +365,7 @@ helper_protos_generated = custom_target(
'helper_protos_generated.h.inc',
output: 'helper_protos_generated.h.inc',
depends: helper_dep,
- depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+ depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
command: [python, files('gen_helper_protos.py'), helper_in, '@OUTPUT@'],
)
hexagon_ss.add(helper_protos_generated)
@@ -375,7 +374,7 @@ helper_funcs_generated = custom_target(
'helper_funcs_generated.c.inc',
output: 'helper_funcs_generated.c.inc',
depends: helper_dep,
- depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+ depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
command: [python, files('gen_helper_funcs.py'), helper_in, '@OUTPUT@'],
)
hexagon_ss.add(helper_funcs_generated)
@@ -384,7 +383,7 @@ tcg_funcs_generated = custom_target(
'tcg_funcs_generated.c.inc',
output: 'tcg_funcs_generated.c.inc',
depends: helper_dep,
- depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+ depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
command: [python, files('gen_tcg_funcs.py'), helper_in, '@OUTPUT@'],
)
hexagon_ss.add(tcg_funcs_generated)
@@ -393,7 +392,7 @@ analyze_funcs_generated = custom_target(
'analyze_funcs_generated.c.inc',
output: 'analyze_funcs_generated.c.inc',
depends: helper_dep,
- depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
+ depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
command: [python, files('gen_analyze_funcs.py'), helper_in, '@OUTPUT@'],
)
hexagon_ss.add(analyze_funcs_generated)
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
2024-03-07 3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
@ 2024-03-07 10:09 ` Philippe Mathieu-Daudé
2024-03-29 1:03 ` Brian Cain
1 sibling, 0 replies; 21+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-07 10:09 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel
Cc: bcain, quic_mathbern, sidneym, quic_mliebel, richard.henderson,
ale, anjo
On 7/3/24 04:23, Taylor Simpson wrote:
> The attribinfo data structure is not used
> Adjust the command-line arguments to the python scripts
> Add hex_common.read_common_files for TCG/helper generation scripts
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
> target/hexagon/gen_analyze_funcs.py | 21 ++-------------
> target/hexagon/gen_helper_funcs.py | 21 ++-------------
> target/hexagon/gen_helper_protos.py | 21 ++-------------
> target/hexagon/gen_idef_parser_funcs.py | 5 ++--
> target/hexagon/gen_op_attribs.py | 5 ++--
> target/hexagon/gen_opcodes_def.py | 4 +--
> target/hexagon/gen_printinsn.py | 5 ++--
> target/hexagon/gen_tcg_func_table.py | 5 ++--
> target/hexagon/gen_tcg_funcs.py | 21 ++-------------
> target/hexagon/hex_common.py | 35 +++++++++++++++----------
> target/hexagon/meson.build | 31 +++++++++++-----------
> 11 files changed, 54 insertions(+), 120 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file
2024-03-07 3:23 ` [PATCH v2 9/9] Hexagon (target/hexagon) Remove hex_common.read_attribs_file Taylor Simpson
2024-03-07 10:09 ` Philippe Mathieu-Daudé
@ 2024-03-29 1:03 ` Brian Cain
1 sibling, 0 replies; 21+ messages in thread
From: Brian Cain @ 2024-03-29 1:03 UTC (permalink / raw)
To: Taylor Simpson, qemu-devel@nongnu.org
Cc: Matheus Bernardino (QUIC), Sid Manning, Marco Liebel (QUIC),
richard.henderson@linaro.org, philmd@linaro.org, ale@rev.ng,
anjo@rev.ng
> -----Original Message-----
> From: Taylor Simpson <ltaylorsimpson@gmail.com>
> Sent: Wednesday, March 6, 2024 9:23 PM
> To: qemu-devel@nongnu.org
> Cc: Brian Cain <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>; Sid Manning <sidneym@quicinc.com>;
> Marco Liebel (QUIC) <quic_mliebel@quicinc.com>;
> richard.henderson@linaro.org; philmd@linaro.org; ale@rev.ng; anjo@rev.ng;
> ltaylorsimpson@gmail.com
> Subject: [PATCH v2 9/9] Hexagon (target/hexagon) Remove
> hex_common.read_attribs_file
>
> WARNING: This email originated from outside of Qualcomm. Please be wary
> of any links or attachments, and do not enable macros.
>
> The attribinfo data structure is not used
> Adjust the command-line arguments to the python scripts
> Add hex_common.read_common_files for TCG/helper generation scripts
>
> Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com>
> ---
Reviewed-by: Brian Cain <bcain@quicinc.com>
> target/hexagon/gen_analyze_funcs.py | 21 ++-------------
> target/hexagon/gen_helper_funcs.py | 21 ++-------------
> target/hexagon/gen_helper_protos.py | 21 ++-------------
> target/hexagon/gen_idef_parser_funcs.py | 5 ++--
> target/hexagon/gen_op_attribs.py | 5 ++--
> target/hexagon/gen_opcodes_def.py | 4 +--
> target/hexagon/gen_printinsn.py | 5 ++--
> target/hexagon/gen_tcg_func_table.py | 5 ++--
> target/hexagon/gen_tcg_funcs.py | 21 ++-------------
> target/hexagon/hex_common.py | 35 +++++++++++++++----------
> target/hexagon/meson.build | 31 +++++++++++-----------
> 11 files changed, 54 insertions(+), 120 deletions(-)
>
> diff --git a/target/hexagon/gen_analyze_funcs.py
> b/target/hexagon/gen_analyze_funcs.py
> index a9af666cef..b73b4e2349 100755
> --- a/target/hexagon/gen_analyze_funcs.py
> +++ b/target/hexagon/gen_analyze_funcs.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights
> Reserved.
> +## Copyright(c) 2022-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
> @@ -67,24 +67,7 @@ def gen_analyze_func(f, tag, regs, imms):
>
>
> def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.read_overrides_file(sys.argv[3])
> - hex_common.read_overrides_file(sys.argv[4])
> - ## Whether or not idef-parser is enabled is
> - ## determined by the number of arguments to
> - ## this script:
> - ##
> - ## 5 args. -> not enabled,
> - ## 6 args. -> idef-parser enabled.
> - ##
> - ## The 6:th arg. then holds a list of the successfully
> - ## parsed instructions.
> - is_idef_parser_enabled = len(sys.argv) > 6
> - if is_idef_parser_enabled:
> - hex_common.read_idef_parser_enabled_file(sys.argv[5])
> - hex_common.calculate_attribs()
> - hex_common.init_registers()
> + hex_common.read_common_files()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> diff --git a/target/hexagon/gen_helper_funcs.py
> b/target/hexagon/gen_helper_funcs.py
> index 9cc3d69c49..e9685bff2f 100755
> --- a/target/hexagon/gen_helper_funcs.py
> +++ b/target/hexagon/gen_helper_funcs.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -102,24 +102,7 @@ def gen_helper_function(f, tag, tagregs, tagimms):
>
>
> def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.read_overrides_file(sys.argv[3])
> - hex_common.read_overrides_file(sys.argv[4])
> - ## Whether or not idef-parser is enabled is
> - ## determined by the number of arguments to
> - ## this script:
> - ##
> - ## 5 args. -> not enabled,
> - ## 6 args. -> idef-parser enabled.
> - ##
> - ## The 6:th arg. then holds a list of the successfully
> - ## parsed instructions.
> - is_idef_parser_enabled = len(sys.argv) > 6
> - if is_idef_parser_enabled:
> - hex_common.read_idef_parser_enabled_file(sys.argv[5])
> - hex_common.calculate_attribs()
> - hex_common.init_registers()
> + hex_common.read_common_files()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> diff --git a/target/hexagon/gen_helper_protos.py
> b/target/hexagon/gen_helper_protos.py
> index c82b0f54e4..4cc72a1581 100755
> --- a/target/hexagon/gen_helper_protos.py
> +++ b/target/hexagon/gen_helper_protos.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -44,24 +44,7 @@ def gen_helper_prototype(f, tag, tagregs, tagimms):
>
>
> def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.read_overrides_file(sys.argv[3])
> - hex_common.read_overrides_file(sys.argv[4])
> - ## Whether or not idef-parser is enabled is
> - ## determined by the number of arguments to
> - ## this script:
> - ##
> - ## 5 args. -> not enabled,
> - ## 6 args. -> idef-parser enabled.
> - ##
> - ## The 6:th arg. then holds a list of the successfully
> - ## parsed instructions.
> - is_idef_parser_enabled = len(sys.argv) > 6
> - if is_idef_parser_enabled:
> - hex_common.read_idef_parser_enabled_file(sys.argv[5])
> - hex_common.calculate_attribs()
> - hex_common.init_registers()
> + hex_common.read_common_files()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> diff --git a/target/hexagon/gen_idef_parser_funcs.py
> b/target/hexagon/gen_idef_parser_funcs.py
> index 550a48cb7b..eb494abba8 100644
> --- a/target/hexagon/gen_idef_parser_funcs.py
> +++ b/target/hexagon/gen_idef_parser_funcs.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 rev.ng Labs Srl. All Rights Reserved.
> +## Copyright(c) 2019-2024 rev.ng Labs Srl. 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
> @@ -44,13 +44,12 @@
> ##
> def main():
> hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> hex_common.calculate_attribs()
> hex_common.init_registers()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> - with open(sys.argv[3], "w") as f:
> + with open(sys.argv[-1], "w") as f:
> f.write('#include "macros.inc"\n\n')
>
> for tag in hex_common.tags:
> diff --git a/target/hexagon/gen_op_attribs.py
> b/target/hexagon/gen_op_attribs.py
> index 41074b8573..99448220da 100755
> --- a/target/hexagon/gen_op_attribs.py
> +++ b/target/hexagon/gen_op_attribs.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -25,13 +25,12 @@
>
> def main():
> hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> hex_common.calculate_attribs()
>
> ##
> ## Generate all the attributes associated with each instruction
> ##
> - with open(sys.argv[3], "w") as f:
> + with open(sys.argv[-1], "w") as f:
> for tag in hex_common.tags:
> f.write(
> f"OP_ATTRIB({tag},ATTRIBS("
> diff --git a/target/hexagon/gen_opcodes_def.py
> b/target/hexagon/gen_opcodes_def.py
> index cddd868fe3..536f0eb68a 100755
> --- a/target/hexagon/gen_opcodes_def.py
> +++ b/target/hexagon/gen_opcodes_def.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -29,7 +29,7 @@ def main():
> ##
> ## Generate a list of all the opcodes
> ##
> - with open(sys.argv[3], "w") as f:
> + with open(sys.argv[-1], "w") as f:
> for tag in hex_common.tags:
> f.write(f"OPCODE({tag}),\n")
>
> diff --git a/target/hexagon/gen_printinsn.py
> b/target/hexagon/gen_printinsn.py
> index e570bd7c6a..8bf4d0985c 100755
> --- a/target/hexagon/gen_printinsn.py
> +++ b/target/hexagon/gen_printinsn.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -97,11 +97,10 @@ def spacify(s):
>
> def main():
> hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
>
> immext_casere = re.compile(r"IMMEXT\(([A-Za-z])")
>
> - with open(sys.argv[3], "w") as f:
> + with open(sys.argv[-1], "w") as f:
> for tag in hex_common.tags:
> if not hex_common.behdict[tag]:
> continue
> diff --git a/target/hexagon/gen_tcg_func_table.py
> b/target/hexagon/gen_tcg_func_table.py
> index f998ef0992..978ac1819b 100755
> --- a/target/hexagon/gen_tcg_func_table.py
> +++ b/target/hexagon/gen_tcg_func_table.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -25,12 +25,11 @@
>
> def main():
> hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> hex_common.calculate_attribs()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> - with open(sys.argv[3], "w") as f:
> + with open(sys.argv[-1], "w") as f:
> f.write("#ifndef HEXAGON_FUNC_TABLE_H\n")
> f.write("#define HEXAGON_FUNC_TABLE_H\n\n")
>
> diff --git a/target/hexagon/gen_tcg_funcs.py
> b/target/hexagon/gen_tcg_funcs.py
> index 3d8e3cb6a2..05aa0a7855 100755
> --- a/target/hexagon/gen_tcg_funcs.py
> +++ b/target/hexagon/gen_tcg_funcs.py
> @@ -1,7 +1,7 @@
> #!/usr/bin/env python3
>
> ##
> -## Copyright(c) 2019-2023 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
> @@ -108,24 +108,7 @@ def gen_def_tcg_func(f, tag, tagregs, tagimms):
>
>
> def main():
> - hex_common.read_semantics_file(sys.argv[1])
> - hex_common.read_attribs_file(sys.argv[2])
> - hex_common.read_overrides_file(sys.argv[3])
> - hex_common.read_overrides_file(sys.argv[4])
> - hex_common.calculate_attribs()
> - hex_common.init_registers()
> - ## Whether or not idef-parser is enabled is
> - ## determined by the number of arguments to
> - ## this script:
> - ##
> - ## 5 args. -> not enabled,
> - ## 6 args. -> idef-parser enabled.
> - ##
> - ## The 6:th arg. then holds a list of the successfully
> - ## parsed instructions.
> - is_idef_parser_enabled = len(sys.argv) > 6
> - if is_idef_parser_enabled:
> - hex_common.read_idef_parser_enabled_file(sys.argv[5])
> + is_idef_parser_enabled = hex_common.read_common_files()
> tagregs = hex_common.get_tagregs()
> tagimms = hex_common.get_tagimms()
>
> diff --git a/target/hexagon/hex_common.py
> b/target/hexagon/hex_common.py
> index 4bacef223f..43ca78b489 100755
> --- a/target/hexagon/hex_common.py
> +++ b/target/hexagon/hex_common.py
> @@ -26,7 +26,6 @@
> semdict = {} # tag -> semantics
> attribdict = {} # tag -> attributes
> macros = {} # macro -> macro information...
> -attribinfo = {} # Register information and misc
> registers = {} # register -> register functions
> new_registers = {}
> tags = [] # list of all tags
> @@ -257,19 +256,6 @@ def read_semantics_file(name):
> eval_line = ""
>
>
> -def read_attribs_file(name):
> - attribre = re.compile(
> - r"DEF_ATTRIB\(([A-Za-z0-9_]+), ([^,]*), "
> - + r'"([A-Za-z0-9_\.]*)", "([A-Za-z0-9_\.]*)"\)'
> - )
> - for line in open(name, "rt").readlines():
> - if not attribre.match(line):
> - continue
> - (attrib_base, descr, rreg, wreg) = attribre.findall(line)[0]
> - attrib_base = "A_" + attrib_base
> - attribinfo[attrib_base] = {"rreg": rreg, "wreg": wreg, "descr": descr}
> -
> -
> def read_overrides_file(name):
> overridere = re.compile(r"#define fGEN_TCG_([A-Za-z0-9_]+)\(.*")
> for line in open(name, "rt").readlines():
> @@ -1143,3 +1129,24 @@ def helper_args(tag, regs, imms):
> "uint32_t part1"
> ))
> return args
> +
> +
> +def read_common_files():
> + read_semantics_file(sys.argv[1])
> + read_overrides_file(sys.argv[2])
> + read_overrides_file(sys.argv[3])
> + ## Whether or not idef-parser is enabled is
> + ## determined by the number of arguments to
> + ## this script:
> + ##
> + ## 4 args. -> not enabled,
> + ## 5 args. -> idef-parser enabled.
> + ##
> + ## The 5:th arg. then holds a list of the successfully
> + ## parsed instructions.
> + is_idef_parser_enabled = len(sys.argv) > 5
> + if is_idef_parser_enabled:
> + read_idef_parser_enabled_file(sys.argv[4])
> + calculate_attribs()
> + init_registers()
> + return is_idef_parser_enabled
> diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build
> index 988e7489ba..b0b253aa6b 100644
> --- a/target/hexagon/meson.build
> +++ b/target/hexagon/meson.build
> @@ -18,7 +18,6 @@
> hexagon_ss = ss.source_set()
>
> hex_common_py = 'hex_common.py'
> -attribs_def = meson.current_source_dir() / 'attribs_def.h.inc'
> gen_tcg_h = meson.current_source_dir() / 'gen_tcg.h'
> gen_tcg_hvx_h = meson.current_source_dir() / 'gen_tcg_hvx.h'
> idef_parser_dir = meson.current_source_dir() / 'idef-parser'
> @@ -51,8 +50,8 @@ tcg_func_table_generated = custom_target(
> 'tcg_func_table_generated.c.inc',
> output: 'tcg_func_table_generated.c.inc',
> depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_tcg_func_table.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> + depend_files: [hex_common_py],
> + command: [python, files('gen_tcg_func_table.py'), semantics_generated,
> '@OUTPUT@'],
> )
> hexagon_ss.add(tcg_func_table_generated)
>
> @@ -60,8 +59,8 @@ printinsn_generated = custom_target(
> 'printinsn_generated.h.inc',
> output: 'printinsn_generated.h.inc',
> depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_printinsn.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> + depend_files: [hex_common_py],
> + command: [python, files('gen_printinsn.py'), semantics_generated,
> '@OUTPUT@'],
> )
> hexagon_ss.add(printinsn_generated)
>
> @@ -69,8 +68,8 @@ op_attribs_generated = custom_target(
> 'op_attribs_generated.h.inc',
> output: 'op_attribs_generated.h.inc',
> depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_op_attribs.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> + depend_files: [hex_common_py],
> + command: [python, files('gen_op_attribs.py'), semantics_generated,
> '@OUTPUT@'],
> )
> hexagon_ss.add(op_attribs_generated)
>
> @@ -78,8 +77,8 @@ opcodes_def_generated = custom_target(
> 'opcodes_def_generated.h.inc',
> output: 'opcodes_def_generated.h.inc',
> depends: [semantics_generated],
> - depend_files: [hex_common_py, attribs_def],
> - command: [python, files('gen_opcodes_def.py'), semantics_generated,
> attribs_def, '@OUTPUT@'],
> + depend_files: [hex_common_py],
> + command: [python, files('gen_opcodes_def.py'), semantics_generated,
> '@OUTPUT@'],
> )
> hexagon_ss.add(opcodes_def_generated)
>
> @@ -278,7 +277,7 @@ if idef_parser_enabled and 'hexagon-linux-user' in
> target_dirs
> output: 'idef_parser_input.h.inc',
> depends: [semantics_generated],
> depend_files: [hex_common_py],
> - command: [python, files('gen_idef_parser_funcs.py'),
> semantics_generated, attribs_def, '@OUTPUT@'],
> + command: [python, files('gen_idef_parser_funcs.py'),
> semantics_generated, '@OUTPUT@'],
> )
>
> preprocessed_idef_parser_input_generated = custom_target(
> @@ -347,12 +346,12 @@ if idef_parser_enabled and 'hexagon-linux-user' in
> target_dirs
> # Setup input and dependencies for the next step, this depends on whether
> or
> # not idef-parser is enabled
> helper_dep = [semantics_generated, idef_generated_tcg_c,
> idef_generated_tcg]
> - helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h,
> idef_generated_list]
> + helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h,
> idef_generated_list]
> else
> # Setup input and dependencies for the next step, this depends on whether
> or
> # not idef-parser is enabled
> helper_dep = [semantics_generated]
> - helper_in = [semantics_generated, attribs_def, gen_tcg_h, gen_tcg_hvx_h]
> + helper_in = [semantics_generated, gen_tcg_h, gen_tcg_hvx_h]
> endif
>
> #
> @@ -366,7 +365,7 @@ helper_protos_generated = custom_target(
> 'helper_protos_generated.h.inc',
> output: 'helper_protos_generated.h.inc',
> depends: helper_dep,
> - depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> + depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
> command: [python, files('gen_helper_protos.py'), helper_in,
> '@OUTPUT@'],
> )
> hexagon_ss.add(helper_protos_generated)
> @@ -375,7 +374,7 @@ helper_funcs_generated = custom_target(
> 'helper_funcs_generated.c.inc',
> output: 'helper_funcs_generated.c.inc',
> depends: helper_dep,
> - depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> + depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
> command: [python, files('gen_helper_funcs.py'), helper_in, '@OUTPUT@'],
> )
> hexagon_ss.add(helper_funcs_generated)
> @@ -384,7 +383,7 @@ tcg_funcs_generated = custom_target(
> 'tcg_funcs_generated.c.inc',
> output: 'tcg_funcs_generated.c.inc',
> depends: helper_dep,
> - depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> + depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
> command: [python, files('gen_tcg_funcs.py'), helper_in, '@OUTPUT@'],
> )
> hexagon_ss.add(tcg_funcs_generated)
> @@ -393,7 +392,7 @@ analyze_funcs_generated = custom_target(
> 'analyze_funcs_generated.c.inc',
> output: 'analyze_funcs_generated.c.inc',
> depends: helper_dep,
> - depend_files: [hex_common_py, attribs_def, gen_tcg_h, gen_tcg_hvx_h],
> + depend_files: [hex_common_py, gen_tcg_h, gen_tcg_hvx_h],
> command: [python, files('gen_analyze_funcs.py'), helper_in,
> '@OUTPUT@'],
> )
> hexagon_ss.add(analyze_funcs_generated)
> --
> 2.34.1
^ permalink raw reply [flat|nested] 21+ messages in thread