util: add helper APIs for dealing with inotify in portable manner
[qemu/ar7.git] / scripts / tracetool / format / tcg_helper_wrapper_h.py
blobff534475120db08a9b64d0c619dd23063f039d02
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
4 """
5 Generate trace/generated-helpers-wrappers.h.
6 """
8 __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
9 __copyright__ = "Copyright 2012-2016, Lluís Vilanova <vilanova@ac.upc.edu>"
10 __license__ = "GPL version 2 or (at your option) any later version"
12 __maintainer__ = "Stefan Hajnoczi"
13 __email__ = "stefanha@linux.vnet.ibm.com"
16 from tracetool import out
17 from tracetool.transform import *
18 import tracetool.vcpu
21 def generate(events, backend, group):
22 events = [e for e in events
23 if "disable" not in e.properties]
25 out('/* This file is autogenerated by tracetool, do not edit. */',
26 '',
27 '#define tcg_temp_new_nop(v) (v)',
28 '#define tcg_temp_free_nop(v)',
29 '',
32 for e in events:
33 if "tcg-exec" not in e.properties:
34 continue
36 # tracetool.generate always transforms types to host
37 e_args = tracetool.vcpu.transform_args("tcg_helper_c", e.original, "wrapper")
39 # mixed-type to TCG helper bridge
40 args_tcg_compat = e_args.transform(HOST_2_TCG_COMPAT)
42 code_new = [
43 "%(tcg_type)s __%(name)s = %(tcg_func)s(%(name)s);" %
44 {"tcg_type": transform_type(type_, HOST_2_TCG),
45 "tcg_func": transform_type(type_, HOST_2_TCG_TMP_NEW),
46 "name": name}
47 for (type_, name) in args_tcg_compat
50 code_free = [
51 "%(tcg_func)s(__%(name)s);" %
52 {"tcg_func": transform_type(type_, HOST_2_TCG_TMP_FREE),
53 "name": name}
54 for (type_, name) in args_tcg_compat
57 gen_name = "gen_helper_" + e.api()
59 out('static inline void %(name)s(%(args)s)',
60 '{',
61 ' %(code_new)s',
62 ' %(proxy_name)s(%(tmp_names)s);',
63 ' %(code_free)s',
64 '}',
65 name=gen_name,
66 args=e_args,
67 proxy_name=gen_name + "_proxy",
68 code_new="\n ".join(code_new),
69 code_free="\n ".join(code_free),
70 tmp_names=", ".join(["__%s" % name for _, name in e_args]),