1ede78133Schristos /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
275fd0b74Schristos /* CPU data for m32r.
375fd0b74Schristos
475fd0b74Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
575fd0b74Schristos
6*e992f068Schristos Copyright (C) 1996-2022 Free Software Foundation, Inc.
775fd0b74Schristos
875fd0b74Schristos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
975fd0b74Schristos
1075fd0b74Schristos This file is free software; you can redistribute it and/or modify
1175fd0b74Schristos it under the terms of the GNU General Public License as published by
1275fd0b74Schristos the Free Software Foundation; either version 3, or (at your option)
1375fd0b74Schristos any later version.
1475fd0b74Schristos
1575fd0b74Schristos It is distributed in the hope that it will be useful, but WITHOUT
1675fd0b74Schristos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1775fd0b74Schristos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
1875fd0b74Schristos License for more details.
1975fd0b74Schristos
2075fd0b74Schristos You should have received a copy of the GNU General Public License along
2175fd0b74Schristos with this program; if not, write to the Free Software Foundation, Inc.,
2275fd0b74Schristos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
2375fd0b74Schristos
2475fd0b74Schristos */
2575fd0b74Schristos
2675fd0b74Schristos #include "sysdep.h"
2775fd0b74Schristos #include <stdio.h>
2875fd0b74Schristos #include <stdarg.h>
29*e992f068Schristos #include <stdlib.h>
3075fd0b74Schristos #include "ansidecl.h"
3175fd0b74Schristos #include "bfd.h"
3275fd0b74Schristos #include "symcat.h"
3375fd0b74Schristos #include "m32r-desc.h"
3475fd0b74Schristos #include "m32r-opc.h"
3575fd0b74Schristos #include "opintl.h"
3675fd0b74Schristos #include "libiberty.h"
3775fd0b74Schristos #include "xregex.h"
3875fd0b74Schristos
3975fd0b74Schristos /* Attributes. */
4075fd0b74Schristos
4175fd0b74Schristos static const CGEN_ATTR_ENTRY bool_attr[] =
4275fd0b74Schristos {
4375fd0b74Schristos { "#f", 0 },
4475fd0b74Schristos { "#t", 1 },
4575fd0b74Schristos { 0, 0 }
4675fd0b74Schristos };
4775fd0b74Schristos
4875fd0b74Schristos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
4975fd0b74Schristos {
5075fd0b74Schristos { "base", MACH_BASE },
5175fd0b74Schristos { "m32r", MACH_M32R },
5275fd0b74Schristos { "m32rx", MACH_M32RX },
5375fd0b74Schristos { "m32r2", MACH_M32R2 },
5475fd0b74Schristos { "max", MACH_MAX },
5575fd0b74Schristos { 0, 0 }
5675fd0b74Schristos };
5775fd0b74Schristos
5875fd0b74Schristos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
5975fd0b74Schristos {
6075fd0b74Schristos { "m32r", ISA_M32R },
6175fd0b74Schristos { "max", ISA_MAX },
6275fd0b74Schristos { 0, 0 }
6375fd0b74Schristos };
6475fd0b74Schristos
6575fd0b74Schristos static const CGEN_ATTR_ENTRY PIPE_attr[] ATTRIBUTE_UNUSED =
6675fd0b74Schristos {
6775fd0b74Schristos { "NONE", PIPE_NONE },
6875fd0b74Schristos { "O", PIPE_O },
6975fd0b74Schristos { "S", PIPE_S },
7075fd0b74Schristos { "OS", PIPE_OS },
7175fd0b74Schristos { "O_OS", PIPE_O_OS },
7275fd0b74Schristos { 0, 0 }
7375fd0b74Schristos };
7475fd0b74Schristos
7575fd0b74Schristos const CGEN_ATTR_TABLE m32r_cgen_ifield_attr_table[] =
7675fd0b74Schristos {
7775fd0b74Schristos { "MACH", & MACH_attr[0], & MACH_attr[0] },
7875fd0b74Schristos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
7975fd0b74Schristos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
8075fd0b74Schristos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
8175fd0b74Schristos { "RESERVED", &bool_attr[0], &bool_attr[0] },
8275fd0b74Schristos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
8375fd0b74Schristos { "SIGNED", &bool_attr[0], &bool_attr[0] },
8475fd0b74Schristos { "RELOC", &bool_attr[0], &bool_attr[0] },
8575fd0b74Schristos { 0, 0, 0 }
8675fd0b74Schristos };
8775fd0b74Schristos
8875fd0b74Schristos const CGEN_ATTR_TABLE m32r_cgen_hardware_attr_table[] =
8975fd0b74Schristos {
9075fd0b74Schristos { "MACH", & MACH_attr[0], & MACH_attr[0] },
9175fd0b74Schristos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
9275fd0b74Schristos { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
9375fd0b74Schristos { "PC", &bool_attr[0], &bool_attr[0] },
9475fd0b74Schristos { "PROFILE", &bool_attr[0], &bool_attr[0] },
9575fd0b74Schristos { 0, 0, 0 }
9675fd0b74Schristos };
9775fd0b74Schristos
9875fd0b74Schristos const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table[] =
9975fd0b74Schristos {
10075fd0b74Schristos { "MACH", & MACH_attr[0], & MACH_attr[0] },
10175fd0b74Schristos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
10275fd0b74Schristos { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
10375fd0b74Schristos { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
10475fd0b74Schristos { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
10575fd0b74Schristos { "SIGNED", &bool_attr[0], &bool_attr[0] },
10675fd0b74Schristos { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
10775fd0b74Schristos { "RELAX", &bool_attr[0], &bool_attr[0] },
10875fd0b74Schristos { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
10975fd0b74Schristos { "RELOC", &bool_attr[0], &bool_attr[0] },
11075fd0b74Schristos { 0, 0, 0 }
11175fd0b74Schristos };
11275fd0b74Schristos
11375fd0b74Schristos const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table[] =
11475fd0b74Schristos {
11575fd0b74Schristos { "MACH", & MACH_attr[0], & MACH_attr[0] },
11675fd0b74Schristos { "PIPE", & PIPE_attr[0], & PIPE_attr[0] },
11775fd0b74Schristos { "ALIAS", &bool_attr[0], &bool_attr[0] },
11875fd0b74Schristos { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
11975fd0b74Schristos { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
12075fd0b74Schristos { "COND-CTI", &bool_attr[0], &bool_attr[0] },
12175fd0b74Schristos { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
12275fd0b74Schristos { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
12375fd0b74Schristos { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
12475fd0b74Schristos { "RELAXED", &bool_attr[0], &bool_attr[0] },
12575fd0b74Schristos { "NO-DIS", &bool_attr[0], &bool_attr[0] },
12675fd0b74Schristos { "PBB", &bool_attr[0], &bool_attr[0] },
12775fd0b74Schristos { "FILL-SLOT", &bool_attr[0], &bool_attr[0] },
12875fd0b74Schristos { "SPECIAL", &bool_attr[0], &bool_attr[0] },
12975fd0b74Schristos { "SPECIAL_M32R", &bool_attr[0], &bool_attr[0] },
13075fd0b74Schristos { "SPECIAL_FLOAT", &bool_attr[0], &bool_attr[0] },
13175fd0b74Schristos { 0, 0, 0 }
13275fd0b74Schristos };
13375fd0b74Schristos
13475fd0b74Schristos /* Instruction set variants. */
13575fd0b74Schristos
13675fd0b74Schristos static const CGEN_ISA m32r_cgen_isa_table[] = {
13775fd0b74Schristos { "m32r", 32, 32, 16, 32 },
13875fd0b74Schristos { 0, 0, 0, 0, 0 }
13975fd0b74Schristos };
14075fd0b74Schristos
14175fd0b74Schristos /* Machine variants. */
14275fd0b74Schristos
14375fd0b74Schristos static const CGEN_MACH m32r_cgen_mach_table[] = {
14475fd0b74Schristos { "m32r", "m32r", MACH_M32R, 0 },
14575fd0b74Schristos { "m32rx", "m32rx", MACH_M32RX, 0 },
14675fd0b74Schristos { "m32r2", "m32r2", MACH_M32R2, 0 },
14775fd0b74Schristos { 0, 0, 0, 0 }
14875fd0b74Schristos };
14975fd0b74Schristos
15075fd0b74Schristos static CGEN_KEYWORD_ENTRY m32r_cgen_opval_gr_names_entries[] =
15175fd0b74Schristos {
15275fd0b74Schristos { "fp", 13, {0, {{{0, 0}}}}, 0, 0 },
15375fd0b74Schristos { "lr", 14, {0, {{{0, 0}}}}, 0, 0 },
15475fd0b74Schristos { "sp", 15, {0, {{{0, 0}}}}, 0, 0 },
15575fd0b74Schristos { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
15675fd0b74Schristos { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
15775fd0b74Schristos { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
15875fd0b74Schristos { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
15975fd0b74Schristos { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
16075fd0b74Schristos { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
16175fd0b74Schristos { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
16275fd0b74Schristos { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
16375fd0b74Schristos { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
16475fd0b74Schristos { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
16575fd0b74Schristos { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
16675fd0b74Schristos { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
16775fd0b74Schristos { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
16875fd0b74Schristos { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
16975fd0b74Schristos { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
17075fd0b74Schristos { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }
17175fd0b74Schristos };
17275fd0b74Schristos
17375fd0b74Schristos CGEN_KEYWORD m32r_cgen_opval_gr_names =
17475fd0b74Schristos {
17575fd0b74Schristos & m32r_cgen_opval_gr_names_entries[0],
17675fd0b74Schristos 19,
17775fd0b74Schristos 0, 0, 0, 0, ""
17875fd0b74Schristos };
17975fd0b74Schristos
18075fd0b74Schristos static CGEN_KEYWORD_ENTRY m32r_cgen_opval_cr_names_entries[] =
18175fd0b74Schristos {
18275fd0b74Schristos { "psw", 0, {0, {{{0, 0}}}}, 0, 0 },
18375fd0b74Schristos { "cbr", 1, {0, {{{0, 0}}}}, 0, 0 },
18475fd0b74Schristos { "spi", 2, {0, {{{0, 0}}}}, 0, 0 },
18575fd0b74Schristos { "spu", 3, {0, {{{0, 0}}}}, 0, 0 },
18675fd0b74Schristos { "bpc", 6, {0, {{{0, 0}}}}, 0, 0 },
18775fd0b74Schristos { "bbpsw", 8, {0, {{{0, 0}}}}, 0, 0 },
18875fd0b74Schristos { "bbpc", 14, {0, {{{0, 0}}}}, 0, 0 },
18975fd0b74Schristos { "evb", 5, {0, {{{0, 0}}}}, 0, 0 },
19075fd0b74Schristos { "cr0", 0, {0, {{{0, 0}}}}, 0, 0 },
19175fd0b74Schristos { "cr1", 1, {0, {{{0, 0}}}}, 0, 0 },
19275fd0b74Schristos { "cr2", 2, {0, {{{0, 0}}}}, 0, 0 },
19375fd0b74Schristos { "cr3", 3, {0, {{{0, 0}}}}, 0, 0 },
19475fd0b74Schristos { "cr4", 4, {0, {{{0, 0}}}}, 0, 0 },
19575fd0b74Schristos { "cr5", 5, {0, {{{0, 0}}}}, 0, 0 },
19675fd0b74Schristos { "cr6", 6, {0, {{{0, 0}}}}, 0, 0 },
19775fd0b74Schristos { "cr7", 7, {0, {{{0, 0}}}}, 0, 0 },
19875fd0b74Schristos { "cr8", 8, {0, {{{0, 0}}}}, 0, 0 },
19975fd0b74Schristos { "cr9", 9, {0, {{{0, 0}}}}, 0, 0 },
20075fd0b74Schristos { "cr10", 10, {0, {{{0, 0}}}}, 0, 0 },
20175fd0b74Schristos { "cr11", 11, {0, {{{0, 0}}}}, 0, 0 },
20275fd0b74Schristos { "cr12", 12, {0, {{{0, 0}}}}, 0, 0 },
20375fd0b74Schristos { "cr13", 13, {0, {{{0, 0}}}}, 0, 0 },
20475fd0b74Schristos { "cr14", 14, {0, {{{0, 0}}}}, 0, 0 },
20575fd0b74Schristos { "cr15", 15, {0, {{{0, 0}}}}, 0, 0 }
20675fd0b74Schristos };
20775fd0b74Schristos
20875fd0b74Schristos CGEN_KEYWORD m32r_cgen_opval_cr_names =
20975fd0b74Schristos {
21075fd0b74Schristos & m32r_cgen_opval_cr_names_entries[0],
21175fd0b74Schristos 24,
21275fd0b74Schristos 0, 0, 0, 0, ""
21375fd0b74Schristos };
21475fd0b74Schristos
21575fd0b74Schristos static CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_accums_entries[] =
21675fd0b74Schristos {
21775fd0b74Schristos { "a0", 0, {0, {{{0, 0}}}}, 0, 0 },
21875fd0b74Schristos { "a1", 1, {0, {{{0, 0}}}}, 0, 0 }
21975fd0b74Schristos };
22075fd0b74Schristos
22175fd0b74Schristos CGEN_KEYWORD m32r_cgen_opval_h_accums =
22275fd0b74Schristos {
22375fd0b74Schristos & m32r_cgen_opval_h_accums_entries[0],
22475fd0b74Schristos 2,
22575fd0b74Schristos 0, 0, 0, 0, ""
22675fd0b74Schristos };
22775fd0b74Schristos
22875fd0b74Schristos
22975fd0b74Schristos /* The hardware table. */
23075fd0b74Schristos
23175fd0b74Schristos #define A(a) (1 << CGEN_HW_##a)
23275fd0b74Schristos
23375fd0b74Schristos const CGEN_HW_ENTRY m32r_cgen_hw_table[] =
23475fd0b74Schristos {
23575fd0b74Schristos { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
23675fd0b74Schristos { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
23775fd0b74Schristos { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
23875fd0b74Schristos { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
23975fd0b74Schristos { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
24075fd0b74Schristos { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
24175fd0b74Schristos { "h-hi16", HW_H_HI16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
24275fd0b74Schristos { "h-slo16", HW_H_SLO16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
24375fd0b74Schristos { "h-ulo16", HW_H_ULO16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
244*e992f068Schristos { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, & m32r_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
245*e992f068Schristos { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, & m32r_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
24675fd0b74Schristos { "h-accum", HW_H_ACCUM, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
247*e992f068Schristos { "h-accums", HW_H_ACCUMS, CGEN_ASM_KEYWORD, & m32r_cgen_opval_h_accums, { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
24875fd0b74Schristos { "h-cond", HW_H_COND, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
24975fd0b74Schristos { "h-psw", HW_H_PSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
25075fd0b74Schristos { "h-bpsw", HW_H_BPSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
25175fd0b74Schristos { "h-bbpsw", HW_H_BBPSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
25275fd0b74Schristos { "h-lock", HW_H_LOCK, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
25375fd0b74Schristos { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
25475fd0b74Schristos };
25575fd0b74Schristos
25675fd0b74Schristos #undef A
25775fd0b74Schristos
25875fd0b74Schristos
25975fd0b74Schristos /* The instruction field table. */
26075fd0b74Schristos
26175fd0b74Schristos #define A(a) (1 << CGEN_IFLD_##a)
26275fd0b74Schristos
26375fd0b74Schristos const CGEN_IFLD m32r_cgen_ifld_table[] =
26475fd0b74Schristos {
26575fd0b74Schristos { M32R_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
26675fd0b74Schristos { M32R_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
26775fd0b74Schristos { M32R_F_OP1, "f-op1", 0, 32, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
26875fd0b74Schristos { M32R_F_OP2, "f-op2", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
26975fd0b74Schristos { M32R_F_COND, "f-cond", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27075fd0b74Schristos { M32R_F_R1, "f-r1", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27175fd0b74Schristos { M32R_F_R2, "f-r2", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27275fd0b74Schristos { M32R_F_SIMM8, "f-simm8", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27375fd0b74Schristos { M32R_F_SIMM16, "f-simm16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27475fd0b74Schristos { M32R_F_SHIFT_OP2, "f-shift-op2", 0, 32, 8, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27575fd0b74Schristos { M32R_F_UIMM3, "f-uimm3", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27675fd0b74Schristos { M32R_F_UIMM4, "f-uimm4", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27775fd0b74Schristos { M32R_F_UIMM5, "f-uimm5", 0, 32, 11, 5, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27875fd0b74Schristos { M32R_F_UIMM8, "f-uimm8", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } } },
27975fd0b74Schristos { M32R_F_UIMM16, "f-uimm16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } } } } },
28075fd0b74Schristos { M32R_F_UIMM24, "f-uimm24", 0, 32, 8, 24, { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
28175fd0b74Schristos { M32R_F_HI16, "f-hi16", 0, 32, 16, 16, { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } } },
28275fd0b74Schristos { M32R_F_DISP8, "f-disp8", 0, 32, 8, 8, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
28375fd0b74Schristos { M32R_F_DISP16, "f-disp16", 0, 32, 16, 16, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
28475fd0b74Schristos { M32R_F_DISP24, "f-disp24", 0, 32, 8, 24, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
28575fd0b74Schristos { M32R_F_OP23, "f-op23", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE), 0 } } } } },
28675fd0b74Schristos { M32R_F_OP3, "f-op3", 0, 32, 14, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
28775fd0b74Schristos { M32R_F_ACC, "f-acc", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
28875fd0b74Schristos { M32R_F_ACCS, "f-accs", 0, 32, 12, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
28975fd0b74Schristos { M32R_F_ACCD, "f-accd", 0, 32, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
29075fd0b74Schristos { M32R_F_BITS67, "f-bits67", 0, 32, 6, 2, { 0, { { { (1<<MACH_BASE), 0 } } } } },
29175fd0b74Schristos { M32R_F_BIT4, "f-bit4", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
29275fd0b74Schristos { M32R_F_BIT14, "f-bit14", 0, 32, 14, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
29375fd0b74Schristos { M32R_F_IMM1, "f-imm1", 0, 32, 15, 1, { 0, { { { (1<<MACH_BASE), 0 } } } } },
29475fd0b74Schristos { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
29575fd0b74Schristos };
29675fd0b74Schristos
29775fd0b74Schristos #undef A
29875fd0b74Schristos
29975fd0b74Schristos
30075fd0b74Schristos
30175fd0b74Schristos /* multi ifield declarations */
30275fd0b74Schristos
30375fd0b74Schristos
30475fd0b74Schristos
30575fd0b74Schristos /* multi ifield definitions */
30675fd0b74Schristos
30775fd0b74Schristos
30875fd0b74Schristos /* The operand table. */
30975fd0b74Schristos
31075fd0b74Schristos #define A(a) (1 << CGEN_OPERAND_##a)
31175fd0b74Schristos #define OPERAND(op) M32R_OPERAND_##op
31275fd0b74Schristos
31375fd0b74Schristos const CGEN_OPERAND m32r_cgen_operand_table[] =
31475fd0b74Schristos {
31575fd0b74Schristos /* pc: program counter */
31675fd0b74Schristos { "pc", M32R_OPERAND_PC, HW_H_PC, 0, 0,
317*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_NIL] } },
31875fd0b74Schristos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
31975fd0b74Schristos /* sr: source register */
32075fd0b74Schristos { "sr", M32R_OPERAND_SR, HW_H_GR, 12, 4,
321*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
32275fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
32375fd0b74Schristos /* dr: destination register */
32475fd0b74Schristos { "dr", M32R_OPERAND_DR, HW_H_GR, 4, 4,
325*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
32675fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
32775fd0b74Schristos /* src1: source register 1 */
32875fd0b74Schristos { "src1", M32R_OPERAND_SRC1, HW_H_GR, 4, 4,
329*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
33075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
33175fd0b74Schristos /* src2: source register 2 */
33275fd0b74Schristos { "src2", M32R_OPERAND_SRC2, HW_H_GR, 12, 4,
333*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
33475fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
33575fd0b74Schristos /* scr: source control register */
33675fd0b74Schristos { "scr", M32R_OPERAND_SCR, HW_H_CR, 12, 4,
337*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
33875fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
33975fd0b74Schristos /* dcr: destination control register */
34075fd0b74Schristos { "dcr", M32R_OPERAND_DCR, HW_H_CR, 4, 4,
341*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
34275fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
34375fd0b74Schristos /* simm8: 8 bit signed immediate */
34475fd0b74Schristos { "simm8", M32R_OPERAND_SIMM8, HW_H_SINT, 8, 8,
345*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM8] } },
34675fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
34775fd0b74Schristos /* simm16: 16 bit signed immediate */
34875fd0b74Schristos { "simm16", M32R_OPERAND_SIMM16, HW_H_SINT, 16, 16,
349*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM16] } },
35075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
35175fd0b74Schristos /* uimm3: 3 bit unsigned number */
35275fd0b74Schristos { "uimm3", M32R_OPERAND_UIMM3, HW_H_UINT, 5, 3,
353*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM3] } },
35475fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
35575fd0b74Schristos /* uimm4: 4 bit trap number */
35675fd0b74Schristos { "uimm4", M32R_OPERAND_UIMM4, HW_H_UINT, 12, 4,
357*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM4] } },
35875fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
35975fd0b74Schristos /* uimm5: 5 bit shift count */
36075fd0b74Schristos { "uimm5", M32R_OPERAND_UIMM5, HW_H_UINT, 11, 5,
361*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM5] } },
36275fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
36375fd0b74Schristos /* uimm8: 8 bit unsigned immediate */
36475fd0b74Schristos { "uimm8", M32R_OPERAND_UIMM8, HW_H_UINT, 8, 8,
365*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM8] } },
36675fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
36775fd0b74Schristos /* uimm16: 16 bit unsigned immediate */
36875fd0b74Schristos { "uimm16", M32R_OPERAND_UIMM16, HW_H_UINT, 16, 16,
369*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM16] } },
37075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
37175fd0b74Schristos /* imm1: 1 bit immediate */
37275fd0b74Schristos { "imm1", M32R_OPERAND_IMM1, HW_H_UINT, 15, 1,
373*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_IMM1] } },
37475fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
37575fd0b74Schristos /* accd: accumulator destination register */
37675fd0b74Schristos { "accd", M32R_OPERAND_ACCD, HW_H_ACCUMS, 4, 2,
377*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_ACCD] } },
37875fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
37975fd0b74Schristos /* accs: accumulator source register */
38075fd0b74Schristos { "accs", M32R_OPERAND_ACCS, HW_H_ACCUMS, 12, 2,
381*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_ACCS] } },
38275fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
38375fd0b74Schristos /* acc: accumulator reg (d) */
38475fd0b74Schristos { "acc", M32R_OPERAND_ACC, HW_H_ACCUMS, 8, 1,
385*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_ACC] } },
38675fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
38775fd0b74Schristos /* hash: # prefix */
38875fd0b74Schristos { "hash", M32R_OPERAND_HASH, HW_H_SINT, 0, 0,
389*e992f068Schristos { 0, { 0 } },
39075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
39175fd0b74Schristos /* hi16: high 16 bit immediate, sign optional */
39275fd0b74Schristos { "hi16", M32R_OPERAND_HI16, HW_H_HI16, 16, 16,
393*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_HI16] } },
39475fd0b74Schristos { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } } },
39575fd0b74Schristos /* slo16: 16 bit signed immediate, for low() */
39675fd0b74Schristos { "slo16", M32R_OPERAND_SLO16, HW_H_SLO16, 16, 16,
397*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM16] } },
39875fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
39975fd0b74Schristos /* ulo16: 16 bit unsigned immediate, for low() */
40075fd0b74Schristos { "ulo16", M32R_OPERAND_ULO16, HW_H_ULO16, 16, 16,
401*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM16] } },
40275fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } },
40375fd0b74Schristos /* uimm24: 24 bit address */
40475fd0b74Schristos { "uimm24", M32R_OPERAND_UIMM24, HW_H_ADDR, 8, 24,
405*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM24] } },
40675fd0b74Schristos { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
40775fd0b74Schristos /* disp8: 8 bit displacement */
40875fd0b74Schristos { "disp8", M32R_OPERAND_DISP8, HW_H_IADDR, 8, 8,
409*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_DISP8] } },
41075fd0b74Schristos { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
41175fd0b74Schristos /* disp16: 16 bit displacement */
41275fd0b74Schristos { "disp16", M32R_OPERAND_DISP16, HW_H_IADDR, 16, 16,
413*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_DISP16] } },
41475fd0b74Schristos { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
41575fd0b74Schristos /* disp24: 24 bit displacement */
41675fd0b74Schristos { "disp24", M32R_OPERAND_DISP24, HW_H_IADDR, 8, 24,
417*e992f068Schristos { 0, { &m32r_cgen_ifld_table[M32R_F_DISP24] } },
41875fd0b74Schristos { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } } },
41975fd0b74Schristos /* condbit: condition bit */
42075fd0b74Schristos { "condbit", M32R_OPERAND_CONDBIT, HW_H_COND, 0, 0,
421*e992f068Schristos { 0, { 0 } },
42275fd0b74Schristos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
42375fd0b74Schristos /* accum: accumulator */
42475fd0b74Schristos { "accum", M32R_OPERAND_ACCUM, HW_H_ACCUM, 0, 0,
425*e992f068Schristos { 0, { 0 } },
42675fd0b74Schristos { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } } },
42775fd0b74Schristos /* sentinel */
42875fd0b74Schristos { 0, 0, 0, 0, 0,
429*e992f068Schristos { 0, { 0 } },
43075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } } } } }
43175fd0b74Schristos };
43275fd0b74Schristos
43375fd0b74Schristos #undef A
43475fd0b74Schristos
43575fd0b74Schristos
43675fd0b74Schristos /* The instruction table. */
43775fd0b74Schristos
43875fd0b74Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
43975fd0b74Schristos #define A(a) (1 << CGEN_INSN_##a)
44075fd0b74Schristos
44175fd0b74Schristos static const CGEN_IBASE m32r_cgen_insn_table[MAX_INSNS] =
44275fd0b74Schristos {
44375fd0b74Schristos /* Special null first entry.
44475fd0b74Schristos A `num' value of zero is thus invalid.
44575fd0b74Schristos Also, the special `invalid' insn resides here. */
44675fd0b74Schristos { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } } },
44775fd0b74Schristos /* add $dr,$sr */
44875fd0b74Schristos {
44975fd0b74Schristos M32R_INSN_ADD, "add", "add", 16,
45075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
45175fd0b74Schristos },
45275fd0b74Schristos /* add3 $dr,$sr,$hash$slo16 */
45375fd0b74Schristos {
45475fd0b74Schristos M32R_INSN_ADD3, "add3", "add3", 32,
45575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
45675fd0b74Schristos },
45775fd0b74Schristos /* and $dr,$sr */
45875fd0b74Schristos {
45975fd0b74Schristos M32R_INSN_AND, "and", "and", 16,
46075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
46175fd0b74Schristos },
46275fd0b74Schristos /* and3 $dr,$sr,$uimm16 */
46375fd0b74Schristos {
46475fd0b74Schristos M32R_INSN_AND3, "and3", "and3", 32,
46575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
46675fd0b74Schristos },
46775fd0b74Schristos /* or $dr,$sr */
46875fd0b74Schristos {
46975fd0b74Schristos M32R_INSN_OR, "or", "or", 16,
47075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
47175fd0b74Schristos },
47275fd0b74Schristos /* or3 $dr,$sr,$hash$ulo16 */
47375fd0b74Schristos {
47475fd0b74Schristos M32R_INSN_OR3, "or3", "or3", 32,
47575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
47675fd0b74Schristos },
47775fd0b74Schristos /* xor $dr,$sr */
47875fd0b74Schristos {
47975fd0b74Schristos M32R_INSN_XOR, "xor", "xor", 16,
48075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
48175fd0b74Schristos },
48275fd0b74Schristos /* xor3 $dr,$sr,$uimm16 */
48375fd0b74Schristos {
48475fd0b74Schristos M32R_INSN_XOR3, "xor3", "xor3", 32,
48575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
48675fd0b74Schristos },
48775fd0b74Schristos /* addi $dr,$simm8 */
48875fd0b74Schristos {
48975fd0b74Schristos M32R_INSN_ADDI, "addi", "addi", 16,
49075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
49175fd0b74Schristos },
49275fd0b74Schristos /* addv $dr,$sr */
49375fd0b74Schristos {
49475fd0b74Schristos M32R_INSN_ADDV, "addv", "addv", 16,
49575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
49675fd0b74Schristos },
49775fd0b74Schristos /* addv3 $dr,$sr,$simm16 */
49875fd0b74Schristos {
49975fd0b74Schristos M32R_INSN_ADDV3, "addv3", "addv3", 32,
50075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
50175fd0b74Schristos },
50275fd0b74Schristos /* addx $dr,$sr */
50375fd0b74Schristos {
50475fd0b74Schristos M32R_INSN_ADDX, "addx", "addx", 16,
50575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
50675fd0b74Schristos },
50775fd0b74Schristos /* bc.s $disp8 */
50875fd0b74Schristos {
50975fd0b74Schristos M32R_INSN_BC8, "bc8", "bc.s", 16,
51075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
51175fd0b74Schristos },
51275fd0b74Schristos /* bc.l $disp24 */
51375fd0b74Schristos {
51475fd0b74Schristos M32R_INSN_BC24, "bc24", "bc.l", 32,
51575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
51675fd0b74Schristos },
51775fd0b74Schristos /* beq $src1,$src2,$disp16 */
51875fd0b74Schristos {
51975fd0b74Schristos M32R_INSN_BEQ, "beq", "beq", 32,
52075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
52175fd0b74Schristos },
52275fd0b74Schristos /* beqz $src2,$disp16 */
52375fd0b74Schristos {
52475fd0b74Schristos M32R_INSN_BEQZ, "beqz", "beqz", 32,
52575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
52675fd0b74Schristos },
52775fd0b74Schristos /* bgez $src2,$disp16 */
52875fd0b74Schristos {
52975fd0b74Schristos M32R_INSN_BGEZ, "bgez", "bgez", 32,
53075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
53175fd0b74Schristos },
53275fd0b74Schristos /* bgtz $src2,$disp16 */
53375fd0b74Schristos {
53475fd0b74Schristos M32R_INSN_BGTZ, "bgtz", "bgtz", 32,
53575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
53675fd0b74Schristos },
53775fd0b74Schristos /* blez $src2,$disp16 */
53875fd0b74Schristos {
53975fd0b74Schristos M32R_INSN_BLEZ, "blez", "blez", 32,
54075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
54175fd0b74Schristos },
54275fd0b74Schristos /* bltz $src2,$disp16 */
54375fd0b74Schristos {
54475fd0b74Schristos M32R_INSN_BLTZ, "bltz", "bltz", 32,
54575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
54675fd0b74Schristos },
54775fd0b74Schristos /* bnez $src2,$disp16 */
54875fd0b74Schristos {
54975fd0b74Schristos M32R_INSN_BNEZ, "bnez", "bnez", 32,
55075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
55175fd0b74Schristos },
55275fd0b74Schristos /* bl.s $disp8 */
55375fd0b74Schristos {
55475fd0b74Schristos M32R_INSN_BL8, "bl8", "bl.s", 16,
55575fd0b74Schristos { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
55675fd0b74Schristos },
55775fd0b74Schristos /* bl.l $disp24 */
55875fd0b74Schristos {
55975fd0b74Schristos M32R_INSN_BL24, "bl24", "bl.l", 32,
56075fd0b74Schristos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
56175fd0b74Schristos },
56275fd0b74Schristos /* bcl.s $disp8 */
56375fd0b74Schristos {
56475fd0b74Schristos M32R_INSN_BCL8, "bcl8", "bcl.s", 16,
56575fd0b74Schristos { 0|A(FILL_SLOT)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
56675fd0b74Schristos },
56775fd0b74Schristos /* bcl.l $disp24 */
56875fd0b74Schristos {
56975fd0b74Schristos M32R_INSN_BCL24, "bcl24", "bcl.l", 32,
57075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
57175fd0b74Schristos },
57275fd0b74Schristos /* bnc.s $disp8 */
57375fd0b74Schristos {
57475fd0b74Schristos M32R_INSN_BNC8, "bnc8", "bnc.s", 16,
57575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
57675fd0b74Schristos },
57775fd0b74Schristos /* bnc.l $disp24 */
57875fd0b74Schristos {
57975fd0b74Schristos M32R_INSN_BNC24, "bnc24", "bnc.l", 32,
58075fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
58175fd0b74Schristos },
58275fd0b74Schristos /* bne $src1,$src2,$disp16 */
58375fd0b74Schristos {
58475fd0b74Schristos M32R_INSN_BNE, "bne", "bne", 32,
58575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
58675fd0b74Schristos },
58775fd0b74Schristos /* bra.s $disp8 */
58875fd0b74Schristos {
58975fd0b74Schristos M32R_INSN_BRA8, "bra8", "bra.s", 16,
59075fd0b74Schristos { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
59175fd0b74Schristos },
59275fd0b74Schristos /* bra.l $disp24 */
59375fd0b74Schristos {
59475fd0b74Schristos M32R_INSN_BRA24, "bra24", "bra.l", 32,
59575fd0b74Schristos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
59675fd0b74Schristos },
59775fd0b74Schristos /* bncl.s $disp8 */
59875fd0b74Schristos {
59975fd0b74Schristos M32R_INSN_BNCL8, "bncl8", "bncl.s", 16,
60075fd0b74Schristos { 0|A(FILL_SLOT)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
60175fd0b74Schristos },
60275fd0b74Schristos /* bncl.l $disp24 */
60375fd0b74Schristos {
60475fd0b74Schristos M32R_INSN_BNCL24, "bncl24", "bncl.l", 32,
60575fd0b74Schristos { 0|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
60675fd0b74Schristos },
60775fd0b74Schristos /* cmp $src1,$src2 */
60875fd0b74Schristos {
60975fd0b74Schristos M32R_INSN_CMP, "cmp", "cmp", 16,
61075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
61175fd0b74Schristos },
61275fd0b74Schristos /* cmpi $src2,$simm16 */
61375fd0b74Schristos {
61475fd0b74Schristos M32R_INSN_CMPI, "cmpi", "cmpi", 32,
61575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
61675fd0b74Schristos },
61775fd0b74Schristos /* cmpu $src1,$src2 */
61875fd0b74Schristos {
61975fd0b74Schristos M32R_INSN_CMPU, "cmpu", "cmpu", 16,
62075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
62175fd0b74Schristos },
62275fd0b74Schristos /* cmpui $src2,$simm16 */
62375fd0b74Schristos {
62475fd0b74Schristos M32R_INSN_CMPUI, "cmpui", "cmpui", 32,
62575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
62675fd0b74Schristos },
62775fd0b74Schristos /* cmpeq $src1,$src2 */
62875fd0b74Schristos {
62975fd0b74Schristos M32R_INSN_CMPEQ, "cmpeq", "cmpeq", 16,
63075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
63175fd0b74Schristos },
63275fd0b74Schristos /* cmpz $src2 */
63375fd0b74Schristos {
63475fd0b74Schristos M32R_INSN_CMPZ, "cmpz", "cmpz", 16,
63575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
63675fd0b74Schristos },
63775fd0b74Schristos /* div $dr,$sr */
63875fd0b74Schristos {
63975fd0b74Schristos M32R_INSN_DIV, "div", "div", 32,
64075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
64175fd0b74Schristos },
64275fd0b74Schristos /* divu $dr,$sr */
64375fd0b74Schristos {
64475fd0b74Schristos M32R_INSN_DIVU, "divu", "divu", 32,
64575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
64675fd0b74Schristos },
64775fd0b74Schristos /* rem $dr,$sr */
64875fd0b74Schristos {
64975fd0b74Schristos M32R_INSN_REM, "rem", "rem", 32,
65075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
65175fd0b74Schristos },
65275fd0b74Schristos /* remu $dr,$sr */
65375fd0b74Schristos {
65475fd0b74Schristos M32R_INSN_REMU, "remu", "remu", 32,
65575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
65675fd0b74Schristos },
65775fd0b74Schristos /* remh $dr,$sr */
65875fd0b74Schristos {
65975fd0b74Schristos M32R_INSN_REMH, "remh", "remh", 32,
66075fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
66175fd0b74Schristos },
66275fd0b74Schristos /* remuh $dr,$sr */
66375fd0b74Schristos {
66475fd0b74Schristos M32R_INSN_REMUH, "remuh", "remuh", 32,
66575fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
66675fd0b74Schristos },
66775fd0b74Schristos /* remb $dr,$sr */
66875fd0b74Schristos {
66975fd0b74Schristos M32R_INSN_REMB, "remb", "remb", 32,
67075fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
67175fd0b74Schristos },
67275fd0b74Schristos /* remub $dr,$sr */
67375fd0b74Schristos {
67475fd0b74Schristos M32R_INSN_REMUB, "remub", "remub", 32,
67575fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
67675fd0b74Schristos },
67775fd0b74Schristos /* divuh $dr,$sr */
67875fd0b74Schristos {
67975fd0b74Schristos M32R_INSN_DIVUH, "divuh", "divuh", 32,
68075fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
68175fd0b74Schristos },
68275fd0b74Schristos /* divb $dr,$sr */
68375fd0b74Schristos {
68475fd0b74Schristos M32R_INSN_DIVB, "divb", "divb", 32,
68575fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
68675fd0b74Schristos },
68775fd0b74Schristos /* divub $dr,$sr */
68875fd0b74Schristos {
68975fd0b74Schristos M32R_INSN_DIVUB, "divub", "divub", 32,
69075fd0b74Schristos { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
69175fd0b74Schristos },
69275fd0b74Schristos /* divh $dr,$sr */
69375fd0b74Schristos {
69475fd0b74Schristos M32R_INSN_DIVH, "divh", "divh", 32,
69575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
69675fd0b74Schristos },
69775fd0b74Schristos /* jc $sr */
69875fd0b74Schristos {
69975fd0b74Schristos M32R_INSN_JC, "jc", "jc", 16,
70075fd0b74Schristos { 0|A(SPECIAL)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
70175fd0b74Schristos },
70275fd0b74Schristos /* jnc $sr */
70375fd0b74Schristos {
70475fd0b74Schristos M32R_INSN_JNC, "jnc", "jnc", 16,
70575fd0b74Schristos { 0|A(SPECIAL)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
70675fd0b74Schristos },
70775fd0b74Schristos /* jl $sr */
70875fd0b74Schristos {
70975fd0b74Schristos M32R_INSN_JL, "jl", "jl", 16,
71075fd0b74Schristos { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
71175fd0b74Schristos },
71275fd0b74Schristos /* jmp $sr */
71375fd0b74Schristos {
71475fd0b74Schristos M32R_INSN_JMP, "jmp", "jmp", 16,
71575fd0b74Schristos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
71675fd0b74Schristos },
71775fd0b74Schristos /* ld $dr,@$sr */
71875fd0b74Schristos {
71975fd0b74Schristos M32R_INSN_LD, "ld", "ld", 16,
72075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
72175fd0b74Schristos },
72275fd0b74Schristos /* ld $dr,@($slo16,$sr) */
72375fd0b74Schristos {
72475fd0b74Schristos M32R_INSN_LD_D, "ld-d", "ld", 32,
72575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
72675fd0b74Schristos },
72775fd0b74Schristos /* ldb $dr,@$sr */
72875fd0b74Schristos {
72975fd0b74Schristos M32R_INSN_LDB, "ldb", "ldb", 16,
73075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
73175fd0b74Schristos },
73275fd0b74Schristos /* ldb $dr,@($slo16,$sr) */
73375fd0b74Schristos {
73475fd0b74Schristos M32R_INSN_LDB_D, "ldb-d", "ldb", 32,
73575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
73675fd0b74Schristos },
73775fd0b74Schristos /* ldh $dr,@$sr */
73875fd0b74Schristos {
73975fd0b74Schristos M32R_INSN_LDH, "ldh", "ldh", 16,
74075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
74175fd0b74Schristos },
74275fd0b74Schristos /* ldh $dr,@($slo16,$sr) */
74375fd0b74Schristos {
74475fd0b74Schristos M32R_INSN_LDH_D, "ldh-d", "ldh", 32,
74575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
74675fd0b74Schristos },
74775fd0b74Schristos /* ldub $dr,@$sr */
74875fd0b74Schristos {
74975fd0b74Schristos M32R_INSN_LDUB, "ldub", "ldub", 16,
75075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
75175fd0b74Schristos },
75275fd0b74Schristos /* ldub $dr,@($slo16,$sr) */
75375fd0b74Schristos {
75475fd0b74Schristos M32R_INSN_LDUB_D, "ldub-d", "ldub", 32,
75575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
75675fd0b74Schristos },
75775fd0b74Schristos /* lduh $dr,@$sr */
75875fd0b74Schristos {
75975fd0b74Schristos M32R_INSN_LDUH, "lduh", "lduh", 16,
76075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
76175fd0b74Schristos },
76275fd0b74Schristos /* lduh $dr,@($slo16,$sr) */
76375fd0b74Schristos {
76475fd0b74Schristos M32R_INSN_LDUH_D, "lduh-d", "lduh", 32,
76575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
76675fd0b74Schristos },
76775fd0b74Schristos /* ld $dr,@$sr+ */
76875fd0b74Schristos {
76975fd0b74Schristos M32R_INSN_LD_PLUS, "ld-plus", "ld", 16,
77075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
77175fd0b74Schristos },
77275fd0b74Schristos /* ld24 $dr,$uimm24 */
77375fd0b74Schristos {
77475fd0b74Schristos M32R_INSN_LD24, "ld24", "ld24", 32,
77575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
77675fd0b74Schristos },
77775fd0b74Schristos /* ldi8 $dr,$simm8 */
77875fd0b74Schristos {
77975fd0b74Schristos M32R_INSN_LDI8, "ldi8", "ldi8", 16,
78075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
78175fd0b74Schristos },
78275fd0b74Schristos /* ldi16 $dr,$hash$slo16 */
78375fd0b74Schristos {
78475fd0b74Schristos M32R_INSN_LDI16, "ldi16", "ldi16", 32,
78575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
78675fd0b74Schristos },
78775fd0b74Schristos /* lock $dr,@$sr */
78875fd0b74Schristos {
78975fd0b74Schristos M32R_INSN_LOCK, "lock", "lock", 16,
79075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
79175fd0b74Schristos },
79275fd0b74Schristos /* machi $src1,$src2 */
79375fd0b74Schristos {
79475fd0b74Schristos M32R_INSN_MACHI, "machi", "machi", 16,
79575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
79675fd0b74Schristos },
79775fd0b74Schristos /* machi $src1,$src2,$acc */
79875fd0b74Schristos {
79975fd0b74Schristos M32R_INSN_MACHI_A, "machi-a", "machi", 16,
80075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
80175fd0b74Schristos },
80275fd0b74Schristos /* maclo $src1,$src2 */
80375fd0b74Schristos {
80475fd0b74Schristos M32R_INSN_MACLO, "maclo", "maclo", 16,
80575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
80675fd0b74Schristos },
80775fd0b74Schristos /* maclo $src1,$src2,$acc */
80875fd0b74Schristos {
80975fd0b74Schristos M32R_INSN_MACLO_A, "maclo-a", "maclo", 16,
81075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
81175fd0b74Schristos },
81275fd0b74Schristos /* macwhi $src1,$src2 */
81375fd0b74Schristos {
81475fd0b74Schristos M32R_INSN_MACWHI, "macwhi", "macwhi", 16,
81575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
81675fd0b74Schristos },
81775fd0b74Schristos /* macwhi $src1,$src2,$acc */
81875fd0b74Schristos {
81975fd0b74Schristos M32R_INSN_MACWHI_A, "macwhi-a", "macwhi", 16,
82075fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
82175fd0b74Schristos },
82275fd0b74Schristos /* macwlo $src1,$src2 */
82375fd0b74Schristos {
82475fd0b74Schristos M32R_INSN_MACWLO, "macwlo", "macwlo", 16,
82575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
82675fd0b74Schristos },
82775fd0b74Schristos /* macwlo $src1,$src2,$acc */
82875fd0b74Schristos {
82975fd0b74Schristos M32R_INSN_MACWLO_A, "macwlo-a", "macwlo", 16,
83075fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
83175fd0b74Schristos },
83275fd0b74Schristos /* mul $dr,$sr */
83375fd0b74Schristos {
83475fd0b74Schristos M32R_INSN_MUL, "mul", "mul", 16,
83575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_S, 0 } } } }
83675fd0b74Schristos },
83775fd0b74Schristos /* mulhi $src1,$src2 */
83875fd0b74Schristos {
83975fd0b74Schristos M32R_INSN_MULHI, "mulhi", "mulhi", 16,
84075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
84175fd0b74Schristos },
84275fd0b74Schristos /* mulhi $src1,$src2,$acc */
84375fd0b74Schristos {
84475fd0b74Schristos M32R_INSN_MULHI_A, "mulhi-a", "mulhi", 16,
84575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
84675fd0b74Schristos },
84775fd0b74Schristos /* mullo $src1,$src2 */
84875fd0b74Schristos {
84975fd0b74Schristos M32R_INSN_MULLO, "mullo", "mullo", 16,
85075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
85175fd0b74Schristos },
85275fd0b74Schristos /* mullo $src1,$src2,$acc */
85375fd0b74Schristos {
85475fd0b74Schristos M32R_INSN_MULLO_A, "mullo-a", "mullo", 16,
85575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
85675fd0b74Schristos },
85775fd0b74Schristos /* mulwhi $src1,$src2 */
85875fd0b74Schristos {
85975fd0b74Schristos M32R_INSN_MULWHI, "mulwhi", "mulwhi", 16,
86075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
86175fd0b74Schristos },
86275fd0b74Schristos /* mulwhi $src1,$src2,$acc */
86375fd0b74Schristos {
86475fd0b74Schristos M32R_INSN_MULWHI_A, "mulwhi-a", "mulwhi", 16,
86575fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
86675fd0b74Schristos },
86775fd0b74Schristos /* mulwlo $src1,$src2 */
86875fd0b74Schristos {
86975fd0b74Schristos M32R_INSN_MULWLO, "mulwlo", "mulwlo", 16,
87075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
87175fd0b74Schristos },
87275fd0b74Schristos /* mulwlo $src1,$src2,$acc */
87375fd0b74Schristos {
87475fd0b74Schristos M32R_INSN_MULWLO_A, "mulwlo-a", "mulwlo", 16,
87575fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
87675fd0b74Schristos },
87775fd0b74Schristos /* mv $dr,$sr */
87875fd0b74Schristos {
87975fd0b74Schristos M32R_INSN_MV, "mv", "mv", 16,
88075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
88175fd0b74Schristos },
88275fd0b74Schristos /* mvfachi $dr */
88375fd0b74Schristos {
88475fd0b74Schristos M32R_INSN_MVFACHI, "mvfachi", "mvfachi", 16,
88575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
88675fd0b74Schristos },
88775fd0b74Schristos /* mvfachi $dr,$accs */
88875fd0b74Schristos {
88975fd0b74Schristos M32R_INSN_MVFACHI_A, "mvfachi-a", "mvfachi", 16,
89075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
89175fd0b74Schristos },
89275fd0b74Schristos /* mvfaclo $dr */
89375fd0b74Schristos {
89475fd0b74Schristos M32R_INSN_MVFACLO, "mvfaclo", "mvfaclo", 16,
89575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
89675fd0b74Schristos },
89775fd0b74Schristos /* mvfaclo $dr,$accs */
89875fd0b74Schristos {
89975fd0b74Schristos M32R_INSN_MVFACLO_A, "mvfaclo-a", "mvfaclo", 16,
90075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
90175fd0b74Schristos },
90275fd0b74Schristos /* mvfacmi $dr */
90375fd0b74Schristos {
90475fd0b74Schristos M32R_INSN_MVFACMI, "mvfacmi", "mvfacmi", 16,
90575fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
90675fd0b74Schristos },
90775fd0b74Schristos /* mvfacmi $dr,$accs */
90875fd0b74Schristos {
90975fd0b74Schristos M32R_INSN_MVFACMI_A, "mvfacmi-a", "mvfacmi", 16,
91075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
91175fd0b74Schristos },
91275fd0b74Schristos /* mvfc $dr,$scr */
91375fd0b74Schristos {
91475fd0b74Schristos M32R_INSN_MVFC, "mvfc", "mvfc", 16,
91575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
91675fd0b74Schristos },
91775fd0b74Schristos /* mvtachi $src1 */
91875fd0b74Schristos {
91975fd0b74Schristos M32R_INSN_MVTACHI, "mvtachi", "mvtachi", 16,
92075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
92175fd0b74Schristos },
92275fd0b74Schristos /* mvtachi $src1,$accs */
92375fd0b74Schristos {
92475fd0b74Schristos M32R_INSN_MVTACHI_A, "mvtachi-a", "mvtachi", 16,
92575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
92675fd0b74Schristos },
92775fd0b74Schristos /* mvtaclo $src1 */
92875fd0b74Schristos {
92975fd0b74Schristos M32R_INSN_MVTACLO, "mvtaclo", "mvtaclo", 16,
93075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
93175fd0b74Schristos },
93275fd0b74Schristos /* mvtaclo $src1,$accs */
93375fd0b74Schristos {
93475fd0b74Schristos M32R_INSN_MVTACLO_A, "mvtaclo-a", "mvtaclo", 16,
93575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
93675fd0b74Schristos },
93775fd0b74Schristos /* mvtc $sr,$dcr */
93875fd0b74Schristos {
93975fd0b74Schristos M32R_INSN_MVTC, "mvtc", "mvtc", 16,
94075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
94175fd0b74Schristos },
94275fd0b74Schristos /* neg $dr,$sr */
94375fd0b74Schristos {
94475fd0b74Schristos M32R_INSN_NEG, "neg", "neg", 16,
94575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
94675fd0b74Schristos },
94775fd0b74Schristos /* nop */
94875fd0b74Schristos {
94975fd0b74Schristos M32R_INSN_NOP, "nop", "nop", 16,
95075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
95175fd0b74Schristos },
95275fd0b74Schristos /* not $dr,$sr */
95375fd0b74Schristos {
95475fd0b74Schristos M32R_INSN_NOT, "not", "not", 16,
95575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
95675fd0b74Schristos },
95775fd0b74Schristos /* rac */
95875fd0b74Schristos {
95975fd0b74Schristos M32R_INSN_RAC, "rac", "rac", 16,
96075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
96175fd0b74Schristos },
96275fd0b74Schristos /* rac $accd,$accs,$imm1 */
96375fd0b74Schristos {
96475fd0b74Schristos M32R_INSN_RAC_DSI, "rac-dsi", "rac", 16,
96575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
96675fd0b74Schristos },
96775fd0b74Schristos /* rach */
96875fd0b74Schristos {
96975fd0b74Schristos M32R_INSN_RACH, "rach", "rach", 16,
97075fd0b74Schristos { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
97175fd0b74Schristos },
97275fd0b74Schristos /* rach $accd,$accs,$imm1 */
97375fd0b74Schristos {
97475fd0b74Schristos M32R_INSN_RACH_DSI, "rach-dsi", "rach", 16,
97575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
97675fd0b74Schristos },
97775fd0b74Schristos /* rte */
97875fd0b74Schristos {
97975fd0b74Schristos M32R_INSN_RTE, "rte", "rte", 16,
98075fd0b74Schristos { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
98175fd0b74Schristos },
98275fd0b74Schristos /* seth $dr,$hash$hi16 */
98375fd0b74Schristos {
98475fd0b74Schristos M32R_INSN_SETH, "seth", "seth", 32,
98575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
98675fd0b74Schristos },
98775fd0b74Schristos /* sll $dr,$sr */
98875fd0b74Schristos {
98975fd0b74Schristos M32R_INSN_SLL, "sll", "sll", 16,
99075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
99175fd0b74Schristos },
99275fd0b74Schristos /* sll3 $dr,$sr,$simm16 */
99375fd0b74Schristos {
99475fd0b74Schristos M32R_INSN_SLL3, "sll3", "sll3", 32,
99575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
99675fd0b74Schristos },
99775fd0b74Schristos /* slli $dr,$uimm5 */
99875fd0b74Schristos {
99975fd0b74Schristos M32R_INSN_SLLI, "slli", "slli", 16,
100075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
100175fd0b74Schristos },
100275fd0b74Schristos /* sra $dr,$sr */
100375fd0b74Schristos {
100475fd0b74Schristos M32R_INSN_SRA, "sra", "sra", 16,
100575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
100675fd0b74Schristos },
100775fd0b74Schristos /* sra3 $dr,$sr,$simm16 */
100875fd0b74Schristos {
100975fd0b74Schristos M32R_INSN_SRA3, "sra3", "sra3", 32,
101075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
101175fd0b74Schristos },
101275fd0b74Schristos /* srai $dr,$uimm5 */
101375fd0b74Schristos {
101475fd0b74Schristos M32R_INSN_SRAI, "srai", "srai", 16,
101575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
101675fd0b74Schristos },
101775fd0b74Schristos /* srl $dr,$sr */
101875fd0b74Schristos {
101975fd0b74Schristos M32R_INSN_SRL, "srl", "srl", 16,
102075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
102175fd0b74Schristos },
102275fd0b74Schristos /* srl3 $dr,$sr,$simm16 */
102375fd0b74Schristos {
102475fd0b74Schristos M32R_INSN_SRL3, "srl3", "srl3", 32,
102575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
102675fd0b74Schristos },
102775fd0b74Schristos /* srli $dr,$uimm5 */
102875fd0b74Schristos {
102975fd0b74Schristos M32R_INSN_SRLI, "srli", "srli", 16,
103075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
103175fd0b74Schristos },
103275fd0b74Schristos /* st $src1,@$src2 */
103375fd0b74Schristos {
103475fd0b74Schristos M32R_INSN_ST, "st", "st", 16,
103575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
103675fd0b74Schristos },
103775fd0b74Schristos /* st $src1,@($slo16,$src2) */
103875fd0b74Schristos {
103975fd0b74Schristos M32R_INSN_ST_D, "st-d", "st", 32,
104075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
104175fd0b74Schristos },
104275fd0b74Schristos /* stb $src1,@$src2 */
104375fd0b74Schristos {
104475fd0b74Schristos M32R_INSN_STB, "stb", "stb", 16,
104575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
104675fd0b74Schristos },
104775fd0b74Schristos /* stb $src1,@($slo16,$src2) */
104875fd0b74Schristos {
104975fd0b74Schristos M32R_INSN_STB_D, "stb-d", "stb", 32,
105075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
105175fd0b74Schristos },
105275fd0b74Schristos /* sth $src1,@$src2 */
105375fd0b74Schristos {
105475fd0b74Schristos M32R_INSN_STH, "sth", "sth", 16,
105575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
105675fd0b74Schristos },
105775fd0b74Schristos /* sth $src1,@($slo16,$src2) */
105875fd0b74Schristos {
105975fd0b74Schristos M32R_INSN_STH_D, "sth-d", "sth", 32,
106075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
106175fd0b74Schristos },
106275fd0b74Schristos /* st $src1,@+$src2 */
106375fd0b74Schristos {
106475fd0b74Schristos M32R_INSN_ST_PLUS, "st-plus", "st", 16,
106575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
106675fd0b74Schristos },
106775fd0b74Schristos /* sth $src1,@$src2+ */
106875fd0b74Schristos {
106975fd0b74Schristos M32R_INSN_STH_PLUS, "sth-plus", "sth", 16,
107075fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
107175fd0b74Schristos },
107275fd0b74Schristos /* stb $src1,@$src2+ */
107375fd0b74Schristos {
107475fd0b74Schristos M32R_INSN_STB_PLUS, "stb-plus", "stb", 16,
107575fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
107675fd0b74Schristos },
107775fd0b74Schristos /* st $src1,@-$src2 */
107875fd0b74Schristos {
107975fd0b74Schristos M32R_INSN_ST_MINUS, "st-minus", "st", 16,
108075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
108175fd0b74Schristos },
108275fd0b74Schristos /* sub $dr,$sr */
108375fd0b74Schristos {
108475fd0b74Schristos M32R_INSN_SUB, "sub", "sub", 16,
108575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
108675fd0b74Schristos },
108775fd0b74Schristos /* subv $dr,$sr */
108875fd0b74Schristos {
108975fd0b74Schristos M32R_INSN_SUBV, "subv", "subv", 16,
109075fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
109175fd0b74Schristos },
109275fd0b74Schristos /* subx $dr,$sr */
109375fd0b74Schristos {
109475fd0b74Schristos M32R_INSN_SUBX, "subx", "subx", 16,
109575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
109675fd0b74Schristos },
109775fd0b74Schristos /* trap $uimm4 */
109875fd0b74Schristos {
109975fd0b74Schristos M32R_INSN_TRAP, "trap", "trap", 16,
110075fd0b74Schristos { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
110175fd0b74Schristos },
110275fd0b74Schristos /* unlock $src1,@$src2 */
110375fd0b74Schristos {
110475fd0b74Schristos M32R_INSN_UNLOCK, "unlock", "unlock", 16,
110575fd0b74Schristos { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
110675fd0b74Schristos },
110775fd0b74Schristos /* satb $dr,$sr */
110875fd0b74Schristos {
110975fd0b74Schristos M32R_INSN_SATB, "satb", "satb", 32,
111075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
111175fd0b74Schristos },
111275fd0b74Schristos /* sath $dr,$sr */
111375fd0b74Schristos {
111475fd0b74Schristos M32R_INSN_SATH, "sath", "sath", 32,
111575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
111675fd0b74Schristos },
111775fd0b74Schristos /* sat $dr,$sr */
111875fd0b74Schristos {
111975fd0b74Schristos M32R_INSN_SAT, "sat", "sat", 32,
112075fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
112175fd0b74Schristos },
112275fd0b74Schristos /* pcmpbz $src2 */
112375fd0b74Schristos {
112475fd0b74Schristos M32R_INSN_PCMPBZ, "pcmpbz", "pcmpbz", 16,
112575fd0b74Schristos { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
112675fd0b74Schristos },
112775fd0b74Schristos /* sadd */
112875fd0b74Schristos {
112975fd0b74Schristos M32R_INSN_SADD, "sadd", "sadd", 16,
113075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
113175fd0b74Schristos },
113275fd0b74Schristos /* macwu1 $src1,$src2 */
113375fd0b74Schristos {
113475fd0b74Schristos M32R_INSN_MACWU1, "macwu1", "macwu1", 16,
113575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
113675fd0b74Schristos },
113775fd0b74Schristos /* msblo $src1,$src2 */
113875fd0b74Schristos {
113975fd0b74Schristos M32R_INSN_MSBLO, "msblo", "msblo", 16,
114075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
114175fd0b74Schristos },
114275fd0b74Schristos /* mulwu1 $src1,$src2 */
114375fd0b74Schristos {
114475fd0b74Schristos M32R_INSN_MULWU1, "mulwu1", "mulwu1", 16,
114575fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
114675fd0b74Schristos },
114775fd0b74Schristos /* maclh1 $src1,$src2 */
114875fd0b74Schristos {
114975fd0b74Schristos M32R_INSN_MACLH1, "maclh1", "maclh1", 16,
115075fd0b74Schristos { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
115175fd0b74Schristos },
115275fd0b74Schristos /* sc */
115375fd0b74Schristos {
115475fd0b74Schristos M32R_INSN_SC, "sc", "sc", 16,
115575fd0b74Schristos { 0|A(SPECIAL)|A(SKIP_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
115675fd0b74Schristos },
115775fd0b74Schristos /* snc */
115875fd0b74Schristos {
115975fd0b74Schristos M32R_INSN_SNC, "snc", "snc", 16,
116075fd0b74Schristos { 0|A(SPECIAL)|A(SKIP_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
116175fd0b74Schristos },
116275fd0b74Schristos /* clrpsw $uimm8 */
116375fd0b74Schristos {
116475fd0b74Schristos M32R_INSN_CLRPSW, "clrpsw", "clrpsw", 16,
116575fd0b74Schristos { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
116675fd0b74Schristos },
116775fd0b74Schristos /* setpsw $uimm8 */
116875fd0b74Schristos {
116975fd0b74Schristos M32R_INSN_SETPSW, "setpsw", "setpsw", 16,
117075fd0b74Schristos { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
117175fd0b74Schristos },
117275fd0b74Schristos /* bset $uimm3,@($slo16,$sr) */
117375fd0b74Schristos {
117475fd0b74Schristos M32R_INSN_BSET, "bset", "bset", 32,
117575fd0b74Schristos { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
117675fd0b74Schristos },
117775fd0b74Schristos /* bclr $uimm3,@($slo16,$sr) */
117875fd0b74Schristos {
117975fd0b74Schristos M32R_INSN_BCLR, "bclr", "bclr", 32,
118075fd0b74Schristos { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
118175fd0b74Schristos },
118275fd0b74Schristos /* btst $uimm3,$sr */
118375fd0b74Schristos {
118475fd0b74Schristos M32R_INSN_BTST, "btst", "btst", 16,
118575fd0b74Schristos { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
118675fd0b74Schristos },
118775fd0b74Schristos };
118875fd0b74Schristos
118975fd0b74Schristos #undef OP
119075fd0b74Schristos #undef A
119175fd0b74Schristos
119275fd0b74Schristos /* Initialize anything needed to be done once, before any cpu_open call. */
119375fd0b74Schristos
119475fd0b74Schristos static void
init_tables(void)119575fd0b74Schristos init_tables (void)
119675fd0b74Schristos {
119775fd0b74Schristos }
119875fd0b74Schristos
1199ede78133Schristos #ifndef opcodes_error_handler
1200ede78133Schristos #define opcodes_error_handler(...) \
1201ede78133Schristos fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
1202ede78133Schristos #endif
1203ede78133Schristos
120475fd0b74Schristos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
120575fd0b74Schristos static void build_hw_table (CGEN_CPU_TABLE *);
120675fd0b74Schristos static void build_ifield_table (CGEN_CPU_TABLE *);
120775fd0b74Schristos static void build_operand_table (CGEN_CPU_TABLE *);
120875fd0b74Schristos static void build_insn_table (CGEN_CPU_TABLE *);
120975fd0b74Schristos static void m32r_cgen_rebuild_tables (CGEN_CPU_TABLE *);
121075fd0b74Schristos
121175fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to look up a mach via its bfd name. */
121275fd0b74Schristos
121375fd0b74Schristos static const CGEN_MACH *
lookup_mach_via_bfd_name(const CGEN_MACH * table,const char * name)121475fd0b74Schristos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
121575fd0b74Schristos {
121675fd0b74Schristos while (table->name)
121775fd0b74Schristos {
121875fd0b74Schristos if (strcmp (name, table->bfd_name) == 0)
121975fd0b74Schristos return table;
122075fd0b74Schristos ++table;
122175fd0b74Schristos }
1222ede78133Schristos return NULL;
122375fd0b74Schristos }
122475fd0b74Schristos
122575fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to build the hardware table. */
122675fd0b74Schristos
122775fd0b74Schristos static void
build_hw_table(CGEN_CPU_TABLE * cd)122875fd0b74Schristos build_hw_table (CGEN_CPU_TABLE *cd)
122975fd0b74Schristos {
123075fd0b74Schristos int i;
123175fd0b74Schristos int machs = cd->machs;
123275fd0b74Schristos const CGEN_HW_ENTRY *init = & m32r_cgen_hw_table[0];
123375fd0b74Schristos /* MAX_HW is only an upper bound on the number of selected entries.
123475fd0b74Schristos However each entry is indexed by it's enum so there can be holes in
123575fd0b74Schristos the table. */
123675fd0b74Schristos const CGEN_HW_ENTRY **selected =
123775fd0b74Schristos (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
123875fd0b74Schristos
123975fd0b74Schristos cd->hw_table.init_entries = init;
124075fd0b74Schristos cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
124175fd0b74Schristos memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
124275fd0b74Schristos /* ??? For now we just use machs to determine which ones we want. */
124375fd0b74Schristos for (i = 0; init[i].name != NULL; ++i)
124475fd0b74Schristos if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
124575fd0b74Schristos & machs)
124675fd0b74Schristos selected[init[i].type] = &init[i];
124775fd0b74Schristos cd->hw_table.entries = selected;
124875fd0b74Schristos cd->hw_table.num_entries = MAX_HW;
124975fd0b74Schristos }
125075fd0b74Schristos
125175fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to build the hardware table. */
125275fd0b74Schristos
125375fd0b74Schristos static void
build_ifield_table(CGEN_CPU_TABLE * cd)125475fd0b74Schristos build_ifield_table (CGEN_CPU_TABLE *cd)
125575fd0b74Schristos {
125675fd0b74Schristos cd->ifld_table = & m32r_cgen_ifld_table[0];
125775fd0b74Schristos }
125875fd0b74Schristos
125975fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to build the hardware table. */
126075fd0b74Schristos
126175fd0b74Schristos static void
build_operand_table(CGEN_CPU_TABLE * cd)126275fd0b74Schristos build_operand_table (CGEN_CPU_TABLE *cd)
126375fd0b74Schristos {
126475fd0b74Schristos int i;
126575fd0b74Schristos int machs = cd->machs;
126675fd0b74Schristos const CGEN_OPERAND *init = & m32r_cgen_operand_table[0];
126775fd0b74Schristos /* MAX_OPERANDS is only an upper bound on the number of selected entries.
126875fd0b74Schristos However each entry is indexed by it's enum so there can be holes in
126975fd0b74Schristos the table. */
127075fd0b74Schristos const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
127175fd0b74Schristos
127275fd0b74Schristos cd->operand_table.init_entries = init;
127375fd0b74Schristos cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
127475fd0b74Schristos memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
127575fd0b74Schristos /* ??? For now we just use mach to determine which ones we want. */
127675fd0b74Schristos for (i = 0; init[i].name != NULL; ++i)
127775fd0b74Schristos if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
127875fd0b74Schristos & machs)
127975fd0b74Schristos selected[init[i].type] = &init[i];
128075fd0b74Schristos cd->operand_table.entries = selected;
128175fd0b74Schristos cd->operand_table.num_entries = MAX_OPERANDS;
128275fd0b74Schristos }
128375fd0b74Schristos
128475fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to build the hardware table.
128575fd0b74Schristos ??? This could leave out insns not supported by the specified mach/isa,
128675fd0b74Schristos but that would cause errors like "foo only supported by bar" to become
128775fd0b74Schristos "unknown insn", so for now we include all insns and require the app to
128875fd0b74Schristos do the checking later.
128975fd0b74Schristos ??? On the other hand, parsing of such insns may require their hardware or
129075fd0b74Schristos operand elements to be in the table [which they mightn't be]. */
129175fd0b74Schristos
129275fd0b74Schristos static void
build_insn_table(CGEN_CPU_TABLE * cd)129375fd0b74Schristos build_insn_table (CGEN_CPU_TABLE *cd)
129475fd0b74Schristos {
129575fd0b74Schristos int i;
129675fd0b74Schristos const CGEN_IBASE *ib = & m32r_cgen_insn_table[0];
129775fd0b74Schristos CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
129875fd0b74Schristos
129975fd0b74Schristos memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
130075fd0b74Schristos for (i = 0; i < MAX_INSNS; ++i)
130175fd0b74Schristos insns[i].base = &ib[i];
130275fd0b74Schristos cd->insn_table.init_entries = insns;
130375fd0b74Schristos cd->insn_table.entry_size = sizeof (CGEN_IBASE);
130475fd0b74Schristos cd->insn_table.num_init_entries = MAX_INSNS;
130575fd0b74Schristos }
130675fd0b74Schristos
130775fd0b74Schristos /* Subroutine of m32r_cgen_cpu_open to rebuild the tables. */
130875fd0b74Schristos
130975fd0b74Schristos static void
m32r_cgen_rebuild_tables(CGEN_CPU_TABLE * cd)131075fd0b74Schristos m32r_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
131175fd0b74Schristos {
131275fd0b74Schristos int i;
131375fd0b74Schristos CGEN_BITSET *isas = cd->isas;
131475fd0b74Schristos unsigned int machs = cd->machs;
131575fd0b74Schristos
131675fd0b74Schristos cd->int_insn_p = CGEN_INT_INSN_P;
131775fd0b74Schristos
131875fd0b74Schristos /* Data derived from the isa spec. */
131975fd0b74Schristos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
132075fd0b74Schristos cd->default_insn_bitsize = UNSET;
132175fd0b74Schristos cd->base_insn_bitsize = UNSET;
132275fd0b74Schristos cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
132375fd0b74Schristos cd->max_insn_bitsize = 0;
132475fd0b74Schristos for (i = 0; i < MAX_ISAS; ++i)
132575fd0b74Schristos if (cgen_bitset_contains (isas, i))
132675fd0b74Schristos {
132775fd0b74Schristos const CGEN_ISA *isa = & m32r_cgen_isa_table[i];
132875fd0b74Schristos
132975fd0b74Schristos /* Default insn sizes of all selected isas must be
133075fd0b74Schristos equal or we set the result to 0, meaning "unknown". */
133175fd0b74Schristos if (cd->default_insn_bitsize == UNSET)
133275fd0b74Schristos cd->default_insn_bitsize = isa->default_insn_bitsize;
133375fd0b74Schristos else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
133475fd0b74Schristos ; /* This is ok. */
133575fd0b74Schristos else
133675fd0b74Schristos cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
133775fd0b74Schristos
133875fd0b74Schristos /* Base insn sizes of all selected isas must be equal
133975fd0b74Schristos or we set the result to 0, meaning "unknown". */
134075fd0b74Schristos if (cd->base_insn_bitsize == UNSET)
134175fd0b74Schristos cd->base_insn_bitsize = isa->base_insn_bitsize;
134275fd0b74Schristos else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
134375fd0b74Schristos ; /* This is ok. */
134475fd0b74Schristos else
134575fd0b74Schristos cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
134675fd0b74Schristos
134775fd0b74Schristos /* Set min,max insn sizes. */
134875fd0b74Schristos if (isa->min_insn_bitsize < cd->min_insn_bitsize)
134975fd0b74Schristos cd->min_insn_bitsize = isa->min_insn_bitsize;
135075fd0b74Schristos if (isa->max_insn_bitsize > cd->max_insn_bitsize)
135175fd0b74Schristos cd->max_insn_bitsize = isa->max_insn_bitsize;
135275fd0b74Schristos }
135375fd0b74Schristos
135475fd0b74Schristos /* Data derived from the mach spec. */
135575fd0b74Schristos for (i = 0; i < MAX_MACHS; ++i)
135675fd0b74Schristos if (((1 << i) & machs) != 0)
135775fd0b74Schristos {
135875fd0b74Schristos const CGEN_MACH *mach = & m32r_cgen_mach_table[i];
135975fd0b74Schristos
136075fd0b74Schristos if (mach->insn_chunk_bitsize != 0)
136175fd0b74Schristos {
136275fd0b74Schristos if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
136375fd0b74Schristos {
1364ede78133Schristos opcodes_error_handler
1365ede78133Schristos (/* xgettext:c-format */
1366ede78133Schristos _("internal error: m32r_cgen_rebuild_tables: "
1367ede78133Schristos "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
136875fd0b74Schristos cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
136975fd0b74Schristos abort ();
137075fd0b74Schristos }
137175fd0b74Schristos
137275fd0b74Schristos cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
137375fd0b74Schristos }
137475fd0b74Schristos }
137575fd0b74Schristos
137675fd0b74Schristos /* Determine which hw elements are used by MACH. */
137775fd0b74Schristos build_hw_table (cd);
137875fd0b74Schristos
137975fd0b74Schristos /* Build the ifield table. */
138075fd0b74Schristos build_ifield_table (cd);
138175fd0b74Schristos
138275fd0b74Schristos /* Determine which operands are used by MACH/ISA. */
138375fd0b74Schristos build_operand_table (cd);
138475fd0b74Schristos
138575fd0b74Schristos /* Build the instruction table. */
138675fd0b74Schristos build_insn_table (cd);
138775fd0b74Schristos }
138875fd0b74Schristos
138975fd0b74Schristos /* Initialize a cpu table and return a descriptor.
139075fd0b74Schristos It's much like opening a file, and must be the first function called.
139175fd0b74Schristos The arguments are a set of (type/value) pairs, terminated with
139275fd0b74Schristos CGEN_CPU_OPEN_END.
139375fd0b74Schristos
139475fd0b74Schristos Currently supported values:
139575fd0b74Schristos CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
139675fd0b74Schristos CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
139775fd0b74Schristos CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
139875fd0b74Schristos CGEN_CPU_OPEN_ENDIAN: specify endian choice
1399*e992f068Schristos CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
140075fd0b74Schristos CGEN_CPU_OPEN_END: terminates arguments
140175fd0b74Schristos
140275fd0b74Schristos ??? Simultaneous multiple isas might not make sense, but it's not (yet)
140375fd0b74Schristos precluded. */
140475fd0b74Schristos
140575fd0b74Schristos CGEN_CPU_DESC
m32r_cgen_cpu_open(enum cgen_cpu_open_arg arg_type,...)140675fd0b74Schristos m32r_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
140775fd0b74Schristos {
140875fd0b74Schristos CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
140975fd0b74Schristos static int init_p;
141075fd0b74Schristos CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
141175fd0b74Schristos unsigned int machs = 0; /* 0 = "unspecified" */
141275fd0b74Schristos enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
1413*e992f068Schristos enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
141475fd0b74Schristos va_list ap;
141575fd0b74Schristos
141675fd0b74Schristos if (! init_p)
141775fd0b74Schristos {
141875fd0b74Schristos init_tables ();
141975fd0b74Schristos init_p = 1;
142075fd0b74Schristos }
142175fd0b74Schristos
142275fd0b74Schristos memset (cd, 0, sizeof (*cd));
142375fd0b74Schristos
142475fd0b74Schristos va_start (ap, arg_type);
142575fd0b74Schristos while (arg_type != CGEN_CPU_OPEN_END)
142675fd0b74Schristos {
142775fd0b74Schristos switch (arg_type)
142875fd0b74Schristos {
142975fd0b74Schristos case CGEN_CPU_OPEN_ISAS :
143075fd0b74Schristos isas = va_arg (ap, CGEN_BITSET *);
143175fd0b74Schristos break;
143275fd0b74Schristos case CGEN_CPU_OPEN_MACHS :
143375fd0b74Schristos machs = va_arg (ap, unsigned int);
143475fd0b74Schristos break;
143575fd0b74Schristos case CGEN_CPU_OPEN_BFDMACH :
143675fd0b74Schristos {
143775fd0b74Schristos const char *name = va_arg (ap, const char *);
143875fd0b74Schristos const CGEN_MACH *mach =
143975fd0b74Schristos lookup_mach_via_bfd_name (m32r_cgen_mach_table, name);
144075fd0b74Schristos
1441ede78133Schristos if (mach != NULL)
144275fd0b74Schristos machs |= 1 << mach->num;
144375fd0b74Schristos break;
144475fd0b74Schristos }
144575fd0b74Schristos case CGEN_CPU_OPEN_ENDIAN :
144675fd0b74Schristos endian = va_arg (ap, enum cgen_endian);
144775fd0b74Schristos break;
1448*e992f068Schristos case CGEN_CPU_OPEN_INSN_ENDIAN :
1449*e992f068Schristos insn_endian = va_arg (ap, enum cgen_endian);
1450*e992f068Schristos break;
145175fd0b74Schristos default :
1452ede78133Schristos opcodes_error_handler
1453ede78133Schristos (/* xgettext:c-format */
1454ede78133Schristos _("internal error: m32r_cgen_cpu_open: "
1455ede78133Schristos "unsupported argument `%d'"),
145675fd0b74Schristos arg_type);
145775fd0b74Schristos abort (); /* ??? return NULL? */
145875fd0b74Schristos }
145975fd0b74Schristos arg_type = va_arg (ap, enum cgen_cpu_open_arg);
146075fd0b74Schristos }
146175fd0b74Schristos va_end (ap);
146275fd0b74Schristos
146375fd0b74Schristos /* Mach unspecified means "all". */
146475fd0b74Schristos if (machs == 0)
146575fd0b74Schristos machs = (1 << MAX_MACHS) - 1;
146675fd0b74Schristos /* Base mach is always selected. */
146775fd0b74Schristos machs |= 1;
146875fd0b74Schristos if (endian == CGEN_ENDIAN_UNKNOWN)
146975fd0b74Schristos {
147075fd0b74Schristos /* ??? If target has only one, could have a default. */
1471ede78133Schristos opcodes_error_handler
1472ede78133Schristos (/* xgettext:c-format */
1473ede78133Schristos _("internal error: m32r_cgen_cpu_open: no endianness specified"));
147475fd0b74Schristos abort ();
147575fd0b74Schristos }
147675fd0b74Schristos
147775fd0b74Schristos cd->isas = cgen_bitset_copy (isas);
147875fd0b74Schristos cd->machs = machs;
147975fd0b74Schristos cd->endian = endian;
1480*e992f068Schristos cd->insn_endian
1481*e992f068Schristos = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
148275fd0b74Schristos
148375fd0b74Schristos /* Table (re)builder. */
148475fd0b74Schristos cd->rebuild_tables = m32r_cgen_rebuild_tables;
148575fd0b74Schristos m32r_cgen_rebuild_tables (cd);
148675fd0b74Schristos
148775fd0b74Schristos /* Default to not allowing signed overflow. */
148875fd0b74Schristos cd->signed_overflow_ok_p = 0;
148975fd0b74Schristos
149075fd0b74Schristos return (CGEN_CPU_DESC) cd;
149175fd0b74Schristos }
149275fd0b74Schristos
149375fd0b74Schristos /* Cover fn to m32r_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
149475fd0b74Schristos MACH_NAME is the bfd name of the mach. */
149575fd0b74Schristos
149675fd0b74Schristos CGEN_CPU_DESC
m32r_cgen_cpu_open_1(const char * mach_name,enum cgen_endian endian)149775fd0b74Schristos m32r_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
149875fd0b74Schristos {
149975fd0b74Schristos return m32r_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
150075fd0b74Schristos CGEN_CPU_OPEN_ENDIAN, endian,
150175fd0b74Schristos CGEN_CPU_OPEN_END);
150275fd0b74Schristos }
150375fd0b74Schristos
150475fd0b74Schristos /* Close a cpu table.
150575fd0b74Schristos ??? This can live in a machine independent file, but there's currently
150675fd0b74Schristos no place to put this file (there's no libcgen). libopcodes is the wrong
150775fd0b74Schristos place as some simulator ports use this but they don't use libopcodes. */
150875fd0b74Schristos
150975fd0b74Schristos void
m32r_cgen_cpu_close(CGEN_CPU_DESC cd)151075fd0b74Schristos m32r_cgen_cpu_close (CGEN_CPU_DESC cd)
151175fd0b74Schristos {
151275fd0b74Schristos unsigned int i;
151375fd0b74Schristos const CGEN_INSN *insns;
151475fd0b74Schristos
151575fd0b74Schristos if (cd->macro_insn_table.init_entries)
151675fd0b74Schristos {
151775fd0b74Schristos insns = cd->macro_insn_table.init_entries;
151875fd0b74Schristos for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
151975fd0b74Schristos if (CGEN_INSN_RX ((insns)))
152075fd0b74Schristos regfree (CGEN_INSN_RX (insns));
152175fd0b74Schristos }
152275fd0b74Schristos
152375fd0b74Schristos if (cd->insn_table.init_entries)
152475fd0b74Schristos {
152575fd0b74Schristos insns = cd->insn_table.init_entries;
152675fd0b74Schristos for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
152775fd0b74Schristos if (CGEN_INSN_RX (insns))
152875fd0b74Schristos regfree (CGEN_INSN_RX (insns));
152975fd0b74Schristos }
153075fd0b74Schristos
153175fd0b74Schristos free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
153275fd0b74Schristos free ((CGEN_INSN *) cd->insn_table.init_entries);
153375fd0b74Schristos free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
153475fd0b74Schristos free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
153575fd0b74Schristos free (cd);
153675fd0b74Schristos }
153775fd0b74Schristos
1538