1e3c00c2eSTaylor Simpson /*
2e3c00c2eSTaylor Simpson * Copyright(c) 2019-2021 Qualcomm Innovation Center, Inc. All Rights Reserved.
3e3c00c2eSTaylor Simpson *
4e3c00c2eSTaylor Simpson * This program is free software; you can redistribute it and/or modify
5e3c00c2eSTaylor Simpson * it under the terms of the GNU General Public License as published by
6e3c00c2eSTaylor Simpson * the Free Software Foundation; either version 2 of the License, or
7e3c00c2eSTaylor Simpson * (at your option) any later version.
8e3c00c2eSTaylor Simpson *
9e3c00c2eSTaylor Simpson * This program is distributed in the hope that it will be useful,
10e3c00c2eSTaylor Simpson * but WITHOUT ANY WARRANTY; without even the implied warranty of
11e3c00c2eSTaylor Simpson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12e3c00c2eSTaylor Simpson * GNU General Public License for more details.
13e3c00c2eSTaylor Simpson *
14e3c00c2eSTaylor Simpson * You should have received a copy of the GNU General Public License
15e3c00c2eSTaylor Simpson * along with this program; if not, see <http://www.gnu.org/licenses/>.
16e3c00c2eSTaylor Simpson */
17e3c00c2eSTaylor Simpson
18e3c00c2eSTaylor Simpson /*
19e3c00c2eSTaylor Simpson * opcodes.c
20e3c00c2eSTaylor Simpson *
21e3c00c2eSTaylor Simpson * data tables generated automatically
22e3c00c2eSTaylor Simpson * Maybe some functions too
23e3c00c2eSTaylor Simpson */
24e3c00c2eSTaylor Simpson
25e3c00c2eSTaylor Simpson #include "qemu/osdep.h"
26e3c00c2eSTaylor Simpson #include "attribs.h"
27e3c00c2eSTaylor Simpson #include "decode.h"
28e3c00c2eSTaylor Simpson
29e3c00c2eSTaylor Simpson #define VEC_DESCR(A, B, C) DESCR(A, B, C)
30e3c00c2eSTaylor Simpson #define DONAME(X) #X
31e3c00c2eSTaylor Simpson
32e3c00c2eSTaylor Simpson const char * const opcode_names[] = {
33e3c00c2eSTaylor Simpson #define OPCODE(IID) DONAME(IID)
34e3c00c2eSTaylor Simpson #include "opcodes_def_generated.h.inc"
35e3c00c2eSTaylor Simpson NULL
36e3c00c2eSTaylor Simpson #undef OPCODE
37e3c00c2eSTaylor Simpson };
38e3c00c2eSTaylor Simpson
39e3c00c2eSTaylor Simpson
40e3c00c2eSTaylor Simpson DECLARE_BITMAP(opcode_attribs[XX_LAST_OPCODE], A_ZZ_LASTATTRIB);
41e3c00c2eSTaylor Simpson
init_attribs(int tag,...)42e3c00c2eSTaylor Simpson static void init_attribs(int tag, ...)
43e3c00c2eSTaylor Simpson {
44e3c00c2eSTaylor Simpson va_list ap;
45e3c00c2eSTaylor Simpson int attr;
46e3c00c2eSTaylor Simpson va_start(ap, tag);
47e3c00c2eSTaylor Simpson while ((attr = va_arg(ap, int)) != 0) {
48e3c00c2eSTaylor Simpson set_bit(attr, opcode_attribs[tag]);
49e3c00c2eSTaylor Simpson }
50*2526e69eSPhilippe Mathieu-Daudé va_end(ap);
51e3c00c2eSTaylor Simpson }
52e3c00c2eSTaylor Simpson
53e3c00c2eSTaylor Simpson const OpcodeEncoding opcode_encodings[] = {
54e3c00c2eSTaylor Simpson #define DEF_ENC32(OPCODE, ENCSTR) \
55e3c00c2eSTaylor Simpson [OPCODE] = { .encoding = ENCSTR },
56e3c00c2eSTaylor Simpson
57e3c00c2eSTaylor Simpson #define DEF_ENC_SUBINSN(OPCODE, CLASS, ENCSTR) \
58e3c00c2eSTaylor Simpson [OPCODE] = { .encoding = ENCSTR, .enc_class = CLASS },
59e3c00c2eSTaylor Simpson
60e3c00c2eSTaylor Simpson #define DEF_EXT_ENC(OPCODE, CLASS, ENCSTR) \
61e3c00c2eSTaylor Simpson [OPCODE] = { .encoding = ENCSTR, .enc_class = CLASS },
62e3c00c2eSTaylor Simpson
63e3c00c2eSTaylor Simpson #include "imported/encode.def"
64e3c00c2eSTaylor Simpson
65e3c00c2eSTaylor Simpson #undef DEF_ENC32
66e3c00c2eSTaylor Simpson #undef DEF_ENC_SUBINSN
67e3c00c2eSTaylor Simpson #undef DEF_EXT_ENC
68e3c00c2eSTaylor Simpson };
69e3c00c2eSTaylor Simpson
opcode_init(void)70e3c00c2eSTaylor Simpson void opcode_init(void)
71e3c00c2eSTaylor Simpson {
72e3c00c2eSTaylor Simpson init_attribs(0, 0);
73e3c00c2eSTaylor Simpson
74e3c00c2eSTaylor Simpson #define ATTRIBS(...) , ## __VA_ARGS__, 0
75e3c00c2eSTaylor Simpson #define OP_ATTRIB(TAG, ARGS) init_attribs(TAG ARGS);
76e3c00c2eSTaylor Simpson #include "op_attribs_generated.h.inc"
77e3c00c2eSTaylor Simpson #undef OP_ATTRIB
78e3c00c2eSTaylor Simpson #undef ATTRIBS
79e3c00c2eSTaylor Simpson }
80