decodev32.c revision 1.11 1 1.1 christos /* Simulator instruction decoder for crisv32f.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.11 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22 1.1 christos
23 1.1 christos */
24 1.1 christos
25 1.1 christos #define WANT_CPU crisv32f
26 1.1 christos #define WANT_CPU_CRISV32F
27 1.1 christos
28 1.1 christos #include "sim-main.h"
29 1.1 christos #include "sim-assert.h"
30 1.10 christos #include "cgen-mem.h"
31 1.1 christos #include "cgen-ops.h"
32 1.1 christos
33 1.1 christos /* The instruction descriptor array.
34 1.1 christos This is computed at runtime. Space for it is not malloc'd to save a
35 1.1 christos teensy bit of cpu in the decoder. Moving it to malloc space is trivial
36 1.1 christos but won't be done until necessary (we don't currently support the runtime
37 1.1 christos addition of instructions nor an SMP machine with different cpus). */
38 1.1 christos static IDESC crisv32f_insn_data[CRISV32F_INSN__MAX];
39 1.1 christos
40 1.1 christos /* Commas between elements are contained in the macros.
41 1.1 christos Some of these are conditionally compiled out. */
42 1.1 christos
43 1.1 christos static const struct insn_sem crisv32f_insn_sem[] =
44 1.1 christos {
45 1.1 christos { VIRTUAL_INSN_X_INVALID, CRISV32F_INSN_X_INVALID, CRISV32F_SFMT_EMPTY },
46 1.1 christos { VIRTUAL_INSN_X_AFTER, CRISV32F_INSN_X_AFTER, CRISV32F_SFMT_EMPTY },
47 1.1 christos { VIRTUAL_INSN_X_BEFORE, CRISV32F_INSN_X_BEFORE, CRISV32F_SFMT_EMPTY },
48 1.1 christos { VIRTUAL_INSN_X_CTI_CHAIN, CRISV32F_INSN_X_CTI_CHAIN, CRISV32F_SFMT_EMPTY },
49 1.1 christos { VIRTUAL_INSN_X_CHAIN, CRISV32F_INSN_X_CHAIN, CRISV32F_SFMT_EMPTY },
50 1.1 christos { VIRTUAL_INSN_X_BEGIN, CRISV32F_INSN_X_BEGIN, CRISV32F_SFMT_EMPTY },
51 1.1 christos { CRIS_INSN_MOVE_B_R, CRISV32F_INSN_MOVE_B_R, CRISV32F_SFMT_MOVE_B_R },
52 1.1 christos { CRIS_INSN_MOVE_W_R, CRISV32F_INSN_MOVE_W_R, CRISV32F_SFMT_MOVE_B_R },
53 1.1 christos { CRIS_INSN_MOVE_D_R, CRISV32F_INSN_MOVE_D_R, CRISV32F_SFMT_MOVE_D_R },
54 1.1 christos { CRIS_INSN_MOVEQ, CRISV32F_INSN_MOVEQ, CRISV32F_SFMT_MOVEQ },
55 1.1 christos { CRIS_INSN_MOVS_B_R, CRISV32F_INSN_MOVS_B_R, CRISV32F_SFMT_MOVS_B_R },
56 1.1 christos { CRIS_INSN_MOVS_W_R, CRISV32F_INSN_MOVS_W_R, CRISV32F_SFMT_MOVS_B_R },
57 1.1 christos { CRIS_INSN_MOVU_B_R, CRISV32F_INSN_MOVU_B_R, CRISV32F_SFMT_MOVS_B_R },
58 1.1 christos { CRIS_INSN_MOVU_W_R, CRISV32F_INSN_MOVU_W_R, CRISV32F_SFMT_MOVS_B_R },
59 1.1 christos { CRIS_INSN_MOVECBR, CRISV32F_INSN_MOVECBR, CRISV32F_SFMT_MOVECBR },
60 1.1 christos { CRIS_INSN_MOVECWR, CRISV32F_INSN_MOVECWR, CRISV32F_SFMT_MOVECWR },
61 1.1 christos { CRIS_INSN_MOVECDR, CRISV32F_INSN_MOVECDR, CRISV32F_SFMT_MOVECDR },
62 1.1 christos { CRIS_INSN_MOVSCBR, CRISV32F_INSN_MOVSCBR, CRISV32F_SFMT_MOVSCBR },
63 1.1 christos { CRIS_INSN_MOVSCWR, CRISV32F_INSN_MOVSCWR, CRISV32F_SFMT_MOVSCWR },
64 1.1 christos { CRIS_INSN_MOVUCBR, CRISV32F_INSN_MOVUCBR, CRISV32F_SFMT_MOVUCBR },
65 1.1 christos { CRIS_INSN_MOVUCWR, CRISV32F_INSN_MOVUCWR, CRISV32F_SFMT_MOVUCWR },
66 1.1 christos { CRIS_INSN_ADDQ, CRISV32F_INSN_ADDQ, CRISV32F_SFMT_ADDQ },
67 1.1 christos { CRIS_INSN_SUBQ, CRISV32F_INSN_SUBQ, CRISV32F_SFMT_ADDQ },
68 1.1 christos { CRIS_INSN_CMP_R_B_R, CRISV32F_INSN_CMP_R_B_R, CRISV32F_SFMT_CMP_R_B_R },
69 1.1 christos { CRIS_INSN_CMP_R_W_R, CRISV32F_INSN_CMP_R_W_R, CRISV32F_SFMT_CMP_R_B_R },
70 1.1 christos { CRIS_INSN_CMP_R_D_R, CRISV32F_INSN_CMP_R_D_R, CRISV32F_SFMT_CMP_R_B_R },
71 1.1 christos { CRIS_INSN_CMP_M_B_M, CRISV32F_INSN_CMP_M_B_M, CRISV32F_SFMT_CMP_M_B_M },
72 1.1 christos { CRIS_INSN_CMP_M_W_M, CRISV32F_INSN_CMP_M_W_M, CRISV32F_SFMT_CMP_M_W_M },
73 1.1 christos { CRIS_INSN_CMP_M_D_M, CRISV32F_INSN_CMP_M_D_M, CRISV32F_SFMT_CMP_M_D_M },
74 1.1 christos { CRIS_INSN_CMPCBR, CRISV32F_INSN_CMPCBR, CRISV32F_SFMT_CMPCBR },
75 1.1 christos { CRIS_INSN_CMPCWR, CRISV32F_INSN_CMPCWR, CRISV32F_SFMT_CMPCWR },
76 1.1 christos { CRIS_INSN_CMPCDR, CRISV32F_INSN_CMPCDR, CRISV32F_SFMT_CMPCDR },
77 1.1 christos { CRIS_INSN_CMPQ, CRISV32F_INSN_CMPQ, CRISV32F_SFMT_CMPQ },
78 1.1 christos { CRIS_INSN_CMPS_M_B_M, CRISV32F_INSN_CMPS_M_B_M, CRISV32F_SFMT_CMP_M_B_M },
79 1.1 christos { CRIS_INSN_CMPS_M_W_M, CRISV32F_INSN_CMPS_M_W_M, CRISV32F_SFMT_CMP_M_W_M },
80 1.1 christos { CRIS_INSN_CMPSCBR, CRISV32F_INSN_CMPSCBR, CRISV32F_SFMT_CMPCBR },
81 1.1 christos { CRIS_INSN_CMPSCWR, CRISV32F_INSN_CMPSCWR, CRISV32F_SFMT_CMPCWR },
82 1.1 christos { CRIS_INSN_CMPU_M_B_M, CRISV32F_INSN_CMPU_M_B_M, CRISV32F_SFMT_CMP_M_B_M },
83 1.1 christos { CRIS_INSN_CMPU_M_W_M, CRISV32F_INSN_CMPU_M_W_M, CRISV32F_SFMT_CMP_M_W_M },
84 1.1 christos { CRIS_INSN_CMPUCBR, CRISV32F_INSN_CMPUCBR, CRISV32F_SFMT_CMPUCBR },
85 1.1 christos { CRIS_INSN_CMPUCWR, CRISV32F_INSN_CMPUCWR, CRISV32F_SFMT_CMPUCWR },
86 1.1 christos { CRIS_INSN_MOVE_M_B_M, CRISV32F_INSN_MOVE_M_B_M, CRISV32F_SFMT_MOVE_M_B_M },
87 1.1 christos { CRIS_INSN_MOVE_M_W_M, CRISV32F_INSN_MOVE_M_W_M, CRISV32F_SFMT_MOVE_M_W_M },
88 1.1 christos { CRIS_INSN_MOVE_M_D_M, CRISV32F_INSN_MOVE_M_D_M, CRISV32F_SFMT_MOVE_M_D_M },
89 1.1 christos { CRIS_INSN_MOVS_M_B_M, CRISV32F_INSN_MOVS_M_B_M, CRISV32F_SFMT_MOVS_M_B_M },
90 1.1 christos { CRIS_INSN_MOVS_M_W_M, CRISV32F_INSN_MOVS_M_W_M, CRISV32F_SFMT_MOVS_M_W_M },
91 1.1 christos { CRIS_INSN_MOVU_M_B_M, CRISV32F_INSN_MOVU_M_B_M, CRISV32F_SFMT_MOVS_M_B_M },
92 1.1 christos { CRIS_INSN_MOVU_M_W_M, CRISV32F_INSN_MOVU_M_W_M, CRISV32F_SFMT_MOVS_M_W_M },
93 1.1 christos { CRIS_INSN_MOVE_R_SPRV32, CRISV32F_INSN_MOVE_R_SPRV32, CRISV32F_SFMT_MOVE_R_SPRV32 },
94 1.1 christos { CRIS_INSN_MOVE_SPR_RV32, CRISV32F_INSN_MOVE_SPR_RV32, CRISV32F_SFMT_MOVE_SPR_RV32 },
95 1.1 christos { CRIS_INSN_MOVE_M_SPRV32, CRISV32F_INSN_MOVE_M_SPRV32, CRISV32F_SFMT_MOVE_M_SPRV32 },
96 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P2, CRISV32F_INSN_MOVE_C_SPRV32_P2, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
97 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P3, CRISV32F_INSN_MOVE_C_SPRV32_P3, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
98 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P5, CRISV32F_INSN_MOVE_C_SPRV32_P5, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
99 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P6, CRISV32F_INSN_MOVE_C_SPRV32_P6, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
100 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P7, CRISV32F_INSN_MOVE_C_SPRV32_P7, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
101 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P9, CRISV32F_INSN_MOVE_C_SPRV32_P9, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
102 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P10, CRISV32F_INSN_MOVE_C_SPRV32_P10, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
103 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P11, CRISV32F_INSN_MOVE_C_SPRV32_P11, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
104 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P12, CRISV32F_INSN_MOVE_C_SPRV32_P12, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
105 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P13, CRISV32F_INSN_MOVE_C_SPRV32_P13, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
106 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P14, CRISV32F_INSN_MOVE_C_SPRV32_P14, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
107 1.1 christos { CRIS_INSN_MOVE_C_SPRV32_P15, CRISV32F_INSN_MOVE_C_SPRV32_P15, CRISV32F_SFMT_MOVE_C_SPRV32_P2 },
108 1.1 christos { CRIS_INSN_MOVE_SPR_MV32, CRISV32F_INSN_MOVE_SPR_MV32, CRISV32F_SFMT_MOVE_SPR_MV32 },
109 1.1 christos { CRIS_INSN_MOVE_SS_R, CRISV32F_INSN_MOVE_SS_R, CRISV32F_SFMT_MOVE_SS_R },
110 1.1 christos { CRIS_INSN_MOVE_R_SS, CRISV32F_INSN_MOVE_R_SS, CRISV32F_SFMT_MOVE_R_SS },
111 1.1 christos { CRIS_INSN_MOVEM_R_M_V32, CRISV32F_INSN_MOVEM_R_M_V32, CRISV32F_SFMT_MOVEM_R_M_V32 },
112 1.1 christos { CRIS_INSN_MOVEM_M_R_V32, CRISV32F_INSN_MOVEM_M_R_V32, CRISV32F_SFMT_MOVEM_M_R_V32 },
113 1.1 christos { CRIS_INSN_ADD_B_R, CRISV32F_INSN_ADD_B_R, CRISV32F_SFMT_ADD_B_R },
114 1.1 christos { CRIS_INSN_ADD_W_R, CRISV32F_INSN_ADD_W_R, CRISV32F_SFMT_ADD_B_R },
115 1.1 christos { CRIS_INSN_ADD_D_R, CRISV32F_INSN_ADD_D_R, CRISV32F_SFMT_ADD_D_R },
116 1.1 christos { CRIS_INSN_ADD_M_B_M, CRISV32F_INSN_ADD_M_B_M, CRISV32F_SFMT_ADD_M_B_M },
117 1.1 christos { CRIS_INSN_ADD_M_W_M, CRISV32F_INSN_ADD_M_W_M, CRISV32F_SFMT_ADD_M_W_M },
118 1.1 christos { CRIS_INSN_ADD_M_D_M, CRISV32F_INSN_ADD_M_D_M, CRISV32F_SFMT_ADD_M_D_M },
119 1.1 christos { CRIS_INSN_ADDCBR, CRISV32F_INSN_ADDCBR, CRISV32F_SFMT_ADDCBR },
120 1.1 christos { CRIS_INSN_ADDCWR, CRISV32F_INSN_ADDCWR, CRISV32F_SFMT_ADDCWR },
121 1.1 christos { CRIS_INSN_ADDCDR, CRISV32F_INSN_ADDCDR, CRISV32F_SFMT_ADDCDR },
122 1.1 christos { CRIS_INSN_ADDS_B_R, CRISV32F_INSN_ADDS_B_R, CRISV32F_SFMT_ADD_D_R },
123 1.1 christos { CRIS_INSN_ADDS_W_R, CRISV32F_INSN_ADDS_W_R, CRISV32F_SFMT_ADD_D_R },
124 1.1 christos { CRIS_INSN_ADDS_M_B_M, CRISV32F_INSN_ADDS_M_B_M, CRISV32F_SFMT_ADDS_M_B_M },
125 1.1 christos { CRIS_INSN_ADDS_M_W_M, CRISV32F_INSN_ADDS_M_W_M, CRISV32F_SFMT_ADDS_M_W_M },
126 1.1 christos { CRIS_INSN_ADDSCBR, CRISV32F_INSN_ADDSCBR, CRISV32F_SFMT_ADDSCBR },
127 1.1 christos { CRIS_INSN_ADDSCWR, CRISV32F_INSN_ADDSCWR, CRISV32F_SFMT_ADDSCWR },
128 1.1 christos { CRIS_INSN_ADDU_B_R, CRISV32F_INSN_ADDU_B_R, CRISV32F_SFMT_ADD_D_R },
129 1.1 christos { CRIS_INSN_ADDU_W_R, CRISV32F_INSN_ADDU_W_R, CRISV32F_SFMT_ADD_D_R },
130 1.1 christos { CRIS_INSN_ADDU_M_B_M, CRISV32F_INSN_ADDU_M_B_M, CRISV32F_SFMT_ADDS_M_B_M },
131 1.1 christos { CRIS_INSN_ADDU_M_W_M, CRISV32F_INSN_ADDU_M_W_M, CRISV32F_SFMT_ADDS_M_W_M },
132 1.1 christos { CRIS_INSN_ADDUCBR, CRISV32F_INSN_ADDUCBR, CRISV32F_SFMT_ADDSCBR },
133 1.1 christos { CRIS_INSN_ADDUCWR, CRISV32F_INSN_ADDUCWR, CRISV32F_SFMT_ADDSCWR },
134 1.1 christos { CRIS_INSN_SUB_B_R, CRISV32F_INSN_SUB_B_R, CRISV32F_SFMT_ADD_B_R },
135 1.1 christos { CRIS_INSN_SUB_W_R, CRISV32F_INSN_SUB_W_R, CRISV32F_SFMT_ADD_B_R },
136 1.1 christos { CRIS_INSN_SUB_D_R, CRISV32F_INSN_SUB_D_R, CRISV32F_SFMT_ADD_D_R },
137 1.1 christos { CRIS_INSN_SUB_M_B_M, CRISV32F_INSN_SUB_M_B_M, CRISV32F_SFMT_ADD_M_B_M },
138 1.1 christos { CRIS_INSN_SUB_M_W_M, CRISV32F_INSN_SUB_M_W_M, CRISV32F_SFMT_ADD_M_W_M },
139 1.1 christos { CRIS_INSN_SUB_M_D_M, CRISV32F_INSN_SUB_M_D_M, CRISV32F_SFMT_ADD_M_D_M },
140 1.1 christos { CRIS_INSN_SUBCBR, CRISV32F_INSN_SUBCBR, CRISV32F_SFMT_ADDCBR },
141 1.1 christos { CRIS_INSN_SUBCWR, CRISV32F_INSN_SUBCWR, CRISV32F_SFMT_ADDCWR },
142 1.1 christos { CRIS_INSN_SUBCDR, CRISV32F_INSN_SUBCDR, CRISV32F_SFMT_ADDCDR },
143 1.1 christos { CRIS_INSN_SUBS_B_R, CRISV32F_INSN_SUBS_B_R, CRISV32F_SFMT_ADD_D_R },
144 1.1 christos { CRIS_INSN_SUBS_W_R, CRISV32F_INSN_SUBS_W_R, CRISV32F_SFMT_ADD_D_R },
145 1.1 christos { CRIS_INSN_SUBS_M_B_M, CRISV32F_INSN_SUBS_M_B_M, CRISV32F_SFMT_ADDS_M_B_M },
146 1.1 christos { CRIS_INSN_SUBS_M_W_M, CRISV32F_INSN_SUBS_M_W_M, CRISV32F_SFMT_ADDS_M_W_M },
147 1.1 christos { CRIS_INSN_SUBSCBR, CRISV32F_INSN_SUBSCBR, CRISV32F_SFMT_ADDSCBR },
148 1.1 christos { CRIS_INSN_SUBSCWR, CRISV32F_INSN_SUBSCWR, CRISV32F_SFMT_ADDSCWR },
149 1.1 christos { CRIS_INSN_SUBU_B_R, CRISV32F_INSN_SUBU_B_R, CRISV32F_SFMT_ADD_D_R },
150 1.1 christos { CRIS_INSN_SUBU_W_R, CRISV32F_INSN_SUBU_W_R, CRISV32F_SFMT_ADD_D_R },
151 1.1 christos { CRIS_INSN_SUBU_M_B_M, CRISV32F_INSN_SUBU_M_B_M, CRISV32F_SFMT_ADDS_M_B_M },
152 1.1 christos { CRIS_INSN_SUBU_M_W_M, CRISV32F_INSN_SUBU_M_W_M, CRISV32F_SFMT_ADDS_M_W_M },
153 1.1 christos { CRIS_INSN_SUBUCBR, CRISV32F_INSN_SUBUCBR, CRISV32F_SFMT_ADDSCBR },
154 1.1 christos { CRIS_INSN_SUBUCWR, CRISV32F_INSN_SUBUCWR, CRISV32F_SFMT_ADDSCWR },
155 1.1 christos { CRIS_INSN_ADDC_R, CRISV32F_INSN_ADDC_R, CRISV32F_SFMT_ADD_D_R },
156 1.1 christos { CRIS_INSN_ADDC_M, CRISV32F_INSN_ADDC_M, CRISV32F_SFMT_ADDC_M },
157 1.1 christos { CRIS_INSN_ADDC_C, CRISV32F_INSN_ADDC_C, CRISV32F_SFMT_ADDCDR },
158 1.1 christos { CRIS_INSN_LAPC_D, CRISV32F_INSN_LAPC_D, CRISV32F_SFMT_LAPC_D },
159 1.1 christos { CRIS_INSN_LAPCQ, CRISV32F_INSN_LAPCQ, CRISV32F_SFMT_LAPCQ },
160 1.1 christos { CRIS_INSN_ADDI_B_R, CRISV32F_INSN_ADDI_B_R, CRISV32F_SFMT_ADDI_B_R },
161 1.1 christos { CRIS_INSN_ADDI_W_R, CRISV32F_INSN_ADDI_W_R, CRISV32F_SFMT_ADDI_B_R },
162 1.1 christos { CRIS_INSN_ADDI_D_R, CRISV32F_INSN_ADDI_D_R, CRISV32F_SFMT_ADDI_B_R },
163 1.1 christos { CRIS_INSN_NEG_B_R, CRISV32F_INSN_NEG_B_R, CRISV32F_SFMT_NEG_B_R },
164 1.1 christos { CRIS_INSN_NEG_W_R, CRISV32F_INSN_NEG_W_R, CRISV32F_SFMT_NEG_B_R },
165 1.1 christos { CRIS_INSN_NEG_D_R, CRISV32F_INSN_NEG_D_R, CRISV32F_SFMT_NEG_D_R },
166 1.1 christos { CRIS_INSN_TEST_M_B_M, CRISV32F_INSN_TEST_M_B_M, CRISV32F_SFMT_TEST_M_B_M },
167 1.1 christos { CRIS_INSN_TEST_M_W_M, CRISV32F_INSN_TEST_M_W_M, CRISV32F_SFMT_TEST_M_W_M },
168 1.1 christos { CRIS_INSN_TEST_M_D_M, CRISV32F_INSN_TEST_M_D_M, CRISV32F_SFMT_TEST_M_D_M },
169 1.1 christos { CRIS_INSN_MOVE_R_M_B_M, CRISV32F_INSN_MOVE_R_M_B_M, CRISV32F_SFMT_MOVE_R_M_B_M },
170 1.1 christos { CRIS_INSN_MOVE_R_M_W_M, CRISV32F_INSN_MOVE_R_M_W_M, CRISV32F_SFMT_MOVE_R_M_W_M },
171 1.1 christos { CRIS_INSN_MOVE_R_M_D_M, CRISV32F_INSN_MOVE_R_M_D_M, CRISV32F_SFMT_MOVE_R_M_D_M },
172 1.1 christos { CRIS_INSN_MULS_B, CRISV32F_INSN_MULS_B, CRISV32F_SFMT_MULS_B },
173 1.1 christos { CRIS_INSN_MULS_W, CRISV32F_INSN_MULS_W, CRISV32F_SFMT_MULS_B },
174 1.1 christos { CRIS_INSN_MULS_D, CRISV32F_INSN_MULS_D, CRISV32F_SFMT_MULS_B },
175 1.1 christos { CRIS_INSN_MULU_B, CRISV32F_INSN_MULU_B, CRISV32F_SFMT_MULS_B },
176 1.1 christos { CRIS_INSN_MULU_W, CRISV32F_INSN_MULU_W, CRISV32F_SFMT_MULS_B },
177 1.1 christos { CRIS_INSN_MULU_D, CRISV32F_INSN_MULU_D, CRISV32F_SFMT_MULS_B },
178 1.1 christos { CRIS_INSN_MCP, CRISV32F_INSN_MCP, CRISV32F_SFMT_MCP },
179 1.1 christos { CRIS_INSN_DSTEP, CRISV32F_INSN_DSTEP, CRISV32F_SFMT_DSTEP },
180 1.1 christos { CRIS_INSN_ABS, CRISV32F_INSN_ABS, CRISV32F_SFMT_MOVS_B_R },
181 1.1 christos { CRIS_INSN_AND_B_R, CRISV32F_INSN_AND_B_R, CRISV32F_SFMT_AND_B_R },
182 1.1 christos { CRIS_INSN_AND_W_R, CRISV32F_INSN_AND_W_R, CRISV32F_SFMT_AND_B_R },
183 1.1 christos { CRIS_INSN_AND_D_R, CRISV32F_INSN_AND_D_R, CRISV32F_SFMT_AND_D_R },
184 1.1 christos { CRIS_INSN_AND_M_B_M, CRISV32F_INSN_AND_M_B_M, CRISV32F_SFMT_AND_M_B_M },
185 1.1 christos { CRIS_INSN_AND_M_W_M, CRISV32F_INSN_AND_M_W_M, CRISV32F_SFMT_AND_M_W_M },
186 1.1 christos { CRIS_INSN_AND_M_D_M, CRISV32F_INSN_AND_M_D_M, CRISV32F_SFMT_AND_M_D_M },
187 1.1 christos { CRIS_INSN_ANDCBR, CRISV32F_INSN_ANDCBR, CRISV32F_SFMT_ANDCBR },
188 1.1 christos { CRIS_INSN_ANDCWR, CRISV32F_INSN_ANDCWR, CRISV32F_SFMT_ANDCWR },
189 1.1 christos { CRIS_INSN_ANDCDR, CRISV32F_INSN_ANDCDR, CRISV32F_SFMT_ANDCDR },
190 1.1 christos { CRIS_INSN_ANDQ, CRISV32F_INSN_ANDQ, CRISV32F_SFMT_ANDQ },
191 1.1 christos { CRIS_INSN_ORR_B_R, CRISV32F_INSN_ORR_B_R, CRISV32F_SFMT_AND_B_R },
192 1.1 christos { CRIS_INSN_ORR_W_R, CRISV32F_INSN_ORR_W_R, CRISV32F_SFMT_AND_B_R },
193 1.1 christos { CRIS_INSN_ORR_D_R, CRISV32F_INSN_ORR_D_R, CRISV32F_SFMT_AND_D_R },
194 1.1 christos { CRIS_INSN_OR_M_B_M, CRISV32F_INSN_OR_M_B_M, CRISV32F_SFMT_AND_M_B_M },
195 1.1 christos { CRIS_INSN_OR_M_W_M, CRISV32F_INSN_OR_M_W_M, CRISV32F_SFMT_AND_M_W_M },
196 1.1 christos { CRIS_INSN_OR_M_D_M, CRISV32F_INSN_OR_M_D_M, CRISV32F_SFMT_AND_M_D_M },
197 1.1 christos { CRIS_INSN_ORCBR, CRISV32F_INSN_ORCBR, CRISV32F_SFMT_ANDCBR },
198 1.1 christos { CRIS_INSN_ORCWR, CRISV32F_INSN_ORCWR, CRISV32F_SFMT_ANDCWR },
199 1.1 christos { CRIS_INSN_ORCDR, CRISV32F_INSN_ORCDR, CRISV32F_SFMT_ANDCDR },
200 1.1 christos { CRIS_INSN_ORQ, CRISV32F_INSN_ORQ, CRISV32F_SFMT_ANDQ },
201 1.1 christos { CRIS_INSN_XOR, CRISV32F_INSN_XOR, CRISV32F_SFMT_DSTEP },
202 1.1 christos { CRIS_INSN_SWAP, CRISV32F_INSN_SWAP, CRISV32F_SFMT_SWAP },
203 1.1 christos { CRIS_INSN_ASRR_B_R, CRISV32F_INSN_ASRR_B_R, CRISV32F_SFMT_AND_B_R },
204 1.1 christos { CRIS_INSN_ASRR_W_R, CRISV32F_INSN_ASRR_W_R, CRISV32F_SFMT_AND_B_R },
205 1.1 christos { CRIS_INSN_ASRR_D_R, CRISV32F_INSN_ASRR_D_R, CRISV32F_SFMT_AND_D_R },
206 1.1 christos { CRIS_INSN_ASRQ, CRISV32F_INSN_ASRQ, CRISV32F_SFMT_ASRQ },
207 1.1 christos { CRIS_INSN_LSRR_B_R, CRISV32F_INSN_LSRR_B_R, CRISV32F_SFMT_LSRR_B_R },
208 1.1 christos { CRIS_INSN_LSRR_W_R, CRISV32F_INSN_LSRR_W_R, CRISV32F_SFMT_LSRR_B_R },
209 1.1 christos { CRIS_INSN_LSRR_D_R, CRISV32F_INSN_LSRR_D_R, CRISV32F_SFMT_LSRR_D_R },
210 1.1 christos { CRIS_INSN_LSRQ, CRISV32F_INSN_LSRQ, CRISV32F_SFMT_ASRQ },
211 1.1 christos { CRIS_INSN_LSLR_B_R, CRISV32F_INSN_LSLR_B_R, CRISV32F_SFMT_LSRR_B_R },
212 1.1 christos { CRIS_INSN_LSLR_W_R, CRISV32F_INSN_LSLR_W_R, CRISV32F_SFMT_LSRR_B_R },
213 1.1 christos { CRIS_INSN_LSLR_D_R, CRISV32F_INSN_LSLR_D_R, CRISV32F_SFMT_LSRR_D_R },
214 1.1 christos { CRIS_INSN_LSLQ, CRISV32F_INSN_LSLQ, CRISV32F_SFMT_ASRQ },
215 1.1 christos { CRIS_INSN_BTST, CRISV32F_INSN_BTST, CRISV32F_SFMT_BTST },
216 1.1 christos { CRIS_INSN_BTSTQ, CRISV32F_INSN_BTSTQ, CRISV32F_SFMT_BTSTQ },
217 1.1 christos { CRIS_INSN_SETF, CRISV32F_INSN_SETF, CRISV32F_SFMT_SETF },
218 1.1 christos { CRIS_INSN_CLEARF, CRISV32F_INSN_CLEARF, CRISV32F_SFMT_SETF },
219 1.1 christos { CRIS_INSN_RFE, CRISV32F_INSN_RFE, CRISV32F_SFMT_RFE },
220 1.1 christos { CRIS_INSN_SFE, CRISV32F_INSN_SFE, CRISV32F_SFMT_SFE },
221 1.1 christos { CRIS_INSN_RFG, CRISV32F_INSN_RFG, CRISV32F_SFMT_RFG },
222 1.1 christos { CRIS_INSN_RFN, CRISV32F_INSN_RFN, CRISV32F_SFMT_RFN },
223 1.1 christos { CRIS_INSN_HALT, CRISV32F_INSN_HALT, CRISV32F_SFMT_HALT },
224 1.1 christos { CRIS_INSN_BCC_B, CRISV32F_INSN_BCC_B, CRISV32F_SFMT_BCC_B },
225 1.1 christos { CRIS_INSN_BA_B, CRISV32F_INSN_BA_B, CRISV32F_SFMT_BA_B },
226 1.1 christos { CRIS_INSN_BCC_W, CRISV32F_INSN_BCC_W, CRISV32F_SFMT_BCC_W },
227 1.1 christos { CRIS_INSN_BA_W, CRISV32F_INSN_BA_W, CRISV32F_SFMT_BA_W },
228 1.1 christos { CRIS_INSN_JAS_R, CRISV32F_INSN_JAS_R, CRISV32F_SFMT_JAS_R },
229 1.1 christos { CRIS_INSN_JAS_C, CRISV32F_INSN_JAS_C, CRISV32F_SFMT_JAS_C },
230 1.1 christos { CRIS_INSN_JUMP_P, CRISV32F_INSN_JUMP_P, CRISV32F_SFMT_JUMP_P },
231 1.1 christos { CRIS_INSN_BAS_C, CRISV32F_INSN_BAS_C, CRISV32F_SFMT_BAS_C },
232 1.1 christos { CRIS_INSN_JASC_R, CRISV32F_INSN_JASC_R, CRISV32F_SFMT_JASC_R },
233 1.1 christos { CRIS_INSN_JASC_C, CRISV32F_INSN_JASC_C, CRISV32F_SFMT_JAS_C },
234 1.1 christos { CRIS_INSN_BASC_C, CRISV32F_INSN_BASC_C, CRISV32F_SFMT_BAS_C },
235 1.1 christos { CRIS_INSN_BREAK, CRISV32F_INSN_BREAK, CRISV32F_SFMT_BREAK },
236 1.1 christos { CRIS_INSN_BOUND_R_B_R, CRISV32F_INSN_BOUND_R_B_R, CRISV32F_SFMT_DSTEP },
237 1.1 christos { CRIS_INSN_BOUND_R_W_R, CRISV32F_INSN_BOUND_R_W_R, CRISV32F_SFMT_DSTEP },
238 1.1 christos { CRIS_INSN_BOUND_R_D_R, CRISV32F_INSN_BOUND_R_D_R, CRISV32F_SFMT_DSTEP },
239 1.1 christos { CRIS_INSN_BOUND_CB, CRISV32F_INSN_BOUND_CB, CRISV32F_SFMT_BOUND_CB },
240 1.1 christos { CRIS_INSN_BOUND_CW, CRISV32F_INSN_BOUND_CW, CRISV32F_SFMT_BOUND_CW },
241 1.1 christos { CRIS_INSN_BOUND_CD, CRISV32F_INSN_BOUND_CD, CRISV32F_SFMT_BOUND_CD },
242 1.1 christos { CRIS_INSN_SCC, CRISV32F_INSN_SCC, CRISV32F_SFMT_SCC },
243 1.1 christos { CRIS_INSN_LZ, CRISV32F_INSN_LZ, CRISV32F_SFMT_MOVS_B_R },
244 1.1 christos { CRIS_INSN_ADDOQ, CRISV32F_INSN_ADDOQ, CRISV32F_SFMT_ADDOQ },
245 1.1 christos { CRIS_INSN_ADDO_M_B_M, CRISV32F_INSN_ADDO_M_B_M, CRISV32F_SFMT_ADDO_M_B_M },
246 1.1 christos { CRIS_INSN_ADDO_M_W_M, CRISV32F_INSN_ADDO_M_W_M, CRISV32F_SFMT_ADDO_M_W_M },
247 1.1 christos { CRIS_INSN_ADDO_M_D_M, CRISV32F_INSN_ADDO_M_D_M, CRISV32F_SFMT_ADDO_M_D_M },
248 1.1 christos { CRIS_INSN_ADDO_CB, CRISV32F_INSN_ADDO_CB, CRISV32F_SFMT_ADDO_CB },
249 1.1 christos { CRIS_INSN_ADDO_CW, CRISV32F_INSN_ADDO_CW, CRISV32F_SFMT_ADDO_CW },
250 1.1 christos { CRIS_INSN_ADDO_CD, CRISV32F_INSN_ADDO_CD, CRISV32F_SFMT_ADDO_CD },
251 1.1 christos { CRIS_INSN_ADDI_ACR_B_R, CRISV32F_INSN_ADDI_ACR_B_R, CRISV32F_SFMT_ADDI_ACR_B_R },
252 1.1 christos { CRIS_INSN_ADDI_ACR_W_R, CRISV32F_INSN_ADDI_ACR_W_R, CRISV32F_SFMT_ADDI_ACR_B_R },
253 1.1 christos { CRIS_INSN_ADDI_ACR_D_R, CRISV32F_INSN_ADDI_ACR_D_R, CRISV32F_SFMT_ADDI_ACR_B_R },
254 1.1 christos { CRIS_INSN_FIDXI, CRISV32F_INSN_FIDXI, CRISV32F_SFMT_FIDXI },
255 1.1 christos { CRIS_INSN_FTAGI, CRISV32F_INSN_FTAGI, CRISV32F_SFMT_FIDXI },
256 1.1 christos { CRIS_INSN_FIDXD, CRISV32F_INSN_FIDXD, CRISV32F_SFMT_FIDXI },
257 1.1 christos { CRIS_INSN_FTAGD, CRISV32F_INSN_FTAGD, CRISV32F_SFMT_FIDXI },
258 1.1 christos };
259 1.1 christos
260 1.1 christos static const struct insn_sem crisv32f_insn_sem_invalid =
261 1.1 christos {
262 1.1 christos VIRTUAL_INSN_X_INVALID, CRISV32F_INSN_X_INVALID, CRISV32F_SFMT_EMPTY
263 1.1 christos };
264 1.1 christos
265 1.1 christos /* Initialize an IDESC from the compile-time computable parts. */
266 1.1 christos
267 1.1 christos static INLINE void
268 1.1 christos init_idesc (SIM_CPU *cpu, IDESC *id, const struct insn_sem *t)
269 1.1 christos {
270 1.1 christos const CGEN_INSN *insn_table = CGEN_CPU_INSN_TABLE (CPU_CPU_DESC (cpu))->init_entries;
271 1.1 christos
272 1.1 christos id->num = t->index;
273 1.1 christos id->sfmt = t->sfmt;
274 1.1 christos if ((int) t->type <= 0)
275 1.1 christos id->idata = & cgen_virtual_insn_table[- (int) t->type];
276 1.1 christos else
277 1.1 christos id->idata = & insn_table[t->type];
278 1.1 christos id->attrs = CGEN_INSN_ATTRS (id->idata);
279 1.1 christos /* Oh my god, a magic number. */
280 1.1 christos id->length = CGEN_INSN_BITSIZE (id->idata) / 8;
281 1.1 christos
282 1.1 christos #if WITH_PROFILE_MODEL_P
283 1.1 christos id->timing = & MODEL_TIMING (CPU_MODEL (cpu)) [t->index];
284 1.1 christos {
285 1.1 christos SIM_DESC sd = CPU_STATE (cpu);
286 1.1 christos SIM_ASSERT (t->index == id->timing->num);
287 1.1 christos }
288 1.1 christos #endif
289 1.1 christos
290 1.1 christos /* Semantic pointers are initialized elsewhere. */
291 1.1 christos }
292 1.1 christos
293 1.1 christos /* Initialize the instruction descriptor table. */
294 1.1 christos
295 1.1 christos void
296 1.1 christos crisv32f_init_idesc_table (SIM_CPU *cpu)
297 1.1 christos {
298 1.1 christos IDESC *id,*tabend;
299 1.1 christos const struct insn_sem *t,*tend;
300 1.1 christos int tabsize = CRISV32F_INSN__MAX;
301 1.1 christos IDESC *table = crisv32f_insn_data;
302 1.1 christos
303 1.1 christos memset (table, 0, tabsize * sizeof (IDESC));
304 1.1 christos
305 1.1 christos /* First set all entries to the `invalid insn'. */
306 1.1 christos t = & crisv32f_insn_sem_invalid;
307 1.1 christos for (id = table, tabend = table + tabsize; id < tabend; ++id)
308 1.1 christos init_idesc (cpu, id, t);
309 1.1 christos
310 1.1 christos /* Now fill in the values for the chosen cpu. */
311 1.7 christos for (t = crisv32f_insn_sem, tend = t + ARRAY_SIZE (crisv32f_insn_sem);
312 1.1 christos t != tend; ++t)
313 1.1 christos {
314 1.1 christos init_idesc (cpu, & table[t->index], t);
315 1.1 christos }
316 1.1 christos
317 1.1 christos /* Link the IDESC table into the cpu. */
318 1.1 christos CPU_IDESC (cpu) = table;
319 1.1 christos }
320 1.1 christos
321 1.1 christos /* Given an instruction, return a pointer to its IDESC entry. */
322 1.1 christos
323 1.1 christos const IDESC *
324 1.1 christos crisv32f_decode (SIM_CPU *current_cpu, IADDR pc,
325 1.1 christos CGEN_INSN_WORD base_insn,
326 1.1 christos ARGBUF *abuf)
327 1.1 christos {
328 1.1 christos /* Result of decoder. */
329 1.1 christos CRISV32F_INSN_TYPE itype;
330 1.1 christos
331 1.1 christos {
332 1.1 christos CGEN_INSN_WORD insn = base_insn;
333 1.1 christos
334 1.1 christos {
335 1.11 christos unsigned int val0 = (((insn >> 4) & (255 << 0)));
336 1.11 christos switch (val0)
337 1.1 christos {
338 1.11 christos case 0:
339 1.11 christos case 1:
340 1.11 christos case 2:
341 1.11 christos case 3:
342 1.11 christos case 4:
343 1.11 christos case 5:
344 1.11 christos case 6:
345 1.11 christos case 7:
346 1.11 christos case 8:
347 1.11 christos case 9:
348 1.11 christos case 10:
349 1.11 christos case 11:
350 1.11 christos case 12:
351 1.11 christos case 13:
352 1.11 christos case 14:
353 1.11 christos case 15:
354 1.11 christos {
355 1.11 christos unsigned int val1 = (((insn >> 12) & (15 << 0)));
356 1.11 christos switch (val1)
357 1.11 christos {
358 1.11 christos case 0:
359 1.11 christos case 1:
360 1.11 christos case 2:
361 1.11 christos case 3:
362 1.11 christos case 4:
363 1.11 christos case 5:
364 1.11 christos case 6:
365 1.11 christos case 7:
366 1.11 christos case 8:
367 1.11 christos case 9:
368 1.11 christos case 10:
369 1.11 christos case 11:
370 1.11 christos case 12:
371 1.11 christos case 13:
372 1.11 christos case 15: itype = CRISV32F_INSN_BCC_B; goto extract_sfmt_bcc_b;
373 1.11 christos case 14: itype = CRISV32F_INSN_BA_B; goto extract_sfmt_ba_b;
374 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
375 1.11 christos }
376 1.11 christos }
377 1.11 christos case 16:
378 1.11 christos case 17:
379 1.11 christos case 18:
380 1.11 christos case 19:
381 1.11 christos case 20:
382 1.11 christos case 21:
383 1.11 christos case 22:
384 1.11 christos case 23:
385 1.11 christos case 24:
386 1.11 christos case 25:
387 1.11 christos case 26:
388 1.11 christos case 27:
389 1.11 christos case 28:
390 1.11 christos case 29:
391 1.11 christos case 30:
392 1.11 christos case 31: itype = CRISV32F_INSN_ADDOQ; goto extract_sfmt_addoq;
393 1.11 christos case 32:
394 1.11 christos case 33:
395 1.11 christos case 34:
396 1.11 christos case 35: itype = CRISV32F_INSN_ADDQ; goto extract_sfmt_addq;
397 1.11 christos case 36:
398 1.11 christos case 37:
399 1.11 christos case 38:
400 1.11 christos case 39: itype = CRISV32F_INSN_MOVEQ; goto extract_sfmt_moveq;
401 1.11 christos case 40:
402 1.11 christos case 41:
403 1.11 christos case 42:
404 1.11 christos case 43: itype = CRISV32F_INSN_SUBQ; goto extract_sfmt_addq;
405 1.11 christos case 44:
406 1.11 christos case 45:
407 1.11 christos case 46:
408 1.11 christos case 47: itype = CRISV32F_INSN_CMPQ; goto extract_sfmt_cmpq;
409 1.11 christos case 48:
410 1.11 christos case 49:
411 1.11 christos case 50:
412 1.11 christos case 51: itype = CRISV32F_INSN_ANDQ; goto extract_sfmt_andq;
413 1.11 christos case 52:
414 1.11 christos case 53:
415 1.11 christos case 54:
416 1.11 christos case 55: itype = CRISV32F_INSN_ORQ; goto extract_sfmt_andq;
417 1.11 christos case 56:
418 1.11 christos case 57: itype = CRISV32F_INSN_BTSTQ; goto extract_sfmt_btstq;
419 1.11 christos case 58:
420 1.11 christos case 59: itype = CRISV32F_INSN_ASRQ; goto extract_sfmt_asrq;
421 1.11 christos case 60:
422 1.11 christos case 61: itype = CRISV32F_INSN_LSLQ; goto extract_sfmt_asrq;
423 1.11 christos case 62:
424 1.11 christos case 63: itype = CRISV32F_INSN_LSRQ; goto extract_sfmt_asrq;
425 1.11 christos case 64: itype = CRISV32F_INSN_ADDU_B_R; goto extract_sfmt_add_d_r;
426 1.11 christos case 65: itype = CRISV32F_INSN_ADDU_W_R; goto extract_sfmt_add_d_r;
427 1.11 christos case 66: itype = CRISV32F_INSN_ADDS_B_R; goto extract_sfmt_add_d_r;
428 1.11 christos case 67: itype = CRISV32F_INSN_ADDS_W_R; goto extract_sfmt_add_d_r;
429 1.11 christos case 68: itype = CRISV32F_INSN_MOVU_B_R; goto extract_sfmt_movs_b_r;
430 1.11 christos case 69: itype = CRISV32F_INSN_MOVU_W_R; goto extract_sfmt_movs_b_r;
431 1.11 christos case 70: itype = CRISV32F_INSN_MOVS_B_R; goto extract_sfmt_movs_b_r;
432 1.11 christos case 71: itype = CRISV32F_INSN_MOVS_W_R; goto extract_sfmt_movs_b_r;
433 1.11 christos case 72: itype = CRISV32F_INSN_SUBU_B_R; goto extract_sfmt_add_d_r;
434 1.11 christos case 73: itype = CRISV32F_INSN_SUBU_W_R; goto extract_sfmt_add_d_r;
435 1.11 christos case 74: itype = CRISV32F_INSN_SUBS_B_R; goto extract_sfmt_add_d_r;
436 1.11 christos case 75: itype = CRISV32F_INSN_SUBS_W_R; goto extract_sfmt_add_d_r;
437 1.11 christos case 76: itype = CRISV32F_INSN_LSLR_B_R; goto extract_sfmt_lsrr_b_r;
438 1.11 christos case 77: itype = CRISV32F_INSN_LSLR_W_R; goto extract_sfmt_lsrr_b_r;
439 1.11 christos case 78: itype = CRISV32F_INSN_LSLR_D_R; goto extract_sfmt_lsrr_d_r;
440 1.11 christos case 79: itype = CRISV32F_INSN_BTST; goto extract_sfmt_btst;
441 1.11 christos case 80: itype = CRISV32F_INSN_ADDI_B_R; goto extract_sfmt_addi_b_r;
442 1.11 christos case 81: itype = CRISV32F_INSN_ADDI_W_R; goto extract_sfmt_addi_b_r;
443 1.11 christos case 82: itype = CRISV32F_INSN_ADDI_D_R; goto extract_sfmt_addi_b_r;
444 1.11 christos case 83: itype = CRISV32F_INSN_SCC; goto extract_sfmt_scc;
445 1.11 christos case 84: itype = CRISV32F_INSN_ADDI_ACR_B_R; goto extract_sfmt_addi_acr_b_r;
446 1.11 christos case 85: itype = CRISV32F_INSN_ADDI_ACR_W_R; goto extract_sfmt_addi_acr_b_r;
447 1.11 christos case 86: itype = CRISV32F_INSN_ADDI_ACR_D_R; goto extract_sfmt_addi_acr_b_r;
448 1.11 christos case 87: itype = CRISV32F_INSN_ADDC_R; goto extract_sfmt_add_d_r;
449 1.11 christos case 88: itype = CRISV32F_INSN_NEG_B_R; goto extract_sfmt_neg_b_r;
450 1.11 christos case 89: itype = CRISV32F_INSN_NEG_W_R; goto extract_sfmt_neg_b_r;
451 1.11 christos case 90: itype = CRISV32F_INSN_NEG_D_R; goto extract_sfmt_neg_d_r;
452 1.11 christos case 91: itype = CRISV32F_INSN_SETF; goto extract_sfmt_setf;
453 1.11 christos case 92: itype = CRISV32F_INSN_BOUND_R_B_R; goto extract_sfmt_dstep;
454 1.11 christos case 93: itype = CRISV32F_INSN_BOUND_R_W_R; goto extract_sfmt_dstep;
455 1.11 christos case 94: itype = CRISV32F_INSN_BOUND_R_D_R; goto extract_sfmt_dstep;
456 1.11 christos case 95: itype = CRISV32F_INSN_CLEARF; goto extract_sfmt_setf;
457 1.11 christos case 96: itype = CRISV32F_INSN_ADD_B_R; goto extract_sfmt_add_b_r;
458 1.11 christos case 97: itype = CRISV32F_INSN_ADD_W_R; goto extract_sfmt_add_b_r;
459 1.11 christos case 98: itype = CRISV32F_INSN_ADD_D_R; goto extract_sfmt_add_d_r;
460 1.11 christos case 99: itype = CRISV32F_INSN_MOVE_R_SPRV32; goto extract_sfmt_move_r_sprv32;
461 1.11 christos case 100: itype = CRISV32F_INSN_MOVE_B_R; goto extract_sfmt_move_b_r;
462 1.11 christos case 101: itype = CRISV32F_INSN_MOVE_W_R; goto extract_sfmt_move_b_r;
463 1.11 christos case 102: itype = CRISV32F_INSN_MOVE_D_R; goto extract_sfmt_move_d_r;
464 1.11 christos case 103: itype = CRISV32F_INSN_MOVE_SPR_RV32; goto extract_sfmt_move_spr_rv32;
465 1.11 christos case 104: itype = CRISV32F_INSN_SUB_B_R; goto extract_sfmt_add_b_r;
466 1.11 christos case 105: itype = CRISV32F_INSN_SUB_W_R; goto extract_sfmt_add_b_r;
467 1.11 christos case 106: itype = CRISV32F_INSN_SUB_D_R; goto extract_sfmt_add_d_r;
468 1.11 christos case 107: itype = CRISV32F_INSN_ABS; goto extract_sfmt_movs_b_r;
469 1.11 christos case 108: itype = CRISV32F_INSN_CMP_R_B_R; goto extract_sfmt_cmp_r_b_r;
470 1.11 christos case 109: itype = CRISV32F_INSN_CMP_R_W_R; goto extract_sfmt_cmp_r_b_r;
471 1.11 christos case 110: itype = CRISV32F_INSN_CMP_R_D_R; goto extract_sfmt_cmp_r_b_r;
472 1.11 christos case 111: itype = CRISV32F_INSN_DSTEP; goto extract_sfmt_dstep;
473 1.11 christos case 112: itype = CRISV32F_INSN_AND_B_R; goto extract_sfmt_and_b_r;
474 1.11 christos case 113: itype = CRISV32F_INSN_AND_W_R; goto extract_sfmt_and_b_r;
475 1.11 christos case 114: itype = CRISV32F_INSN_AND_D_R; goto extract_sfmt_and_d_r;
476 1.11 christos case 115: itype = CRISV32F_INSN_LZ; goto extract_sfmt_movs_b_r;
477 1.11 christos case 116: itype = CRISV32F_INSN_ORR_B_R; goto extract_sfmt_and_b_r;
478 1.11 christos case 117: itype = CRISV32F_INSN_ORR_W_R; goto extract_sfmt_and_b_r;
479 1.11 christos case 118: itype = CRISV32F_INSN_ORR_D_R; goto extract_sfmt_and_d_r;
480 1.11 christos case 119: itype = CRISV32F_INSN_SWAP; goto extract_sfmt_swap;
481 1.11 christos case 120: itype = CRISV32F_INSN_ASRR_B_R; goto extract_sfmt_and_b_r;
482 1.11 christos case 121: itype = CRISV32F_INSN_ASRR_W_R; goto extract_sfmt_and_b_r;
483 1.11 christos case 122: itype = CRISV32F_INSN_ASRR_D_R; goto extract_sfmt_and_d_r;
484 1.11 christos case 123: itype = CRISV32F_INSN_XOR; goto extract_sfmt_dstep;
485 1.11 christos case 124: itype = CRISV32F_INSN_LSRR_B_R; goto extract_sfmt_lsrr_b_r;
486 1.11 christos case 125: itype = CRISV32F_INSN_LSRR_W_R; goto extract_sfmt_lsrr_b_r;
487 1.11 christos case 126: itype = CRISV32F_INSN_LSRR_D_R; goto extract_sfmt_lsrr_d_r;
488 1.11 christos case 127: itype = CRISV32F_INSN_MCP; goto extract_sfmt_mcp;
489 1.11 christos case 128: itype = CRISV32F_INSN_ADDU_M_B_M; goto extract_sfmt_adds_m_b_m;
490 1.11 christos case 129: itype = CRISV32F_INSN_ADDU_M_W_M; goto extract_sfmt_adds_m_w_m;
491 1.11 christos case 130: itype = CRISV32F_INSN_ADDS_M_B_M; goto extract_sfmt_adds_m_b_m;
492 1.11 christos case 131: itype = CRISV32F_INSN_ADDS_M_W_M; goto extract_sfmt_adds_m_w_m;
493 1.11 christos case 132: itype = CRISV32F_INSN_MOVU_M_B_M; goto extract_sfmt_movs_m_b_m;
494 1.11 christos case 133: itype = CRISV32F_INSN_MOVU_M_W_M; goto extract_sfmt_movs_m_w_m;
495 1.11 christos case 134: itype = CRISV32F_INSN_MOVS_M_B_M; goto extract_sfmt_movs_m_b_m;
496 1.11 christos case 135: itype = CRISV32F_INSN_MOVS_M_W_M; goto extract_sfmt_movs_m_w_m;
497 1.11 christos case 136: itype = CRISV32F_INSN_SUBU_M_B_M; goto extract_sfmt_adds_m_b_m;
498 1.11 christos case 137: itype = CRISV32F_INSN_SUBU_M_W_M; goto extract_sfmt_adds_m_w_m;
499 1.11 christos case 138: itype = CRISV32F_INSN_SUBS_M_B_M; goto extract_sfmt_adds_m_b_m;
500 1.11 christos case 139: itype = CRISV32F_INSN_SUBS_M_W_M; goto extract_sfmt_adds_m_w_m;
501 1.11 christos case 140: itype = CRISV32F_INSN_CMPU_M_B_M; goto extract_sfmt_cmp_m_b_m;
502 1.11 christos case 141: itype = CRISV32F_INSN_CMPU_M_W_M; goto extract_sfmt_cmp_m_w_m;
503 1.11 christos case 142: itype = CRISV32F_INSN_CMPS_M_B_M; goto extract_sfmt_cmp_m_b_m;
504 1.11 christos case 143: itype = CRISV32F_INSN_CMPS_M_W_M; goto extract_sfmt_cmp_m_w_m;
505 1.11 christos case 144: itype = CRISV32F_INSN_MULU_B; goto extract_sfmt_muls_b;
506 1.11 christos case 145: itype = CRISV32F_INSN_MULU_W; goto extract_sfmt_muls_b;
507 1.11 christos case 146: itype = CRISV32F_INSN_MULU_D; goto extract_sfmt_muls_b;
508 1.11 christos case 147:
509 1.1 christos {
510 1.11 christos unsigned int val1 = (((insn >> 12) & (15 << 0)));
511 1.11 christos switch (val1)
512 1.1 christos {
513 1.11 christos case 2:
514 1.1 christos if ((base_insn & 0xffff) == 0x2930)
515 1.1 christos { itype = CRISV32F_INSN_RFE; goto extract_sfmt_rfe; }
516 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
517 1.11 christos case 3:
518 1.1 christos if ((base_insn & 0xffff) == 0x3930)
519 1.1 christos { itype = CRISV32F_INSN_SFE; goto extract_sfmt_sfe; }
520 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
521 1.11 christos case 4:
522 1.1 christos if ((base_insn & 0xffff) == 0x4930)
523 1.1 christos { itype = CRISV32F_INSN_RFG; goto extract_sfmt_rfg; }
524 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
525 1.11 christos case 5:
526 1.1 christos if ((base_insn & 0xffff) == 0x5930)
527 1.1 christos { itype = CRISV32F_INSN_RFN; goto extract_sfmt_rfn; }
528 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
529 1.11 christos case 14: itype = CRISV32F_INSN_BREAK; goto extract_sfmt_break;
530 1.11 christos case 15:
531 1.1 christos if ((base_insn & 0xffff) == 0xf930)
532 1.1 christos { itype = CRISV32F_INSN_HALT; goto extract_sfmt_halt; }
533 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
534 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
535 1.1 christos }
536 1.1 christos }
537 1.11 christos case 148: itype = CRISV32F_INSN_ADDO_M_B_M; goto extract_sfmt_addo_m_b_m;
538 1.11 christos case 149: itype = CRISV32F_INSN_ADDO_M_W_M; goto extract_sfmt_addo_m_w_m;
539 1.11 christos case 150: itype = CRISV32F_INSN_ADDO_M_D_M; goto extract_sfmt_addo_m_d_m;
540 1.11 christos case 151: itype = CRISV32F_INSN_LAPCQ; goto extract_sfmt_lapcq;
541 1.11 christos case 154: itype = CRISV32F_INSN_ADDC_M; goto extract_sfmt_addc_m;
542 1.11 christos case 155: itype = CRISV32F_INSN_JAS_R; goto extract_sfmt_jas_r;
543 1.11 christos case 159:
544 1.1 christos if ((base_insn & 0xfff) == 0x9f0)
545 1.1 christos { itype = CRISV32F_INSN_JUMP_P; goto extract_sfmt_jump_p; }
546 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
547 1.11 christos case 160: itype = CRISV32F_INSN_ADD_M_B_M; goto extract_sfmt_add_m_b_m;
548 1.11 christos case 161: itype = CRISV32F_INSN_ADD_M_W_M; goto extract_sfmt_add_m_w_m;
549 1.11 christos case 162: itype = CRISV32F_INSN_ADD_M_D_M; goto extract_sfmt_add_m_d_m;
550 1.11 christos case 163: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
551 1.11 christos case 164: itype = CRISV32F_INSN_MOVE_M_B_M; goto extract_sfmt_move_m_b_m;
552 1.11 christos case 165: itype = CRISV32F_INSN_MOVE_M_W_M; goto extract_sfmt_move_m_w_m;
553 1.11 christos case 166: itype = CRISV32F_INSN_MOVE_M_D_M; goto extract_sfmt_move_m_d_m;
554 1.11 christos case 167:
555 1.11 christos case 231: itype = CRISV32F_INSN_MOVE_SPR_MV32; goto extract_sfmt_move_spr_mv32;
556 1.11 christos case 168: itype = CRISV32F_INSN_SUB_M_B_M; goto extract_sfmt_add_m_b_m;
557 1.11 christos case 169: itype = CRISV32F_INSN_SUB_M_W_M; goto extract_sfmt_add_m_w_m;
558 1.11 christos case 170: itype = CRISV32F_INSN_SUB_M_D_M; goto extract_sfmt_add_m_d_m;
559 1.11 christos case 171:
560 1.1 christos {
561 1.11 christos unsigned int val1 = (((insn >> 12) & (1 << 0)));
562 1.11 christos switch (val1)
563 1.1 christos {
564 1.11 christos case 0:
565 1.1 christos if ((base_insn & 0xfff0) == 0xab0)
566 1.1 christos { itype = CRISV32F_INSN_FIDXD; goto extract_sfmt_fidxi; }
567 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
568 1.11 christos case 1:
569 1.1 christos if ((base_insn & 0xfff0) == 0x1ab0)
570 1.1 christos { itype = CRISV32F_INSN_FTAGD; goto extract_sfmt_fidxi; }
571 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
572 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
573 1.1 christos }
574 1.1 christos }
575 1.11 christos case 172: itype = CRISV32F_INSN_CMP_M_B_M; goto extract_sfmt_cmp_m_b_m;
576 1.11 christos case 173: itype = CRISV32F_INSN_CMP_M_W_M; goto extract_sfmt_cmp_m_w_m;
577 1.11 christos case 174: itype = CRISV32F_INSN_CMP_M_D_M; goto extract_sfmt_cmp_m_d_m;
578 1.11 christos case 176: itype = CRISV32F_INSN_AND_M_B_M; goto extract_sfmt_and_m_b_m;
579 1.11 christos case 177: itype = CRISV32F_INSN_AND_M_W_M; goto extract_sfmt_and_m_w_m;
580 1.11 christos case 178: itype = CRISV32F_INSN_AND_M_D_M; goto extract_sfmt_and_m_d_m;
581 1.11 christos case 179: itype = CRISV32F_INSN_JASC_R; goto extract_sfmt_jasc_r;
582 1.11 christos case 180: itype = CRISV32F_INSN_OR_M_B_M; goto extract_sfmt_and_m_b_m;
583 1.11 christos case 181: itype = CRISV32F_INSN_OR_M_W_M; goto extract_sfmt_and_m_w_m;
584 1.11 christos case 182: itype = CRISV32F_INSN_OR_M_D_M; goto extract_sfmt_and_m_d_m;
585 1.11 christos case 183: itype = CRISV32F_INSN_MOVE_R_SS; goto extract_sfmt_move_r_ss;
586 1.11 christos case 184:
587 1.11 christos case 248:
588 1.1 christos if ((base_insn & 0xfbf0) == 0xb80)
589 1.1 christos { itype = CRISV32F_INSN_TEST_M_B_M; goto extract_sfmt_test_m_b_m; }
590 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
591 1.11 christos case 185:
592 1.11 christos case 249:
593 1.1 christos if ((base_insn & 0xfbf0) == 0xb90)
594 1.1 christos { itype = CRISV32F_INSN_TEST_M_W_M; goto extract_sfmt_test_m_w_m; }
595 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
596 1.11 christos case 186:
597 1.11 christos case 250:
598 1.1 christos if ((base_insn & 0xfbf0) == 0xba0)
599 1.1 christos { itype = CRISV32F_INSN_TEST_M_D_M; goto extract_sfmt_test_m_d_m; }
600 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
601 1.11 christos case 187:
602 1.11 christos case 251: itype = CRISV32F_INSN_MOVEM_M_R_V32; goto extract_sfmt_movem_m_r_v32;
603 1.11 christos case 188:
604 1.11 christos case 252: itype = CRISV32F_INSN_MOVE_R_M_B_M; goto extract_sfmt_move_r_m_b_m;
605 1.11 christos case 189:
606 1.11 christos case 253: itype = CRISV32F_INSN_MOVE_R_M_W_M; goto extract_sfmt_move_r_m_w_m;
607 1.11 christos case 190:
608 1.11 christos case 254: itype = CRISV32F_INSN_MOVE_R_M_D_M; goto extract_sfmt_move_r_m_d_m;
609 1.11 christos case 191:
610 1.11 christos case 255: itype = CRISV32F_INSN_MOVEM_R_M_V32; goto extract_sfmt_movem_r_m_v32;
611 1.11 christos case 192:
612 1.11 christos {
613 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
614 1.11 christos switch (val1)
615 1.11 christos {
616 1.11 christos case 0:
617 1.11 christos case 1:
618 1.11 christos case 2:
619 1.11 christos case 3:
620 1.11 christos case 4:
621 1.11 christos case 5:
622 1.11 christos case 6:
623 1.11 christos case 7:
624 1.11 christos case 8:
625 1.11 christos case 9:
626 1.11 christos case 10:
627 1.11 christos case 11:
628 1.11 christos case 12:
629 1.11 christos case 13:
630 1.11 christos case 14: itype = CRISV32F_INSN_ADDU_M_B_M; goto extract_sfmt_adds_m_b_m;
631 1.11 christos case 15: itype = CRISV32F_INSN_ADDUCBR; goto extract_sfmt_addscbr;
632 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
633 1.11 christos }
634 1.11 christos }
635 1.11 christos case 193:
636 1.11 christos {
637 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
638 1.11 christos switch (val1)
639 1.11 christos {
640 1.11 christos case 0:
641 1.11 christos case 1:
642 1.11 christos case 2:
643 1.11 christos case 3:
644 1.11 christos case 4:
645 1.11 christos case 5:
646 1.11 christos case 6:
647 1.11 christos case 7:
648 1.11 christos case 8:
649 1.11 christos case 9:
650 1.11 christos case 10:
651 1.11 christos case 11:
652 1.11 christos case 12:
653 1.11 christos case 13:
654 1.11 christos case 14: itype = CRISV32F_INSN_ADDU_M_W_M; goto extract_sfmt_adds_m_w_m;
655 1.11 christos case 15: itype = CRISV32F_INSN_ADDUCWR; goto extract_sfmt_addscwr;
656 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
657 1.11 christos }
658 1.11 christos }
659 1.11 christos case 194:
660 1.11 christos {
661 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
662 1.11 christos switch (val1)
663 1.11 christos {
664 1.11 christos case 0:
665 1.11 christos case 1:
666 1.11 christos case 2:
667 1.11 christos case 3:
668 1.11 christos case 4:
669 1.11 christos case 5:
670 1.11 christos case 6:
671 1.11 christos case 7:
672 1.11 christos case 8:
673 1.11 christos case 9:
674 1.11 christos case 10:
675 1.11 christos case 11:
676 1.11 christos case 12:
677 1.11 christos case 13:
678 1.11 christos case 14: itype = CRISV32F_INSN_ADDS_M_B_M; goto extract_sfmt_adds_m_b_m;
679 1.11 christos case 15: itype = CRISV32F_INSN_ADDSCBR; goto extract_sfmt_addscbr;
680 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
681 1.11 christos }
682 1.11 christos }
683 1.11 christos case 195:
684 1.11 christos {
685 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
686 1.11 christos switch (val1)
687 1.11 christos {
688 1.11 christos case 0:
689 1.11 christos case 1:
690 1.11 christos case 2:
691 1.11 christos case 3:
692 1.11 christos case 4:
693 1.11 christos case 5:
694 1.11 christos case 6:
695 1.11 christos case 7:
696 1.11 christos case 8:
697 1.11 christos case 9:
698 1.11 christos case 10:
699 1.11 christos case 11:
700 1.11 christos case 12:
701 1.11 christos case 13:
702 1.11 christos case 14: itype = CRISV32F_INSN_ADDS_M_W_M; goto extract_sfmt_adds_m_w_m;
703 1.11 christos case 15: itype = CRISV32F_INSN_ADDSCWR; goto extract_sfmt_addscwr;
704 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
705 1.11 christos }
706 1.11 christos }
707 1.11 christos case 196:
708 1.11 christos {
709 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
710 1.11 christos switch (val1)
711 1.11 christos {
712 1.11 christos case 0:
713 1.11 christos case 1:
714 1.11 christos case 2:
715 1.11 christos case 3:
716 1.11 christos case 4:
717 1.11 christos case 5:
718 1.11 christos case 6:
719 1.11 christos case 7:
720 1.11 christos case 8:
721 1.11 christos case 9:
722 1.11 christos case 10:
723 1.11 christos case 11:
724 1.11 christos case 12:
725 1.11 christos case 13:
726 1.11 christos case 14: itype = CRISV32F_INSN_MOVU_M_B_M; goto extract_sfmt_movs_m_b_m;
727 1.11 christos case 15: itype = CRISV32F_INSN_MOVUCBR; goto extract_sfmt_movucbr;
728 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
729 1.11 christos }
730 1.11 christos }
731 1.11 christos case 197:
732 1.11 christos {
733 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
734 1.11 christos switch (val1)
735 1.11 christos {
736 1.11 christos case 0:
737 1.11 christos case 1:
738 1.11 christos case 2:
739 1.11 christos case 3:
740 1.11 christos case 4:
741 1.11 christos case 5:
742 1.11 christos case 6:
743 1.11 christos case 7:
744 1.11 christos case 8:
745 1.11 christos case 9:
746 1.11 christos case 10:
747 1.11 christos case 11:
748 1.11 christos case 12:
749 1.11 christos case 13:
750 1.11 christos case 14: itype = CRISV32F_INSN_MOVU_M_W_M; goto extract_sfmt_movs_m_w_m;
751 1.11 christos case 15: itype = CRISV32F_INSN_MOVUCWR; goto extract_sfmt_movucwr;
752 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
753 1.11 christos }
754 1.11 christos }
755 1.11 christos case 198:
756 1.11 christos {
757 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
758 1.11 christos switch (val1)
759 1.11 christos {
760 1.11 christos case 0:
761 1.11 christos case 1:
762 1.11 christos case 2:
763 1.11 christos case 3:
764 1.11 christos case 4:
765 1.11 christos case 5:
766 1.11 christos case 6:
767 1.11 christos case 7:
768 1.11 christos case 8:
769 1.11 christos case 9:
770 1.11 christos case 10:
771 1.11 christos case 11:
772 1.11 christos case 12:
773 1.11 christos case 13:
774 1.11 christos case 14: itype = CRISV32F_INSN_MOVS_M_B_M; goto extract_sfmt_movs_m_b_m;
775 1.11 christos case 15: itype = CRISV32F_INSN_MOVSCBR; goto extract_sfmt_movscbr;
776 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
777 1.11 christos }
778 1.11 christos }
779 1.11 christos case 199:
780 1.11 christos {
781 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
782 1.11 christos switch (val1)
783 1.11 christos {
784 1.11 christos case 0:
785 1.11 christos case 1:
786 1.11 christos case 2:
787 1.11 christos case 3:
788 1.11 christos case 4:
789 1.11 christos case 5:
790 1.11 christos case 6:
791 1.11 christos case 7:
792 1.11 christos case 8:
793 1.11 christos case 9:
794 1.11 christos case 10:
795 1.11 christos case 11:
796 1.11 christos case 12:
797 1.11 christos case 13:
798 1.11 christos case 14: itype = CRISV32F_INSN_MOVS_M_W_M; goto extract_sfmt_movs_m_w_m;
799 1.11 christos case 15: itype = CRISV32F_INSN_MOVSCWR; goto extract_sfmt_movscwr;
800 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
801 1.11 christos }
802 1.11 christos }
803 1.11 christos case 200:
804 1.11 christos {
805 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
806 1.11 christos switch (val1)
807 1.11 christos {
808 1.11 christos case 0:
809 1.11 christos case 1:
810 1.11 christos case 2:
811 1.11 christos case 3:
812 1.11 christos case 4:
813 1.11 christos case 5:
814 1.11 christos case 6:
815 1.11 christos case 7:
816 1.11 christos case 8:
817 1.11 christos case 9:
818 1.11 christos case 10:
819 1.11 christos case 11:
820 1.11 christos case 12:
821 1.11 christos case 13:
822 1.11 christos case 14: itype = CRISV32F_INSN_SUBU_M_B_M; goto extract_sfmt_adds_m_b_m;
823 1.11 christos case 15: itype = CRISV32F_INSN_SUBUCBR; goto extract_sfmt_addscbr;
824 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
825 1.11 christos }
826 1.11 christos }
827 1.11 christos case 201:
828 1.11 christos {
829 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
830 1.11 christos switch (val1)
831 1.11 christos {
832 1.11 christos case 0:
833 1.11 christos case 1:
834 1.11 christos case 2:
835 1.11 christos case 3:
836 1.11 christos case 4:
837 1.11 christos case 5:
838 1.11 christos case 6:
839 1.11 christos case 7:
840 1.11 christos case 8:
841 1.11 christos case 9:
842 1.11 christos case 10:
843 1.11 christos case 11:
844 1.11 christos case 12:
845 1.11 christos case 13:
846 1.11 christos case 14: itype = CRISV32F_INSN_SUBU_M_W_M; goto extract_sfmt_adds_m_w_m;
847 1.11 christos case 15: itype = CRISV32F_INSN_SUBUCWR; goto extract_sfmt_addscwr;
848 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
849 1.11 christos }
850 1.11 christos }
851 1.11 christos case 202:
852 1.11 christos {
853 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
854 1.11 christos switch (val1)
855 1.11 christos {
856 1.11 christos case 0:
857 1.11 christos case 1:
858 1.11 christos case 2:
859 1.11 christos case 3:
860 1.11 christos case 4:
861 1.11 christos case 5:
862 1.11 christos case 6:
863 1.11 christos case 7:
864 1.11 christos case 8:
865 1.11 christos case 9:
866 1.11 christos case 10:
867 1.11 christos case 11:
868 1.11 christos case 12:
869 1.11 christos case 13:
870 1.11 christos case 14: itype = CRISV32F_INSN_SUBS_M_B_M; goto extract_sfmt_adds_m_b_m;
871 1.11 christos case 15: itype = CRISV32F_INSN_SUBSCBR; goto extract_sfmt_addscbr;
872 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
873 1.11 christos }
874 1.11 christos }
875 1.11 christos case 203:
876 1.11 christos {
877 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
878 1.11 christos switch (val1)
879 1.11 christos {
880 1.11 christos case 0:
881 1.11 christos case 1:
882 1.11 christos case 2:
883 1.11 christos case 3:
884 1.11 christos case 4:
885 1.11 christos case 5:
886 1.11 christos case 6:
887 1.11 christos case 7:
888 1.11 christos case 8:
889 1.11 christos case 9:
890 1.11 christos case 10:
891 1.11 christos case 11:
892 1.11 christos case 12:
893 1.11 christos case 13:
894 1.11 christos case 14: itype = CRISV32F_INSN_SUBS_M_W_M; goto extract_sfmt_adds_m_w_m;
895 1.11 christos case 15: itype = CRISV32F_INSN_SUBSCWR; goto extract_sfmt_addscwr;
896 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
897 1.11 christos }
898 1.11 christos }
899 1.11 christos case 204:
900 1.11 christos {
901 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
902 1.11 christos switch (val1)
903 1.11 christos {
904 1.11 christos case 0:
905 1.11 christos case 1:
906 1.11 christos case 2:
907 1.11 christos case 3:
908 1.11 christos case 4:
909 1.11 christos case 5:
910 1.11 christos case 6:
911 1.11 christos case 7:
912 1.11 christos case 8:
913 1.11 christos case 9:
914 1.11 christos case 10:
915 1.11 christos case 11:
916 1.11 christos case 12:
917 1.11 christos case 13:
918 1.11 christos case 14: itype = CRISV32F_INSN_CMPU_M_B_M; goto extract_sfmt_cmp_m_b_m;
919 1.11 christos case 15: itype = CRISV32F_INSN_CMPUCBR; goto extract_sfmt_cmpucbr;
920 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
921 1.11 christos }
922 1.11 christos }
923 1.11 christos case 205:
924 1.11 christos {
925 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
926 1.11 christos switch (val1)
927 1.11 christos {
928 1.11 christos case 0:
929 1.11 christos case 1:
930 1.11 christos case 2:
931 1.11 christos case 3:
932 1.11 christos case 4:
933 1.11 christos case 5:
934 1.11 christos case 6:
935 1.11 christos case 7:
936 1.11 christos case 8:
937 1.11 christos case 9:
938 1.11 christos case 10:
939 1.11 christos case 11:
940 1.11 christos case 12:
941 1.11 christos case 13:
942 1.11 christos case 14: itype = CRISV32F_INSN_CMPU_M_W_M; goto extract_sfmt_cmp_m_w_m;
943 1.11 christos case 15: itype = CRISV32F_INSN_CMPUCWR; goto extract_sfmt_cmpucwr;
944 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
945 1.11 christos }
946 1.11 christos }
947 1.11 christos case 206:
948 1.11 christos {
949 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
950 1.11 christos switch (val1)
951 1.11 christos {
952 1.11 christos case 0:
953 1.11 christos case 1:
954 1.11 christos case 2:
955 1.11 christos case 3:
956 1.11 christos case 4:
957 1.11 christos case 5:
958 1.11 christos case 6:
959 1.11 christos case 7:
960 1.11 christos case 8:
961 1.11 christos case 9:
962 1.11 christos case 10:
963 1.11 christos case 11:
964 1.11 christos case 12:
965 1.11 christos case 13:
966 1.11 christos case 14: itype = CRISV32F_INSN_CMPS_M_B_M; goto extract_sfmt_cmp_m_b_m;
967 1.11 christos case 15: itype = CRISV32F_INSN_CMPSCBR; goto extract_sfmt_cmpcbr;
968 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
969 1.11 christos }
970 1.11 christos }
971 1.11 christos case 207:
972 1.11 christos {
973 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
974 1.11 christos switch (val1)
975 1.11 christos {
976 1.11 christos case 0:
977 1.11 christos case 1:
978 1.11 christos case 2:
979 1.11 christos case 3:
980 1.11 christos case 4:
981 1.11 christos case 5:
982 1.11 christos case 6:
983 1.11 christos case 7:
984 1.11 christos case 8:
985 1.11 christos case 9:
986 1.11 christos case 10:
987 1.11 christos case 11:
988 1.11 christos case 12:
989 1.11 christos case 13:
990 1.11 christos case 14: itype = CRISV32F_INSN_CMPS_M_W_M; goto extract_sfmt_cmp_m_w_m;
991 1.11 christos case 15: itype = CRISV32F_INSN_CMPSCWR; goto extract_sfmt_cmpcwr;
992 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
993 1.11 christos }
994 1.11 christos }
995 1.11 christos case 208: itype = CRISV32F_INSN_MULS_B; goto extract_sfmt_muls_b;
996 1.11 christos case 209: itype = CRISV32F_INSN_MULS_W; goto extract_sfmt_muls_b;
997 1.11 christos case 210: itype = CRISV32F_INSN_MULS_D; goto extract_sfmt_muls_b;
998 1.11 christos case 211:
999 1.1 christos {
1000 1.11 christos unsigned int val1 = (((insn >> 12) & (1 << 0)));
1001 1.11 christos switch (val1)
1002 1.1 christos {
1003 1.11 christos case 0:
1004 1.1 christos if ((base_insn & 0xfff0) == 0xd30)
1005 1.1 christos { itype = CRISV32F_INSN_FIDXI; goto extract_sfmt_fidxi; }
1006 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1007 1.11 christos case 1:
1008 1.1 christos if ((base_insn & 0xfff0) == 0x1d30)
1009 1.1 christos { itype = CRISV32F_INSN_FTAGI; goto extract_sfmt_fidxi; }
1010 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1011 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1012 1.1 christos }
1013 1.1 christos }
1014 1.11 christos case 212:
1015 1.1 christos {
1016 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1017 1.11 christos switch (val1)
1018 1.1 christos {
1019 1.11 christos case 0:
1020 1.11 christos case 1:
1021 1.11 christos case 2:
1022 1.11 christos case 3:
1023 1.11 christos case 4:
1024 1.11 christos case 5:
1025 1.11 christos case 6:
1026 1.11 christos case 7:
1027 1.11 christos case 8:
1028 1.11 christos case 9:
1029 1.11 christos case 10:
1030 1.11 christos case 11:
1031 1.11 christos case 12:
1032 1.11 christos case 13:
1033 1.11 christos case 14: itype = CRISV32F_INSN_ADDO_M_B_M; goto extract_sfmt_addo_m_b_m;
1034 1.11 christos case 15: itype = CRISV32F_INSN_ADDO_CB; goto extract_sfmt_addo_cb;
1035 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1036 1.11 christos }
1037 1.11 christos }
1038 1.11 christos case 213:
1039 1.11 christos {
1040 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1041 1.11 christos switch (val1)
1042 1.11 christos {
1043 1.11 christos case 0:
1044 1.11 christos case 1:
1045 1.11 christos case 2:
1046 1.11 christos case 3:
1047 1.11 christos case 4:
1048 1.11 christos case 5:
1049 1.11 christos case 6:
1050 1.11 christos case 7:
1051 1.11 christos case 8:
1052 1.11 christos case 9:
1053 1.11 christos case 10:
1054 1.11 christos case 11:
1055 1.11 christos case 12:
1056 1.11 christos case 13:
1057 1.11 christos case 14: itype = CRISV32F_INSN_ADDO_M_W_M; goto extract_sfmt_addo_m_w_m;
1058 1.11 christos case 15: itype = CRISV32F_INSN_ADDO_CW; goto extract_sfmt_addo_cw;
1059 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1060 1.11 christos }
1061 1.11 christos }
1062 1.11 christos case 214:
1063 1.11 christos {
1064 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1065 1.11 christos switch (val1)
1066 1.11 christos {
1067 1.11 christos case 0:
1068 1.11 christos case 1:
1069 1.11 christos case 2:
1070 1.11 christos case 3:
1071 1.11 christos case 4:
1072 1.11 christos case 5:
1073 1.11 christos case 6:
1074 1.11 christos case 7:
1075 1.11 christos case 8:
1076 1.11 christos case 9:
1077 1.11 christos case 10:
1078 1.11 christos case 11:
1079 1.11 christos case 12:
1080 1.11 christos case 13:
1081 1.11 christos case 14: itype = CRISV32F_INSN_ADDO_M_D_M; goto extract_sfmt_addo_m_d_m;
1082 1.11 christos case 15: itype = CRISV32F_INSN_ADDO_CD; goto extract_sfmt_addo_cd;
1083 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1084 1.1 christos }
1085 1.1 christos }
1086 1.11 christos case 215:
1087 1.1 christos if ((base_insn & 0xfff) == 0xd7f)
1088 1.1 christos { itype = CRISV32F_INSN_LAPC_D; goto extract_sfmt_lapc_d; }
1089 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1090 1.11 christos case 218:
1091 1.1 christos {
1092 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1093 1.11 christos switch (val1)
1094 1.1 christos {
1095 1.11 christos case 0:
1096 1.11 christos case 1:
1097 1.11 christos case 2:
1098 1.11 christos case 3:
1099 1.11 christos case 4:
1100 1.11 christos case 5:
1101 1.11 christos case 6:
1102 1.11 christos case 7:
1103 1.11 christos case 8:
1104 1.11 christos case 9:
1105 1.11 christos case 10:
1106 1.11 christos case 11:
1107 1.11 christos case 12:
1108 1.11 christos case 13:
1109 1.11 christos case 14: itype = CRISV32F_INSN_ADDC_M; goto extract_sfmt_addc_m;
1110 1.11 christos case 15: itype = CRISV32F_INSN_ADDC_C; goto extract_sfmt_addcdr;
1111 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1112 1.1 christos }
1113 1.1 christos }
1114 1.11 christos case 219:
1115 1.1 christos if ((base_insn & 0xfff) == 0xdbf)
1116 1.1 christos { itype = CRISV32F_INSN_JAS_C; goto extract_sfmt_jas_c; }
1117 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1118 1.11 christos case 220:
1119 1.1 christos if ((base_insn & 0xfff) == 0xdcf)
1120 1.1 christos { itype = CRISV32F_INSN_BOUND_CB; goto extract_sfmt_bound_cb; }
1121 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1122 1.11 christos case 221:
1123 1.1 christos if ((base_insn & 0xfff) == 0xddf)
1124 1.1 christos { itype = CRISV32F_INSN_BOUND_CW; goto extract_sfmt_bound_cw; }
1125 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1126 1.11 christos case 222:
1127 1.1 christos if ((base_insn & 0xfff) == 0xdef)
1128 1.1 christos { itype = CRISV32F_INSN_BOUND_CD; goto extract_sfmt_bound_cd; }
1129 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1130 1.11 christos case 223:
1131 1.1 christos {
1132 1.11 christos unsigned int val1 = (((insn >> 12) & (15 << 0)));
1133 1.11 christos switch (val1)
1134 1.1 christos {
1135 1.11 christos case 0:
1136 1.11 christos case 1:
1137 1.11 christos case 2:
1138 1.11 christos case 3:
1139 1.11 christos case 4:
1140 1.11 christos case 5:
1141 1.11 christos case 6:
1142 1.11 christos case 7:
1143 1.11 christos case 8:
1144 1.11 christos case 9:
1145 1.11 christos case 10:
1146 1.11 christos case 11:
1147 1.11 christos case 12:
1148 1.11 christos case 13:
1149 1.11 christos case 15:
1150 1.1 christos if ((base_insn & 0xfff) == 0xdff)
1151 1.1 christos { itype = CRISV32F_INSN_BCC_W; goto extract_sfmt_bcc_w; }
1152 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1153 1.11 christos case 14:
1154 1.1 christos if ((base_insn & 0xffff) == 0xedff)
1155 1.1 christos { itype = CRISV32F_INSN_BA_W; goto extract_sfmt_ba_w; }
1156 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1157 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1158 1.1 christos }
1159 1.1 christos }
1160 1.11 christos case 224:
1161 1.1 christos {
1162 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1163 1.11 christos switch (val1)
1164 1.1 christos {
1165 1.11 christos case 0:
1166 1.11 christos case 1:
1167 1.11 christos case 2:
1168 1.11 christos case 3:
1169 1.11 christos case 4:
1170 1.11 christos case 5:
1171 1.11 christos case 6:
1172 1.11 christos case 7:
1173 1.11 christos case 8:
1174 1.11 christos case 9:
1175 1.11 christos case 10:
1176 1.11 christos case 11:
1177 1.11 christos case 12:
1178 1.11 christos case 13:
1179 1.11 christos case 14: itype = CRISV32F_INSN_ADD_M_B_M; goto extract_sfmt_add_m_b_m;
1180 1.11 christos case 15: itype = CRISV32F_INSN_ADDCBR; goto extract_sfmt_addcbr;
1181 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1182 1.11 christos }
1183 1.11 christos }
1184 1.11 christos case 225:
1185 1.11 christos {
1186 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1187 1.11 christos switch (val1)
1188 1.11 christos {
1189 1.11 christos case 0:
1190 1.11 christos case 1:
1191 1.11 christos case 2:
1192 1.11 christos case 3:
1193 1.11 christos case 4:
1194 1.11 christos case 5:
1195 1.11 christos case 6:
1196 1.11 christos case 7:
1197 1.11 christos case 8:
1198 1.11 christos case 9:
1199 1.11 christos case 10:
1200 1.11 christos case 11:
1201 1.11 christos case 12:
1202 1.11 christos case 13:
1203 1.11 christos case 14: itype = CRISV32F_INSN_ADD_M_W_M; goto extract_sfmt_add_m_w_m;
1204 1.11 christos case 15: itype = CRISV32F_INSN_ADDCWR; goto extract_sfmt_addcwr;
1205 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1206 1.11 christos }
1207 1.11 christos }
1208 1.11 christos case 226:
1209 1.11 christos {
1210 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1211 1.11 christos switch (val1)
1212 1.11 christos {
1213 1.11 christos case 0:
1214 1.11 christos case 1:
1215 1.11 christos case 2:
1216 1.11 christos case 3:
1217 1.11 christos case 4:
1218 1.11 christos case 5:
1219 1.11 christos case 6:
1220 1.11 christos case 7:
1221 1.11 christos case 8:
1222 1.11 christos case 9:
1223 1.11 christos case 10:
1224 1.11 christos case 11:
1225 1.11 christos case 12:
1226 1.11 christos case 13:
1227 1.11 christos case 14: itype = CRISV32F_INSN_ADD_M_D_M; goto extract_sfmt_add_m_d_m;
1228 1.11 christos case 15: itype = CRISV32F_INSN_ADDCDR; goto extract_sfmt_addcdr;
1229 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1230 1.11 christos }
1231 1.11 christos }
1232 1.11 christos case 227:
1233 1.11 christos {
1234 1.11 christos unsigned int val1 = (((insn >> 12) & (15 << 0)));
1235 1.11 christos switch (val1)
1236 1.11 christos {
1237 1.11 christos case 0:
1238 1.11 christos case 1:
1239 1.11 christos case 4:
1240 1.11 christos case 8: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1241 1.11 christos case 2:
1242 1.1 christos {
1243 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1244 1.11 christos switch (val2)
1245 1.1 christos {
1246 1.11 christos case 0:
1247 1.11 christos case 1:
1248 1.11 christos case 2:
1249 1.11 christos case 3:
1250 1.11 christos case 4:
1251 1.11 christos case 5:
1252 1.11 christos case 6:
1253 1.11 christos case 7:
1254 1.11 christos case 8:
1255 1.11 christos case 9:
1256 1.11 christos case 10:
1257 1.11 christos case 11:
1258 1.11 christos case 12:
1259 1.11 christos case 13:
1260 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1261 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P2; goto extract_sfmt_move_c_sprv32_p2;
1262 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1263 1.1 christos }
1264 1.1 christos }
1265 1.11 christos case 3:
1266 1.1 christos {
1267 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1268 1.11 christos switch (val2)
1269 1.1 christos {
1270 1.11 christos case 0:
1271 1.11 christos case 1:
1272 1.11 christos case 2:
1273 1.11 christos case 3:
1274 1.11 christos case 4:
1275 1.11 christos case 5:
1276 1.11 christos case 6:
1277 1.11 christos case 7:
1278 1.11 christos case 8:
1279 1.11 christos case 9:
1280 1.11 christos case 10:
1281 1.11 christos case 11:
1282 1.11 christos case 12:
1283 1.11 christos case 13:
1284 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1285 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P3; goto extract_sfmt_move_c_sprv32_p2;
1286 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1287 1.1 christos }
1288 1.1 christos }
1289 1.11 christos case 5:
1290 1.1 christos {
1291 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1292 1.11 christos switch (val2)
1293 1.1 christos {
1294 1.11 christos case 0:
1295 1.11 christos case 1:
1296 1.11 christos case 2:
1297 1.11 christos case 3:
1298 1.11 christos case 4:
1299 1.11 christos case 5:
1300 1.11 christos case 6:
1301 1.11 christos case 7:
1302 1.11 christos case 8:
1303 1.11 christos case 9:
1304 1.11 christos case 10:
1305 1.11 christos case 11:
1306 1.11 christos case 12:
1307 1.11 christos case 13:
1308 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1309 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P5; goto extract_sfmt_move_c_sprv32_p2;
1310 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1311 1.1 christos }
1312 1.1 christos }
1313 1.11 christos case 6:
1314 1.1 christos {
1315 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1316 1.11 christos switch (val2)
1317 1.1 christos {
1318 1.11 christos case 0:
1319 1.11 christos case 1:
1320 1.11 christos case 2:
1321 1.11 christos case 3:
1322 1.11 christos case 4:
1323 1.11 christos case 5:
1324 1.11 christos case 6:
1325 1.11 christos case 7:
1326 1.11 christos case 8:
1327 1.11 christos case 9:
1328 1.11 christos case 10:
1329 1.11 christos case 11:
1330 1.11 christos case 12:
1331 1.11 christos case 13:
1332 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1333 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P6; goto extract_sfmt_move_c_sprv32_p2;
1334 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1335 1.1 christos }
1336 1.1 christos }
1337 1.11 christos case 7:
1338 1.1 christos {
1339 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1340 1.11 christos switch (val2)
1341 1.1 christos {
1342 1.11 christos case 0:
1343 1.11 christos case 1:
1344 1.11 christos case 2:
1345 1.11 christos case 3:
1346 1.11 christos case 4:
1347 1.11 christos case 5:
1348 1.11 christos case 6:
1349 1.11 christos case 7:
1350 1.11 christos case 8:
1351 1.11 christos case 9:
1352 1.11 christos case 10:
1353 1.11 christos case 11:
1354 1.11 christos case 12:
1355 1.11 christos case 13:
1356 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1357 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P7; goto extract_sfmt_move_c_sprv32_p2;
1358 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1359 1.1 christos }
1360 1.1 christos }
1361 1.11 christos case 9:
1362 1.1 christos {
1363 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1364 1.11 christos switch (val2)
1365 1.1 christos {
1366 1.11 christos case 0:
1367 1.11 christos case 1:
1368 1.11 christos case 2:
1369 1.11 christos case 3:
1370 1.11 christos case 4:
1371 1.11 christos case 5:
1372 1.11 christos case 6:
1373 1.11 christos case 7:
1374 1.11 christos case 8:
1375 1.11 christos case 9:
1376 1.11 christos case 10:
1377 1.11 christos case 11:
1378 1.11 christos case 12:
1379 1.11 christos case 13:
1380 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1381 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P9; goto extract_sfmt_move_c_sprv32_p2;
1382 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1383 1.1 christos }
1384 1.1 christos }
1385 1.11 christos case 10:
1386 1.1 christos {
1387 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1388 1.11 christos switch (val2)
1389 1.1 christos {
1390 1.11 christos case 0:
1391 1.11 christos case 1:
1392 1.11 christos case 2:
1393 1.11 christos case 3:
1394 1.11 christos case 4:
1395 1.11 christos case 5:
1396 1.11 christos case 6:
1397 1.11 christos case 7:
1398 1.11 christos case 8:
1399 1.11 christos case 9:
1400 1.11 christos case 10:
1401 1.11 christos case 11:
1402 1.11 christos case 12:
1403 1.11 christos case 13:
1404 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1405 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P10; goto extract_sfmt_move_c_sprv32_p2;
1406 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1407 1.1 christos }
1408 1.1 christos }
1409 1.11 christos case 11:
1410 1.1 christos {
1411 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1412 1.11 christos switch (val2)
1413 1.1 christos {
1414 1.11 christos case 0:
1415 1.11 christos case 1:
1416 1.11 christos case 2:
1417 1.11 christos case 3:
1418 1.11 christos case 4:
1419 1.11 christos case 5:
1420 1.11 christos case 6:
1421 1.11 christos case 7:
1422 1.11 christos case 8:
1423 1.11 christos case 9:
1424 1.11 christos case 10:
1425 1.11 christos case 11:
1426 1.11 christos case 12:
1427 1.11 christos case 13:
1428 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1429 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P11; goto extract_sfmt_move_c_sprv32_p2;
1430 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1431 1.1 christos }
1432 1.1 christos }
1433 1.11 christos case 12:
1434 1.1 christos {
1435 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1436 1.11 christos switch (val2)
1437 1.1 christos {
1438 1.11 christos case 0:
1439 1.11 christos case 1:
1440 1.11 christos case 2:
1441 1.11 christos case 3:
1442 1.11 christos case 4:
1443 1.11 christos case 5:
1444 1.11 christos case 6:
1445 1.11 christos case 7:
1446 1.11 christos case 8:
1447 1.11 christos case 9:
1448 1.11 christos case 10:
1449 1.11 christos case 11:
1450 1.11 christos case 12:
1451 1.11 christos case 13:
1452 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1453 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P12; goto extract_sfmt_move_c_sprv32_p2;
1454 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1455 1.1 christos }
1456 1.1 christos }
1457 1.11 christos case 13:
1458 1.1 christos {
1459 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1460 1.11 christos switch (val2)
1461 1.1 christos {
1462 1.11 christos case 0:
1463 1.11 christos case 1:
1464 1.11 christos case 2:
1465 1.11 christos case 3:
1466 1.11 christos case 4:
1467 1.11 christos case 5:
1468 1.11 christos case 6:
1469 1.11 christos case 7:
1470 1.11 christos case 8:
1471 1.11 christos case 9:
1472 1.11 christos case 10:
1473 1.11 christos case 11:
1474 1.11 christos case 12:
1475 1.11 christos case 13:
1476 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1477 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P13; goto extract_sfmt_move_c_sprv32_p2;
1478 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1479 1.1 christos }
1480 1.1 christos }
1481 1.11 christos case 14:
1482 1.1 christos {
1483 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1484 1.11 christos switch (val2)
1485 1.1 christos {
1486 1.11 christos case 0:
1487 1.11 christos case 1:
1488 1.11 christos case 2:
1489 1.11 christos case 3:
1490 1.11 christos case 4:
1491 1.11 christos case 5:
1492 1.11 christos case 6:
1493 1.11 christos case 7:
1494 1.11 christos case 8:
1495 1.11 christos case 9:
1496 1.11 christos case 10:
1497 1.11 christos case 11:
1498 1.11 christos case 12:
1499 1.11 christos case 13:
1500 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1501 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P14; goto extract_sfmt_move_c_sprv32_p2;
1502 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1503 1.1 christos }
1504 1.1 christos }
1505 1.11 christos case 15:
1506 1.1 christos {
1507 1.11 christos unsigned int val2 = (((insn >> 0) & (15 << 0)));
1508 1.11 christos switch (val2)
1509 1.1 christos {
1510 1.11 christos case 0:
1511 1.11 christos case 1:
1512 1.11 christos case 2:
1513 1.11 christos case 3:
1514 1.11 christos case 4:
1515 1.11 christos case 5:
1516 1.11 christos case 6:
1517 1.11 christos case 7:
1518 1.11 christos case 8:
1519 1.11 christos case 9:
1520 1.11 christos case 10:
1521 1.11 christos case 11:
1522 1.11 christos case 12:
1523 1.11 christos case 13:
1524 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_SPRV32; goto extract_sfmt_move_m_sprv32;
1525 1.11 christos case 15: itype = CRISV32F_INSN_MOVE_C_SPRV32_P15; goto extract_sfmt_move_c_sprv32_p2;
1526 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1527 1.1 christos }
1528 1.1 christos }
1529 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1530 1.1 christos }
1531 1.1 christos }
1532 1.11 christos case 228:
1533 1.1 christos {
1534 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1535 1.11 christos switch (val1)
1536 1.1 christos {
1537 1.11 christos case 0:
1538 1.11 christos case 1:
1539 1.11 christos case 2:
1540 1.11 christos case 3:
1541 1.11 christos case 4:
1542 1.11 christos case 5:
1543 1.11 christos case 6:
1544 1.11 christos case 7:
1545 1.11 christos case 8:
1546 1.11 christos case 9:
1547 1.11 christos case 10:
1548 1.11 christos case 11:
1549 1.11 christos case 12:
1550 1.11 christos case 13:
1551 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_B_M; goto extract_sfmt_move_m_b_m;
1552 1.11 christos case 15: itype = CRISV32F_INSN_MOVECBR; goto extract_sfmt_movecbr;
1553 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1554 1.11 christos }
1555 1.11 christos }
1556 1.11 christos case 229:
1557 1.11 christos {
1558 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1559 1.11 christos switch (val1)
1560 1.11 christos {
1561 1.11 christos case 0:
1562 1.11 christos case 1:
1563 1.11 christos case 2:
1564 1.11 christos case 3:
1565 1.11 christos case 4:
1566 1.11 christos case 5:
1567 1.11 christos case 6:
1568 1.11 christos case 7:
1569 1.11 christos case 8:
1570 1.11 christos case 9:
1571 1.11 christos case 10:
1572 1.11 christos case 11:
1573 1.11 christos case 12:
1574 1.11 christos case 13:
1575 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_W_M; goto extract_sfmt_move_m_w_m;
1576 1.11 christos case 15: itype = CRISV32F_INSN_MOVECWR; goto extract_sfmt_movecwr;
1577 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1578 1.11 christos }
1579 1.11 christos }
1580 1.11 christos case 230:
1581 1.11 christos {
1582 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1583 1.11 christos switch (val1)
1584 1.11 christos {
1585 1.11 christos case 0:
1586 1.11 christos case 1:
1587 1.11 christos case 2:
1588 1.11 christos case 3:
1589 1.11 christos case 4:
1590 1.11 christos case 5:
1591 1.11 christos case 6:
1592 1.11 christos case 7:
1593 1.11 christos case 8:
1594 1.11 christos case 9:
1595 1.11 christos case 10:
1596 1.11 christos case 11:
1597 1.11 christos case 12:
1598 1.11 christos case 13:
1599 1.11 christos case 14: itype = CRISV32F_INSN_MOVE_M_D_M; goto extract_sfmt_move_m_d_m;
1600 1.11 christos case 15: itype = CRISV32F_INSN_MOVECDR; goto extract_sfmt_movecdr;
1601 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1602 1.11 christos }
1603 1.11 christos }
1604 1.11 christos case 232:
1605 1.11 christos {
1606 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1607 1.11 christos switch (val1)
1608 1.11 christos {
1609 1.11 christos case 0:
1610 1.11 christos case 1:
1611 1.11 christos case 2:
1612 1.11 christos case 3:
1613 1.11 christos case 4:
1614 1.11 christos case 5:
1615 1.11 christos case 6:
1616 1.11 christos case 7:
1617 1.11 christos case 8:
1618 1.11 christos case 9:
1619 1.11 christos case 10:
1620 1.11 christos case 11:
1621 1.11 christos case 12:
1622 1.11 christos case 13:
1623 1.11 christos case 14: itype = CRISV32F_INSN_SUB_M_B_M; goto extract_sfmt_add_m_b_m;
1624 1.11 christos case 15: itype = CRISV32F_INSN_SUBCBR; goto extract_sfmt_addcbr;
1625 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1626 1.11 christos }
1627 1.11 christos }
1628 1.11 christos case 233:
1629 1.11 christos {
1630 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1631 1.11 christos switch (val1)
1632 1.11 christos {
1633 1.11 christos case 0:
1634 1.11 christos case 1:
1635 1.11 christos case 2:
1636 1.11 christos case 3:
1637 1.11 christos case 4:
1638 1.11 christos case 5:
1639 1.11 christos case 6:
1640 1.11 christos case 7:
1641 1.11 christos case 8:
1642 1.11 christos case 9:
1643 1.11 christos case 10:
1644 1.11 christos case 11:
1645 1.11 christos case 12:
1646 1.11 christos case 13:
1647 1.11 christos case 14: itype = CRISV32F_INSN_SUB_M_W_M; goto extract_sfmt_add_m_w_m;
1648 1.11 christos case 15: itype = CRISV32F_INSN_SUBCWR; goto extract_sfmt_addcwr;
1649 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1650 1.11 christos }
1651 1.11 christos }
1652 1.11 christos case 234:
1653 1.11 christos {
1654 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1655 1.11 christos switch (val1)
1656 1.11 christos {
1657 1.11 christos case 0:
1658 1.11 christos case 1:
1659 1.11 christos case 2:
1660 1.11 christos case 3:
1661 1.11 christos case 4:
1662 1.11 christos case 5:
1663 1.11 christos case 6:
1664 1.11 christos case 7:
1665 1.11 christos case 8:
1666 1.11 christos case 9:
1667 1.11 christos case 10:
1668 1.11 christos case 11:
1669 1.11 christos case 12:
1670 1.11 christos case 13:
1671 1.11 christos case 14: itype = CRISV32F_INSN_SUB_M_D_M; goto extract_sfmt_add_m_d_m;
1672 1.11 christos case 15: itype = CRISV32F_INSN_SUBCDR; goto extract_sfmt_addcdr;
1673 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1674 1.1 christos }
1675 1.1 christos }
1676 1.11 christos case 235:
1677 1.1 christos if ((base_insn & 0xfff) == 0xebf)
1678 1.1 christos { itype = CRISV32F_INSN_BAS_C; goto extract_sfmt_bas_c; }
1679 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1680 1.11 christos case 236:
1681 1.1 christos {
1682 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1683 1.11 christos switch (val1)
1684 1.1 christos {
1685 1.11 christos case 0:
1686 1.11 christos case 1:
1687 1.11 christos case 2:
1688 1.11 christos case 3:
1689 1.11 christos case 4:
1690 1.11 christos case 5:
1691 1.11 christos case 6:
1692 1.11 christos case 7:
1693 1.11 christos case 8:
1694 1.11 christos case 9:
1695 1.11 christos case 10:
1696 1.11 christos case 11:
1697 1.11 christos case 12:
1698 1.11 christos case 13:
1699 1.11 christos case 14: itype = CRISV32F_INSN_CMP_M_B_M; goto extract_sfmt_cmp_m_b_m;
1700 1.11 christos case 15: itype = CRISV32F_INSN_CMPCBR; goto extract_sfmt_cmpcbr;
1701 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1702 1.11 christos }
1703 1.11 christos }
1704 1.11 christos case 237:
1705 1.11 christos {
1706 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1707 1.11 christos switch (val1)
1708 1.11 christos {
1709 1.11 christos case 0:
1710 1.11 christos case 1:
1711 1.11 christos case 2:
1712 1.11 christos case 3:
1713 1.11 christos case 4:
1714 1.11 christos case 5:
1715 1.11 christos case 6:
1716 1.11 christos case 7:
1717 1.11 christos case 8:
1718 1.11 christos case 9:
1719 1.11 christos case 10:
1720 1.11 christos case 11:
1721 1.11 christos case 12:
1722 1.11 christos case 13:
1723 1.11 christos case 14: itype = CRISV32F_INSN_CMP_M_W_M; goto extract_sfmt_cmp_m_w_m;
1724 1.11 christos case 15: itype = CRISV32F_INSN_CMPCWR; goto extract_sfmt_cmpcwr;
1725 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1726 1.11 christos }
1727 1.11 christos }
1728 1.11 christos case 238:
1729 1.11 christos {
1730 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1731 1.11 christos switch (val1)
1732 1.11 christos {
1733 1.11 christos case 0:
1734 1.11 christos case 1:
1735 1.11 christos case 2:
1736 1.11 christos case 3:
1737 1.11 christos case 4:
1738 1.11 christos case 5:
1739 1.11 christos case 6:
1740 1.11 christos case 7:
1741 1.11 christos case 8:
1742 1.11 christos case 9:
1743 1.11 christos case 10:
1744 1.11 christos case 11:
1745 1.11 christos case 12:
1746 1.11 christos case 13:
1747 1.11 christos case 14: itype = CRISV32F_INSN_CMP_M_D_M; goto extract_sfmt_cmp_m_d_m;
1748 1.11 christos case 15: itype = CRISV32F_INSN_CMPCDR; goto extract_sfmt_cmpcdr;
1749 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1750 1.1 christos }
1751 1.1 christos }
1752 1.11 christos case 239:
1753 1.1 christos if ((base_insn & 0xfff) == 0xeff)
1754 1.1 christos { itype = CRISV32F_INSN_BASC_C; goto extract_sfmt_bas_c; }
1755 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1756 1.11 christos case 240:
1757 1.1 christos {
1758 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1759 1.11 christos switch (val1)
1760 1.1 christos {
1761 1.11 christos case 0:
1762 1.11 christos case 1:
1763 1.11 christos case 2:
1764 1.11 christos case 3:
1765 1.11 christos case 4:
1766 1.11 christos case 5:
1767 1.11 christos case 6:
1768 1.11 christos case 7:
1769 1.11 christos case 8:
1770 1.11 christos case 9:
1771 1.11 christos case 10:
1772 1.11 christos case 11:
1773 1.11 christos case 12:
1774 1.11 christos case 13:
1775 1.11 christos case 14: itype = CRISV32F_INSN_AND_M_B_M; goto extract_sfmt_and_m_b_m;
1776 1.11 christos case 15: itype = CRISV32F_INSN_ANDCBR; goto extract_sfmt_andcbr;
1777 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1778 1.11 christos }
1779 1.11 christos }
1780 1.11 christos case 241:
1781 1.11 christos {
1782 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1783 1.11 christos switch (val1)
1784 1.11 christos {
1785 1.11 christos case 0:
1786 1.11 christos case 1:
1787 1.11 christos case 2:
1788 1.11 christos case 3:
1789 1.11 christos case 4:
1790 1.11 christos case 5:
1791 1.11 christos case 6:
1792 1.11 christos case 7:
1793 1.11 christos case 8:
1794 1.11 christos case 9:
1795 1.11 christos case 10:
1796 1.11 christos case 11:
1797 1.11 christos case 12:
1798 1.11 christos case 13:
1799 1.11 christos case 14: itype = CRISV32F_INSN_AND_M_W_M; goto extract_sfmt_and_m_w_m;
1800 1.11 christos case 15: itype = CRISV32F_INSN_ANDCWR; goto extract_sfmt_andcwr;
1801 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1802 1.11 christos }
1803 1.11 christos }
1804 1.11 christos case 242:
1805 1.11 christos {
1806 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1807 1.11 christos switch (val1)
1808 1.11 christos {
1809 1.11 christos case 0:
1810 1.11 christos case 1:
1811 1.11 christos case 2:
1812 1.11 christos case 3:
1813 1.11 christos case 4:
1814 1.11 christos case 5:
1815 1.11 christos case 6:
1816 1.11 christos case 7:
1817 1.11 christos case 8:
1818 1.11 christos case 9:
1819 1.11 christos case 10:
1820 1.11 christos case 11:
1821 1.11 christos case 12:
1822 1.11 christos case 13:
1823 1.11 christos case 14: itype = CRISV32F_INSN_AND_M_D_M; goto extract_sfmt_and_m_d_m;
1824 1.11 christos case 15: itype = CRISV32F_INSN_ANDCDR; goto extract_sfmt_andcdr;
1825 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1826 1.1 christos }
1827 1.1 christos }
1828 1.11 christos case 243:
1829 1.1 christos if ((base_insn & 0xfff) == 0xf3f)
1830 1.1 christos { itype = CRISV32F_INSN_JASC_C; goto extract_sfmt_jas_c; }
1831 1.1 christos itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1832 1.11 christos case 244:
1833 1.1 christos {
1834 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1835 1.11 christos switch (val1)
1836 1.1 christos {
1837 1.11 christos case 0:
1838 1.11 christos case 1:
1839 1.11 christos case 2:
1840 1.11 christos case 3:
1841 1.11 christos case 4:
1842 1.11 christos case 5:
1843 1.11 christos case 6:
1844 1.11 christos case 7:
1845 1.11 christos case 8:
1846 1.11 christos case 9:
1847 1.11 christos case 10:
1848 1.11 christos case 11:
1849 1.11 christos case 12:
1850 1.11 christos case 13:
1851 1.11 christos case 14: itype = CRISV32F_INSN_OR_M_B_M; goto extract_sfmt_and_m_b_m;
1852 1.11 christos case 15: itype = CRISV32F_INSN_ORCBR; goto extract_sfmt_andcbr;
1853 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1854 1.11 christos }
1855 1.11 christos }
1856 1.11 christos case 245:
1857 1.11 christos {
1858 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1859 1.11 christos switch (val1)
1860 1.11 christos {
1861 1.11 christos case 0:
1862 1.11 christos case 1:
1863 1.11 christos case 2:
1864 1.11 christos case 3:
1865 1.11 christos case 4:
1866 1.11 christos case 5:
1867 1.11 christos case 6:
1868 1.11 christos case 7:
1869 1.11 christos case 8:
1870 1.11 christos case 9:
1871 1.11 christos case 10:
1872 1.11 christos case 11:
1873 1.11 christos case 12:
1874 1.11 christos case 13:
1875 1.11 christos case 14: itype = CRISV32F_INSN_OR_M_W_M; goto extract_sfmt_and_m_w_m;
1876 1.11 christos case 15: itype = CRISV32F_INSN_ORCWR; goto extract_sfmt_andcwr;
1877 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1878 1.11 christos }
1879 1.11 christos }
1880 1.11 christos case 246:
1881 1.11 christos {
1882 1.11 christos unsigned int val1 = (((insn >> 0) & (15 << 0)));
1883 1.11 christos switch (val1)
1884 1.11 christos {
1885 1.11 christos case 0:
1886 1.11 christos case 1:
1887 1.11 christos case 2:
1888 1.11 christos case 3:
1889 1.11 christos case 4:
1890 1.11 christos case 5:
1891 1.11 christos case 6:
1892 1.11 christos case 7:
1893 1.11 christos case 8:
1894 1.11 christos case 9:
1895 1.11 christos case 10:
1896 1.11 christos case 11:
1897 1.11 christos case 12:
1898 1.11 christos case 13:
1899 1.11 christos case 14: itype = CRISV32F_INSN_OR_M_D_M; goto extract_sfmt_and_m_d_m;
1900 1.11 christos case 15: itype = CRISV32F_INSN_ORCDR; goto extract_sfmt_andcdr;
1901 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1902 1.1 christos }
1903 1.1 christos }
1904 1.11 christos case 247: itype = CRISV32F_INSN_MOVE_SS_R; goto extract_sfmt_move_ss_r;
1905 1.11 christos default: itype = CRISV32F_INSN_X_INVALID; goto extract_sfmt_empty;
1906 1.1 christos }
1907 1.1 christos }
1908 1.1 christos }
1909 1.1 christos
1910 1.1 christos /* The instruction has been decoded, now extract the fields. */
1911 1.1 christos
1912 1.1 christos extract_sfmt_empty:
1913 1.1 christos {
1914 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
1915 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1916 1.1 christos
1917 1.1 christos
1918 1.1 christos /* Record the fields for the semantic handler. */
1919 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_empty", (char *) 0));
1920 1.1 christos
1921 1.1 christos #undef FLD
1922 1.1 christos return idesc;
1923 1.1 christos }
1924 1.1 christos
1925 1.1 christos extract_sfmt_move_b_r:
1926 1.1 christos {
1927 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
1928 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
1929 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1930 1.1 christos UINT f_operand2;
1931 1.1 christos UINT f_operand1;
1932 1.1 christos
1933 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
1934 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
1935 1.1 christos
1936 1.1 christos /* Record the fields for the semantic handler. */
1937 1.1 christos FLD (f_operand1) = f_operand1;
1938 1.1 christos FLD (f_operand2) = f_operand2;
1939 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_b_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
1940 1.1 christos
1941 1.1 christos #if WITH_PROFILE_MODEL_P
1942 1.1 christos /* Record the fields for profiling. */
1943 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1944 1.1 christos {
1945 1.1 christos FLD (in_Rs) = f_operand1;
1946 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
1947 1.1 christos }
1948 1.1 christos #endif
1949 1.1 christos #undef FLD
1950 1.1 christos return idesc;
1951 1.1 christos }
1952 1.1 christos
1953 1.1 christos extract_sfmt_move_d_r:
1954 1.1 christos {
1955 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
1956 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
1957 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1958 1.1 christos UINT f_operand2;
1959 1.1 christos UINT f_operand1;
1960 1.1 christos
1961 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
1962 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
1963 1.1 christos
1964 1.1 christos /* Record the fields for the semantic handler. */
1965 1.1 christos FLD (f_operand1) = f_operand1;
1966 1.1 christos FLD (f_operand2) = f_operand2;
1967 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_d_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
1968 1.1 christos
1969 1.1 christos #if WITH_PROFILE_MODEL_P
1970 1.1 christos /* Record the fields for profiling. */
1971 1.1 christos if (PROFILE_MODEL_P (current_cpu))
1972 1.1 christos {
1973 1.1 christos FLD (in_Rs) = f_operand1;
1974 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
1975 1.1 christos }
1976 1.1 christos #endif
1977 1.1 christos #undef FLD
1978 1.1 christos return idesc;
1979 1.1 christos }
1980 1.1 christos
1981 1.1 christos extract_sfmt_moveq:
1982 1.1 christos {
1983 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
1984 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
1985 1.1 christos #define FLD(f) abuf->fields.sfmt_moveq.f
1986 1.1 christos UINT f_operand2;
1987 1.1 christos INT f_s6;
1988 1.1 christos
1989 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
1990 1.1 christos f_s6 = EXTRACT_LSB0_SINT (insn, 16, 5, 6);
1991 1.1 christos
1992 1.1 christos /* Record the fields for the semantic handler. */
1993 1.1 christos FLD (f_s6) = f_s6;
1994 1.1 christos FLD (f_operand2) = f_operand2;
1995 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_moveq", "f_s6 0x%x", 'x', f_s6, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
1996 1.1 christos
1997 1.1 christos #if WITH_PROFILE_MODEL_P
1998 1.1 christos /* Record the fields for profiling. */
1999 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2000 1.1 christos {
2001 1.1 christos FLD (out_Rd) = f_operand2;
2002 1.1 christos }
2003 1.1 christos #endif
2004 1.1 christos #undef FLD
2005 1.1 christos return idesc;
2006 1.1 christos }
2007 1.1 christos
2008 1.1 christos extract_sfmt_movs_b_r:
2009 1.1 christos {
2010 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2011 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2012 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
2013 1.1 christos UINT f_operand2;
2014 1.1 christos UINT f_operand1;
2015 1.1 christos
2016 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2017 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2018 1.1 christos
2019 1.1 christos /* Record the fields for the semantic handler. */
2020 1.1 christos FLD (f_operand1) = f_operand1;
2021 1.1 christos FLD (f_operand2) = f_operand2;
2022 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movs_b_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2023 1.1 christos
2024 1.1 christos #if WITH_PROFILE_MODEL_P
2025 1.1 christos /* Record the fields for profiling. */
2026 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2027 1.1 christos {
2028 1.1 christos FLD (in_Rs) = f_operand1;
2029 1.1 christos FLD (out_Rd) = f_operand2;
2030 1.1 christos }
2031 1.1 christos #endif
2032 1.1 christos #undef FLD
2033 1.1 christos return idesc;
2034 1.1 christos }
2035 1.1 christos
2036 1.1 christos extract_sfmt_movecbr:
2037 1.1 christos {
2038 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2039 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2040 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
2041 1.1 christos INT f_indir_pc__byte;
2042 1.1 christos UINT f_operand2;
2043 1.1 christos /* Contents of trailing part of insn. */
2044 1.1 christos UINT word_1;
2045 1.1 christos
2046 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2047 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2048 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2049 1.1 christos
2050 1.1 christos /* Record the fields for the semantic handler. */
2051 1.1 christos FLD (f_operand2) = f_operand2;
2052 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
2053 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movecbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
2054 1.1 christos
2055 1.1 christos #if WITH_PROFILE_MODEL_P
2056 1.1 christos /* Record the fields for profiling. */
2057 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2058 1.1 christos {
2059 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
2060 1.1 christos }
2061 1.1 christos #endif
2062 1.1 christos #undef FLD
2063 1.1 christos return idesc;
2064 1.1 christos }
2065 1.1 christos
2066 1.1 christos extract_sfmt_movecwr:
2067 1.1 christos {
2068 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2069 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2070 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
2071 1.1 christos INT f_indir_pc__word;
2072 1.1 christos UINT f_operand2;
2073 1.1 christos /* Contents of trailing part of insn. */
2074 1.1 christos UINT word_1;
2075 1.1 christos
2076 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2077 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2078 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2079 1.1 christos
2080 1.1 christos /* Record the fields for the semantic handler. */
2081 1.1 christos FLD (f_operand2) = f_operand2;
2082 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
2083 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movecwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
2084 1.1 christos
2085 1.1 christos #if WITH_PROFILE_MODEL_P
2086 1.1 christos /* Record the fields for profiling. */
2087 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2088 1.1 christos {
2089 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
2090 1.1 christos }
2091 1.1 christos #endif
2092 1.1 christos #undef FLD
2093 1.1 christos return idesc;
2094 1.1 christos }
2095 1.1 christos
2096 1.1 christos extract_sfmt_movecdr:
2097 1.1 christos {
2098 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2099 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2100 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
2101 1.1 christos INT f_indir_pc__dword;
2102 1.1 christos UINT f_operand2;
2103 1.1 christos /* Contents of trailing part of insn. */
2104 1.1 christos UINT word_1;
2105 1.1 christos
2106 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2107 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
2108 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2109 1.1 christos
2110 1.1 christos /* Record the fields for the semantic handler. */
2111 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
2112 1.1 christos FLD (f_operand2) = f_operand2;
2113 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movecdr", "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2114 1.1 christos
2115 1.1 christos #if WITH_PROFILE_MODEL_P
2116 1.1 christos /* Record the fields for profiling. */
2117 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2118 1.1 christos {
2119 1.1 christos FLD (out_Rd) = f_operand2;
2120 1.1 christos }
2121 1.1 christos #endif
2122 1.1 christos #undef FLD
2123 1.1 christos return idesc;
2124 1.1 christos }
2125 1.1 christos
2126 1.1 christos extract_sfmt_movscbr:
2127 1.1 christos {
2128 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2129 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2130 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2131 1.1 christos UINT f_operand2;
2132 1.1 christos INT f_indir_pc__byte;
2133 1.1 christos /* Contents of trailing part of insn. */
2134 1.1 christos UINT word_1;
2135 1.1 christos
2136 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2137 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2138 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2139 1.1 christos
2140 1.1 christos /* Record the fields for the semantic handler. */
2141 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
2142 1.1 christos FLD (f_operand2) = f_operand2;
2143 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movscbr", "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2144 1.1 christos
2145 1.1 christos #if WITH_PROFILE_MODEL_P
2146 1.1 christos /* Record the fields for profiling. */
2147 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2148 1.1 christos {
2149 1.1 christos FLD (out_Rd) = f_operand2;
2150 1.1 christos }
2151 1.1 christos #endif
2152 1.1 christos #undef FLD
2153 1.1 christos return idesc;
2154 1.1 christos }
2155 1.1 christos
2156 1.1 christos extract_sfmt_movscwr:
2157 1.1 christos {
2158 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2159 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2160 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2161 1.1 christos UINT f_operand2;
2162 1.1 christos INT f_indir_pc__word;
2163 1.1 christos /* Contents of trailing part of insn. */
2164 1.1 christos UINT word_1;
2165 1.1 christos
2166 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2167 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2168 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2169 1.1 christos
2170 1.1 christos /* Record the fields for the semantic handler. */
2171 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
2172 1.1 christos FLD (f_operand2) = f_operand2;
2173 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movscwr", "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2174 1.1 christos
2175 1.1 christos #if WITH_PROFILE_MODEL_P
2176 1.1 christos /* Record the fields for profiling. */
2177 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2178 1.1 christos {
2179 1.1 christos FLD (out_Rd) = f_operand2;
2180 1.1 christos }
2181 1.1 christos #endif
2182 1.1 christos #undef FLD
2183 1.1 christos return idesc;
2184 1.1 christos }
2185 1.1 christos
2186 1.1 christos extract_sfmt_movucbr:
2187 1.1 christos {
2188 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2189 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2190 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2191 1.1 christos UINT f_operand2;
2192 1.1 christos INT f_indir_pc__byte;
2193 1.1 christos /* Contents of trailing part of insn. */
2194 1.1 christos UINT word_1;
2195 1.1 christos
2196 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2197 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2198 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2199 1.1 christos
2200 1.1 christos /* Record the fields for the semantic handler. */
2201 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
2202 1.1 christos FLD (f_operand2) = f_operand2;
2203 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movucbr", "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2204 1.1 christos
2205 1.1 christos #if WITH_PROFILE_MODEL_P
2206 1.1 christos /* Record the fields for profiling. */
2207 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2208 1.1 christos {
2209 1.1 christos FLD (out_Rd) = f_operand2;
2210 1.1 christos }
2211 1.1 christos #endif
2212 1.1 christos #undef FLD
2213 1.1 christos return idesc;
2214 1.1 christos }
2215 1.1 christos
2216 1.1 christos extract_sfmt_movucwr:
2217 1.1 christos {
2218 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2219 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2220 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2221 1.1 christos UINT f_operand2;
2222 1.1 christos INT f_indir_pc__word;
2223 1.1 christos /* Contents of trailing part of insn. */
2224 1.1 christos UINT word_1;
2225 1.1 christos
2226 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2227 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2228 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2229 1.1 christos
2230 1.1 christos /* Record the fields for the semantic handler. */
2231 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
2232 1.1 christos FLD (f_operand2) = f_operand2;
2233 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movucwr", "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2234 1.1 christos
2235 1.1 christos #if WITH_PROFILE_MODEL_P
2236 1.1 christos /* Record the fields for profiling. */
2237 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2238 1.1 christos {
2239 1.1 christos FLD (out_Rd) = f_operand2;
2240 1.1 christos }
2241 1.1 christos #endif
2242 1.1 christos #undef FLD
2243 1.1 christos return idesc;
2244 1.1 christos }
2245 1.1 christos
2246 1.1 christos extract_sfmt_addq:
2247 1.1 christos {
2248 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2249 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2250 1.1 christos #define FLD(f) abuf->fields.sfmt_addq.f
2251 1.1 christos UINT f_operand2;
2252 1.1 christos UINT f_u6;
2253 1.1 christos
2254 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2255 1.1 christos f_u6 = EXTRACT_LSB0_UINT (insn, 16, 5, 6);
2256 1.1 christos
2257 1.1 christos /* Record the fields for the semantic handler. */
2258 1.1 christos FLD (f_operand2) = f_operand2;
2259 1.1 christos FLD (f_u6) = f_u6;
2260 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addq", "f_operand2 0x%x", 'x', f_operand2, "f_u6 0x%x", 'x', f_u6, (char *) 0));
2261 1.1 christos
2262 1.1 christos #if WITH_PROFILE_MODEL_P
2263 1.1 christos /* Record the fields for profiling. */
2264 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2265 1.1 christos {
2266 1.1 christos FLD (in_Rd) = f_operand2;
2267 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
2268 1.1 christos }
2269 1.1 christos #endif
2270 1.1 christos #undef FLD
2271 1.1 christos return idesc;
2272 1.1 christos }
2273 1.1 christos
2274 1.1 christos extract_sfmt_cmp_r_b_r:
2275 1.1 christos {
2276 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2277 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2278 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
2279 1.1 christos UINT f_operand2;
2280 1.1 christos UINT f_operand1;
2281 1.1 christos
2282 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2283 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2284 1.1 christos
2285 1.1 christos /* Record the fields for the semantic handler. */
2286 1.1 christos FLD (f_operand2) = f_operand2;
2287 1.1 christos FLD (f_operand1) = f_operand1;
2288 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp_r_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
2289 1.1 christos
2290 1.1 christos #if WITH_PROFILE_MODEL_P
2291 1.1 christos /* Record the fields for profiling. */
2292 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2293 1.1 christos {
2294 1.1 christos FLD (in_Rd) = f_operand2;
2295 1.1 christos FLD (in_Rs) = f_operand1;
2296 1.1 christos }
2297 1.1 christos #endif
2298 1.1 christos #undef FLD
2299 1.1 christos return idesc;
2300 1.1 christos }
2301 1.1 christos
2302 1.1 christos extract_sfmt_cmp_m_b_m:
2303 1.1 christos {
2304 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2305 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2306 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2307 1.1 christos UINT f_operand2;
2308 1.1 christos UINT f_memmode;
2309 1.1 christos UINT f_operand1;
2310 1.1 christos
2311 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2312 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2313 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2314 1.1 christos
2315 1.1 christos /* Record the fields for the semantic handler. */
2316 1.1 christos FLD (f_operand2) = f_operand2;
2317 1.1 christos FLD (f_operand1) = f_operand1;
2318 1.1 christos FLD (f_memmode) = f_memmode;
2319 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2320 1.1 christos
2321 1.1 christos #if WITH_PROFILE_MODEL_P
2322 1.1 christos /* Record the fields for profiling. */
2323 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2324 1.1 christos {
2325 1.1 christos FLD (in_Rd) = f_operand2;
2326 1.1 christos FLD (in_Rs) = f_operand1;
2327 1.1 christos FLD (out_Rs) = f_operand1;
2328 1.1 christos }
2329 1.1 christos #endif
2330 1.1 christos #undef FLD
2331 1.1 christos return idesc;
2332 1.1 christos }
2333 1.1 christos
2334 1.1 christos extract_sfmt_cmp_m_w_m:
2335 1.1 christos {
2336 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2337 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2338 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2339 1.1 christos UINT f_operand2;
2340 1.1 christos UINT f_memmode;
2341 1.1 christos UINT f_operand1;
2342 1.1 christos
2343 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2344 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2345 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2346 1.1 christos
2347 1.1 christos /* Record the fields for the semantic handler. */
2348 1.1 christos FLD (f_operand2) = f_operand2;
2349 1.1 christos FLD (f_operand1) = f_operand1;
2350 1.1 christos FLD (f_memmode) = f_memmode;
2351 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2352 1.1 christos
2353 1.1 christos #if WITH_PROFILE_MODEL_P
2354 1.1 christos /* Record the fields for profiling. */
2355 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2356 1.1 christos {
2357 1.1 christos FLD (in_Rd) = f_operand2;
2358 1.1 christos FLD (in_Rs) = f_operand1;
2359 1.1 christos FLD (out_Rs) = f_operand1;
2360 1.1 christos }
2361 1.1 christos #endif
2362 1.1 christos #undef FLD
2363 1.1 christos return idesc;
2364 1.1 christos }
2365 1.1 christos
2366 1.1 christos extract_sfmt_cmp_m_d_m:
2367 1.1 christos {
2368 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2369 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2370 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2371 1.1 christos UINT f_operand2;
2372 1.1 christos UINT f_memmode;
2373 1.1 christos UINT f_operand1;
2374 1.1 christos
2375 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2376 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2377 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2378 1.1 christos
2379 1.1 christos /* Record the fields for the semantic handler. */
2380 1.1 christos FLD (f_operand2) = f_operand2;
2381 1.1 christos FLD (f_operand1) = f_operand1;
2382 1.1 christos FLD (f_memmode) = f_memmode;
2383 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmp_m_d_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2384 1.1 christos
2385 1.1 christos #if WITH_PROFILE_MODEL_P
2386 1.1 christos /* Record the fields for profiling. */
2387 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2388 1.1 christos {
2389 1.1 christos FLD (in_Rd) = f_operand2;
2390 1.1 christos FLD (in_Rs) = f_operand1;
2391 1.1 christos FLD (out_Rs) = f_operand1;
2392 1.1 christos }
2393 1.1 christos #endif
2394 1.1 christos #undef FLD
2395 1.1 christos return idesc;
2396 1.1 christos }
2397 1.1 christos
2398 1.1 christos extract_sfmt_cmpcbr:
2399 1.1 christos {
2400 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2401 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2402 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2403 1.1 christos INT f_indir_pc__byte;
2404 1.1 christos UINT f_operand2;
2405 1.1 christos /* Contents of trailing part of insn. */
2406 1.1 christos UINT word_1;
2407 1.1 christos
2408 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2409 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2410 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2411 1.1 christos
2412 1.1 christos /* Record the fields for the semantic handler. */
2413 1.1 christos FLD (f_operand2) = f_operand2;
2414 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
2415 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpcbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
2416 1.1 christos
2417 1.1 christos #if WITH_PROFILE_MODEL_P
2418 1.1 christos /* Record the fields for profiling. */
2419 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2420 1.1 christos {
2421 1.1 christos FLD (in_Rd) = f_operand2;
2422 1.1 christos }
2423 1.1 christos #endif
2424 1.1 christos #undef FLD
2425 1.1 christos return idesc;
2426 1.1 christos }
2427 1.1 christos
2428 1.1 christos extract_sfmt_cmpcwr:
2429 1.1 christos {
2430 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2431 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2432 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2433 1.1 christos INT f_indir_pc__word;
2434 1.1 christos UINT f_operand2;
2435 1.1 christos /* Contents of trailing part of insn. */
2436 1.1 christos UINT word_1;
2437 1.1 christos
2438 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2439 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2440 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2441 1.1 christos
2442 1.1 christos /* Record the fields for the semantic handler. */
2443 1.1 christos FLD (f_operand2) = f_operand2;
2444 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
2445 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpcwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
2446 1.1 christos
2447 1.1 christos #if WITH_PROFILE_MODEL_P
2448 1.1 christos /* Record the fields for profiling. */
2449 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2450 1.1 christos {
2451 1.1 christos FLD (in_Rd) = f_operand2;
2452 1.1 christos }
2453 1.1 christos #endif
2454 1.1 christos #undef FLD
2455 1.1 christos return idesc;
2456 1.1 christos }
2457 1.1 christos
2458 1.1 christos extract_sfmt_cmpcdr:
2459 1.1 christos {
2460 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2461 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2462 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
2463 1.1 christos INT f_indir_pc__dword;
2464 1.1 christos UINT f_operand2;
2465 1.1 christos /* Contents of trailing part of insn. */
2466 1.1 christos UINT word_1;
2467 1.1 christos
2468 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2469 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
2470 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2471 1.1 christos
2472 1.1 christos /* Record the fields for the semantic handler. */
2473 1.1 christos FLD (f_operand2) = f_operand2;
2474 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
2475 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpcdr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, (char *) 0));
2476 1.1 christos
2477 1.1 christos #if WITH_PROFILE_MODEL_P
2478 1.1 christos /* Record the fields for profiling. */
2479 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2480 1.1 christos {
2481 1.1 christos FLD (in_Rd) = f_operand2;
2482 1.1 christos }
2483 1.1 christos #endif
2484 1.1 christos #undef FLD
2485 1.1 christos return idesc;
2486 1.1 christos }
2487 1.1 christos
2488 1.1 christos extract_sfmt_cmpq:
2489 1.1 christos {
2490 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2491 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2492 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
2493 1.1 christos UINT f_operand2;
2494 1.1 christos INT f_s6;
2495 1.1 christos
2496 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2497 1.1 christos f_s6 = EXTRACT_LSB0_SINT (insn, 16, 5, 6);
2498 1.1 christos
2499 1.1 christos /* Record the fields for the semantic handler. */
2500 1.1 christos FLD (f_operand2) = f_operand2;
2501 1.1 christos FLD (f_s6) = f_s6;
2502 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpq", "f_operand2 0x%x", 'x', f_operand2, "f_s6 0x%x", 'x', f_s6, (char *) 0));
2503 1.1 christos
2504 1.1 christos #if WITH_PROFILE_MODEL_P
2505 1.1 christos /* Record the fields for profiling. */
2506 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2507 1.1 christos {
2508 1.1 christos FLD (in_Rd) = f_operand2;
2509 1.1 christos }
2510 1.1 christos #endif
2511 1.1 christos #undef FLD
2512 1.1 christos return idesc;
2513 1.1 christos }
2514 1.1 christos
2515 1.1 christos extract_sfmt_cmpucbr:
2516 1.1 christos {
2517 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2518 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2519 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2520 1.1 christos INT f_indir_pc__byte;
2521 1.1 christos UINT f_operand2;
2522 1.1 christos /* Contents of trailing part of insn. */
2523 1.1 christos UINT word_1;
2524 1.1 christos
2525 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2526 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2527 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2528 1.1 christos
2529 1.1 christos /* Record the fields for the semantic handler. */
2530 1.1 christos FLD (f_operand2) = f_operand2;
2531 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
2532 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpucbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
2533 1.1 christos
2534 1.1 christos #if WITH_PROFILE_MODEL_P
2535 1.1 christos /* Record the fields for profiling. */
2536 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2537 1.1 christos {
2538 1.1 christos FLD (in_Rd) = f_operand2;
2539 1.1 christos }
2540 1.1 christos #endif
2541 1.1 christos #undef FLD
2542 1.1 christos return idesc;
2543 1.1 christos }
2544 1.1 christos
2545 1.1 christos extract_sfmt_cmpucwr:
2546 1.1 christos {
2547 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2548 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2549 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2550 1.1 christos INT f_indir_pc__word;
2551 1.1 christos UINT f_operand2;
2552 1.1 christos /* Contents of trailing part of insn. */
2553 1.1 christos UINT word_1;
2554 1.1 christos
2555 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2556 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
2557 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2558 1.1 christos
2559 1.1 christos /* Record the fields for the semantic handler. */
2560 1.1 christos FLD (f_operand2) = f_operand2;
2561 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
2562 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_cmpucwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
2563 1.1 christos
2564 1.1 christos #if WITH_PROFILE_MODEL_P
2565 1.1 christos /* Record the fields for profiling. */
2566 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2567 1.1 christos {
2568 1.1 christos FLD (in_Rd) = f_operand2;
2569 1.1 christos }
2570 1.1 christos #endif
2571 1.1 christos #undef FLD
2572 1.1 christos return idesc;
2573 1.1 christos }
2574 1.1 christos
2575 1.1 christos extract_sfmt_move_m_b_m:
2576 1.1 christos {
2577 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2578 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2579 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2580 1.1 christos UINT f_operand2;
2581 1.1 christos UINT f_memmode;
2582 1.1 christos UINT f_operand1;
2583 1.1 christos
2584 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2585 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2586 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2587 1.1 christos
2588 1.1 christos /* Record the fields for the semantic handler. */
2589 1.1 christos FLD (f_operand1) = f_operand1;
2590 1.1 christos FLD (f_operand2) = f_operand2;
2591 1.1 christos FLD (f_memmode) = f_memmode;
2592 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_m_b_m", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2593 1.1 christos
2594 1.1 christos #if WITH_PROFILE_MODEL_P
2595 1.1 christos /* Record the fields for profiling. */
2596 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2597 1.1 christos {
2598 1.1 christos FLD (in_Rs) = f_operand1;
2599 1.1 christos FLD (out_Rs) = f_operand1;
2600 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
2601 1.1 christos }
2602 1.1 christos #endif
2603 1.1 christos #undef FLD
2604 1.1 christos return idesc;
2605 1.1 christos }
2606 1.1 christos
2607 1.1 christos extract_sfmt_move_m_w_m:
2608 1.1 christos {
2609 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2610 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2611 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2612 1.1 christos UINT f_operand2;
2613 1.1 christos UINT f_memmode;
2614 1.1 christos UINT f_operand1;
2615 1.1 christos
2616 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2617 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2618 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2619 1.1 christos
2620 1.1 christos /* Record the fields for the semantic handler. */
2621 1.1 christos FLD (f_operand1) = f_operand1;
2622 1.1 christos FLD (f_operand2) = f_operand2;
2623 1.1 christos FLD (f_memmode) = f_memmode;
2624 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_m_w_m", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2625 1.1 christos
2626 1.1 christos #if WITH_PROFILE_MODEL_P
2627 1.1 christos /* Record the fields for profiling. */
2628 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2629 1.1 christos {
2630 1.1 christos FLD (in_Rs) = f_operand1;
2631 1.1 christos FLD (out_Rs) = f_operand1;
2632 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
2633 1.1 christos }
2634 1.1 christos #endif
2635 1.1 christos #undef FLD
2636 1.1 christos return idesc;
2637 1.1 christos }
2638 1.1 christos
2639 1.1 christos extract_sfmt_move_m_d_m:
2640 1.1 christos {
2641 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2642 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2643 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2644 1.1 christos UINT f_operand2;
2645 1.1 christos UINT f_memmode;
2646 1.1 christos UINT f_operand1;
2647 1.1 christos
2648 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2649 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2650 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2651 1.1 christos
2652 1.1 christos /* Record the fields for the semantic handler. */
2653 1.1 christos FLD (f_operand1) = f_operand1;
2654 1.1 christos FLD (f_operand2) = f_operand2;
2655 1.1 christos FLD (f_memmode) = f_memmode;
2656 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_m_d_m", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2657 1.1 christos
2658 1.1 christos #if WITH_PROFILE_MODEL_P
2659 1.1 christos /* Record the fields for profiling. */
2660 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2661 1.1 christos {
2662 1.1 christos FLD (in_Rs) = f_operand1;
2663 1.1 christos FLD (out_Rs) = f_operand1;
2664 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
2665 1.1 christos }
2666 1.1 christos #endif
2667 1.1 christos #undef FLD
2668 1.1 christos return idesc;
2669 1.1 christos }
2670 1.1 christos
2671 1.1 christos extract_sfmt_movs_m_b_m:
2672 1.1 christos {
2673 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2674 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2675 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2676 1.1 christos UINT f_operand2;
2677 1.1 christos UINT f_memmode;
2678 1.1 christos UINT f_operand1;
2679 1.1 christos
2680 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2681 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2682 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2683 1.1 christos
2684 1.1 christos /* Record the fields for the semantic handler. */
2685 1.1 christos FLD (f_operand1) = f_operand1;
2686 1.1 christos FLD (f_memmode) = f_memmode;
2687 1.1 christos FLD (f_operand2) = f_operand2;
2688 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movs_m_b_m", "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2689 1.1 christos
2690 1.1 christos #if WITH_PROFILE_MODEL_P
2691 1.1 christos /* Record the fields for profiling. */
2692 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2693 1.1 christos {
2694 1.1 christos FLD (in_Rs) = f_operand1;
2695 1.1 christos FLD (out_Rd) = f_operand2;
2696 1.1 christos FLD (out_Rs) = f_operand1;
2697 1.1 christos }
2698 1.1 christos #endif
2699 1.1 christos #undef FLD
2700 1.1 christos return idesc;
2701 1.1 christos }
2702 1.1 christos
2703 1.1 christos extract_sfmt_movs_m_w_m:
2704 1.1 christos {
2705 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2706 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2707 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2708 1.1 christos UINT f_operand2;
2709 1.1 christos UINT f_memmode;
2710 1.1 christos UINT f_operand1;
2711 1.1 christos
2712 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2713 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2714 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2715 1.1 christos
2716 1.1 christos /* Record the fields for the semantic handler. */
2717 1.1 christos FLD (f_operand1) = f_operand1;
2718 1.1 christos FLD (f_memmode) = f_memmode;
2719 1.1 christos FLD (f_operand2) = f_operand2;
2720 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movs_m_w_m", "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2721 1.1 christos
2722 1.1 christos #if WITH_PROFILE_MODEL_P
2723 1.1 christos /* Record the fields for profiling. */
2724 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2725 1.1 christos {
2726 1.1 christos FLD (in_Rs) = f_operand1;
2727 1.1 christos FLD (out_Rd) = f_operand2;
2728 1.1 christos FLD (out_Rs) = f_operand1;
2729 1.1 christos }
2730 1.1 christos #endif
2731 1.1 christos #undef FLD
2732 1.1 christos return idesc;
2733 1.1 christos }
2734 1.1 christos
2735 1.1 christos extract_sfmt_move_r_sprv32:
2736 1.1 christos {
2737 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2738 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2739 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
2740 1.1 christos UINT f_operand2;
2741 1.1 christos UINT f_operand1;
2742 1.1 christos
2743 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2744 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2745 1.1 christos
2746 1.1 christos /* Record the fields for the semantic handler. */
2747 1.1 christos FLD (f_operand1) = f_operand1;
2748 1.1 christos FLD (f_operand2) = f_operand2;
2749 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_r_sprv32", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2750 1.1 christos
2751 1.1 christos #if WITH_PROFILE_MODEL_P
2752 1.1 christos /* Record the fields for profiling. */
2753 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2754 1.1 christos {
2755 1.1 christos FLD (in_Rs) = f_operand1;
2756 1.1 christos FLD (out_Pd) = f_operand2;
2757 1.1 christos }
2758 1.1 christos #endif
2759 1.1 christos #undef FLD
2760 1.1 christos return idesc;
2761 1.1 christos }
2762 1.1 christos
2763 1.1 christos extract_sfmt_move_spr_rv32:
2764 1.1 christos {
2765 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2766 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2767 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
2768 1.1 christos UINT f_operand2;
2769 1.1 christos UINT f_operand1;
2770 1.1 christos
2771 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2772 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2773 1.1 christos
2774 1.1 christos /* Record the fields for the semantic handler. */
2775 1.1 christos FLD (f_operand2) = f_operand2;
2776 1.1 christos FLD (f_operand1) = f_operand1;
2777 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_spr_rv32", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
2778 1.1 christos
2779 1.1 christos #if WITH_PROFILE_MODEL_P
2780 1.1 christos /* Record the fields for profiling. */
2781 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2782 1.1 christos {
2783 1.1 christos FLD (in_Ps) = f_operand2;
2784 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rs) = FLD (f_operand1);
2785 1.1 christos }
2786 1.1 christos #endif
2787 1.1 christos #undef FLD
2788 1.1 christos return idesc;
2789 1.1 christos }
2790 1.1 christos
2791 1.1 christos extract_sfmt_move_m_sprv32:
2792 1.1 christos {
2793 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2794 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2795 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
2796 1.1 christos UINT f_operand2;
2797 1.1 christos UINT f_memmode;
2798 1.1 christos UINT f_operand1;
2799 1.1 christos
2800 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2801 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2802 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2803 1.1 christos
2804 1.1 christos /* Record the fields for the semantic handler. */
2805 1.1 christos FLD (f_operand1) = f_operand1;
2806 1.1 christos FLD (f_operand2) = f_operand2;
2807 1.1 christos FLD (f_memmode) = f_memmode;
2808 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_m_sprv32", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2809 1.1 christos
2810 1.1 christos #if WITH_PROFILE_MODEL_P
2811 1.1 christos /* Record the fields for profiling. */
2812 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2813 1.1 christos {
2814 1.1 christos FLD (in_Rs) = f_operand1;
2815 1.1 christos FLD (out_Pd) = f_operand2;
2816 1.1 christos FLD (out_Rs) = f_operand1;
2817 1.1 christos }
2818 1.1 christos #endif
2819 1.1 christos #undef FLD
2820 1.1 christos return idesc;
2821 1.1 christos }
2822 1.1 christos
2823 1.1 christos extract_sfmt_move_c_sprv32_p2:
2824 1.1 christos {
2825 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2826 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2827 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
2828 1.1 christos INT f_indir_pc__dword;
2829 1.1 christos UINT f_operand2;
2830 1.1 christos /* Contents of trailing part of insn. */
2831 1.1 christos UINT word_1;
2832 1.1 christos
2833 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
2834 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
2835 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2836 1.1 christos
2837 1.1 christos /* Record the fields for the semantic handler. */
2838 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
2839 1.1 christos FLD (f_operand2) = f_operand2;
2840 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_c_sprv32_p2", "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2841 1.1 christos
2842 1.1 christos #if WITH_PROFILE_MODEL_P
2843 1.1 christos /* Record the fields for profiling. */
2844 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2845 1.1 christos {
2846 1.1 christos FLD (out_Pd) = f_operand2;
2847 1.1 christos }
2848 1.1 christos #endif
2849 1.1 christos #undef FLD
2850 1.1 christos return idesc;
2851 1.1 christos }
2852 1.1 christos
2853 1.1 christos extract_sfmt_move_spr_mv32:
2854 1.1 christos {
2855 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2856 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2857 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
2858 1.1 christos UINT f_operand2;
2859 1.1 christos UINT f_memmode;
2860 1.1 christos UINT f_operand1;
2861 1.1 christos
2862 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2863 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2864 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2865 1.1 christos
2866 1.1 christos /* Record the fields for the semantic handler. */
2867 1.1 christos FLD (f_operand2) = f_operand2;
2868 1.1 christos FLD (f_operand1) = f_operand1;
2869 1.1 christos FLD (f_memmode) = f_memmode;
2870 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_spr_mv32", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2871 1.1 christos
2872 1.1 christos #if WITH_PROFILE_MODEL_P
2873 1.1 christos /* Record the fields for profiling. */
2874 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2875 1.1 christos {
2876 1.1 christos FLD (in_Ps) = f_operand2;
2877 1.1 christos FLD (in_Rs) = f_operand1;
2878 1.1 christos FLD (out_Rs) = f_operand1;
2879 1.1 christos }
2880 1.1 christos #endif
2881 1.1 christos #undef FLD
2882 1.1 christos return idesc;
2883 1.1 christos }
2884 1.1 christos
2885 1.1 christos extract_sfmt_move_ss_r:
2886 1.1 christos {
2887 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2888 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2889 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
2890 1.1 christos UINT f_operand2;
2891 1.1 christos UINT f_operand1;
2892 1.1 christos
2893 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2894 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2895 1.1 christos
2896 1.1 christos /* Record the fields for the semantic handler. */
2897 1.1 christos FLD (f_operand2) = f_operand2;
2898 1.1 christos FLD (f_operand1) = f_operand1;
2899 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_ss_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
2900 1.1 christos
2901 1.1 christos #if WITH_PROFILE_MODEL_P
2902 1.1 christos /* Record the fields for profiling. */
2903 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2904 1.1 christos {
2905 1.1 christos FLD (out_Rs) = f_operand1;
2906 1.1 christos }
2907 1.1 christos #endif
2908 1.1 christos #undef FLD
2909 1.1 christos return idesc;
2910 1.1 christos }
2911 1.1 christos
2912 1.1 christos extract_sfmt_move_r_ss:
2913 1.1 christos {
2914 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2915 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2916 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
2917 1.1 christos UINT f_operand2;
2918 1.1 christos UINT f_operand1;
2919 1.1 christos
2920 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2921 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2922 1.1 christos
2923 1.1 christos /* Record the fields for the semantic handler. */
2924 1.1 christos FLD (f_operand1) = f_operand1;
2925 1.1 christos FLD (f_operand2) = f_operand2;
2926 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_r_ss", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
2927 1.1 christos
2928 1.1 christos #if WITH_PROFILE_MODEL_P
2929 1.1 christos /* Record the fields for profiling. */
2930 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2931 1.1 christos {
2932 1.1 christos FLD (in_Rs) = f_operand1;
2933 1.1 christos }
2934 1.1 christos #endif
2935 1.1 christos #undef FLD
2936 1.1 christos return idesc;
2937 1.1 christos }
2938 1.1 christos
2939 1.1 christos extract_sfmt_movem_r_m_v32:
2940 1.1 christos {
2941 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2942 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2943 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f
2944 1.1 christos UINT f_operand2;
2945 1.1 christos UINT f_memmode;
2946 1.1 christos UINT f_operand1;
2947 1.1 christos
2948 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2949 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2950 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2951 1.1 christos
2952 1.1 christos /* Record the fields for the semantic handler. */
2953 1.1 christos FLD (f_operand2) = f_operand2;
2954 1.1 christos FLD (f_operand1) = f_operand1;
2955 1.1 christos FLD (f_memmode) = f_memmode;
2956 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movem_r_m_v32", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
2957 1.1 christos
2958 1.1 christos #if WITH_PROFILE_MODEL_P
2959 1.1 christos /* Record the fields for profiling. */
2960 1.1 christos if (PROFILE_MODEL_P (current_cpu))
2961 1.1 christos {
2962 1.1 christos FLD (in_Rd) = f_operand2;
2963 1.1 christos FLD (in_Rs) = f_operand1;
2964 1.1 christos FLD (in_h_gr_SI_0) = 0;
2965 1.1 christos FLD (in_h_gr_SI_1) = 1;
2966 1.1 christos FLD (in_h_gr_SI_10) = 10;
2967 1.1 christos FLD (in_h_gr_SI_11) = 11;
2968 1.1 christos FLD (in_h_gr_SI_12) = 12;
2969 1.1 christos FLD (in_h_gr_SI_13) = 13;
2970 1.1 christos FLD (in_h_gr_SI_14) = 14;
2971 1.1 christos FLD (in_h_gr_SI_15) = 15;
2972 1.1 christos FLD (in_h_gr_SI_2) = 2;
2973 1.1 christos FLD (in_h_gr_SI_3) = 3;
2974 1.1 christos FLD (in_h_gr_SI_4) = 4;
2975 1.1 christos FLD (in_h_gr_SI_5) = 5;
2976 1.1 christos FLD (in_h_gr_SI_6) = 6;
2977 1.1 christos FLD (in_h_gr_SI_7) = 7;
2978 1.1 christos FLD (in_h_gr_SI_8) = 8;
2979 1.1 christos FLD (in_h_gr_SI_9) = 9;
2980 1.1 christos FLD (out_Rs) = f_operand1;
2981 1.1 christos }
2982 1.1 christos #endif
2983 1.1 christos #undef FLD
2984 1.1 christos return idesc;
2985 1.1 christos }
2986 1.1 christos
2987 1.1 christos extract_sfmt_movem_m_r_v32:
2988 1.1 christos {
2989 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
2990 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
2991 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f
2992 1.1 christos UINT f_operand2;
2993 1.1 christos UINT f_memmode;
2994 1.1 christos UINT f_operand1;
2995 1.1 christos
2996 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
2997 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
2998 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
2999 1.1 christos
3000 1.1 christos /* Record the fields for the semantic handler. */
3001 1.1 christos FLD (f_operand2) = f_operand2;
3002 1.1 christos FLD (f_operand1) = f_operand1;
3003 1.1 christos FLD (f_memmode) = f_memmode;
3004 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_movem_m_r_v32", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3005 1.1 christos
3006 1.1 christos #if WITH_PROFILE_MODEL_P
3007 1.1 christos /* Record the fields for profiling. */
3008 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3009 1.1 christos {
3010 1.1 christos FLD (in_Rd) = f_operand2;
3011 1.1 christos FLD (in_Rs) = f_operand1;
3012 1.1 christos FLD (out_Rs) = f_operand1;
3013 1.1 christos FLD (out_h_gr_SI_0) = 0;
3014 1.1 christos FLD (out_h_gr_SI_1) = 1;
3015 1.1 christos FLD (out_h_gr_SI_10) = 10;
3016 1.1 christos FLD (out_h_gr_SI_11) = 11;
3017 1.1 christos FLD (out_h_gr_SI_12) = 12;
3018 1.1 christos FLD (out_h_gr_SI_13) = 13;
3019 1.1 christos FLD (out_h_gr_SI_14) = 14;
3020 1.1 christos FLD (out_h_gr_SI_15) = 15;
3021 1.1 christos FLD (out_h_gr_SI_2) = 2;
3022 1.1 christos FLD (out_h_gr_SI_3) = 3;
3023 1.1 christos FLD (out_h_gr_SI_4) = 4;
3024 1.1 christos FLD (out_h_gr_SI_5) = 5;
3025 1.1 christos FLD (out_h_gr_SI_6) = 6;
3026 1.1 christos FLD (out_h_gr_SI_7) = 7;
3027 1.1 christos FLD (out_h_gr_SI_8) = 8;
3028 1.1 christos FLD (out_h_gr_SI_9) = 9;
3029 1.1 christos }
3030 1.1 christos #endif
3031 1.1 christos #undef FLD
3032 1.1 christos return idesc;
3033 1.1 christos }
3034 1.1 christos
3035 1.1 christos extract_sfmt_add_b_r:
3036 1.1 christos {
3037 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3038 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3039 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3040 1.1 christos UINT f_operand2;
3041 1.1 christos UINT f_operand1;
3042 1.1 christos
3043 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3044 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3045 1.1 christos
3046 1.1 christos /* Record the fields for the semantic handler. */
3047 1.1 christos FLD (f_operand2) = f_operand2;
3048 1.1 christos FLD (f_operand1) = f_operand1;
3049 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3050 1.1 christos
3051 1.1 christos #if WITH_PROFILE_MODEL_P
3052 1.1 christos /* Record the fields for profiling. */
3053 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3054 1.1 christos {
3055 1.1 christos FLD (in_Rd) = f_operand2;
3056 1.1 christos FLD (in_Rs) = f_operand1;
3057 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3058 1.1 christos }
3059 1.1 christos #endif
3060 1.1 christos #undef FLD
3061 1.1 christos return idesc;
3062 1.1 christos }
3063 1.1 christos
3064 1.1 christos extract_sfmt_add_d_r:
3065 1.1 christos {
3066 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3067 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3068 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3069 1.1 christos UINT f_operand2;
3070 1.1 christos UINT f_operand1;
3071 1.1 christos
3072 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3073 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3074 1.1 christos
3075 1.1 christos /* Record the fields for the semantic handler. */
3076 1.1 christos FLD (f_operand2) = f_operand2;
3077 1.1 christos FLD (f_operand1) = f_operand1;
3078 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add_d_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3079 1.1 christos
3080 1.1 christos #if WITH_PROFILE_MODEL_P
3081 1.1 christos /* Record the fields for profiling. */
3082 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3083 1.1 christos {
3084 1.1 christos FLD (in_Rd) = f_operand2;
3085 1.1 christos FLD (in_Rs) = f_operand1;
3086 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3087 1.1 christos }
3088 1.1 christos #endif
3089 1.1 christos #undef FLD
3090 1.1 christos return idesc;
3091 1.1 christos }
3092 1.1 christos
3093 1.1 christos extract_sfmt_add_m_b_m:
3094 1.1 christos {
3095 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3096 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3097 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3098 1.1 christos UINT f_operand2;
3099 1.1 christos UINT f_memmode;
3100 1.1 christos UINT f_operand1;
3101 1.1 christos
3102 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3103 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3104 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3105 1.1 christos
3106 1.1 christos /* Record the fields for the semantic handler. */
3107 1.1 christos FLD (f_operand2) = f_operand2;
3108 1.1 christos FLD (f_operand1) = f_operand1;
3109 1.1 christos FLD (f_memmode) = f_memmode;
3110 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3111 1.1 christos
3112 1.1 christos #if WITH_PROFILE_MODEL_P
3113 1.1 christos /* Record the fields for profiling. */
3114 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3115 1.1 christos {
3116 1.1 christos FLD (in_Rd) = f_operand2;
3117 1.1 christos FLD (in_Rs) = f_operand1;
3118 1.1 christos FLD (out_Rs) = f_operand1;
3119 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3120 1.1 christos }
3121 1.1 christos #endif
3122 1.1 christos #undef FLD
3123 1.1 christos return idesc;
3124 1.1 christos }
3125 1.1 christos
3126 1.1 christos extract_sfmt_add_m_w_m:
3127 1.1 christos {
3128 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3129 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3130 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3131 1.1 christos UINT f_operand2;
3132 1.1 christos UINT f_memmode;
3133 1.1 christos UINT f_operand1;
3134 1.1 christos
3135 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3136 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3137 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3138 1.1 christos
3139 1.1 christos /* Record the fields for the semantic handler. */
3140 1.1 christos FLD (f_operand2) = f_operand2;
3141 1.1 christos FLD (f_operand1) = f_operand1;
3142 1.1 christos FLD (f_memmode) = f_memmode;
3143 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3144 1.1 christos
3145 1.1 christos #if WITH_PROFILE_MODEL_P
3146 1.1 christos /* Record the fields for profiling. */
3147 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3148 1.1 christos {
3149 1.1 christos FLD (in_Rd) = f_operand2;
3150 1.1 christos FLD (in_Rs) = f_operand1;
3151 1.1 christos FLD (out_Rs) = f_operand1;
3152 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3153 1.1 christos }
3154 1.1 christos #endif
3155 1.1 christos #undef FLD
3156 1.1 christos return idesc;
3157 1.1 christos }
3158 1.1 christos
3159 1.1 christos extract_sfmt_add_m_d_m:
3160 1.1 christos {
3161 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3162 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3163 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3164 1.1 christos UINT f_operand2;
3165 1.1 christos UINT f_memmode;
3166 1.1 christos UINT f_operand1;
3167 1.1 christos
3168 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3169 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3170 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3171 1.1 christos
3172 1.1 christos /* Record the fields for the semantic handler. */
3173 1.1 christos FLD (f_operand2) = f_operand2;
3174 1.1 christos FLD (f_operand1) = f_operand1;
3175 1.1 christos FLD (f_memmode) = f_memmode;
3176 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_add_m_d_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3177 1.1 christos
3178 1.1 christos #if WITH_PROFILE_MODEL_P
3179 1.1 christos /* Record the fields for profiling. */
3180 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3181 1.1 christos {
3182 1.1 christos FLD (in_Rd) = f_operand2;
3183 1.1 christos FLD (in_Rs) = f_operand1;
3184 1.1 christos FLD (out_Rs) = f_operand1;
3185 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3186 1.1 christos }
3187 1.1 christos #endif
3188 1.1 christos #undef FLD
3189 1.1 christos return idesc;
3190 1.1 christos }
3191 1.1 christos
3192 1.1 christos extract_sfmt_addcbr:
3193 1.1 christos {
3194 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3195 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3196 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
3197 1.1 christos INT f_indir_pc__byte;
3198 1.1 christos UINT f_operand2;
3199 1.1 christos /* Contents of trailing part of insn. */
3200 1.1 christos UINT word_1;
3201 1.1 christos
3202 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3203 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
3204 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3205 1.1 christos
3206 1.1 christos /* Record the fields for the semantic handler. */
3207 1.1 christos FLD (f_operand2) = f_operand2;
3208 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
3209 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addcbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
3210 1.1 christos
3211 1.1 christos #if WITH_PROFILE_MODEL_P
3212 1.1 christos /* Record the fields for profiling. */
3213 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3214 1.1 christos {
3215 1.1 christos FLD (in_Rd) = f_operand2;
3216 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3217 1.1 christos }
3218 1.1 christos #endif
3219 1.1 christos #undef FLD
3220 1.1 christos return idesc;
3221 1.1 christos }
3222 1.1 christos
3223 1.1 christos extract_sfmt_addcwr:
3224 1.1 christos {
3225 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3226 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3227 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
3228 1.1 christos INT f_indir_pc__word;
3229 1.1 christos UINT f_operand2;
3230 1.1 christos /* Contents of trailing part of insn. */
3231 1.1 christos UINT word_1;
3232 1.1 christos
3233 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3234 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
3235 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3236 1.1 christos
3237 1.1 christos /* Record the fields for the semantic handler. */
3238 1.1 christos FLD (f_operand2) = f_operand2;
3239 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
3240 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addcwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
3241 1.1 christos
3242 1.1 christos #if WITH_PROFILE_MODEL_P
3243 1.1 christos /* Record the fields for profiling. */
3244 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3245 1.1 christos {
3246 1.1 christos FLD (in_Rd) = f_operand2;
3247 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3248 1.1 christos }
3249 1.1 christos #endif
3250 1.1 christos #undef FLD
3251 1.1 christos return idesc;
3252 1.1 christos }
3253 1.1 christos
3254 1.1 christos extract_sfmt_addcdr:
3255 1.1 christos {
3256 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3257 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3258 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
3259 1.1 christos INT f_indir_pc__dword;
3260 1.1 christos UINT f_operand2;
3261 1.1 christos /* Contents of trailing part of insn. */
3262 1.1 christos UINT word_1;
3263 1.1 christos
3264 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3265 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
3266 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3267 1.1 christos
3268 1.1 christos /* Record the fields for the semantic handler. */
3269 1.1 christos FLD (f_operand2) = f_operand2;
3270 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
3271 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addcdr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, (char *) 0));
3272 1.1 christos
3273 1.1 christos #if WITH_PROFILE_MODEL_P
3274 1.1 christos /* Record the fields for profiling. */
3275 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3276 1.1 christos {
3277 1.1 christos FLD (in_Rd) = f_operand2;
3278 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3279 1.1 christos }
3280 1.1 christos #endif
3281 1.1 christos #undef FLD
3282 1.1 christos return idesc;
3283 1.1 christos }
3284 1.1 christos
3285 1.1 christos extract_sfmt_adds_m_b_m:
3286 1.1 christos {
3287 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3288 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3289 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3290 1.1 christos UINT f_operand2;
3291 1.1 christos UINT f_memmode;
3292 1.1 christos UINT f_operand1;
3293 1.1 christos
3294 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3295 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3296 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3297 1.1 christos
3298 1.1 christos /* Record the fields for the semantic handler. */
3299 1.1 christos FLD (f_operand2) = f_operand2;
3300 1.1 christos FLD (f_operand1) = f_operand1;
3301 1.1 christos FLD (f_memmode) = f_memmode;
3302 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_adds_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3303 1.1 christos
3304 1.1 christos #if WITH_PROFILE_MODEL_P
3305 1.1 christos /* Record the fields for profiling. */
3306 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3307 1.1 christos {
3308 1.1 christos FLD (in_Rd) = f_operand2;
3309 1.1 christos FLD (in_Rs) = f_operand1;
3310 1.1 christos FLD (out_Rs) = f_operand1;
3311 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3312 1.1 christos }
3313 1.1 christos #endif
3314 1.1 christos #undef FLD
3315 1.1 christos return idesc;
3316 1.1 christos }
3317 1.1 christos
3318 1.1 christos extract_sfmt_adds_m_w_m:
3319 1.1 christos {
3320 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3321 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3322 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3323 1.1 christos UINT f_operand2;
3324 1.1 christos UINT f_memmode;
3325 1.1 christos UINT f_operand1;
3326 1.1 christos
3327 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3328 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3329 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3330 1.1 christos
3331 1.1 christos /* Record the fields for the semantic handler. */
3332 1.1 christos FLD (f_operand2) = f_operand2;
3333 1.1 christos FLD (f_operand1) = f_operand1;
3334 1.1 christos FLD (f_memmode) = f_memmode;
3335 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_adds_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3336 1.1 christos
3337 1.1 christos #if WITH_PROFILE_MODEL_P
3338 1.1 christos /* Record the fields for profiling. */
3339 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3340 1.1 christos {
3341 1.1 christos FLD (in_Rd) = f_operand2;
3342 1.1 christos FLD (in_Rs) = f_operand1;
3343 1.1 christos FLD (out_Rs) = f_operand1;
3344 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3345 1.1 christos }
3346 1.1 christos #endif
3347 1.1 christos #undef FLD
3348 1.1 christos return idesc;
3349 1.1 christos }
3350 1.1 christos
3351 1.1 christos extract_sfmt_addscbr:
3352 1.1 christos {
3353 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3354 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3355 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
3356 1.1 christos INT f_indir_pc__byte;
3357 1.1 christos UINT f_operand2;
3358 1.1 christos /* Contents of trailing part of insn. */
3359 1.1 christos UINT word_1;
3360 1.1 christos
3361 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3362 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
3363 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3364 1.1 christos
3365 1.1 christos /* Record the fields for the semantic handler. */
3366 1.1 christos FLD (f_operand2) = f_operand2;
3367 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
3368 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addscbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
3369 1.1 christos
3370 1.1 christos #if WITH_PROFILE_MODEL_P
3371 1.1 christos /* Record the fields for profiling. */
3372 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3373 1.1 christos {
3374 1.1 christos FLD (in_Rd) = f_operand2;
3375 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3376 1.1 christos }
3377 1.1 christos #endif
3378 1.1 christos #undef FLD
3379 1.1 christos return idesc;
3380 1.1 christos }
3381 1.1 christos
3382 1.1 christos extract_sfmt_addscwr:
3383 1.1 christos {
3384 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3385 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3386 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
3387 1.1 christos INT f_indir_pc__word;
3388 1.1 christos UINT f_operand2;
3389 1.1 christos /* Contents of trailing part of insn. */
3390 1.1 christos UINT word_1;
3391 1.1 christos
3392 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3393 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
3394 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3395 1.1 christos
3396 1.1 christos /* Record the fields for the semantic handler. */
3397 1.1 christos FLD (f_operand2) = f_operand2;
3398 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
3399 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addscwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
3400 1.1 christos
3401 1.1 christos #if WITH_PROFILE_MODEL_P
3402 1.1 christos /* Record the fields for profiling. */
3403 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3404 1.1 christos {
3405 1.1 christos FLD (in_Rd) = f_operand2;
3406 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3407 1.1 christos }
3408 1.1 christos #endif
3409 1.1 christos #undef FLD
3410 1.1 christos return idesc;
3411 1.1 christos }
3412 1.1 christos
3413 1.1 christos extract_sfmt_addc_m:
3414 1.1 christos {
3415 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3416 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3417 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3418 1.1 christos UINT f_operand2;
3419 1.1 christos UINT f_memmode;
3420 1.1 christos UINT f_operand1;
3421 1.1 christos
3422 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3423 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3424 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3425 1.1 christos
3426 1.1 christos /* Record the fields for the semantic handler. */
3427 1.1 christos FLD (f_operand2) = f_operand2;
3428 1.1 christos FLD (f_operand1) = f_operand1;
3429 1.1 christos FLD (f_memmode) = f_memmode;
3430 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addc_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3431 1.1 christos
3432 1.1 christos #if WITH_PROFILE_MODEL_P
3433 1.1 christos /* Record the fields for profiling. */
3434 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3435 1.1 christos {
3436 1.1 christos FLD (in_Rd) = f_operand2;
3437 1.1 christos FLD (in_Rs) = f_operand1;
3438 1.1 christos FLD (out_Rs) = f_operand1;
3439 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3440 1.1 christos }
3441 1.1 christos #endif
3442 1.1 christos #undef FLD
3443 1.1 christos return idesc;
3444 1.1 christos }
3445 1.1 christos
3446 1.1 christos extract_sfmt_lapc_d:
3447 1.1 christos {
3448 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3449 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3450 1.1 christos #define FLD(f) abuf->fields.sfmt_lapc_d.f
3451 1.1 christos SI f_indir_pc__dword_pcrel;
3452 1.1 christos UINT f_operand2;
3453 1.1 christos /* Contents of trailing part of insn. */
3454 1.1 christos UINT word_1;
3455 1.1 christos
3456 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
3457 1.1 christos f_indir_pc__dword_pcrel = ((pc) + ((0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0))));
3458 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3459 1.1 christos
3460 1.1 christos /* Record the fields for the semantic handler. */
3461 1.1 christos FLD (f_operand2) = f_operand2;
3462 1.1 christos FLD (i_const32_pcrel) = f_indir_pc__dword_pcrel;
3463 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lapc_d", "f_operand2 0x%x", 'x', f_operand2, "const32_pcrel 0x%x", 'x', f_indir_pc__dword_pcrel, (char *) 0));
3464 1.1 christos
3465 1.1 christos #if WITH_PROFILE_MODEL_P
3466 1.1 christos /* Record the fields for profiling. */
3467 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3468 1.1 christos {
3469 1.1 christos FLD (out_Rd) = f_operand2;
3470 1.1 christos }
3471 1.1 christos #endif
3472 1.1 christos #undef FLD
3473 1.1 christos return idesc;
3474 1.1 christos }
3475 1.1 christos
3476 1.1 christos extract_sfmt_lapcq:
3477 1.1 christos {
3478 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3479 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3480 1.1 christos #define FLD(f) abuf->fields.sfmt_lapcq.f
3481 1.1 christos UINT f_operand2;
3482 1.1 christos SI f_qo;
3483 1.1 christos
3484 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3485 1.1 christos f_qo = ((pc) + (((EXTRACT_LSB0_UINT (insn, 16, 3, 4)) << (1))));
3486 1.1 christos
3487 1.1 christos /* Record the fields for the semantic handler. */
3488 1.1 christos FLD (f_operand2) = f_operand2;
3489 1.1 christos FLD (i_qo) = f_qo;
3490 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lapcq", "f_operand2 0x%x", 'x', f_operand2, "qo 0x%x", 'x', f_qo, (char *) 0));
3491 1.1 christos
3492 1.1 christos #if WITH_PROFILE_MODEL_P
3493 1.1 christos /* Record the fields for profiling. */
3494 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3495 1.1 christos {
3496 1.1 christos FLD (out_Rd) = f_operand2;
3497 1.1 christos }
3498 1.1 christos #endif
3499 1.1 christos #undef FLD
3500 1.1 christos return idesc;
3501 1.1 christos }
3502 1.1 christos
3503 1.1 christos extract_sfmt_addi_b_r:
3504 1.1 christos {
3505 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3506 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3507 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3508 1.1 christos UINT f_operand2;
3509 1.1 christos UINT f_operand1;
3510 1.1 christos
3511 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3512 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3513 1.1 christos
3514 1.1 christos /* Record the fields for the semantic handler. */
3515 1.1 christos FLD (f_operand2) = f_operand2;
3516 1.1 christos FLD (f_operand1) = f_operand1;
3517 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3518 1.1 christos
3519 1.1 christos #if WITH_PROFILE_MODEL_P
3520 1.1 christos /* Record the fields for profiling. */
3521 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3522 1.1 christos {
3523 1.1 christos FLD (in_Rd) = f_operand2;
3524 1.1 christos FLD (in_Rs) = f_operand1;
3525 1.1 christos FLD (out_Rs) = f_operand1;
3526 1.1 christos }
3527 1.1 christos #endif
3528 1.1 christos #undef FLD
3529 1.1 christos return idesc;
3530 1.1 christos }
3531 1.1 christos
3532 1.1 christos extract_sfmt_neg_b_r:
3533 1.1 christos {
3534 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3535 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3536 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3537 1.1 christos UINT f_operand2;
3538 1.1 christos UINT f_operand1;
3539 1.1 christos
3540 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3541 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3542 1.1 christos
3543 1.1 christos /* Record the fields for the semantic handler. */
3544 1.1 christos FLD (f_operand1) = f_operand1;
3545 1.1 christos FLD (f_operand2) = f_operand2;
3546 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_neg_b_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
3547 1.1 christos
3548 1.1 christos #if WITH_PROFILE_MODEL_P
3549 1.1 christos /* Record the fields for profiling. */
3550 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3551 1.1 christos {
3552 1.1 christos FLD (in_Rs) = f_operand1;
3553 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3554 1.1 christos }
3555 1.1 christos #endif
3556 1.1 christos #undef FLD
3557 1.1 christos return idesc;
3558 1.1 christos }
3559 1.1 christos
3560 1.1 christos extract_sfmt_neg_d_r:
3561 1.1 christos {
3562 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3563 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3564 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3565 1.1 christos UINT f_operand2;
3566 1.1 christos UINT f_operand1;
3567 1.1 christos
3568 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3569 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3570 1.1 christos
3571 1.1 christos /* Record the fields for the semantic handler. */
3572 1.1 christos FLD (f_operand1) = f_operand1;
3573 1.1 christos FLD (f_operand2) = f_operand2;
3574 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_neg_d_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
3575 1.1 christos
3576 1.1 christos #if WITH_PROFILE_MODEL_P
3577 1.1 christos /* Record the fields for profiling. */
3578 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3579 1.1 christos {
3580 1.1 christos FLD (in_Rs) = f_operand1;
3581 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3582 1.1 christos }
3583 1.1 christos #endif
3584 1.1 christos #undef FLD
3585 1.1 christos return idesc;
3586 1.1 christos }
3587 1.1 christos
3588 1.1 christos extract_sfmt_test_m_b_m:
3589 1.1 christos {
3590 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3591 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3592 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3593 1.1 christos UINT f_memmode;
3594 1.1 christos UINT f_operand1;
3595 1.1 christos
3596 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3597 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3598 1.1 christos
3599 1.1 christos /* Record the fields for the semantic handler. */
3600 1.1 christos FLD (f_operand1) = f_operand1;
3601 1.1 christos FLD (f_memmode) = f_memmode;
3602 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_test_m_b_m", "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3603 1.1 christos
3604 1.1 christos #if WITH_PROFILE_MODEL_P
3605 1.1 christos /* Record the fields for profiling. */
3606 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3607 1.1 christos {
3608 1.1 christos FLD (in_Rs) = f_operand1;
3609 1.1 christos FLD (out_Rs) = f_operand1;
3610 1.1 christos }
3611 1.1 christos #endif
3612 1.1 christos #undef FLD
3613 1.1 christos return idesc;
3614 1.1 christos }
3615 1.1 christos
3616 1.1 christos extract_sfmt_test_m_w_m:
3617 1.1 christos {
3618 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3619 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3620 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3621 1.1 christos UINT f_memmode;
3622 1.1 christos UINT f_operand1;
3623 1.1 christos
3624 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3625 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3626 1.1 christos
3627 1.1 christos /* Record the fields for the semantic handler. */
3628 1.1 christos FLD (f_operand1) = f_operand1;
3629 1.1 christos FLD (f_memmode) = f_memmode;
3630 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_test_m_w_m", "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3631 1.1 christos
3632 1.1 christos #if WITH_PROFILE_MODEL_P
3633 1.1 christos /* Record the fields for profiling. */
3634 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3635 1.1 christos {
3636 1.1 christos FLD (in_Rs) = f_operand1;
3637 1.1 christos FLD (out_Rs) = f_operand1;
3638 1.1 christos }
3639 1.1 christos #endif
3640 1.1 christos #undef FLD
3641 1.1 christos return idesc;
3642 1.1 christos }
3643 1.1 christos
3644 1.1 christos extract_sfmt_test_m_d_m:
3645 1.1 christos {
3646 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3647 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3648 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3649 1.1 christos UINT f_memmode;
3650 1.1 christos UINT f_operand1;
3651 1.1 christos
3652 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3653 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3654 1.1 christos
3655 1.1 christos /* Record the fields for the semantic handler. */
3656 1.1 christos FLD (f_operand1) = f_operand1;
3657 1.1 christos FLD (f_memmode) = f_memmode;
3658 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_test_m_d_m", "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3659 1.1 christos
3660 1.1 christos #if WITH_PROFILE_MODEL_P
3661 1.1 christos /* Record the fields for profiling. */
3662 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3663 1.1 christos {
3664 1.1 christos FLD (in_Rs) = f_operand1;
3665 1.1 christos FLD (out_Rs) = f_operand1;
3666 1.1 christos }
3667 1.1 christos #endif
3668 1.1 christos #undef FLD
3669 1.1 christos return idesc;
3670 1.1 christos }
3671 1.1 christos
3672 1.1 christos extract_sfmt_move_r_m_b_m:
3673 1.1 christos {
3674 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3675 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3676 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3677 1.1 christos UINT f_operand2;
3678 1.1 christos UINT f_memmode;
3679 1.1 christos UINT f_operand1;
3680 1.1 christos
3681 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3682 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3683 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3684 1.1 christos
3685 1.1 christos /* Record the fields for the semantic handler. */
3686 1.1 christos FLD (f_operand2) = f_operand2;
3687 1.1 christos FLD (f_operand1) = f_operand1;
3688 1.1 christos FLD (f_memmode) = f_memmode;
3689 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_r_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3690 1.1 christos
3691 1.1 christos #if WITH_PROFILE_MODEL_P
3692 1.1 christos /* Record the fields for profiling. */
3693 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3694 1.1 christos {
3695 1.1 christos FLD (in_Rd) = f_operand2;
3696 1.1 christos FLD (in_Rs) = f_operand1;
3697 1.1 christos FLD (out_Rs) = f_operand1;
3698 1.1 christos }
3699 1.1 christos #endif
3700 1.1 christos #undef FLD
3701 1.1 christos return idesc;
3702 1.1 christos }
3703 1.1 christos
3704 1.1 christos extract_sfmt_move_r_m_w_m:
3705 1.1 christos {
3706 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3707 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3708 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3709 1.1 christos UINT f_operand2;
3710 1.1 christos UINT f_memmode;
3711 1.1 christos UINT f_operand1;
3712 1.1 christos
3713 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3714 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3715 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3716 1.1 christos
3717 1.1 christos /* Record the fields for the semantic handler. */
3718 1.1 christos FLD (f_operand2) = f_operand2;
3719 1.1 christos FLD (f_operand1) = f_operand1;
3720 1.1 christos FLD (f_memmode) = f_memmode;
3721 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_r_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3722 1.1 christos
3723 1.1 christos #if WITH_PROFILE_MODEL_P
3724 1.1 christos /* Record the fields for profiling. */
3725 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3726 1.1 christos {
3727 1.1 christos FLD (in_Rd) = f_operand2;
3728 1.1 christos FLD (in_Rs) = f_operand1;
3729 1.1 christos FLD (out_Rs) = f_operand1;
3730 1.1 christos }
3731 1.1 christos #endif
3732 1.1 christos #undef FLD
3733 1.1 christos return idesc;
3734 1.1 christos }
3735 1.1 christos
3736 1.1 christos extract_sfmt_move_r_m_d_m:
3737 1.1 christos {
3738 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3739 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3740 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3741 1.1 christos UINT f_operand2;
3742 1.1 christos UINT f_memmode;
3743 1.1 christos UINT f_operand1;
3744 1.1 christos
3745 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3746 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3747 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3748 1.1 christos
3749 1.1 christos /* Record the fields for the semantic handler. */
3750 1.1 christos FLD (f_operand2) = f_operand2;
3751 1.1 christos FLD (f_operand1) = f_operand1;
3752 1.1 christos FLD (f_memmode) = f_memmode;
3753 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_move_r_m_d_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3754 1.1 christos
3755 1.1 christos #if WITH_PROFILE_MODEL_P
3756 1.1 christos /* Record the fields for profiling. */
3757 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3758 1.1 christos {
3759 1.1 christos FLD (in_Rd) = f_operand2;
3760 1.1 christos FLD (in_Rs) = f_operand1;
3761 1.1 christos FLD (out_Rs) = f_operand1;
3762 1.1 christos }
3763 1.1 christos #endif
3764 1.1 christos #undef FLD
3765 1.1 christos return idesc;
3766 1.1 christos }
3767 1.1 christos
3768 1.1 christos extract_sfmt_muls_b:
3769 1.1 christos {
3770 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3771 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3772 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
3773 1.1 christos UINT f_operand2;
3774 1.1 christos UINT f_operand1;
3775 1.1 christos
3776 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3777 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3778 1.1 christos
3779 1.1 christos /* Record the fields for the semantic handler. */
3780 1.1 christos FLD (f_operand2) = f_operand2;
3781 1.1 christos FLD (f_operand1) = f_operand1;
3782 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_muls_b", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3783 1.1 christos
3784 1.1 christos #if WITH_PROFILE_MODEL_P
3785 1.1 christos /* Record the fields for profiling. */
3786 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3787 1.1 christos {
3788 1.1 christos FLD (in_Rd) = f_operand2;
3789 1.1 christos FLD (in_Rs) = f_operand1;
3790 1.1 christos FLD (out_Rd) = f_operand2;
3791 1.1 christos FLD (out_h_sr_SI_7) = 7;
3792 1.1 christos }
3793 1.1 christos #endif
3794 1.1 christos #undef FLD
3795 1.1 christos return idesc;
3796 1.1 christos }
3797 1.1 christos
3798 1.1 christos extract_sfmt_mcp:
3799 1.1 christos {
3800 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3801 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3802 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
3803 1.1 christos UINT f_operand2;
3804 1.1 christos UINT f_operand1;
3805 1.1 christos
3806 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3807 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3808 1.1 christos
3809 1.1 christos /* Record the fields for the semantic handler. */
3810 1.1 christos FLD (f_operand2) = f_operand2;
3811 1.1 christos FLD (f_operand1) = f_operand1;
3812 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_mcp", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3813 1.1 christos
3814 1.1 christos #if WITH_PROFILE_MODEL_P
3815 1.1 christos /* Record the fields for profiling. */
3816 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3817 1.1 christos {
3818 1.1 christos FLD (in_Ps) = f_operand2;
3819 1.1 christos FLD (in_Rs) = f_operand1;
3820 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rs) = FLD (f_operand1);
3821 1.1 christos }
3822 1.1 christos #endif
3823 1.1 christos #undef FLD
3824 1.1 christos return idesc;
3825 1.1 christos }
3826 1.1 christos
3827 1.1 christos extract_sfmt_dstep:
3828 1.1 christos {
3829 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3830 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3831 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
3832 1.1 christos UINT f_operand2;
3833 1.1 christos UINT f_operand1;
3834 1.1 christos
3835 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3836 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3837 1.1 christos
3838 1.1 christos /* Record the fields for the semantic handler. */
3839 1.1 christos FLD (f_operand2) = f_operand2;
3840 1.1 christos FLD (f_operand1) = f_operand1;
3841 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_dstep", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3842 1.1 christos
3843 1.1 christos #if WITH_PROFILE_MODEL_P
3844 1.1 christos /* Record the fields for profiling. */
3845 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3846 1.1 christos {
3847 1.1 christos FLD (in_Rd) = f_operand2;
3848 1.1 christos FLD (in_Rs) = f_operand1;
3849 1.1 christos FLD (out_Rd) = f_operand2;
3850 1.1 christos }
3851 1.1 christos #endif
3852 1.1 christos #undef FLD
3853 1.1 christos return idesc;
3854 1.1 christos }
3855 1.1 christos
3856 1.1 christos extract_sfmt_and_b_r:
3857 1.1 christos {
3858 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3859 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3860 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3861 1.1 christos UINT f_operand2;
3862 1.1 christos UINT f_operand1;
3863 1.1 christos
3864 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3865 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3866 1.1 christos
3867 1.1 christos /* Record the fields for the semantic handler. */
3868 1.1 christos FLD (f_operand2) = f_operand2;
3869 1.1 christos FLD (f_operand1) = f_operand1;
3870 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3871 1.1 christos
3872 1.1 christos #if WITH_PROFILE_MODEL_P
3873 1.1 christos /* Record the fields for profiling. */
3874 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3875 1.1 christos {
3876 1.1 christos FLD (in_Rd) = f_operand2;
3877 1.1 christos FLD (in_Rs) = f_operand1;
3878 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3879 1.1 christos }
3880 1.1 christos #endif
3881 1.1 christos #undef FLD
3882 1.1 christos return idesc;
3883 1.1 christos }
3884 1.1 christos
3885 1.1 christos extract_sfmt_and_d_r:
3886 1.1 christos {
3887 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3888 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3889 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
3890 1.1 christos UINT f_operand2;
3891 1.1 christos UINT f_operand1;
3892 1.1 christos
3893 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3894 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3895 1.1 christos
3896 1.1 christos /* Record the fields for the semantic handler. */
3897 1.1 christos FLD (f_operand2) = f_operand2;
3898 1.1 christos FLD (f_operand1) = f_operand1;
3899 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and_d_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
3900 1.1 christos
3901 1.1 christos #if WITH_PROFILE_MODEL_P
3902 1.1 christos /* Record the fields for profiling. */
3903 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3904 1.1 christos {
3905 1.1 christos FLD (in_Rd) = f_operand2;
3906 1.1 christos FLD (in_Rs) = f_operand1;
3907 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
3908 1.1 christos }
3909 1.1 christos #endif
3910 1.1 christos #undef FLD
3911 1.1 christos return idesc;
3912 1.1 christos }
3913 1.1 christos
3914 1.1 christos extract_sfmt_and_m_b_m:
3915 1.1 christos {
3916 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3917 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3918 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3919 1.1 christos UINT f_operand2;
3920 1.1 christos UINT f_memmode;
3921 1.1 christos UINT f_operand1;
3922 1.1 christos
3923 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3924 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3925 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3926 1.1 christos
3927 1.1 christos /* Record the fields for the semantic handler. */
3928 1.1 christos FLD (f_operand2) = f_operand2;
3929 1.1 christos FLD (f_operand1) = f_operand1;
3930 1.1 christos FLD (f_memmode) = f_memmode;
3931 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3932 1.1 christos
3933 1.1 christos #if WITH_PROFILE_MODEL_P
3934 1.1 christos /* Record the fields for profiling. */
3935 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3936 1.1 christos {
3937 1.1 christos FLD (in_Rd) = f_operand2;
3938 1.1 christos FLD (in_Rs) = f_operand1;
3939 1.1 christos FLD (out_Rs) = f_operand1;
3940 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3941 1.1 christos }
3942 1.1 christos #endif
3943 1.1 christos #undef FLD
3944 1.1 christos return idesc;
3945 1.1 christos }
3946 1.1 christos
3947 1.1 christos extract_sfmt_and_m_w_m:
3948 1.1 christos {
3949 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3950 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3951 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3952 1.1 christos UINT f_operand2;
3953 1.1 christos UINT f_memmode;
3954 1.1 christos UINT f_operand1;
3955 1.1 christos
3956 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3957 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3958 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3959 1.1 christos
3960 1.1 christos /* Record the fields for the semantic handler. */
3961 1.1 christos FLD (f_operand2) = f_operand2;
3962 1.1 christos FLD (f_operand1) = f_operand1;
3963 1.1 christos FLD (f_memmode) = f_memmode;
3964 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3965 1.1 christos
3966 1.1 christos #if WITH_PROFILE_MODEL_P
3967 1.1 christos /* Record the fields for profiling. */
3968 1.1 christos if (PROFILE_MODEL_P (current_cpu))
3969 1.1 christos {
3970 1.1 christos FLD (in_Rd) = f_operand2;
3971 1.1 christos FLD (in_Rs) = f_operand1;
3972 1.1 christos FLD (out_Rs) = f_operand1;
3973 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
3974 1.1 christos }
3975 1.1 christos #endif
3976 1.1 christos #undef FLD
3977 1.1 christos return idesc;
3978 1.1 christos }
3979 1.1 christos
3980 1.1 christos extract_sfmt_and_m_d_m:
3981 1.1 christos {
3982 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
3983 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
3984 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
3985 1.1 christos UINT f_operand2;
3986 1.1 christos UINT f_memmode;
3987 1.1 christos UINT f_operand1;
3988 1.1 christos
3989 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
3990 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
3991 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
3992 1.1 christos
3993 1.1 christos /* Record the fields for the semantic handler. */
3994 1.1 christos FLD (f_operand2) = f_operand2;
3995 1.1 christos FLD (f_operand1) = f_operand1;
3996 1.1 christos FLD (f_memmode) = f_memmode;
3997 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_and_m_d_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
3998 1.1 christos
3999 1.1 christos #if WITH_PROFILE_MODEL_P
4000 1.1 christos /* Record the fields for profiling. */
4001 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4002 1.1 christos {
4003 1.1 christos FLD (in_Rd) = f_operand2;
4004 1.1 christos FLD (in_Rs) = f_operand1;
4005 1.1 christos FLD (out_Rs) = f_operand1;
4006 1.1 christos FLD (out_h_gr_SI_if__SI_andif__DFLT_prefix_set_not__UINT_inc_index_of__INT_Rs_index_of__INT_Rd) = ((ANDIF (GET_H_INSN_PREFIXED_P (), (! (FLD (f_memmode))))) ? (FLD (f_operand1)) : (FLD (f_operand2)));
4007 1.1 christos }
4008 1.1 christos #endif
4009 1.1 christos #undef FLD
4010 1.1 christos return idesc;
4011 1.1 christos }
4012 1.1 christos
4013 1.1 christos extract_sfmt_andcbr:
4014 1.1 christos {
4015 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4016 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4017 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
4018 1.1 christos INT f_indir_pc__byte;
4019 1.1 christos UINT f_operand2;
4020 1.1 christos /* Contents of trailing part of insn. */
4021 1.1 christos UINT word_1;
4022 1.1 christos
4023 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4024 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4025 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4026 1.1 christos
4027 1.1 christos /* Record the fields for the semantic handler. */
4028 1.1 christos FLD (f_operand2) = f_operand2;
4029 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
4030 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andcbr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
4031 1.1 christos
4032 1.1 christos #if WITH_PROFILE_MODEL_P
4033 1.1 christos /* Record the fields for profiling. */
4034 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4035 1.1 christos {
4036 1.1 christos FLD (in_Rd) = f_operand2;
4037 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4038 1.1 christos }
4039 1.1 christos #endif
4040 1.1 christos #undef FLD
4041 1.1 christos return idesc;
4042 1.1 christos }
4043 1.1 christos
4044 1.1 christos extract_sfmt_andcwr:
4045 1.1 christos {
4046 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4047 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4048 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
4049 1.1 christos INT f_indir_pc__word;
4050 1.1 christos UINT f_operand2;
4051 1.1 christos /* Contents of trailing part of insn. */
4052 1.1 christos UINT word_1;
4053 1.1 christos
4054 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4055 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4056 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4057 1.1 christos
4058 1.1 christos /* Record the fields for the semantic handler. */
4059 1.1 christos FLD (f_operand2) = f_operand2;
4060 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
4061 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andcwr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
4062 1.1 christos
4063 1.1 christos #if WITH_PROFILE_MODEL_P
4064 1.1 christos /* Record the fields for profiling. */
4065 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4066 1.1 christos {
4067 1.1 christos FLD (in_Rd) = f_operand2;
4068 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4069 1.1 christos }
4070 1.1 christos #endif
4071 1.1 christos #undef FLD
4072 1.1 christos return idesc;
4073 1.1 christos }
4074 1.1 christos
4075 1.1 christos extract_sfmt_andcdr:
4076 1.1 christos {
4077 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4078 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4079 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
4080 1.1 christos INT f_indir_pc__dword;
4081 1.1 christos UINT f_operand2;
4082 1.1 christos /* Contents of trailing part of insn. */
4083 1.1 christos UINT word_1;
4084 1.1 christos
4085 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4086 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
4087 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4088 1.1 christos
4089 1.1 christos /* Record the fields for the semantic handler. */
4090 1.1 christos FLD (f_operand2) = f_operand2;
4091 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
4092 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andcdr", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, (char *) 0));
4093 1.1 christos
4094 1.1 christos #if WITH_PROFILE_MODEL_P
4095 1.1 christos /* Record the fields for profiling. */
4096 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4097 1.1 christos {
4098 1.1 christos FLD (in_Rd) = f_operand2;
4099 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4100 1.1 christos }
4101 1.1 christos #endif
4102 1.1 christos #undef FLD
4103 1.1 christos return idesc;
4104 1.1 christos }
4105 1.1 christos
4106 1.1 christos extract_sfmt_andq:
4107 1.1 christos {
4108 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4109 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4110 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
4111 1.1 christos UINT f_operand2;
4112 1.1 christos INT f_s6;
4113 1.1 christos
4114 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4115 1.1 christos f_s6 = EXTRACT_LSB0_SINT (insn, 16, 5, 6);
4116 1.1 christos
4117 1.1 christos /* Record the fields for the semantic handler. */
4118 1.1 christos FLD (f_operand2) = f_operand2;
4119 1.1 christos FLD (f_s6) = f_s6;
4120 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_andq", "f_operand2 0x%x", 'x', f_operand2, "f_s6 0x%x", 'x', f_s6, (char *) 0));
4121 1.1 christos
4122 1.1 christos #if WITH_PROFILE_MODEL_P
4123 1.1 christos /* Record the fields for profiling. */
4124 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4125 1.1 christos {
4126 1.1 christos FLD (in_Rd) = f_operand2;
4127 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4128 1.1 christos }
4129 1.1 christos #endif
4130 1.1 christos #undef FLD
4131 1.1 christos return idesc;
4132 1.1 christos }
4133 1.1 christos
4134 1.1 christos extract_sfmt_swap:
4135 1.1 christos {
4136 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4137 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4138 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
4139 1.1 christos UINT f_operand2;
4140 1.1 christos UINT f_operand1;
4141 1.1 christos
4142 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4143 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4144 1.1 christos
4145 1.1 christos /* Record the fields for the semantic handler. */
4146 1.1 christos FLD (f_operand1) = f_operand1;
4147 1.1 christos FLD (f_operand2) = f_operand2;
4148 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_swap", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
4149 1.1 christos
4150 1.1 christos #if WITH_PROFILE_MODEL_P
4151 1.1 christos /* Record the fields for profiling. */
4152 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4153 1.1 christos {
4154 1.1 christos FLD (in_Rs) = f_operand1;
4155 1.1 christos FLD (out_Rs) = f_operand1;
4156 1.1 christos }
4157 1.1 christos #endif
4158 1.1 christos #undef FLD
4159 1.1 christos return idesc;
4160 1.1 christos }
4161 1.1 christos
4162 1.1 christos extract_sfmt_asrq:
4163 1.1 christos {
4164 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4165 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4166 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
4167 1.1 christos UINT f_operand2;
4168 1.1 christos UINT f_u5;
4169 1.1 christos
4170 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4171 1.1 christos f_u5 = EXTRACT_LSB0_UINT (insn, 16, 4, 5);
4172 1.1 christos
4173 1.1 christos /* Record the fields for the semantic handler. */
4174 1.1 christos FLD (f_operand2) = f_operand2;
4175 1.1 christos FLD (f_u5) = f_u5;
4176 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_asrq", "f_operand2 0x%x", 'x', f_operand2, "f_u5 0x%x", 'x', f_u5, (char *) 0));
4177 1.1 christos
4178 1.1 christos #if WITH_PROFILE_MODEL_P
4179 1.1 christos /* Record the fields for profiling. */
4180 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4181 1.1 christos {
4182 1.1 christos FLD (in_Rd) = f_operand2;
4183 1.1 christos FLD (out_Rd) = f_operand2;
4184 1.1 christos }
4185 1.1 christos #endif
4186 1.1 christos #undef FLD
4187 1.1 christos return idesc;
4188 1.1 christos }
4189 1.1 christos
4190 1.1 christos extract_sfmt_lsrr_b_r:
4191 1.1 christos {
4192 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4193 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4194 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
4195 1.1 christos UINT f_operand2;
4196 1.1 christos UINT f_operand1;
4197 1.1 christos
4198 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4199 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4200 1.1 christos
4201 1.1 christos /* Record the fields for the semantic handler. */
4202 1.1 christos FLD (f_operand2) = f_operand2;
4203 1.1 christos FLD (f_operand1) = f_operand1;
4204 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lsrr_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
4205 1.1 christos
4206 1.1 christos #if WITH_PROFILE_MODEL_P
4207 1.1 christos /* Record the fields for profiling. */
4208 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4209 1.1 christos {
4210 1.1 christos FLD (in_Rd) = f_operand2;
4211 1.1 christos FLD (in_Rs) = f_operand1;
4212 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4213 1.1 christos }
4214 1.1 christos #endif
4215 1.1 christos #undef FLD
4216 1.1 christos return idesc;
4217 1.1 christos }
4218 1.1 christos
4219 1.1 christos extract_sfmt_lsrr_d_r:
4220 1.1 christos {
4221 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4222 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4223 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
4224 1.1 christos UINT f_operand2;
4225 1.1 christos UINT f_operand1;
4226 1.1 christos
4227 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4228 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4229 1.1 christos
4230 1.1 christos /* Record the fields for the semantic handler. */
4231 1.1 christos FLD (f_operand2) = f_operand2;
4232 1.1 christos FLD (f_operand1) = f_operand1;
4233 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_lsrr_d_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
4234 1.1 christos
4235 1.1 christos #if WITH_PROFILE_MODEL_P
4236 1.1 christos /* Record the fields for profiling. */
4237 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4238 1.1 christos {
4239 1.1 christos FLD (in_Rd) = f_operand2;
4240 1.1 christos FLD (in_Rs) = f_operand1;
4241 1.1 christos FLD (out_h_gr_SI_index_of__INT_Rd) = FLD (f_operand2);
4242 1.1 christos }
4243 1.1 christos #endif
4244 1.1 christos #undef FLD
4245 1.1 christos return idesc;
4246 1.1 christos }
4247 1.1 christos
4248 1.1 christos extract_sfmt_btst:
4249 1.1 christos {
4250 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4251 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4252 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
4253 1.1 christos UINT f_operand2;
4254 1.1 christos UINT f_operand1;
4255 1.1 christos
4256 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4257 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4258 1.1 christos
4259 1.1 christos /* Record the fields for the semantic handler. */
4260 1.1 christos FLD (f_operand2) = f_operand2;
4261 1.1 christos FLD (f_operand1) = f_operand1;
4262 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btst", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
4263 1.1 christos
4264 1.1 christos #if WITH_PROFILE_MODEL_P
4265 1.1 christos /* Record the fields for profiling. */
4266 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4267 1.1 christos {
4268 1.1 christos FLD (in_Rd) = f_operand2;
4269 1.1 christos FLD (in_Rs) = f_operand1;
4270 1.1 christos }
4271 1.1 christos #endif
4272 1.1 christos #undef FLD
4273 1.1 christos return idesc;
4274 1.1 christos }
4275 1.1 christos
4276 1.1 christos extract_sfmt_btstq:
4277 1.1 christos {
4278 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4279 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4280 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
4281 1.1 christos UINT f_operand2;
4282 1.1 christos UINT f_u5;
4283 1.1 christos
4284 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4285 1.1 christos f_u5 = EXTRACT_LSB0_UINT (insn, 16, 4, 5);
4286 1.1 christos
4287 1.1 christos /* Record the fields for the semantic handler. */
4288 1.1 christos FLD (f_operand2) = f_operand2;
4289 1.1 christos FLD (f_u5) = f_u5;
4290 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_btstq", "f_operand2 0x%x", 'x', f_operand2, "f_u5 0x%x", 'x', f_u5, (char *) 0));
4291 1.1 christos
4292 1.1 christos #if WITH_PROFILE_MODEL_P
4293 1.1 christos /* Record the fields for profiling. */
4294 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4295 1.1 christos {
4296 1.1 christos FLD (in_Rd) = f_operand2;
4297 1.1 christos }
4298 1.1 christos #endif
4299 1.1 christos #undef FLD
4300 1.1 christos return idesc;
4301 1.1 christos }
4302 1.1 christos
4303 1.1 christos extract_sfmt_setf:
4304 1.1 christos {
4305 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4306 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4307 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
4308 1.1 christos UINT f_operand2;
4309 1.1 christos UINT f_operand1;
4310 1.1 christos UINT f_dstsrc;
4311 1.1 christos
4312 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4313 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4314 1.1 christos f_dstsrc = ((((f_operand1) | (((f_operand2) << (4))))) & (255));
4315 1.1 christos
4316 1.1 christos /* Record the fields for the semantic handler. */
4317 1.1 christos FLD (f_dstsrc) = f_dstsrc;
4318 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_setf", "f_dstsrc 0x%x", 'x', f_dstsrc, (char *) 0));
4319 1.1 christos
4320 1.1 christos #undef FLD
4321 1.1 christos return idesc;
4322 1.1 christos }
4323 1.1 christos
4324 1.1 christos extract_sfmt_rfe:
4325 1.1 christos {
4326 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4327 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
4328 1.1 christos
4329 1.1 christos
4330 1.1 christos /* Record the fields for the semantic handler. */
4331 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rfe", (char *) 0));
4332 1.1 christos
4333 1.1 christos #if WITH_PROFILE_MODEL_P
4334 1.1 christos /* Record the fields for profiling. */
4335 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4336 1.1 christos {
4337 1.1 christos FLD (in_h_sr_SI_13) = 13;
4338 1.1 christos FLD (out_h_sr_SI_13) = 13;
4339 1.1 christos }
4340 1.1 christos #endif
4341 1.1 christos #undef FLD
4342 1.1 christos return idesc;
4343 1.1 christos }
4344 1.1 christos
4345 1.1 christos extract_sfmt_sfe:
4346 1.1 christos {
4347 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4348 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
4349 1.1 christos
4350 1.1 christos
4351 1.1 christos /* Record the fields for the semantic handler. */
4352 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_sfe", (char *) 0));
4353 1.1 christos
4354 1.1 christos #if WITH_PROFILE_MODEL_P
4355 1.1 christos /* Record the fields for profiling. */
4356 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4357 1.1 christos {
4358 1.1 christos FLD (in_h_sr_SI_13) = 13;
4359 1.1 christos FLD (out_h_sr_SI_13) = 13;
4360 1.1 christos }
4361 1.1 christos #endif
4362 1.1 christos #undef FLD
4363 1.1 christos return idesc;
4364 1.1 christos }
4365 1.1 christos
4366 1.1 christos extract_sfmt_rfg:
4367 1.1 christos {
4368 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4369 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
4370 1.1 christos
4371 1.1 christos
4372 1.1 christos /* Record the fields for the semantic handler. */
4373 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rfg", (char *) 0));
4374 1.1 christos
4375 1.1 christos #if WITH_PROFILE_MODEL_P
4376 1.1 christos /* Record the fields for profiling. */
4377 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4378 1.1 christos {
4379 1.1 christos }
4380 1.1 christos #endif
4381 1.1 christos #undef FLD
4382 1.1 christos return idesc;
4383 1.1 christos }
4384 1.1 christos
4385 1.1 christos extract_sfmt_rfn:
4386 1.1 christos {
4387 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4388 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
4389 1.1 christos
4390 1.1 christos
4391 1.1 christos /* Record the fields for the semantic handler. */
4392 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_rfn", (char *) 0));
4393 1.1 christos
4394 1.1 christos #if WITH_PROFILE_MODEL_P
4395 1.1 christos /* Record the fields for profiling. */
4396 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4397 1.1 christos {
4398 1.1 christos FLD (in_h_sr_SI_13) = 13;
4399 1.1 christos FLD (out_h_sr_SI_13) = 13;
4400 1.1 christos }
4401 1.1 christos #endif
4402 1.1 christos #undef FLD
4403 1.1 christos return idesc;
4404 1.1 christos }
4405 1.1 christos
4406 1.1 christos extract_sfmt_halt:
4407 1.1 christos {
4408 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4409 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
4410 1.1 christos
4411 1.1 christos
4412 1.1 christos /* Record the fields for the semantic handler. */
4413 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_halt", (char *) 0));
4414 1.1 christos
4415 1.1 christos #if WITH_PROFILE_MODEL_P
4416 1.1 christos /* Record the fields for profiling. */
4417 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4418 1.1 christos {
4419 1.1 christos }
4420 1.1 christos #endif
4421 1.1 christos #undef FLD
4422 1.1 christos return idesc;
4423 1.1 christos }
4424 1.1 christos
4425 1.1 christos extract_sfmt_bcc_b:
4426 1.1 christos {
4427 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4428 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4429 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
4430 1.1 christos UINT f_operand2;
4431 1.1 christos UINT f_disp9_lo;
4432 1.1 christos INT f_disp9_hi;
4433 1.1 christos INT f_disp9;
4434 1.1 christos
4435 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4436 1.1 christos f_disp9_lo = EXTRACT_LSB0_UINT (insn, 16, 7, 7);
4437 1.1 christos f_disp9_hi = EXTRACT_LSB0_SINT (insn, 16, 0, 1);
4438 1.1 christos {
4439 1.1 christos SI tmp_abslo;
4440 1.1 christos SI tmp_absval;
4441 1.1 christos tmp_abslo = ((f_disp9_lo) << (1));
4442 1.1 christos tmp_absval = ((((((f_disp9_hi) != (0))) ? ((~ (255))) : (0))) | (tmp_abslo));
4443 1.1 christos f_disp9 = ((((pc) + (tmp_absval))) + (((GET_H_V32_V32 ()) ? (0) : (2))));
4444 1.1 christos }
4445 1.1 christos
4446 1.1 christos /* Record the fields for the semantic handler. */
4447 1.1 christos FLD (f_operand2) = f_operand2;
4448 1.1 christos FLD (i_o_pcrel) = f_disp9;
4449 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcc_b", "f_operand2 0x%x", 'x', f_operand2, "o_pcrel 0x%x", 'x', f_disp9, (char *) 0));
4450 1.1 christos
4451 1.1 christos #if WITH_PROFILE_MODEL_P
4452 1.1 christos /* Record the fields for profiling. */
4453 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4454 1.1 christos {
4455 1.1 christos }
4456 1.1 christos #endif
4457 1.1 christos #undef FLD
4458 1.1 christos return idesc;
4459 1.1 christos }
4460 1.1 christos
4461 1.1 christos extract_sfmt_ba_b:
4462 1.1 christos {
4463 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4464 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4465 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
4466 1.1 christos UINT f_disp9_lo;
4467 1.1 christos INT f_disp9_hi;
4468 1.1 christos INT f_disp9;
4469 1.1 christos
4470 1.1 christos f_disp9_lo = EXTRACT_LSB0_UINT (insn, 16, 7, 7);
4471 1.1 christos f_disp9_hi = EXTRACT_LSB0_SINT (insn, 16, 0, 1);
4472 1.1 christos {
4473 1.1 christos SI tmp_abslo;
4474 1.1 christos SI tmp_absval;
4475 1.1 christos tmp_abslo = ((f_disp9_lo) << (1));
4476 1.1 christos tmp_absval = ((((((f_disp9_hi) != (0))) ? ((~ (255))) : (0))) | (tmp_abslo));
4477 1.1 christos f_disp9 = ((((pc) + (tmp_absval))) + (((GET_H_V32_V32 ()) ? (0) : (2))));
4478 1.1 christos }
4479 1.1 christos
4480 1.1 christos /* Record the fields for the semantic handler. */
4481 1.1 christos FLD (i_o_pcrel) = f_disp9;
4482 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ba_b", "o_pcrel 0x%x", 'x', f_disp9, (char *) 0));
4483 1.1 christos
4484 1.1 christos #if WITH_PROFILE_MODEL_P
4485 1.1 christos /* Record the fields for profiling. */
4486 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4487 1.1 christos {
4488 1.1 christos }
4489 1.1 christos #endif
4490 1.1 christos #undef FLD
4491 1.1 christos return idesc;
4492 1.1 christos }
4493 1.1 christos
4494 1.1 christos extract_sfmt_bcc_w:
4495 1.1 christos {
4496 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4497 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4498 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
4499 1.1 christos SI f_indir_pc__word_pcrel;
4500 1.1 christos UINT f_operand2;
4501 1.1 christos /* Contents of trailing part of insn. */
4502 1.1 christos UINT word_1;
4503 1.1 christos
4504 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4505 1.1 christos f_indir_pc__word_pcrel = ((EXTHISI (((HI) (UINT) ((0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)))))) + (((pc) + (((GET_H_V32_V32 ()) ? (0) : (4))))));
4506 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4507 1.1 christos
4508 1.1 christos /* Record the fields for the semantic handler. */
4509 1.1 christos FLD (f_operand2) = f_operand2;
4510 1.1 christos FLD (i_o_word_pcrel) = f_indir_pc__word_pcrel;
4511 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bcc_w", "f_operand2 0x%x", 'x', f_operand2, "o_word_pcrel 0x%x", 'x', f_indir_pc__word_pcrel, (char *) 0));
4512 1.1 christos
4513 1.1 christos #if WITH_PROFILE_MODEL_P
4514 1.1 christos /* Record the fields for profiling. */
4515 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4516 1.1 christos {
4517 1.1 christos }
4518 1.1 christos #endif
4519 1.1 christos #undef FLD
4520 1.1 christos return idesc;
4521 1.1 christos }
4522 1.1 christos
4523 1.1 christos extract_sfmt_ba_w:
4524 1.1 christos {
4525 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4526 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4527 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
4528 1.1 christos SI f_indir_pc__word_pcrel;
4529 1.1 christos /* Contents of trailing part of insn. */
4530 1.1 christos UINT word_1;
4531 1.1 christos
4532 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4533 1.1 christos f_indir_pc__word_pcrel = ((EXTHISI (((HI) (UINT) ((0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0)))))) + (((pc) + (((GET_H_V32_V32 ()) ? (0) : (4))))));
4534 1.1 christos
4535 1.1 christos /* Record the fields for the semantic handler. */
4536 1.1 christos FLD (i_o_word_pcrel) = f_indir_pc__word_pcrel;
4537 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_ba_w", "o_word_pcrel 0x%x", 'x', f_indir_pc__word_pcrel, (char *) 0));
4538 1.1 christos
4539 1.1 christos #if WITH_PROFILE_MODEL_P
4540 1.1 christos /* Record the fields for profiling. */
4541 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4542 1.1 christos {
4543 1.1 christos }
4544 1.1 christos #endif
4545 1.1 christos #undef FLD
4546 1.1 christos return idesc;
4547 1.1 christos }
4548 1.1 christos
4549 1.1 christos extract_sfmt_jas_r:
4550 1.1 christos {
4551 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4552 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4553 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
4554 1.1 christos UINT f_operand2;
4555 1.1 christos UINT f_operand1;
4556 1.1 christos
4557 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4558 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4559 1.1 christos
4560 1.1 christos /* Record the fields for the semantic handler. */
4561 1.1 christos FLD (f_operand1) = f_operand1;
4562 1.1 christos FLD (f_operand2) = f_operand2;
4563 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jas_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
4564 1.1 christos
4565 1.1 christos #if WITH_PROFILE_MODEL_P
4566 1.1 christos /* Record the fields for profiling. */
4567 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4568 1.1 christos {
4569 1.1 christos FLD (in_Rs) = f_operand1;
4570 1.1 christos FLD (out_Pd) = f_operand2;
4571 1.1 christos }
4572 1.1 christos #endif
4573 1.1 christos #undef FLD
4574 1.1 christos return idesc;
4575 1.1 christos }
4576 1.1 christos
4577 1.1 christos extract_sfmt_jas_c:
4578 1.1 christos {
4579 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4580 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4581 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
4582 1.1 christos INT f_indir_pc__dword;
4583 1.1 christos UINT f_operand2;
4584 1.1 christos /* Contents of trailing part of insn. */
4585 1.1 christos UINT word_1;
4586 1.1 christos
4587 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4588 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
4589 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4590 1.1 christos
4591 1.1 christos /* Record the fields for the semantic handler. */
4592 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
4593 1.1 christos FLD (f_operand2) = f_operand2;
4594 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jas_c", "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
4595 1.1 christos
4596 1.1 christos #if WITH_PROFILE_MODEL_P
4597 1.1 christos /* Record the fields for profiling. */
4598 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4599 1.1 christos {
4600 1.1 christos FLD (out_Pd) = f_operand2;
4601 1.1 christos }
4602 1.1 christos #endif
4603 1.1 christos #undef FLD
4604 1.1 christos return idesc;
4605 1.1 christos }
4606 1.1 christos
4607 1.1 christos extract_sfmt_jump_p:
4608 1.1 christos {
4609 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4610 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4611 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
4612 1.1 christos UINT f_operand2;
4613 1.1 christos
4614 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4615 1.1 christos
4616 1.1 christos /* Record the fields for the semantic handler. */
4617 1.1 christos FLD (f_operand2) = f_operand2;
4618 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jump_p", "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
4619 1.1 christos
4620 1.1 christos #if WITH_PROFILE_MODEL_P
4621 1.1 christos /* Record the fields for profiling. */
4622 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4623 1.1 christos {
4624 1.1 christos FLD (in_Ps) = f_operand2;
4625 1.1 christos }
4626 1.1 christos #endif
4627 1.1 christos #undef FLD
4628 1.1 christos return idesc;
4629 1.1 christos }
4630 1.1 christos
4631 1.1 christos extract_sfmt_bas_c:
4632 1.1 christos {
4633 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4634 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4635 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
4636 1.1 christos SI f_indir_pc__dword_pcrel;
4637 1.1 christos UINT f_operand2;
4638 1.1 christos /* Contents of trailing part of insn. */
4639 1.1 christos UINT word_1;
4640 1.1 christos
4641 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4642 1.1 christos f_indir_pc__dword_pcrel = ((pc) + ((0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0))));
4643 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4644 1.1 christos
4645 1.1 christos /* Record the fields for the semantic handler. */
4646 1.1 christos FLD (f_operand2) = f_operand2;
4647 1.1 christos FLD (i_const32_pcrel) = f_indir_pc__dword_pcrel;
4648 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bas_c", "f_operand2 0x%x", 'x', f_operand2, "const32_pcrel 0x%x", 'x', f_indir_pc__dword_pcrel, (char *) 0));
4649 1.1 christos
4650 1.1 christos #if WITH_PROFILE_MODEL_P
4651 1.1 christos /* Record the fields for profiling. */
4652 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4653 1.1 christos {
4654 1.1 christos FLD (out_Pd) = f_operand2;
4655 1.1 christos }
4656 1.1 christos #endif
4657 1.1 christos #undef FLD
4658 1.1 christos return idesc;
4659 1.1 christos }
4660 1.1 christos
4661 1.1 christos extract_sfmt_jasc_r:
4662 1.1 christos {
4663 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4664 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4665 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
4666 1.1 christos UINT f_operand2;
4667 1.1 christos UINT f_operand1;
4668 1.1 christos
4669 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4670 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4671 1.1 christos
4672 1.1 christos /* Record the fields for the semantic handler. */
4673 1.1 christos FLD (f_operand1) = f_operand1;
4674 1.1 christos FLD (f_operand2) = f_operand2;
4675 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_jasc_r", "f_operand1 0x%x", 'x', f_operand1, "f_operand2 0x%x", 'x', f_operand2, (char *) 0));
4676 1.1 christos
4677 1.1 christos #if WITH_PROFILE_MODEL_P
4678 1.1 christos /* Record the fields for profiling. */
4679 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4680 1.1 christos {
4681 1.1 christos FLD (in_Rs) = f_operand1;
4682 1.1 christos FLD (out_Pd) = f_operand2;
4683 1.1 christos }
4684 1.1 christos #endif
4685 1.1 christos #undef FLD
4686 1.1 christos return idesc;
4687 1.1 christos }
4688 1.1 christos
4689 1.1 christos extract_sfmt_break:
4690 1.1 christos {
4691 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4692 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4693 1.1 christos #define FLD(f) abuf->fields.sfmt_break.f
4694 1.1 christos UINT f_u4;
4695 1.1 christos
4696 1.1 christos f_u4 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4697 1.1 christos
4698 1.1 christos /* Record the fields for the semantic handler. */
4699 1.1 christos FLD (f_u4) = f_u4;
4700 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_break", "f_u4 0x%x", 'x', f_u4, (char *) 0));
4701 1.1 christos
4702 1.1 christos #if WITH_PROFILE_MODEL_P
4703 1.1 christos /* Record the fields for profiling. */
4704 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4705 1.1 christos {
4706 1.1 christos }
4707 1.1 christos #endif
4708 1.1 christos #undef FLD
4709 1.1 christos return idesc;
4710 1.1 christos }
4711 1.1 christos
4712 1.1 christos extract_sfmt_bound_cb:
4713 1.1 christos {
4714 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4715 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4716 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
4717 1.1 christos INT f_indir_pc__byte;
4718 1.1 christos UINT f_operand2;
4719 1.1 christos /* Contents of trailing part of insn. */
4720 1.1 christos UINT word_1;
4721 1.1 christos
4722 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4723 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4724 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4725 1.1 christos
4726 1.1 christos /* Record the fields for the semantic handler. */
4727 1.1 christos FLD (f_operand2) = f_operand2;
4728 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
4729 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bound_cb", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
4730 1.1 christos
4731 1.1 christos #if WITH_PROFILE_MODEL_P
4732 1.1 christos /* Record the fields for profiling. */
4733 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4734 1.1 christos {
4735 1.1 christos FLD (in_Rd) = f_operand2;
4736 1.1 christos FLD (out_Rd) = f_operand2;
4737 1.1 christos }
4738 1.1 christos #endif
4739 1.1 christos #undef FLD
4740 1.1 christos return idesc;
4741 1.1 christos }
4742 1.1 christos
4743 1.1 christos extract_sfmt_bound_cw:
4744 1.1 christos {
4745 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4746 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4747 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
4748 1.1 christos INT f_indir_pc__word;
4749 1.1 christos UINT f_operand2;
4750 1.1 christos /* Contents of trailing part of insn. */
4751 1.1 christos UINT word_1;
4752 1.1 christos
4753 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4754 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4755 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4756 1.1 christos
4757 1.1 christos /* Record the fields for the semantic handler. */
4758 1.1 christos FLD (f_operand2) = f_operand2;
4759 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
4760 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bound_cw", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
4761 1.1 christos
4762 1.1 christos #if WITH_PROFILE_MODEL_P
4763 1.1 christos /* Record the fields for profiling. */
4764 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4765 1.1 christos {
4766 1.1 christos FLD (in_Rd) = f_operand2;
4767 1.1 christos FLD (out_Rd) = f_operand2;
4768 1.1 christos }
4769 1.1 christos #endif
4770 1.1 christos #undef FLD
4771 1.1 christos return idesc;
4772 1.1 christos }
4773 1.1 christos
4774 1.1 christos extract_sfmt_bound_cd:
4775 1.1 christos {
4776 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4777 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4778 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
4779 1.1 christos INT f_indir_pc__dword;
4780 1.1 christos UINT f_operand2;
4781 1.1 christos /* Contents of trailing part of insn. */
4782 1.1 christos UINT word_1;
4783 1.1 christos
4784 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4785 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
4786 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4787 1.1 christos
4788 1.1 christos /* Record the fields for the semantic handler. */
4789 1.1 christos FLD (f_operand2) = f_operand2;
4790 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
4791 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_bound_cd", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, (char *) 0));
4792 1.1 christos
4793 1.1 christos #if WITH_PROFILE_MODEL_P
4794 1.1 christos /* Record the fields for profiling. */
4795 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4796 1.1 christos {
4797 1.1 christos FLD (in_Rd) = f_operand2;
4798 1.1 christos FLD (out_Rd) = f_operand2;
4799 1.1 christos }
4800 1.1 christos #endif
4801 1.1 christos #undef FLD
4802 1.1 christos return idesc;
4803 1.1 christos }
4804 1.1 christos
4805 1.1 christos extract_sfmt_scc:
4806 1.1 christos {
4807 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4808 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4809 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
4810 1.1 christos UINT f_operand2;
4811 1.1 christos UINT f_operand1;
4812 1.1 christos
4813 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4814 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4815 1.1 christos
4816 1.1 christos /* Record the fields for the semantic handler. */
4817 1.1 christos FLD (f_operand2) = f_operand2;
4818 1.1 christos FLD (f_operand1) = f_operand1;
4819 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_scc", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
4820 1.1 christos
4821 1.1 christos #if WITH_PROFILE_MODEL_P
4822 1.1 christos /* Record the fields for profiling. */
4823 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4824 1.1 christos {
4825 1.1 christos FLD (out_Rs) = f_operand1;
4826 1.1 christos }
4827 1.1 christos #endif
4828 1.1 christos #undef FLD
4829 1.1 christos return idesc;
4830 1.1 christos }
4831 1.1 christos
4832 1.1 christos extract_sfmt_addoq:
4833 1.1 christos {
4834 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4835 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4836 1.1 christos #define FLD(f) abuf->fields.sfmt_addoq.f
4837 1.1 christos UINT f_operand2;
4838 1.1 christos INT f_s8;
4839 1.1 christos
4840 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4841 1.1 christos f_s8 = EXTRACT_LSB0_SINT (insn, 16, 7, 8);
4842 1.1 christos
4843 1.1 christos /* Record the fields for the semantic handler. */
4844 1.1 christos FLD (f_operand2) = f_operand2;
4845 1.1 christos FLD (f_s8) = f_s8;
4846 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addoq", "f_operand2 0x%x", 'x', f_operand2, "f_s8 0x%x", 'x', f_s8, (char *) 0));
4847 1.1 christos
4848 1.1 christos #if WITH_PROFILE_MODEL_P
4849 1.1 christos /* Record the fields for profiling. */
4850 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4851 1.1 christos {
4852 1.1 christos FLD (in_Rd) = f_operand2;
4853 1.1 christos }
4854 1.1 christos #endif
4855 1.1 christos #undef FLD
4856 1.1 christos return idesc;
4857 1.1 christos }
4858 1.1 christos
4859 1.1 christos extract_sfmt_addo_m_b_m:
4860 1.1 christos {
4861 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4862 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4863 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
4864 1.1 christos UINT f_operand2;
4865 1.1 christos UINT f_memmode;
4866 1.1 christos UINT f_operand1;
4867 1.1 christos
4868 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4869 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
4870 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4871 1.1 christos
4872 1.1 christos /* Record the fields for the semantic handler. */
4873 1.1 christos FLD (f_operand2) = f_operand2;
4874 1.1 christos FLD (f_operand1) = f_operand1;
4875 1.1 christos FLD (f_memmode) = f_memmode;
4876 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_m_b_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
4877 1.1 christos
4878 1.1 christos #if WITH_PROFILE_MODEL_P
4879 1.1 christos /* Record the fields for profiling. */
4880 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4881 1.1 christos {
4882 1.1 christos FLD (in_Rd) = f_operand2;
4883 1.1 christos FLD (in_Rs) = f_operand1;
4884 1.1 christos FLD (out_Rs) = f_operand1;
4885 1.1 christos }
4886 1.1 christos #endif
4887 1.1 christos #undef FLD
4888 1.1 christos return idesc;
4889 1.1 christos }
4890 1.1 christos
4891 1.1 christos extract_sfmt_addo_m_w_m:
4892 1.1 christos {
4893 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4894 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4895 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
4896 1.1 christos UINT f_operand2;
4897 1.1 christos UINT f_memmode;
4898 1.1 christos UINT f_operand1;
4899 1.1 christos
4900 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4901 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
4902 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4903 1.1 christos
4904 1.1 christos /* Record the fields for the semantic handler. */
4905 1.1 christos FLD (f_operand2) = f_operand2;
4906 1.1 christos FLD (f_operand1) = f_operand1;
4907 1.1 christos FLD (f_memmode) = f_memmode;
4908 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_m_w_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
4909 1.1 christos
4910 1.1 christos #if WITH_PROFILE_MODEL_P
4911 1.1 christos /* Record the fields for profiling. */
4912 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4913 1.1 christos {
4914 1.1 christos FLD (in_Rd) = f_operand2;
4915 1.1 christos FLD (in_Rs) = f_operand1;
4916 1.1 christos FLD (out_Rs) = f_operand1;
4917 1.1 christos }
4918 1.1 christos #endif
4919 1.1 christos #undef FLD
4920 1.1 christos return idesc;
4921 1.1 christos }
4922 1.1 christos
4923 1.1 christos extract_sfmt_addo_m_d_m:
4924 1.1 christos {
4925 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4926 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4927 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
4928 1.1 christos UINT f_operand2;
4929 1.1 christos UINT f_memmode;
4930 1.1 christos UINT f_operand1;
4931 1.1 christos
4932 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4933 1.1 christos f_memmode = EXTRACT_LSB0_UINT (insn, 16, 10, 1);
4934 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
4935 1.1 christos
4936 1.1 christos /* Record the fields for the semantic handler. */
4937 1.1 christos FLD (f_operand2) = f_operand2;
4938 1.1 christos FLD (f_operand1) = f_operand1;
4939 1.1 christos FLD (f_memmode) = f_memmode;
4940 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_m_d_m", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, "f_memmode 0x%x", 'x', f_memmode, (char *) 0));
4941 1.1 christos
4942 1.1 christos #if WITH_PROFILE_MODEL_P
4943 1.1 christos /* Record the fields for profiling. */
4944 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4945 1.1 christos {
4946 1.1 christos FLD (in_Rd) = f_operand2;
4947 1.1 christos FLD (in_Rs) = f_operand1;
4948 1.1 christos FLD (out_Rs) = f_operand1;
4949 1.1 christos }
4950 1.1 christos #endif
4951 1.1 christos #undef FLD
4952 1.1 christos return idesc;
4953 1.1 christos }
4954 1.1 christos
4955 1.1 christos extract_sfmt_addo_cb:
4956 1.1 christos {
4957 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4958 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4959 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
4960 1.1 christos INT f_indir_pc__byte;
4961 1.1 christos UINT f_operand2;
4962 1.1 christos /* Contents of trailing part of insn. */
4963 1.1 christos UINT word_1;
4964 1.1 christos
4965 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4966 1.1 christos f_indir_pc__byte = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4967 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4968 1.1 christos
4969 1.1 christos /* Record the fields for the semantic handler. */
4970 1.1 christos FLD (f_operand2) = f_operand2;
4971 1.1 christos FLD (f_indir_pc__byte) = f_indir_pc__byte;
4972 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_cb", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__byte 0x%x", 'x', f_indir_pc__byte, (char *) 0));
4973 1.1 christos
4974 1.1 christos #if WITH_PROFILE_MODEL_P
4975 1.1 christos /* Record the fields for profiling. */
4976 1.1 christos if (PROFILE_MODEL_P (current_cpu))
4977 1.1 christos {
4978 1.1 christos FLD (in_Rd) = f_operand2;
4979 1.1 christos }
4980 1.1 christos #endif
4981 1.1 christos #undef FLD
4982 1.1 christos return idesc;
4983 1.1 christos }
4984 1.1 christos
4985 1.1 christos extract_sfmt_addo_cw:
4986 1.1 christos {
4987 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
4988 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
4989 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
4990 1.1 christos INT f_indir_pc__word;
4991 1.1 christos UINT f_operand2;
4992 1.1 christos /* Contents of trailing part of insn. */
4993 1.1 christos UINT word_1;
4994 1.1 christos
4995 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
4996 1.1 christos f_indir_pc__word = (0|(EXTRACT_LSB0_UINT (word_1, 32, 15, 16) << 0));
4997 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
4998 1.1 christos
4999 1.1 christos /* Record the fields for the semantic handler. */
5000 1.1 christos FLD (f_operand2) = f_operand2;
5001 1.1 christos FLD (f_indir_pc__word) = f_indir_pc__word;
5002 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_cw", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__word 0x%x", 'x', f_indir_pc__word, (char *) 0));
5003 1.1 christos
5004 1.1 christos #if WITH_PROFILE_MODEL_P
5005 1.1 christos /* Record the fields for profiling. */
5006 1.1 christos if (PROFILE_MODEL_P (current_cpu))
5007 1.1 christos {
5008 1.1 christos FLD (in_Rd) = f_operand2;
5009 1.1 christos }
5010 1.1 christos #endif
5011 1.1 christos #undef FLD
5012 1.1 christos return idesc;
5013 1.1 christos }
5014 1.1 christos
5015 1.1 christos extract_sfmt_addo_cd:
5016 1.1 christos {
5017 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
5018 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
5019 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
5020 1.1 christos INT f_indir_pc__dword;
5021 1.1 christos UINT f_operand2;
5022 1.1 christos /* Contents of trailing part of insn. */
5023 1.1 christos UINT word_1;
5024 1.1 christos
5025 1.1 christos word_1 = GETIMEMUSI (current_cpu, pc + 2);
5026 1.1 christos f_indir_pc__dword = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0));
5027 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
5028 1.1 christos
5029 1.1 christos /* Record the fields for the semantic handler. */
5030 1.1 christos FLD (f_operand2) = f_operand2;
5031 1.1 christos FLD (f_indir_pc__dword) = f_indir_pc__dword;
5032 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addo_cd", "f_operand2 0x%x", 'x', f_operand2, "f_indir_pc__dword 0x%x", 'x', f_indir_pc__dword, (char *) 0));
5033 1.1 christos
5034 1.1 christos #if WITH_PROFILE_MODEL_P
5035 1.1 christos /* Record the fields for profiling. */
5036 1.1 christos if (PROFILE_MODEL_P (current_cpu))
5037 1.1 christos {
5038 1.1 christos FLD (in_Rd) = f_operand2;
5039 1.1 christos }
5040 1.1 christos #endif
5041 1.1 christos #undef FLD
5042 1.1 christos return idesc;
5043 1.1 christos }
5044 1.1 christos
5045 1.1 christos extract_sfmt_addi_acr_b_r:
5046 1.1 christos {
5047 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
5048 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
5049 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
5050 1.1 christos UINT f_operand2;
5051 1.1 christos UINT f_operand1;
5052 1.1 christos
5053 1.1 christos f_operand2 = EXTRACT_LSB0_UINT (insn, 16, 15, 4);
5054 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
5055 1.1 christos
5056 1.1 christos /* Record the fields for the semantic handler. */
5057 1.1 christos FLD (f_operand2) = f_operand2;
5058 1.1 christos FLD (f_operand1) = f_operand1;
5059 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_addi_acr_b_r", "f_operand2 0x%x", 'x', f_operand2, "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
5060 1.1 christos
5061 1.1 christos #if WITH_PROFILE_MODEL_P
5062 1.1 christos /* Record the fields for profiling. */
5063 1.1 christos if (PROFILE_MODEL_P (current_cpu))
5064 1.1 christos {
5065 1.1 christos FLD (in_Rd) = f_operand2;
5066 1.1 christos FLD (in_Rs) = f_operand1;
5067 1.1 christos }
5068 1.1 christos #endif
5069 1.1 christos #undef FLD
5070 1.1 christos return idesc;
5071 1.1 christos }
5072 1.1 christos
5073 1.1 christos extract_sfmt_fidxi:
5074 1.1 christos {
5075 1.1 christos const IDESC *idesc = &crisv32f_insn_data[itype];
5076 1.11 christos CGEN_INSN_WORD insn ATTRIBUTE_UNUSED = base_insn;
5077 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
5078 1.1 christos UINT f_operand1;
5079 1.1 christos
5080 1.1 christos f_operand1 = EXTRACT_LSB0_UINT (insn, 16, 3, 4);
5081 1.1 christos
5082 1.1 christos /* Record the fields for the semantic handler. */
5083 1.1 christos FLD (f_operand1) = f_operand1;
5084 1.5 christos CGEN_TRACE_EXTRACT (current_cpu, abuf, (current_cpu, pc, "sfmt_fidxi", "f_operand1 0x%x", 'x', f_operand1, (char *) 0));
5085 1.1 christos
5086 1.1 christos #if WITH_PROFILE_MODEL_P
5087 1.1 christos /* Record the fields for profiling. */
5088 1.1 christos if (PROFILE_MODEL_P (current_cpu))
5089 1.1 christos {
5090 1.1 christos FLD (in_Rs) = f_operand1;
5091 1.1 christos }
5092 1.1 christos #endif
5093 1.1 christos #undef FLD
5094 1.1 christos return idesc;
5095 1.1 christos }
5096 1.1 christos
5097 1.1 christos }
5098