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