blob: fd2bfd0f36bdd4c1f697896ca78da1dfae625b09 [file] [log] [blame]
Taylor Simpson793958c2021-02-07 23:46:10 -06001#!/usr/bin/env python3
2
3##
Taylor Simpson2f0a7712024-02-13 21:27:26 -07004## Copyright(c) 2019-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
Taylor Simpson793958c2021-02-07 23:46:10 -06005##
6## This program is free software; you can redistribute it and/or modify
7## it under the terms of the GNU General Public License as published by
8## the Free Software Foundation; either version 2 of the License, or
9## (at your option) any later version.
10##
11## This program is distributed in the hope that it will be useful,
12## but WITHOUT ANY WARRANTY; without even the implied warranty of
13## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14## GNU General Public License for more details.
15##
16## You should have received a copy of the GNU General Public License
17## along with this program; if not, see <http://www.gnu.org/licenses/>.
18##
19
20import sys
21import re
22import string
23import hex_common
24
25##
Taylor Simpson793958c2021-02-07 23:46:10 -060026## Generate the DEF_HELPER prototype for an instruction
27## For A2_add: Rd32=add(Rs32,Rt32)
28## We produce:
29## DEF_HELPER_3(A2_add, s32, env, s32, s32)
30##
31def gen_helper_prototype(f, tag, tagregs, tagimms):
32 regs = tagregs[tag]
33 imms = tagimms[tag]
34
Taylor Simpsonc5689192023-12-10 15:07:06 -070035 declared = []
36 ret_type = hex_common.helper_ret_type(tag, regs).proto_arg
37 declared.append(ret_type)
Taylor Simpson793958c2021-02-07 23:46:10 -060038
Taylor Simpsonc5689192023-12-10 15:07:06 -070039 for arg in hex_common.helper_args(tag, regs, imms):
40 declared.append(arg.proto_arg)
Taylor Simpson793958c2021-02-07 23:46:10 -060041
Taylor Simpsonc5689192023-12-10 15:07:06 -070042 arguments = ", ".join(declared)
Taylor Simpson2f0a7712024-02-13 21:27:26 -070043
44 ## Add the TCG_CALL_NO_RWG_SE flag to helpers that don't take the env
45 ## argument and aren't HVX instructions. Since HVX instructions take
46 ## pointers to their arguments, they will have side effects.
47 if hex_common.need_env(tag) or hex_common.is_hvx_insn(tag):
48 f.write(f"DEF_HELPER_{len(declared) - 1}({tag}, {arguments})\n")
49 else:
50 f.write(f"DEF_HELPER_FLAGS_{len(declared) - 1}({tag}, "
51 f"TCG_CALL_NO_RWG_SE, {arguments})\n")
Marco Liebel5bb322e2023-03-20 02:25:33 -070052
Taylor Simpson793958c2021-02-07 23:46:10 -060053
54def main():
Taylor Simpsona4696662024-03-06 20:23:27 -070055 hex_common.read_common_files()
Taylor Simpson793958c2021-02-07 23:46:10 -060056 tagregs = hex_common.get_tagregs()
57 tagimms = hex_common.get_tagimms()
58
Alessandro Di Federicoe71fdc42022-09-23 19:38:30 +020059 output_file = sys.argv[-1]
Marco Liebel5bb322e2023-03-20 02:25:33 -070060 with open(output_file, "w") as f:
Taylor Simpson793958c2021-02-07 23:46:10 -060061 for tag in hex_common.tags:
62 ## Skip the priv instructions
Marco Liebel5bb322e2023-03-20 02:25:33 -070063 if "A_PRIV" in hex_common.attribdict[tag]:
Taylor Simpson793958c2021-02-07 23:46:10 -060064 continue
65 ## Skip the guest instructions
Marco Liebel5bb322e2023-03-20 02:25:33 -070066 if "A_GUEST" in hex_common.attribdict[tag]:
Taylor Simpson793958c2021-02-07 23:46:10 -060067 continue
68 ## Skip the diag instructions
Marco Liebel5bb322e2023-03-20 02:25:33 -070069 if tag == "Y6_diag":
Taylor Simpson793958c2021-02-07 23:46:10 -060070 continue
Marco Liebel5bb322e2023-03-20 02:25:33 -070071 if tag == "Y6_diag0":
Taylor Simpson793958c2021-02-07 23:46:10 -060072 continue
Marco Liebel5bb322e2023-03-20 02:25:33 -070073 if tag == "Y6_diag1":
Taylor Simpson793958c2021-02-07 23:46:10 -060074 continue
75
Marco Liebel5bb322e2023-03-20 02:25:33 -070076 if hex_common.skip_qemu_helper(tag):
Taylor Simpson793958c2021-02-07 23:46:10 -060077 continue
Marco Liebel5bb322e2023-03-20 02:25:33 -070078 if hex_common.is_idef_parser_enabled(tag):
Alessandro Di Federicoe71fdc42022-09-23 19:38:30 +020079 continue
Taylor Simpson793958c2021-02-07 23:46:10 -060080
81 gen_helper_prototype(f, tag, tagregs, tagimms)
82
Marco Liebel5bb322e2023-03-20 02:25:33 -070083
Taylor Simpson793958c2021-02-07 23:46:10 -060084if __name__ == "__main__":
85 main()