semcrisv32f-switch.c revision 1.11 1 1.1 christos /* Simulator instruction semantics for crisv32f.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.11 christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.11 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.11 christos 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22 1.1 christos
23 1.1 christos */
24 1.1 christos
25 1.1 christos #ifdef DEFINE_LABELS
26 1.1 christos
27 1.1 christos /* The labels have the case they have because the enum of insn types
28 1.1 christos is all uppercase and in the non-stdc case the insn symbol is built
29 1.1 christos into the enum name. */
30 1.1 christos
31 1.1 christos static struct {
32 1.1 christos int index;
33 1.1 christos void *label;
34 1.1 christos } labels[] = {
35 1.1 christos { CRISV32F_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
36 1.1 christos { CRISV32F_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
37 1.1 christos { CRISV32F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
38 1.1 christos { CRISV32F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
39 1.1 christos { CRISV32F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
40 1.1 christos { CRISV32F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
41 1.1 christos { CRISV32F_INSN_MOVE_B_R, && case_sem_INSN_MOVE_B_R },
42 1.1 christos { CRISV32F_INSN_MOVE_W_R, && case_sem_INSN_MOVE_W_R },
43 1.1 christos { CRISV32F_INSN_MOVE_D_R, && case_sem_INSN_MOVE_D_R },
44 1.1 christos { CRISV32F_INSN_MOVEQ, && case_sem_INSN_MOVEQ },
45 1.1 christos { CRISV32F_INSN_MOVS_B_R, && case_sem_INSN_MOVS_B_R },
46 1.1 christos { CRISV32F_INSN_MOVS_W_R, && case_sem_INSN_MOVS_W_R },
47 1.1 christos { CRISV32F_INSN_MOVU_B_R, && case_sem_INSN_MOVU_B_R },
48 1.1 christos { CRISV32F_INSN_MOVU_W_R, && case_sem_INSN_MOVU_W_R },
49 1.1 christos { CRISV32F_INSN_MOVECBR, && case_sem_INSN_MOVECBR },
50 1.1 christos { CRISV32F_INSN_MOVECWR, && case_sem_INSN_MOVECWR },
51 1.1 christos { CRISV32F_INSN_MOVECDR, && case_sem_INSN_MOVECDR },
52 1.1 christos { CRISV32F_INSN_MOVSCBR, && case_sem_INSN_MOVSCBR },
53 1.1 christos { CRISV32F_INSN_MOVSCWR, && case_sem_INSN_MOVSCWR },
54 1.1 christos { CRISV32F_INSN_MOVUCBR, && case_sem_INSN_MOVUCBR },
55 1.1 christos { CRISV32F_INSN_MOVUCWR, && case_sem_INSN_MOVUCWR },
56 1.1 christos { CRISV32F_INSN_ADDQ, && case_sem_INSN_ADDQ },
57 1.1 christos { CRISV32F_INSN_SUBQ, && case_sem_INSN_SUBQ },
58 1.1 christos { CRISV32F_INSN_CMP_R_B_R, && case_sem_INSN_CMP_R_B_R },
59 1.1 christos { CRISV32F_INSN_CMP_R_W_R, && case_sem_INSN_CMP_R_W_R },
60 1.1 christos { CRISV32F_INSN_CMP_R_D_R, && case_sem_INSN_CMP_R_D_R },
61 1.1 christos { CRISV32F_INSN_CMP_M_B_M, && case_sem_INSN_CMP_M_B_M },
62 1.1 christos { CRISV32F_INSN_CMP_M_W_M, && case_sem_INSN_CMP_M_W_M },
63 1.1 christos { CRISV32F_INSN_CMP_M_D_M, && case_sem_INSN_CMP_M_D_M },
64 1.1 christos { CRISV32F_INSN_CMPCBR, && case_sem_INSN_CMPCBR },
65 1.1 christos { CRISV32F_INSN_CMPCWR, && case_sem_INSN_CMPCWR },
66 1.1 christos { CRISV32F_INSN_CMPCDR, && case_sem_INSN_CMPCDR },
67 1.1 christos { CRISV32F_INSN_CMPQ, && case_sem_INSN_CMPQ },
68 1.1 christos { CRISV32F_INSN_CMPS_M_B_M, && case_sem_INSN_CMPS_M_B_M },
69 1.1 christos { CRISV32F_INSN_CMPS_M_W_M, && case_sem_INSN_CMPS_M_W_M },
70 1.1 christos { CRISV32F_INSN_CMPSCBR, && case_sem_INSN_CMPSCBR },
71 1.1 christos { CRISV32F_INSN_CMPSCWR, && case_sem_INSN_CMPSCWR },
72 1.1 christos { CRISV32F_INSN_CMPU_M_B_M, && case_sem_INSN_CMPU_M_B_M },
73 1.1 christos { CRISV32F_INSN_CMPU_M_W_M, && case_sem_INSN_CMPU_M_W_M },
74 1.1 christos { CRISV32F_INSN_CMPUCBR, && case_sem_INSN_CMPUCBR },
75 1.1 christos { CRISV32F_INSN_CMPUCWR, && case_sem_INSN_CMPUCWR },
76 1.1 christos { CRISV32F_INSN_MOVE_M_B_M, && case_sem_INSN_MOVE_M_B_M },
77 1.1 christos { CRISV32F_INSN_MOVE_M_W_M, && case_sem_INSN_MOVE_M_W_M },
78 1.1 christos { CRISV32F_INSN_MOVE_M_D_M, && case_sem_INSN_MOVE_M_D_M },
79 1.1 christos { CRISV32F_INSN_MOVS_M_B_M, && case_sem_INSN_MOVS_M_B_M },
80 1.1 christos { CRISV32F_INSN_MOVS_M_W_M, && case_sem_INSN_MOVS_M_W_M },
81 1.1 christos { CRISV32F_INSN_MOVU_M_B_M, && case_sem_INSN_MOVU_M_B_M },
82 1.1 christos { CRISV32F_INSN_MOVU_M_W_M, && case_sem_INSN_MOVU_M_W_M },
83 1.1 christos { CRISV32F_INSN_MOVE_R_SPRV32, && case_sem_INSN_MOVE_R_SPRV32 },
84 1.1 christos { CRISV32F_INSN_MOVE_SPR_RV32, && case_sem_INSN_MOVE_SPR_RV32 },
85 1.1 christos { CRISV32F_INSN_MOVE_M_SPRV32, && case_sem_INSN_MOVE_M_SPRV32 },
86 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P2, && case_sem_INSN_MOVE_C_SPRV32_P2 },
87 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P3, && case_sem_INSN_MOVE_C_SPRV32_P3 },
88 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P5, && case_sem_INSN_MOVE_C_SPRV32_P5 },
89 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P6, && case_sem_INSN_MOVE_C_SPRV32_P6 },
90 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P7, && case_sem_INSN_MOVE_C_SPRV32_P7 },
91 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P9, && case_sem_INSN_MOVE_C_SPRV32_P9 },
92 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P10, && case_sem_INSN_MOVE_C_SPRV32_P10 },
93 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P11, && case_sem_INSN_MOVE_C_SPRV32_P11 },
94 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P12, && case_sem_INSN_MOVE_C_SPRV32_P12 },
95 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P13, && case_sem_INSN_MOVE_C_SPRV32_P13 },
96 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P14, && case_sem_INSN_MOVE_C_SPRV32_P14 },
97 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P15, && case_sem_INSN_MOVE_C_SPRV32_P15 },
98 1.1 christos { CRISV32F_INSN_MOVE_SPR_MV32, && case_sem_INSN_MOVE_SPR_MV32 },
99 1.1 christos { CRISV32F_INSN_MOVE_SS_R, && case_sem_INSN_MOVE_SS_R },
100 1.1 christos { CRISV32F_INSN_MOVE_R_SS, && case_sem_INSN_MOVE_R_SS },
101 1.1 christos { CRISV32F_INSN_MOVEM_R_M_V32, && case_sem_INSN_MOVEM_R_M_V32 },
102 1.1 christos { CRISV32F_INSN_MOVEM_M_R_V32, && case_sem_INSN_MOVEM_M_R_V32 },
103 1.1 christos { CRISV32F_INSN_ADD_B_R, && case_sem_INSN_ADD_B_R },
104 1.1 christos { CRISV32F_INSN_ADD_W_R, && case_sem_INSN_ADD_W_R },
105 1.1 christos { CRISV32F_INSN_ADD_D_R, && case_sem_INSN_ADD_D_R },
106 1.1 christos { CRISV32F_INSN_ADD_M_B_M, && case_sem_INSN_ADD_M_B_M },
107 1.1 christos { CRISV32F_INSN_ADD_M_W_M, && case_sem_INSN_ADD_M_W_M },
108 1.1 christos { CRISV32F_INSN_ADD_M_D_M, && case_sem_INSN_ADD_M_D_M },
109 1.1 christos { CRISV32F_INSN_ADDCBR, && case_sem_INSN_ADDCBR },
110 1.1 christos { CRISV32F_INSN_ADDCWR, && case_sem_INSN_ADDCWR },
111 1.1 christos { CRISV32F_INSN_ADDCDR, && case_sem_INSN_ADDCDR },
112 1.1 christos { CRISV32F_INSN_ADDS_B_R, && case_sem_INSN_ADDS_B_R },
113 1.1 christos { CRISV32F_INSN_ADDS_W_R, && case_sem_INSN_ADDS_W_R },
114 1.1 christos { CRISV32F_INSN_ADDS_M_B_M, && case_sem_INSN_ADDS_M_B_M },
115 1.1 christos { CRISV32F_INSN_ADDS_M_W_M, && case_sem_INSN_ADDS_M_W_M },
116 1.1 christos { CRISV32F_INSN_ADDSCBR, && case_sem_INSN_ADDSCBR },
117 1.1 christos { CRISV32F_INSN_ADDSCWR, && case_sem_INSN_ADDSCWR },
118 1.1 christos { CRISV32F_INSN_ADDU_B_R, && case_sem_INSN_ADDU_B_R },
119 1.1 christos { CRISV32F_INSN_ADDU_W_R, && case_sem_INSN_ADDU_W_R },
120 1.1 christos { CRISV32F_INSN_ADDU_M_B_M, && case_sem_INSN_ADDU_M_B_M },
121 1.1 christos { CRISV32F_INSN_ADDU_M_W_M, && case_sem_INSN_ADDU_M_W_M },
122 1.1 christos { CRISV32F_INSN_ADDUCBR, && case_sem_INSN_ADDUCBR },
123 1.1 christos { CRISV32F_INSN_ADDUCWR, && case_sem_INSN_ADDUCWR },
124 1.1 christos { CRISV32F_INSN_SUB_B_R, && case_sem_INSN_SUB_B_R },
125 1.1 christos { CRISV32F_INSN_SUB_W_R, && case_sem_INSN_SUB_W_R },
126 1.1 christos { CRISV32F_INSN_SUB_D_R, && case_sem_INSN_SUB_D_R },
127 1.1 christos { CRISV32F_INSN_SUB_M_B_M, && case_sem_INSN_SUB_M_B_M },
128 1.1 christos { CRISV32F_INSN_SUB_M_W_M, && case_sem_INSN_SUB_M_W_M },
129 1.1 christos { CRISV32F_INSN_SUB_M_D_M, && case_sem_INSN_SUB_M_D_M },
130 1.1 christos { CRISV32F_INSN_SUBCBR, && case_sem_INSN_SUBCBR },
131 1.1 christos { CRISV32F_INSN_SUBCWR, && case_sem_INSN_SUBCWR },
132 1.1 christos { CRISV32F_INSN_SUBCDR, && case_sem_INSN_SUBCDR },
133 1.1 christos { CRISV32F_INSN_SUBS_B_R, && case_sem_INSN_SUBS_B_R },
134 1.1 christos { CRISV32F_INSN_SUBS_W_R, && case_sem_INSN_SUBS_W_R },
135 1.1 christos { CRISV32F_INSN_SUBS_M_B_M, && case_sem_INSN_SUBS_M_B_M },
136 1.1 christos { CRISV32F_INSN_SUBS_M_W_M, && case_sem_INSN_SUBS_M_W_M },
137 1.1 christos { CRISV32F_INSN_SUBSCBR, && case_sem_INSN_SUBSCBR },
138 1.1 christos { CRISV32F_INSN_SUBSCWR, && case_sem_INSN_SUBSCWR },
139 1.1 christos { CRISV32F_INSN_SUBU_B_R, && case_sem_INSN_SUBU_B_R },
140 1.1 christos { CRISV32F_INSN_SUBU_W_R, && case_sem_INSN_SUBU_W_R },
141 1.1 christos { CRISV32F_INSN_SUBU_M_B_M, && case_sem_INSN_SUBU_M_B_M },
142 1.1 christos { CRISV32F_INSN_SUBU_M_W_M, && case_sem_INSN_SUBU_M_W_M },
143 1.1 christos { CRISV32F_INSN_SUBUCBR, && case_sem_INSN_SUBUCBR },
144 1.1 christos { CRISV32F_INSN_SUBUCWR, && case_sem_INSN_SUBUCWR },
145 1.1 christos { CRISV32F_INSN_ADDC_R, && case_sem_INSN_ADDC_R },
146 1.1 christos { CRISV32F_INSN_ADDC_M, && case_sem_INSN_ADDC_M },
147 1.1 christos { CRISV32F_INSN_ADDC_C, && case_sem_INSN_ADDC_C },
148 1.1 christos { CRISV32F_INSN_LAPC_D, && case_sem_INSN_LAPC_D },
149 1.1 christos { CRISV32F_INSN_LAPCQ, && case_sem_INSN_LAPCQ },
150 1.1 christos { CRISV32F_INSN_ADDI_B_R, && case_sem_INSN_ADDI_B_R },
151 1.1 christos { CRISV32F_INSN_ADDI_W_R, && case_sem_INSN_ADDI_W_R },
152 1.1 christos { CRISV32F_INSN_ADDI_D_R, && case_sem_INSN_ADDI_D_R },
153 1.1 christos { CRISV32F_INSN_NEG_B_R, && case_sem_INSN_NEG_B_R },
154 1.1 christos { CRISV32F_INSN_NEG_W_R, && case_sem_INSN_NEG_W_R },
155 1.1 christos { CRISV32F_INSN_NEG_D_R, && case_sem_INSN_NEG_D_R },
156 1.1 christos { CRISV32F_INSN_TEST_M_B_M, && case_sem_INSN_TEST_M_B_M },
157 1.1 christos { CRISV32F_INSN_TEST_M_W_M, && case_sem_INSN_TEST_M_W_M },
158 1.1 christos { CRISV32F_INSN_TEST_M_D_M, && case_sem_INSN_TEST_M_D_M },
159 1.1 christos { CRISV32F_INSN_MOVE_R_M_B_M, && case_sem_INSN_MOVE_R_M_B_M },
160 1.1 christos { CRISV32F_INSN_MOVE_R_M_W_M, && case_sem_INSN_MOVE_R_M_W_M },
161 1.1 christos { CRISV32F_INSN_MOVE_R_M_D_M, && case_sem_INSN_MOVE_R_M_D_M },
162 1.1 christos { CRISV32F_INSN_MULS_B, && case_sem_INSN_MULS_B },
163 1.1 christos { CRISV32F_INSN_MULS_W, && case_sem_INSN_MULS_W },
164 1.1 christos { CRISV32F_INSN_MULS_D, && case_sem_INSN_MULS_D },
165 1.1 christos { CRISV32F_INSN_MULU_B, && case_sem_INSN_MULU_B },
166 1.1 christos { CRISV32F_INSN_MULU_W, && case_sem_INSN_MULU_W },
167 1.1 christos { CRISV32F_INSN_MULU_D, && case_sem_INSN_MULU_D },
168 1.1 christos { CRISV32F_INSN_MCP, && case_sem_INSN_MCP },
169 1.1 christos { CRISV32F_INSN_DSTEP, && case_sem_INSN_DSTEP },
170 1.1 christos { CRISV32F_INSN_ABS, && case_sem_INSN_ABS },
171 1.1 christos { CRISV32F_INSN_AND_B_R, && case_sem_INSN_AND_B_R },
172 1.1 christos { CRISV32F_INSN_AND_W_R, && case_sem_INSN_AND_W_R },
173 1.1 christos { CRISV32F_INSN_AND_D_R, && case_sem_INSN_AND_D_R },
174 1.1 christos { CRISV32F_INSN_AND_M_B_M, && case_sem_INSN_AND_M_B_M },
175 1.1 christos { CRISV32F_INSN_AND_M_W_M, && case_sem_INSN_AND_M_W_M },
176 1.1 christos { CRISV32F_INSN_AND_M_D_M, && case_sem_INSN_AND_M_D_M },
177 1.1 christos { CRISV32F_INSN_ANDCBR, && case_sem_INSN_ANDCBR },
178 1.1 christos { CRISV32F_INSN_ANDCWR, && case_sem_INSN_ANDCWR },
179 1.1 christos { CRISV32F_INSN_ANDCDR, && case_sem_INSN_ANDCDR },
180 1.1 christos { CRISV32F_INSN_ANDQ, && case_sem_INSN_ANDQ },
181 1.1 christos { CRISV32F_INSN_ORR_B_R, && case_sem_INSN_ORR_B_R },
182 1.1 christos { CRISV32F_INSN_ORR_W_R, && case_sem_INSN_ORR_W_R },
183 1.1 christos { CRISV32F_INSN_ORR_D_R, && case_sem_INSN_ORR_D_R },
184 1.1 christos { CRISV32F_INSN_OR_M_B_M, && case_sem_INSN_OR_M_B_M },
185 1.1 christos { CRISV32F_INSN_OR_M_W_M, && case_sem_INSN_OR_M_W_M },
186 1.1 christos { CRISV32F_INSN_OR_M_D_M, && case_sem_INSN_OR_M_D_M },
187 1.1 christos { CRISV32F_INSN_ORCBR, && case_sem_INSN_ORCBR },
188 1.1 christos { CRISV32F_INSN_ORCWR, && case_sem_INSN_ORCWR },
189 1.1 christos { CRISV32F_INSN_ORCDR, && case_sem_INSN_ORCDR },
190 1.1 christos { CRISV32F_INSN_ORQ, && case_sem_INSN_ORQ },
191 1.1 christos { CRISV32F_INSN_XOR, && case_sem_INSN_XOR },
192 1.1 christos { CRISV32F_INSN_SWAP, && case_sem_INSN_SWAP },
193 1.1 christos { CRISV32F_INSN_ASRR_B_R, && case_sem_INSN_ASRR_B_R },
194 1.1 christos { CRISV32F_INSN_ASRR_W_R, && case_sem_INSN_ASRR_W_R },
195 1.1 christos { CRISV32F_INSN_ASRR_D_R, && case_sem_INSN_ASRR_D_R },
196 1.1 christos { CRISV32F_INSN_ASRQ, && case_sem_INSN_ASRQ },
197 1.1 christos { CRISV32F_INSN_LSRR_B_R, && case_sem_INSN_LSRR_B_R },
198 1.1 christos { CRISV32F_INSN_LSRR_W_R, && case_sem_INSN_LSRR_W_R },
199 1.1 christos { CRISV32F_INSN_LSRR_D_R, && case_sem_INSN_LSRR_D_R },
200 1.1 christos { CRISV32F_INSN_LSRQ, && case_sem_INSN_LSRQ },
201 1.1 christos { CRISV32F_INSN_LSLR_B_R, && case_sem_INSN_LSLR_B_R },
202 1.1 christos { CRISV32F_INSN_LSLR_W_R, && case_sem_INSN_LSLR_W_R },
203 1.1 christos { CRISV32F_INSN_LSLR_D_R, && case_sem_INSN_LSLR_D_R },
204 1.1 christos { CRISV32F_INSN_LSLQ, && case_sem_INSN_LSLQ },
205 1.1 christos { CRISV32F_INSN_BTST, && case_sem_INSN_BTST },
206 1.1 christos { CRISV32F_INSN_BTSTQ, && case_sem_INSN_BTSTQ },
207 1.1 christos { CRISV32F_INSN_SETF, && case_sem_INSN_SETF },
208 1.1 christos { CRISV32F_INSN_CLEARF, && case_sem_INSN_CLEARF },
209 1.1 christos { CRISV32F_INSN_RFE, && case_sem_INSN_RFE },
210 1.1 christos { CRISV32F_INSN_SFE, && case_sem_INSN_SFE },
211 1.1 christos { CRISV32F_INSN_RFG, && case_sem_INSN_RFG },
212 1.1 christos { CRISV32F_INSN_RFN, && case_sem_INSN_RFN },
213 1.1 christos { CRISV32F_INSN_HALT, && case_sem_INSN_HALT },
214 1.1 christos { CRISV32F_INSN_BCC_B, && case_sem_INSN_BCC_B },
215 1.1 christos { CRISV32F_INSN_BA_B, && case_sem_INSN_BA_B },
216 1.1 christos { CRISV32F_INSN_BCC_W, && case_sem_INSN_BCC_W },
217 1.1 christos { CRISV32F_INSN_BA_W, && case_sem_INSN_BA_W },
218 1.1 christos { CRISV32F_INSN_JAS_R, && case_sem_INSN_JAS_R },
219 1.1 christos { CRISV32F_INSN_JAS_C, && case_sem_INSN_JAS_C },
220 1.1 christos { CRISV32F_INSN_JUMP_P, && case_sem_INSN_JUMP_P },
221 1.1 christos { CRISV32F_INSN_BAS_C, && case_sem_INSN_BAS_C },
222 1.1 christos { CRISV32F_INSN_JASC_R, && case_sem_INSN_JASC_R },
223 1.1 christos { CRISV32F_INSN_JASC_C, && case_sem_INSN_JASC_C },
224 1.1 christos { CRISV32F_INSN_BASC_C, && case_sem_INSN_BASC_C },
225 1.1 christos { CRISV32F_INSN_BREAK, && case_sem_INSN_BREAK },
226 1.1 christos { CRISV32F_INSN_BOUND_R_B_R, && case_sem_INSN_BOUND_R_B_R },
227 1.1 christos { CRISV32F_INSN_BOUND_R_W_R, && case_sem_INSN_BOUND_R_W_R },
228 1.1 christos { CRISV32F_INSN_BOUND_R_D_R, && case_sem_INSN_BOUND_R_D_R },
229 1.1 christos { CRISV32F_INSN_BOUND_CB, && case_sem_INSN_BOUND_CB },
230 1.1 christos { CRISV32F_INSN_BOUND_CW, && case_sem_INSN_BOUND_CW },
231 1.1 christos { CRISV32F_INSN_BOUND_CD, && case_sem_INSN_BOUND_CD },
232 1.1 christos { CRISV32F_INSN_SCC, && case_sem_INSN_SCC },
233 1.1 christos { CRISV32F_INSN_LZ, && case_sem_INSN_LZ },
234 1.1 christos { CRISV32F_INSN_ADDOQ, && case_sem_INSN_ADDOQ },
235 1.1 christos { CRISV32F_INSN_ADDO_M_B_M, && case_sem_INSN_ADDO_M_B_M },
236 1.1 christos { CRISV32F_INSN_ADDO_M_W_M, && case_sem_INSN_ADDO_M_W_M },
237 1.1 christos { CRISV32F_INSN_ADDO_M_D_M, && case_sem_INSN_ADDO_M_D_M },
238 1.1 christos { CRISV32F_INSN_ADDO_CB, && case_sem_INSN_ADDO_CB },
239 1.1 christos { CRISV32F_INSN_ADDO_CW, && case_sem_INSN_ADDO_CW },
240 1.1 christos { CRISV32F_INSN_ADDO_CD, && case_sem_INSN_ADDO_CD },
241 1.1 christos { CRISV32F_INSN_ADDI_ACR_B_R, && case_sem_INSN_ADDI_ACR_B_R },
242 1.1 christos { CRISV32F_INSN_ADDI_ACR_W_R, && case_sem_INSN_ADDI_ACR_W_R },
243 1.1 christos { CRISV32F_INSN_ADDI_ACR_D_R, && case_sem_INSN_ADDI_ACR_D_R },
244 1.1 christos { CRISV32F_INSN_FIDXI, && case_sem_INSN_FIDXI },
245 1.1 christos { CRISV32F_INSN_FTAGI, && case_sem_INSN_FTAGI },
246 1.1 christos { CRISV32F_INSN_FIDXD, && case_sem_INSN_FIDXD },
247 1.1 christos { CRISV32F_INSN_FTAGD, && case_sem_INSN_FTAGD },
248 1.1 christos { 0, 0 }
249 1.1 christos };
250 1.1 christos int i;
251 1.1 christos
252 1.1 christos for (i = 0; labels[i].label != 0; ++i)
253 1.1 christos {
254 1.1 christos #if FAST_P
255 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
256 1.1 christos #else
257 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
258 1.1 christos #endif
259 1.1 christos }
260 1.1 christos
261 1.1 christos #undef DEFINE_LABELS
262 1.1 christos #endif /* DEFINE_LABELS */
263 1.1 christos
264 1.1 christos #ifdef DEFINE_SWITCH
265 1.1 christos
266 1.1 christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
267 1.1 christos off frills like tracing and profiling. */
268 1.5 christos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
269 1.1 christos that can cause it to be optimized out. Another way would be to emit
270 1.1 christos special handlers into the instruction "stream". */
271 1.1 christos
272 1.1 christos #if FAST_P
273 1.5 christos #undef CGEN_TRACE_RESULT
274 1.5 christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
275 1.1 christos #endif
276 1.1 christos
277 1.1 christos #undef GET_ATTR
278 1.1 christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
279 1.1 christos
280 1.1 christos {
281 1.1 christos
282 1.1 christos #if WITH_SCACHE_PBB
283 1.1 christos
284 1.1 christos /* Branch to next handler without going around main loop. */
285 1.1 christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
286 1.1 christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
287 1.1 christos
288 1.1 christos #else /* ! WITH_SCACHE_PBB */
289 1.1 christos
290 1.1 christos #define NEXT(vpc) BREAK (sem)
291 1.1 christos #ifdef __GNUC__
292 1.1 christos #if FAST_P
293 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
294 1.1 christos #else
295 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
296 1.1 christos #endif
297 1.1 christos #else
298 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
299 1.1 christos #endif
300 1.1 christos
301 1.1 christos #endif /* ! WITH_SCACHE_PBB */
302 1.1 christos
303 1.1 christos {
304 1.1 christos
305 1.1 christos CASE (sem, INSN_X_INVALID) : /* --invalid-- */
306 1.1 christos {
307 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
308 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
309 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
310 1.1 christos int UNUSED written = 0;
311 1.1 christos IADDR UNUSED pc = abuf->addr;
312 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
313 1.1 christos
314 1.1 christos {
315 1.1 christos /* Update the recorded pc in the cpu state struct.
316 1.1 christos Only necessary for WITH_SCACHE case, but to avoid the
317 1.1 christos conditional compilation .... */
318 1.1 christos SET_H_PC (pc);
319 1.1 christos /* Virtual insns have zero size. Overwrite vpc with address of next insn
320 1.1 christos using the default-insn-bitsize spec. When executing insns in parallel
321 1.1 christos we may want to queue the fault and continue execution. */
322 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
323 1.1 christos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
324 1.1 christos }
325 1.1 christos
326 1.1 christos #undef FLD
327 1.1 christos }
328 1.1 christos NEXT (vpc);
329 1.1 christos
330 1.1 christos CASE (sem, INSN_X_AFTER) : /* --after-- */
331 1.1 christos {
332 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
333 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
334 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
335 1.1 christos int UNUSED written = 0;
336 1.1 christos IADDR UNUSED pc = abuf->addr;
337 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
338 1.1 christos
339 1.1 christos {
340 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
341 1.1 christos crisv32f_pbb_after (current_cpu, sem_arg);
342 1.1 christos #endif
343 1.1 christos }
344 1.1 christos
345 1.1 christos #undef FLD
346 1.1 christos }
347 1.1 christos NEXT (vpc);
348 1.1 christos
349 1.1 christos CASE (sem, INSN_X_BEFORE) : /* --before-- */
350 1.1 christos {
351 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
352 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
353 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
354 1.1 christos int UNUSED written = 0;
355 1.1 christos IADDR UNUSED pc = abuf->addr;
356 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
357 1.1 christos
358 1.1 christos {
359 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
360 1.1 christos crisv32f_pbb_before (current_cpu, sem_arg);
361 1.1 christos #endif
362 1.1 christos }
363 1.1 christos
364 1.1 christos #undef FLD
365 1.1 christos }
366 1.1 christos NEXT (vpc);
367 1.1 christos
368 1.1 christos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
369 1.1 christos {
370 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
371 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
372 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
373 1.1 christos int UNUSED written = 0;
374 1.1 christos IADDR UNUSED pc = abuf->addr;
375 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
376 1.1 christos
377 1.1 christos {
378 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
379 1.1 christos #ifdef DEFINE_SWITCH
380 1.1 christos vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg,
381 1.1 christos pbb_br_type, pbb_br_npc);
382 1.1 christos BREAK (sem);
383 1.1 christos #else
384 1.1 christos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
385 1.1 christos vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg,
386 1.1 christos CPU_PBB_BR_TYPE (current_cpu),
387 1.1 christos CPU_PBB_BR_NPC (current_cpu));
388 1.1 christos #endif
389 1.1 christos #endif
390 1.1 christos }
391 1.1 christos
392 1.1 christos #undef FLD
393 1.1 christos }
394 1.1 christos NEXT (vpc);
395 1.1 christos
396 1.1 christos CASE (sem, INSN_X_CHAIN) : /* --chain-- */
397 1.1 christos {
398 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
399 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
400 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
401 1.1 christos int UNUSED written = 0;
402 1.1 christos IADDR UNUSED pc = abuf->addr;
403 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
404 1.1 christos
405 1.1 christos {
406 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
407 1.1 christos vpc = crisv32f_pbb_chain (current_cpu, sem_arg);
408 1.1 christos #ifdef DEFINE_SWITCH
409 1.1 christos BREAK (sem);
410 1.1 christos #endif
411 1.1 christos #endif
412 1.1 christos }
413 1.1 christos
414 1.1 christos #undef FLD
415 1.1 christos }
416 1.1 christos NEXT (vpc);
417 1.1 christos
418 1.1 christos CASE (sem, INSN_X_BEGIN) : /* --begin-- */
419 1.1 christos {
420 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
421 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
422 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
423 1.1 christos int UNUSED written = 0;
424 1.1 christos IADDR UNUSED pc = abuf->addr;
425 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
426 1.1 christos
427 1.1 christos {
428 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
429 1.1 christos #if defined DEFINE_SWITCH || defined FAST_P
430 1.1 christos /* In the switch case FAST_P is a constant, allowing several optimizations
431 1.1 christos in any called inline functions. */
432 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, FAST_P);
433 1.1 christos #else
434 1.1 christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
435 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
436 1.1 christos #else
437 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, 0);
438 1.1 christos #endif
439 1.1 christos #endif
440 1.1 christos #endif
441 1.1 christos }
442 1.1 christos
443 1.1 christos #undef FLD
444 1.1 christos }
445 1.1 christos NEXT (vpc);
446 1.1 christos
447 1.1 christos CASE (sem, INSN_MOVE_B_R) : /* move.b move.m ${Rs},${Rd} */
448 1.1 christos {
449 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
450 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
451 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
452 1.1 christos int UNUSED written = 0;
453 1.1 christos IADDR UNUSED pc = abuf->addr;
454 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
455 1.1 christos
456 1.1 christos {
457 1.1 christos QI tmp_newval;
458 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
459 1.1 christos {
460 1.1 christos SI tmp_oldregval;
461 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
462 1.1 christos {
463 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
464 1.1 christos SET_H_GR (FLD (f_operand2), opval);
465 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
466 1.1 christos }
467 1.1 christos }
468 1.1 christos {
469 1.1 christos {
470 1.1 christos BI opval = LTQI (tmp_newval, 0);
471 1.1 christos CPU (h_nbit) = opval;
472 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
473 1.1 christos }
474 1.1 christos {
475 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
476 1.1 christos CPU (h_zbit) = opval;
477 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
478 1.1 christos }
479 1.1 christos SET_H_CBIT_MOVE (0);
480 1.1 christos SET_H_VBIT_MOVE (0);
481 1.1 christos {
482 1.1 christos {
483 1.1 christos BI opval = 0;
484 1.1 christos CPU (h_xbit) = opval;
485 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
486 1.1 christos }
487 1.1 christos {
488 1.1 christos BI opval = 0;
489 1.1 christos SET_H_INSN_PREFIXED_P (opval);
490 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
491 1.1 christos }
492 1.1 christos }
493 1.1 christos }
494 1.1 christos }
495 1.1 christos
496 1.1 christos #undef FLD
497 1.1 christos }
498 1.1 christos NEXT (vpc);
499 1.1 christos
500 1.1 christos CASE (sem, INSN_MOVE_W_R) : /* move.w move.m ${Rs},${Rd} */
501 1.1 christos {
502 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
503 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
504 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
505 1.1 christos int UNUSED written = 0;
506 1.1 christos IADDR UNUSED pc = abuf->addr;
507 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
508 1.1 christos
509 1.1 christos {
510 1.1 christos HI tmp_newval;
511 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
512 1.1 christos {
513 1.1 christos SI tmp_oldregval;
514 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
515 1.1 christos {
516 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
517 1.1 christos SET_H_GR (FLD (f_operand2), opval);
518 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
519 1.1 christos }
520 1.1 christos }
521 1.1 christos {
522 1.1 christos {
523 1.1 christos BI opval = LTHI (tmp_newval, 0);
524 1.1 christos CPU (h_nbit) = opval;
525 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
526 1.1 christos }
527 1.1 christos {
528 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
529 1.1 christos CPU (h_zbit) = opval;
530 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
531 1.1 christos }
532 1.1 christos SET_H_CBIT_MOVE (0);
533 1.1 christos SET_H_VBIT_MOVE (0);
534 1.1 christos {
535 1.1 christos {
536 1.1 christos BI opval = 0;
537 1.1 christos CPU (h_xbit) = opval;
538 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
539 1.1 christos }
540 1.1 christos {
541 1.1 christos BI opval = 0;
542 1.1 christos SET_H_INSN_PREFIXED_P (opval);
543 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
544 1.1 christos }
545 1.1 christos }
546 1.1 christos }
547 1.1 christos }
548 1.1 christos
549 1.1 christos #undef FLD
550 1.1 christos }
551 1.1 christos NEXT (vpc);
552 1.1 christos
553 1.1 christos CASE (sem, INSN_MOVE_D_R) : /* move.d move.m ${Rs},${Rd} */
554 1.1 christos {
555 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
556 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
557 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
558 1.1 christos int UNUSED written = 0;
559 1.1 christos IADDR UNUSED pc = abuf->addr;
560 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
561 1.1 christos
562 1.1 christos {
563 1.1 christos SI tmp_newval;
564 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
565 1.1 christos {
566 1.1 christos SI opval = tmp_newval;
567 1.1 christos SET_H_GR (FLD (f_operand2), opval);
568 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
569 1.1 christos }
570 1.1 christos {
571 1.1 christos {
572 1.1 christos BI opval = LTSI (tmp_newval, 0);
573 1.1 christos CPU (h_nbit) = opval;
574 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
575 1.1 christos }
576 1.1 christos {
577 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
578 1.1 christos CPU (h_zbit) = opval;
579 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
580 1.1 christos }
581 1.1 christos SET_H_CBIT_MOVE (0);
582 1.1 christos SET_H_VBIT_MOVE (0);
583 1.1 christos {
584 1.1 christos {
585 1.1 christos BI opval = 0;
586 1.1 christos CPU (h_xbit) = opval;
587 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
588 1.1 christos }
589 1.1 christos {
590 1.1 christos BI opval = 0;
591 1.1 christos SET_H_INSN_PREFIXED_P (opval);
592 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
593 1.1 christos }
594 1.1 christos }
595 1.1 christos }
596 1.1 christos }
597 1.1 christos
598 1.1 christos #undef FLD
599 1.1 christos }
600 1.1 christos NEXT (vpc);
601 1.1 christos
602 1.1 christos CASE (sem, INSN_MOVEQ) : /* moveq $i,$Rd */
603 1.1 christos {
604 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
605 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
606 1.1 christos #define FLD(f) abuf->fields.sfmt_moveq.f
607 1.1 christos int UNUSED written = 0;
608 1.1 christos IADDR UNUSED pc = abuf->addr;
609 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
610 1.1 christos
611 1.1 christos {
612 1.1 christos SI tmp_newval;
613 1.1 christos tmp_newval = FLD (f_s6);
614 1.1 christos {
615 1.1 christos SI opval = tmp_newval;
616 1.1 christos SET_H_GR (FLD (f_operand2), opval);
617 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
618 1.1 christos }
619 1.1 christos {
620 1.1 christos SET_H_NBIT_MOVE (LTSI (tmp_newval, 0));
621 1.1 christos SET_H_ZBIT_MOVE (ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))));
622 1.1 christos SET_H_CBIT_MOVE (0);
623 1.1 christos SET_H_VBIT_MOVE (0);
624 1.1 christos {
625 1.1 christos {
626 1.1 christos BI opval = 0;
627 1.1 christos CPU (h_xbit) = opval;
628 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
629 1.1 christos }
630 1.1 christos {
631 1.1 christos BI opval = 0;
632 1.1 christos SET_H_INSN_PREFIXED_P (opval);
633 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
634 1.1 christos }
635 1.1 christos }
636 1.1 christos }
637 1.1 christos }
638 1.1 christos
639 1.1 christos #undef FLD
640 1.1 christos }
641 1.1 christos NEXT (vpc);
642 1.1 christos
643 1.1 christos CASE (sem, INSN_MOVS_B_R) : /* movs.b movs.m ${Rs},${Rd} */
644 1.1 christos {
645 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
646 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
647 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
648 1.1 christos int UNUSED written = 0;
649 1.1 christos IADDR UNUSED pc = abuf->addr;
650 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
651 1.1 christos
652 1.1 christos {
653 1.1 christos QI tmp_tmpops;
654 1.1 christos SI tmp_newval;
655 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
656 1.1 christos tmp_newval = EXTQISI (tmp_tmpops);
657 1.1 christos {
658 1.1 christos SI opval = tmp_newval;
659 1.1 christos SET_H_GR (FLD (f_operand2), opval);
660 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
661 1.1 christos }
662 1.1 christos {
663 1.1 christos {
664 1.1 christos BI opval = LTSI (tmp_newval, 0);
665 1.1 christos CPU (h_nbit) = opval;
666 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
667 1.1 christos }
668 1.1 christos {
669 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
670 1.1 christos CPU (h_zbit) = opval;
671 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
672 1.1 christos }
673 1.1 christos SET_H_CBIT_MOVE (0);
674 1.1 christos SET_H_VBIT_MOVE (0);
675 1.1 christos {
676 1.1 christos {
677 1.1 christos BI opval = 0;
678 1.1 christos CPU (h_xbit) = opval;
679 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
680 1.1 christos }
681 1.1 christos {
682 1.1 christos BI opval = 0;
683 1.1 christos SET_H_INSN_PREFIXED_P (opval);
684 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
685 1.1 christos }
686 1.1 christos }
687 1.1 christos }
688 1.1 christos }
689 1.1 christos
690 1.1 christos #undef FLD
691 1.1 christos }
692 1.1 christos NEXT (vpc);
693 1.1 christos
694 1.1 christos CASE (sem, INSN_MOVS_W_R) : /* movs.w movs.m ${Rs},${Rd} */
695 1.1 christos {
696 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
697 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
698 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
699 1.1 christos int UNUSED written = 0;
700 1.1 christos IADDR UNUSED pc = abuf->addr;
701 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
702 1.1 christos
703 1.1 christos {
704 1.1 christos HI tmp_tmpops;
705 1.1 christos SI tmp_newval;
706 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
707 1.1 christos tmp_newval = EXTHISI (tmp_tmpops);
708 1.1 christos {
709 1.1 christos SI opval = tmp_newval;
710 1.1 christos SET_H_GR (FLD (f_operand2), opval);
711 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
712 1.1 christos }
713 1.1 christos {
714 1.1 christos {
715 1.1 christos BI opval = LTSI (tmp_newval, 0);
716 1.1 christos CPU (h_nbit) = opval;
717 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
718 1.1 christos }
719 1.1 christos {
720 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
721 1.1 christos CPU (h_zbit) = opval;
722 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
723 1.1 christos }
724 1.1 christos SET_H_CBIT_MOVE (0);
725 1.1 christos SET_H_VBIT_MOVE (0);
726 1.1 christos {
727 1.1 christos {
728 1.1 christos BI opval = 0;
729 1.1 christos CPU (h_xbit) = opval;
730 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
731 1.1 christos }
732 1.1 christos {
733 1.1 christos BI opval = 0;
734 1.1 christos SET_H_INSN_PREFIXED_P (opval);
735 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
736 1.1 christos }
737 1.1 christos }
738 1.1 christos }
739 1.1 christos }
740 1.1 christos
741 1.1 christos #undef FLD
742 1.1 christos }
743 1.1 christos NEXT (vpc);
744 1.1 christos
745 1.1 christos CASE (sem, INSN_MOVU_B_R) : /* movu.b movu.m ${Rs},${Rd} */
746 1.1 christos {
747 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
748 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
749 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
750 1.1 christos int UNUSED written = 0;
751 1.1 christos IADDR UNUSED pc = abuf->addr;
752 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
753 1.1 christos
754 1.1 christos {
755 1.1 christos QI tmp_tmpops;
756 1.1 christos SI tmp_newval;
757 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
758 1.1 christos tmp_newval = ZEXTQISI (tmp_tmpops);
759 1.1 christos {
760 1.1 christos SI opval = tmp_newval;
761 1.1 christos SET_H_GR (FLD (f_operand2), opval);
762 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
763 1.1 christos }
764 1.1 christos {
765 1.1 christos {
766 1.1 christos BI opval = LTSI (tmp_newval, 0);
767 1.1 christos CPU (h_nbit) = opval;
768 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
769 1.1 christos }
770 1.1 christos {
771 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
772 1.1 christos CPU (h_zbit) = opval;
773 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
774 1.1 christos }
775 1.1 christos SET_H_CBIT_MOVE (0);
776 1.1 christos SET_H_VBIT_MOVE (0);
777 1.1 christos {
778 1.1 christos {
779 1.1 christos BI opval = 0;
780 1.1 christos CPU (h_xbit) = opval;
781 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
782 1.1 christos }
783 1.1 christos {
784 1.1 christos BI opval = 0;
785 1.1 christos SET_H_INSN_PREFIXED_P (opval);
786 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
787 1.1 christos }
788 1.1 christos }
789 1.1 christos }
790 1.1 christos }
791 1.1 christos
792 1.1 christos #undef FLD
793 1.1 christos }
794 1.1 christos NEXT (vpc);
795 1.1 christos
796 1.1 christos CASE (sem, INSN_MOVU_W_R) : /* movu.w movu.m ${Rs},${Rd} */
797 1.1 christos {
798 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
799 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
800 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
801 1.1 christos int UNUSED written = 0;
802 1.1 christos IADDR UNUSED pc = abuf->addr;
803 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
804 1.1 christos
805 1.1 christos {
806 1.1 christos HI tmp_tmpops;
807 1.1 christos SI tmp_newval;
808 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
809 1.1 christos tmp_newval = ZEXTHISI (tmp_tmpops);
810 1.1 christos {
811 1.1 christos SI opval = tmp_newval;
812 1.1 christos SET_H_GR (FLD (f_operand2), opval);
813 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
814 1.1 christos }
815 1.1 christos {
816 1.1 christos {
817 1.1 christos BI opval = LTSI (tmp_newval, 0);
818 1.1 christos CPU (h_nbit) = opval;
819 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
820 1.1 christos }
821 1.1 christos {
822 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
823 1.1 christos CPU (h_zbit) = opval;
824 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
825 1.1 christos }
826 1.1 christos SET_H_CBIT_MOVE (0);
827 1.1 christos SET_H_VBIT_MOVE (0);
828 1.1 christos {
829 1.1 christos {
830 1.1 christos BI opval = 0;
831 1.1 christos CPU (h_xbit) = opval;
832 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
833 1.1 christos }
834 1.1 christos {
835 1.1 christos BI opval = 0;
836 1.1 christos SET_H_INSN_PREFIXED_P (opval);
837 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
838 1.1 christos }
839 1.1 christos }
840 1.1 christos }
841 1.1 christos }
842 1.1 christos
843 1.1 christos #undef FLD
844 1.1 christos }
845 1.1 christos NEXT (vpc);
846 1.1 christos
847 1.1 christos CASE (sem, INSN_MOVECBR) : /* move.b ${sconst8},${Rd} */
848 1.1 christos {
849 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
850 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
851 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
852 1.1 christos int UNUSED written = 0;
853 1.1 christos IADDR UNUSED pc = abuf->addr;
854 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
855 1.1 christos
856 1.1 christos {
857 1.1 christos QI tmp_newval;
858 1.1 christos tmp_newval = FLD (f_indir_pc__byte);
859 1.1 christos {
860 1.1 christos SI tmp_oldregval;
861 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
862 1.1 christos {
863 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
864 1.1 christos SET_H_GR (FLD (f_operand2), opval);
865 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
866 1.1 christos }
867 1.1 christos }
868 1.1 christos {
869 1.1 christos {
870 1.1 christos BI opval = LTQI (tmp_newval, 0);
871 1.1 christos CPU (h_nbit) = opval;
872 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
873 1.1 christos }
874 1.1 christos {
875 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
876 1.1 christos CPU (h_zbit) = opval;
877 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
878 1.1 christos }
879 1.1 christos SET_H_CBIT_MOVE (0);
880 1.1 christos SET_H_VBIT_MOVE (0);
881 1.1 christos {
882 1.1 christos {
883 1.1 christos BI opval = 0;
884 1.1 christos CPU (h_xbit) = opval;
885 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
886 1.1 christos }
887 1.1 christos {
888 1.1 christos BI opval = 0;
889 1.1 christos SET_H_INSN_PREFIXED_P (opval);
890 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
891 1.1 christos }
892 1.1 christos }
893 1.1 christos }
894 1.1 christos }
895 1.1 christos
896 1.1 christos #undef FLD
897 1.1 christos }
898 1.1 christos NEXT (vpc);
899 1.1 christos
900 1.1 christos CASE (sem, INSN_MOVECWR) : /* move.w ${sconst16},${Rd} */
901 1.1 christos {
902 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
903 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
904 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
905 1.1 christos int UNUSED written = 0;
906 1.1 christos IADDR UNUSED pc = abuf->addr;
907 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
908 1.1 christos
909 1.1 christos {
910 1.1 christos HI tmp_newval;
911 1.1 christos tmp_newval = FLD (f_indir_pc__word);
912 1.1 christos {
913 1.1 christos SI tmp_oldregval;
914 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
915 1.1 christos {
916 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
917 1.1 christos SET_H_GR (FLD (f_operand2), opval);
918 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
919 1.1 christos }
920 1.1 christos }
921 1.1 christos {
922 1.1 christos {
923 1.1 christos BI opval = LTHI (tmp_newval, 0);
924 1.1 christos CPU (h_nbit) = opval;
925 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
926 1.1 christos }
927 1.1 christos {
928 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
929 1.1 christos CPU (h_zbit) = opval;
930 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
931 1.1 christos }
932 1.1 christos SET_H_CBIT_MOVE (0);
933 1.1 christos SET_H_VBIT_MOVE (0);
934 1.1 christos {
935 1.1 christos {
936 1.1 christos BI opval = 0;
937 1.1 christos CPU (h_xbit) = opval;
938 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
939 1.1 christos }
940 1.1 christos {
941 1.1 christos BI opval = 0;
942 1.1 christos SET_H_INSN_PREFIXED_P (opval);
943 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
944 1.1 christos }
945 1.1 christos }
946 1.1 christos }
947 1.1 christos }
948 1.1 christos
949 1.1 christos #undef FLD
950 1.1 christos }
951 1.1 christos NEXT (vpc);
952 1.1 christos
953 1.1 christos CASE (sem, INSN_MOVECDR) : /* move.d ${const32},${Rd} */
954 1.1 christos {
955 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
956 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
957 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
958 1.1 christos int UNUSED written = 0;
959 1.1 christos IADDR UNUSED pc = abuf->addr;
960 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
961 1.1 christos
962 1.1 christos {
963 1.1 christos SI tmp_newval;
964 1.1 christos tmp_newval = FLD (f_indir_pc__dword);
965 1.1 christos {
966 1.1 christos SI opval = tmp_newval;
967 1.1 christos SET_H_GR (FLD (f_operand2), opval);
968 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
969 1.1 christos }
970 1.1 christos {
971 1.1 christos {
972 1.1 christos BI opval = LTSI (tmp_newval, 0);
973 1.1 christos CPU (h_nbit) = opval;
974 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
975 1.1 christos }
976 1.1 christos {
977 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
978 1.1 christos CPU (h_zbit) = opval;
979 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
980 1.1 christos }
981 1.1 christos SET_H_CBIT_MOVE (0);
982 1.1 christos SET_H_VBIT_MOVE (0);
983 1.1 christos {
984 1.1 christos {
985 1.1 christos BI opval = 0;
986 1.1 christos CPU (h_xbit) = opval;
987 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
988 1.1 christos }
989 1.1 christos {
990 1.1 christos BI opval = 0;
991 1.1 christos SET_H_INSN_PREFIXED_P (opval);
992 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
993 1.1 christos }
994 1.1 christos }
995 1.1 christos }
996 1.1 christos }
997 1.1 christos
998 1.1 christos #undef FLD
999 1.1 christos }
1000 1.1 christos NEXT (vpc);
1001 1.1 christos
1002 1.1 christos CASE (sem, INSN_MOVSCBR) : /* movs.b ${sconst8},${Rd} */
1003 1.1 christos {
1004 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1005 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1006 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1007 1.1 christos int UNUSED written = 0;
1008 1.1 christos IADDR UNUSED pc = abuf->addr;
1009 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1010 1.1 christos
1011 1.1 christos {
1012 1.1 christos SI tmp_newval;
1013 1.1 christos tmp_newval = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
1014 1.1 christos {
1015 1.1 christos SI opval = tmp_newval;
1016 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1017 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1018 1.1 christos }
1019 1.1 christos {
1020 1.1 christos {
1021 1.1 christos BI opval = LTSI (tmp_newval, 0);
1022 1.1 christos CPU (h_nbit) = opval;
1023 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1024 1.1 christos }
1025 1.1 christos {
1026 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1027 1.1 christos CPU (h_zbit) = opval;
1028 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1029 1.1 christos }
1030 1.1 christos SET_H_CBIT_MOVE (0);
1031 1.1 christos SET_H_VBIT_MOVE (0);
1032 1.1 christos {
1033 1.1 christos {
1034 1.1 christos BI opval = 0;
1035 1.1 christos CPU (h_xbit) = opval;
1036 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1037 1.1 christos }
1038 1.1 christos {
1039 1.1 christos BI opval = 0;
1040 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1041 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1042 1.1 christos }
1043 1.1 christos }
1044 1.1 christos }
1045 1.1 christos }
1046 1.1 christos
1047 1.1 christos #undef FLD
1048 1.1 christos }
1049 1.1 christos NEXT (vpc);
1050 1.1 christos
1051 1.1 christos CASE (sem, INSN_MOVSCWR) : /* movs.w ${sconst16},${Rd} */
1052 1.1 christos {
1053 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1054 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1055 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1056 1.1 christos int UNUSED written = 0;
1057 1.1 christos IADDR UNUSED pc = abuf->addr;
1058 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1059 1.1 christos
1060 1.1 christos {
1061 1.1 christos SI tmp_newval;
1062 1.1 christos tmp_newval = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
1063 1.1 christos {
1064 1.1 christos SI opval = tmp_newval;
1065 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1066 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1067 1.1 christos }
1068 1.1 christos {
1069 1.1 christos {
1070 1.1 christos BI opval = LTSI (tmp_newval, 0);
1071 1.1 christos CPU (h_nbit) = opval;
1072 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1073 1.1 christos }
1074 1.1 christos {
1075 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1076 1.1 christos CPU (h_zbit) = opval;
1077 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1078 1.1 christos }
1079 1.1 christos SET_H_CBIT_MOVE (0);
1080 1.1 christos SET_H_VBIT_MOVE (0);
1081 1.1 christos {
1082 1.1 christos {
1083 1.1 christos BI opval = 0;
1084 1.1 christos CPU (h_xbit) = opval;
1085 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1086 1.1 christos }
1087 1.1 christos {
1088 1.1 christos BI opval = 0;
1089 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1090 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1091 1.1 christos }
1092 1.1 christos }
1093 1.1 christos }
1094 1.1 christos }
1095 1.1 christos
1096 1.1 christos #undef FLD
1097 1.1 christos }
1098 1.1 christos NEXT (vpc);
1099 1.1 christos
1100 1.1 christos CASE (sem, INSN_MOVUCBR) : /* movu.b ${uconst8},${Rd} */
1101 1.1 christos {
1102 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1103 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1104 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1105 1.1 christos int UNUSED written = 0;
1106 1.1 christos IADDR UNUSED pc = abuf->addr;
1107 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1108 1.1 christos
1109 1.1 christos {
1110 1.1 christos SI tmp_newval;
1111 1.1 christos tmp_newval = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
1112 1.1 christos {
1113 1.1 christos SI opval = tmp_newval;
1114 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1115 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1116 1.1 christos }
1117 1.1 christos {
1118 1.1 christos {
1119 1.1 christos BI opval = LTSI (tmp_newval, 0);
1120 1.1 christos CPU (h_nbit) = opval;
1121 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1122 1.1 christos }
1123 1.1 christos {
1124 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1125 1.1 christos CPU (h_zbit) = opval;
1126 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1127 1.1 christos }
1128 1.1 christos SET_H_CBIT_MOVE (0);
1129 1.1 christos SET_H_VBIT_MOVE (0);
1130 1.1 christos {
1131 1.1 christos {
1132 1.1 christos BI opval = 0;
1133 1.1 christos CPU (h_xbit) = opval;
1134 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1135 1.1 christos }
1136 1.1 christos {
1137 1.1 christos BI opval = 0;
1138 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1139 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1140 1.1 christos }
1141 1.1 christos }
1142 1.1 christos }
1143 1.1 christos }
1144 1.1 christos
1145 1.1 christos #undef FLD
1146 1.1 christos }
1147 1.1 christos NEXT (vpc);
1148 1.1 christos
1149 1.1 christos CASE (sem, INSN_MOVUCWR) : /* movu.w ${uconst16},${Rd} */
1150 1.1 christos {
1151 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1152 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1153 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1154 1.1 christos int UNUSED written = 0;
1155 1.1 christos IADDR UNUSED pc = abuf->addr;
1156 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1157 1.1 christos
1158 1.1 christos {
1159 1.1 christos SI tmp_newval;
1160 1.1 christos tmp_newval = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
1161 1.1 christos {
1162 1.1 christos SI opval = tmp_newval;
1163 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1164 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1165 1.1 christos }
1166 1.1 christos {
1167 1.1 christos {
1168 1.1 christos BI opval = LTSI (tmp_newval, 0);
1169 1.1 christos CPU (h_nbit) = opval;
1170 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1171 1.1 christos }
1172 1.1 christos {
1173 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1174 1.1 christos CPU (h_zbit) = opval;
1175 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1176 1.1 christos }
1177 1.1 christos SET_H_CBIT_MOVE (0);
1178 1.1 christos SET_H_VBIT_MOVE (0);
1179 1.1 christos {
1180 1.1 christos {
1181 1.1 christos BI opval = 0;
1182 1.1 christos CPU (h_xbit) = opval;
1183 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1184 1.1 christos }
1185 1.1 christos {
1186 1.1 christos BI opval = 0;
1187 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1188 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1189 1.1 christos }
1190 1.1 christos }
1191 1.1 christos }
1192 1.1 christos }
1193 1.1 christos
1194 1.1 christos #undef FLD
1195 1.1 christos }
1196 1.1 christos NEXT (vpc);
1197 1.1 christos
1198 1.1 christos CASE (sem, INSN_ADDQ) : /* addq $j,$Rd */
1199 1.1 christos {
1200 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1201 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1202 1.1 christos #define FLD(f) abuf->fields.sfmt_addq.f
1203 1.1 christos int UNUSED written = 0;
1204 1.1 christos IADDR UNUSED pc = abuf->addr;
1205 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1206 1.1 christos
1207 1.1 christos {
1208 1.1 christos SI tmp_tmpopd;
1209 1.1 christos SI tmp_tmpops;
1210 1.1 christos BI tmp_carry;
1211 1.1 christos SI tmp_newval;
1212 1.1 christos tmp_tmpops = FLD (f_u6);
1213 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1214 1.1 christos tmp_carry = CPU (h_cbit);
1215 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1216 1.1 christos {
1217 1.1 christos SI opval = tmp_newval;
1218 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1219 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1220 1.1 christos }
1221 1.1 christos {
1222 1.1 christos {
1223 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
1224 1.1 christos CPU (h_cbit) = opval;
1225 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1226 1.1 christos }
1227 1.1 christos {
1228 1.1 christos BI opval = LTSI (tmp_newval, 0);
1229 1.1 christos CPU (h_nbit) = opval;
1230 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1231 1.1 christos }
1232 1.1 christos {
1233 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1234 1.1 christos CPU (h_zbit) = opval;
1235 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1236 1.1 christos }
1237 1.1 christos {
1238 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1239 1.1 christos CPU (h_vbit) = opval;
1240 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1241 1.1 christos }
1242 1.1 christos {
1243 1.1 christos {
1244 1.1 christos BI opval = 0;
1245 1.1 christos CPU (h_xbit) = opval;
1246 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1247 1.1 christos }
1248 1.1 christos {
1249 1.1 christos BI opval = 0;
1250 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1251 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1252 1.1 christos }
1253 1.1 christos }
1254 1.1 christos }
1255 1.1 christos }
1256 1.1 christos
1257 1.1 christos #undef FLD
1258 1.1 christos }
1259 1.1 christos NEXT (vpc);
1260 1.1 christos
1261 1.1 christos CASE (sem, INSN_SUBQ) : /* subq $j,$Rd */
1262 1.1 christos {
1263 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1264 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1265 1.1 christos #define FLD(f) abuf->fields.sfmt_addq.f
1266 1.1 christos int UNUSED written = 0;
1267 1.1 christos IADDR UNUSED pc = abuf->addr;
1268 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1269 1.1 christos
1270 1.1 christos {
1271 1.1 christos SI tmp_tmpopd;
1272 1.1 christos SI tmp_tmpops;
1273 1.1 christos BI tmp_carry;
1274 1.1 christos SI tmp_newval;
1275 1.1 christos tmp_tmpops = FLD (f_u6);
1276 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1277 1.1 christos tmp_carry = CPU (h_cbit);
1278 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1279 1.1 christos {
1280 1.1 christos SI opval = tmp_newval;
1281 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1282 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1283 1.1 christos }
1284 1.1 christos {
1285 1.1 christos {
1286 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
1287 1.1 christos CPU (h_cbit) = opval;
1288 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1289 1.1 christos }
1290 1.1 christos {
1291 1.1 christos BI opval = LTSI (tmp_newval, 0);
1292 1.1 christos CPU (h_nbit) = opval;
1293 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1294 1.1 christos }
1295 1.1 christos {
1296 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1297 1.1 christos CPU (h_zbit) = opval;
1298 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1299 1.1 christos }
1300 1.1 christos {
1301 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1302 1.1 christos CPU (h_vbit) = opval;
1303 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1304 1.1 christos }
1305 1.1 christos {
1306 1.1 christos {
1307 1.1 christos BI opval = 0;
1308 1.1 christos CPU (h_xbit) = opval;
1309 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1310 1.1 christos }
1311 1.1 christos {
1312 1.1 christos BI opval = 0;
1313 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1314 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1315 1.1 christos }
1316 1.1 christos }
1317 1.1 christos }
1318 1.1 christos }
1319 1.1 christos
1320 1.1 christos #undef FLD
1321 1.1 christos }
1322 1.1 christos NEXT (vpc);
1323 1.1 christos
1324 1.1 christos CASE (sem, INSN_CMP_R_B_R) : /* cmp-r.b $Rs,$Rd */
1325 1.1 christos {
1326 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1327 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1328 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1329 1.1 christos int UNUSED written = 0;
1330 1.1 christos IADDR UNUSED pc = abuf->addr;
1331 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1332 1.1 christos
1333 1.1 christos {
1334 1.1 christos QI tmp_tmpopd;
1335 1.1 christos QI tmp_tmpops;
1336 1.1 christos BI tmp_carry;
1337 1.1 christos QI tmp_newval;
1338 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1339 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1340 1.1 christos tmp_carry = CPU (h_cbit);
1341 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1342 1.1 christos ((void) 0); /*nop*/
1343 1.1 christos {
1344 1.1 christos {
1345 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
1346 1.1 christos CPU (h_cbit) = opval;
1347 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1348 1.1 christos }
1349 1.1 christos {
1350 1.1 christos BI opval = LTQI (tmp_newval, 0);
1351 1.1 christos CPU (h_nbit) = opval;
1352 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1353 1.1 christos }
1354 1.1 christos {
1355 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1356 1.1 christos CPU (h_zbit) = opval;
1357 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1358 1.1 christos }
1359 1.1 christos {
1360 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
1361 1.1 christos CPU (h_vbit) = opval;
1362 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1363 1.1 christos }
1364 1.1 christos {
1365 1.1 christos {
1366 1.1 christos BI opval = 0;
1367 1.1 christos CPU (h_xbit) = opval;
1368 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1369 1.1 christos }
1370 1.1 christos {
1371 1.1 christos BI opval = 0;
1372 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1373 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1374 1.1 christos }
1375 1.1 christos }
1376 1.1 christos }
1377 1.1 christos }
1378 1.1 christos
1379 1.1 christos #undef FLD
1380 1.1 christos }
1381 1.1 christos NEXT (vpc);
1382 1.1 christos
1383 1.1 christos CASE (sem, INSN_CMP_R_W_R) : /* cmp-r.w $Rs,$Rd */
1384 1.1 christos {
1385 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1386 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1387 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1388 1.1 christos int UNUSED written = 0;
1389 1.1 christos IADDR UNUSED pc = abuf->addr;
1390 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1391 1.1 christos
1392 1.1 christos {
1393 1.1 christos HI tmp_tmpopd;
1394 1.1 christos HI tmp_tmpops;
1395 1.1 christos BI tmp_carry;
1396 1.1 christos HI tmp_newval;
1397 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1398 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1399 1.1 christos tmp_carry = CPU (h_cbit);
1400 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1401 1.1 christos ((void) 0); /*nop*/
1402 1.1 christos {
1403 1.1 christos {
1404 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
1405 1.1 christos CPU (h_cbit) = opval;
1406 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1407 1.1 christos }
1408 1.1 christos {
1409 1.1 christos BI opval = LTHI (tmp_newval, 0);
1410 1.1 christos CPU (h_nbit) = opval;
1411 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1412 1.1 christos }
1413 1.1 christos {
1414 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1415 1.1 christos CPU (h_zbit) = opval;
1416 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1417 1.1 christos }
1418 1.1 christos {
1419 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
1420 1.1 christos CPU (h_vbit) = opval;
1421 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1422 1.1 christos }
1423 1.1 christos {
1424 1.1 christos {
1425 1.1 christos BI opval = 0;
1426 1.1 christos CPU (h_xbit) = opval;
1427 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1428 1.1 christos }
1429 1.1 christos {
1430 1.1 christos BI opval = 0;
1431 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1432 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1433 1.1 christos }
1434 1.1 christos }
1435 1.1 christos }
1436 1.1 christos }
1437 1.1 christos
1438 1.1 christos #undef FLD
1439 1.1 christos }
1440 1.1 christos NEXT (vpc);
1441 1.1 christos
1442 1.1 christos CASE (sem, INSN_CMP_R_D_R) : /* cmp-r.d $Rs,$Rd */
1443 1.1 christos {
1444 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1445 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1446 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1447 1.1 christos int UNUSED written = 0;
1448 1.1 christos IADDR UNUSED pc = abuf->addr;
1449 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1450 1.1 christos
1451 1.1 christos {
1452 1.1 christos SI tmp_tmpopd;
1453 1.1 christos SI tmp_tmpops;
1454 1.1 christos BI tmp_carry;
1455 1.1 christos SI tmp_newval;
1456 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1457 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1458 1.1 christos tmp_carry = CPU (h_cbit);
1459 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1460 1.1 christos ((void) 0); /*nop*/
1461 1.1 christos {
1462 1.1 christos {
1463 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
1464 1.1 christos CPU (h_cbit) = opval;
1465 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1466 1.1 christos }
1467 1.1 christos {
1468 1.1 christos BI opval = LTSI (tmp_newval, 0);
1469 1.1 christos CPU (h_nbit) = opval;
1470 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1471 1.1 christos }
1472 1.1 christos {
1473 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1474 1.1 christos CPU (h_zbit) = opval;
1475 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1476 1.1 christos }
1477 1.1 christos {
1478 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1479 1.1 christos CPU (h_vbit) = opval;
1480 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1481 1.1 christos }
1482 1.1 christos {
1483 1.1 christos {
1484 1.1 christos BI opval = 0;
1485 1.1 christos CPU (h_xbit) = opval;
1486 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1487 1.1 christos }
1488 1.1 christos {
1489 1.1 christos BI opval = 0;
1490 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1491 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1492 1.1 christos }
1493 1.1 christos }
1494 1.1 christos }
1495 1.1 christos }
1496 1.1 christos
1497 1.1 christos #undef FLD
1498 1.1 christos }
1499 1.1 christos NEXT (vpc);
1500 1.1 christos
1501 1.1 christos CASE (sem, INSN_CMP_M_B_M) : /* cmp-m.b [${Rs}${inc}],${Rd} */
1502 1.1 christos {
1503 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1504 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1505 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1506 1.1 christos int UNUSED written = 0;
1507 1.1 christos IADDR UNUSED pc = abuf->addr;
1508 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1509 1.1 christos
1510 1.1 christos {
1511 1.1 christos QI tmp_tmpopd;
1512 1.1 christos QI tmp_tmpops;
1513 1.1 christos BI tmp_carry;
1514 1.1 christos QI tmp_newval;
1515 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1516 1.1 christos QI tmp_tmp_mem;
1517 1.1 christos BI tmp_postinc;
1518 1.1 christos tmp_postinc = FLD (f_memmode);
1519 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1520 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
1521 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1522 1.1 christos {
1523 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1524 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
1525 1.1 christos }
1526 1.1 christos {
1527 1.1 christos SI opval = tmp_addr;
1528 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1529 1.1 christos written |= (1 << 9);
1530 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1531 1.1 christos }
1532 1.1 christos }
1533 1.1 christos }
1534 1.1 christos ; tmp_tmp_mem; });
1535 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1536 1.1 christos tmp_carry = CPU (h_cbit);
1537 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1538 1.1 christos ((void) 0); /*nop*/
1539 1.1 christos {
1540 1.1 christos {
1541 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
1542 1.1 christos CPU (h_cbit) = opval;
1543 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1544 1.1 christos }
1545 1.1 christos {
1546 1.1 christos BI opval = LTQI (tmp_newval, 0);
1547 1.1 christos CPU (h_nbit) = opval;
1548 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1549 1.1 christos }
1550 1.1 christos {
1551 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1552 1.1 christos CPU (h_zbit) = opval;
1553 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1554 1.1 christos }
1555 1.1 christos {
1556 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
1557 1.1 christos CPU (h_vbit) = opval;
1558 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1559 1.1 christos }
1560 1.1 christos {
1561 1.1 christos {
1562 1.1 christos BI opval = 0;
1563 1.1 christos CPU (h_xbit) = opval;
1564 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1565 1.1 christos }
1566 1.1 christos {
1567 1.1 christos BI opval = 0;
1568 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1569 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1570 1.1 christos }
1571 1.1 christos }
1572 1.1 christos }
1573 1.1 christos }
1574 1.1 christos
1575 1.1 christos abuf->written = written;
1576 1.1 christos #undef FLD
1577 1.1 christos }
1578 1.1 christos NEXT (vpc);
1579 1.1 christos
1580 1.1 christos CASE (sem, INSN_CMP_M_W_M) : /* cmp-m.w [${Rs}${inc}],${Rd} */
1581 1.1 christos {
1582 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1583 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1584 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1585 1.1 christos int UNUSED written = 0;
1586 1.1 christos IADDR UNUSED pc = abuf->addr;
1587 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1588 1.1 christos
1589 1.1 christos {
1590 1.1 christos HI tmp_tmpopd;
1591 1.1 christos HI tmp_tmpops;
1592 1.1 christos BI tmp_carry;
1593 1.1 christos HI tmp_newval;
1594 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1595 1.1 christos HI tmp_tmp_mem;
1596 1.1 christos BI tmp_postinc;
1597 1.1 christos tmp_postinc = FLD (f_memmode);
1598 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1599 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
1600 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1601 1.1 christos {
1602 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1603 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
1604 1.1 christos }
1605 1.1 christos {
1606 1.1 christos SI opval = tmp_addr;
1607 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1608 1.1 christos written |= (1 << 9);
1609 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1610 1.1 christos }
1611 1.1 christos }
1612 1.1 christos }
1613 1.1 christos ; tmp_tmp_mem; });
1614 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1615 1.1 christos tmp_carry = CPU (h_cbit);
1616 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1617 1.1 christos ((void) 0); /*nop*/
1618 1.1 christos {
1619 1.1 christos {
1620 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
1621 1.1 christos CPU (h_cbit) = opval;
1622 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1623 1.1 christos }
1624 1.1 christos {
1625 1.1 christos BI opval = LTHI (tmp_newval, 0);
1626 1.1 christos CPU (h_nbit) = opval;
1627 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1628 1.1 christos }
1629 1.1 christos {
1630 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1631 1.1 christos CPU (h_zbit) = opval;
1632 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1633 1.1 christos }
1634 1.1 christos {
1635 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
1636 1.1 christos CPU (h_vbit) = opval;
1637 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1638 1.1 christos }
1639 1.1 christos {
1640 1.1 christos {
1641 1.1 christos BI opval = 0;
1642 1.1 christos CPU (h_xbit) = opval;
1643 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1644 1.1 christos }
1645 1.1 christos {
1646 1.1 christos BI opval = 0;
1647 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1648 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1649 1.1 christos }
1650 1.1 christos }
1651 1.1 christos }
1652 1.1 christos }
1653 1.1 christos
1654 1.1 christos abuf->written = written;
1655 1.1 christos #undef FLD
1656 1.1 christos }
1657 1.1 christos NEXT (vpc);
1658 1.1 christos
1659 1.1 christos CASE (sem, INSN_CMP_M_D_M) : /* cmp-m.d [${Rs}${inc}],${Rd} */
1660 1.1 christos {
1661 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1662 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1663 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1664 1.1 christos int UNUSED written = 0;
1665 1.1 christos IADDR UNUSED pc = abuf->addr;
1666 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1667 1.1 christos
1668 1.1 christos {
1669 1.1 christos SI tmp_tmpopd;
1670 1.1 christos SI tmp_tmpops;
1671 1.1 christos BI tmp_carry;
1672 1.1 christos SI tmp_newval;
1673 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1674 1.1 christos SI tmp_tmp_mem;
1675 1.1 christos BI tmp_postinc;
1676 1.1 christos tmp_postinc = FLD (f_memmode);
1677 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1678 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
1679 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1680 1.1 christos {
1681 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1682 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
1683 1.1 christos }
1684 1.1 christos {
1685 1.1 christos SI opval = tmp_addr;
1686 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1687 1.1 christos written |= (1 << 9);
1688 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1689 1.1 christos }
1690 1.1 christos }
1691 1.1 christos }
1692 1.1 christos ; tmp_tmp_mem; });
1693 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1694 1.1 christos tmp_carry = CPU (h_cbit);
1695 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1696 1.1 christos ((void) 0); /*nop*/
1697 1.1 christos {
1698 1.1 christos {
1699 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
1700 1.1 christos CPU (h_cbit) = opval;
1701 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1702 1.1 christos }
1703 1.1 christos {
1704 1.1 christos BI opval = LTSI (tmp_newval, 0);
1705 1.1 christos CPU (h_nbit) = opval;
1706 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1707 1.1 christos }
1708 1.1 christos {
1709 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1710 1.1 christos CPU (h_zbit) = opval;
1711 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1712 1.1 christos }
1713 1.1 christos {
1714 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1715 1.1 christos CPU (h_vbit) = opval;
1716 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1717 1.1 christos }
1718 1.1 christos {
1719 1.1 christos {
1720 1.1 christos BI opval = 0;
1721 1.1 christos CPU (h_xbit) = opval;
1722 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1723 1.1 christos }
1724 1.1 christos {
1725 1.1 christos BI opval = 0;
1726 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1727 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1728 1.1 christos }
1729 1.1 christos }
1730 1.1 christos }
1731 1.1 christos }
1732 1.1 christos
1733 1.1 christos abuf->written = written;
1734 1.1 christos #undef FLD
1735 1.1 christos }
1736 1.1 christos NEXT (vpc);
1737 1.1 christos
1738 1.1 christos CASE (sem, INSN_CMPCBR) : /* cmp.b $sconst8,$Rd */
1739 1.1 christos {
1740 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1741 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1742 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1743 1.1 christos int UNUSED written = 0;
1744 1.1 christos IADDR UNUSED pc = abuf->addr;
1745 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1746 1.1 christos
1747 1.1 christos {
1748 1.1 christos QI tmp_tmpopd;
1749 1.1 christos QI tmp_tmpops;
1750 1.1 christos BI tmp_carry;
1751 1.1 christos QI tmp_newval;
1752 1.1 christos tmp_tmpops = TRUNCSIQI (FLD (f_indir_pc__byte));
1753 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1754 1.1 christos tmp_carry = CPU (h_cbit);
1755 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1756 1.1 christos ((void) 0); /*nop*/
1757 1.1 christos {
1758 1.1 christos {
1759 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
1760 1.1 christos CPU (h_cbit) = opval;
1761 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1762 1.1 christos }
1763 1.1 christos {
1764 1.1 christos BI opval = LTQI (tmp_newval, 0);
1765 1.1 christos CPU (h_nbit) = opval;
1766 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1767 1.1 christos }
1768 1.1 christos {
1769 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1770 1.1 christos CPU (h_zbit) = opval;
1771 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1772 1.1 christos }
1773 1.1 christos {
1774 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
1775 1.1 christos CPU (h_vbit) = opval;
1776 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1777 1.1 christos }
1778 1.1 christos {
1779 1.1 christos {
1780 1.1 christos BI opval = 0;
1781 1.1 christos CPU (h_xbit) = opval;
1782 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1783 1.1 christos }
1784 1.1 christos {
1785 1.1 christos BI opval = 0;
1786 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1787 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1788 1.1 christos }
1789 1.1 christos }
1790 1.1 christos }
1791 1.1 christos }
1792 1.1 christos
1793 1.1 christos #undef FLD
1794 1.1 christos }
1795 1.1 christos NEXT (vpc);
1796 1.1 christos
1797 1.1 christos CASE (sem, INSN_CMPCWR) : /* cmp.w $sconst16,$Rd */
1798 1.1 christos {
1799 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1800 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1801 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1802 1.1 christos int UNUSED written = 0;
1803 1.1 christos IADDR UNUSED pc = abuf->addr;
1804 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1805 1.1 christos
1806 1.1 christos {
1807 1.1 christos HI tmp_tmpopd;
1808 1.1 christos HI tmp_tmpops;
1809 1.1 christos BI tmp_carry;
1810 1.1 christos HI tmp_newval;
1811 1.1 christos tmp_tmpops = TRUNCSIHI (FLD (f_indir_pc__word));
1812 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1813 1.1 christos tmp_carry = CPU (h_cbit);
1814 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1815 1.1 christos ((void) 0); /*nop*/
1816 1.1 christos {
1817 1.1 christos {
1818 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
1819 1.1 christos CPU (h_cbit) = opval;
1820 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1821 1.1 christos }
1822 1.1 christos {
1823 1.1 christos BI opval = LTHI (tmp_newval, 0);
1824 1.1 christos CPU (h_nbit) = opval;
1825 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1826 1.1 christos }
1827 1.1 christos {
1828 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1829 1.1 christos CPU (h_zbit) = opval;
1830 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1831 1.1 christos }
1832 1.1 christos {
1833 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
1834 1.1 christos CPU (h_vbit) = opval;
1835 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1836 1.1 christos }
1837 1.1 christos {
1838 1.1 christos {
1839 1.1 christos BI opval = 0;
1840 1.1 christos CPU (h_xbit) = opval;
1841 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1842 1.1 christos }
1843 1.1 christos {
1844 1.1 christos BI opval = 0;
1845 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1846 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1847 1.1 christos }
1848 1.1 christos }
1849 1.1 christos }
1850 1.1 christos }
1851 1.1 christos
1852 1.1 christos #undef FLD
1853 1.1 christos }
1854 1.1 christos NEXT (vpc);
1855 1.1 christos
1856 1.1 christos CASE (sem, INSN_CMPCDR) : /* cmp.d $const32,$Rd */
1857 1.1 christos {
1858 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1859 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1860 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
1861 1.1 christos int UNUSED written = 0;
1862 1.1 christos IADDR UNUSED pc = abuf->addr;
1863 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
1864 1.1 christos
1865 1.1 christos {
1866 1.1 christos SI tmp_tmpopd;
1867 1.1 christos SI tmp_tmpops;
1868 1.1 christos BI tmp_carry;
1869 1.1 christos SI tmp_newval;
1870 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
1871 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1872 1.1 christos tmp_carry = CPU (h_cbit);
1873 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1874 1.1 christos ((void) 0); /*nop*/
1875 1.1 christos {
1876 1.1 christos {
1877 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
1878 1.1 christos CPU (h_cbit) = opval;
1879 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1880 1.1 christos }
1881 1.1 christos {
1882 1.1 christos BI opval = LTSI (tmp_newval, 0);
1883 1.1 christos CPU (h_nbit) = opval;
1884 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1885 1.1 christos }
1886 1.1 christos {
1887 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1888 1.1 christos CPU (h_zbit) = opval;
1889 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1890 1.1 christos }
1891 1.1 christos {
1892 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1893 1.1 christos CPU (h_vbit) = opval;
1894 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1895 1.1 christos }
1896 1.1 christos {
1897 1.1 christos {
1898 1.1 christos BI opval = 0;
1899 1.1 christos CPU (h_xbit) = opval;
1900 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1901 1.1 christos }
1902 1.1 christos {
1903 1.1 christos BI opval = 0;
1904 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1905 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1906 1.1 christos }
1907 1.1 christos }
1908 1.1 christos }
1909 1.1 christos }
1910 1.1 christos
1911 1.1 christos #undef FLD
1912 1.1 christos }
1913 1.1 christos NEXT (vpc);
1914 1.1 christos
1915 1.1 christos CASE (sem, INSN_CMPQ) : /* cmpq $i,$Rd */
1916 1.1 christos {
1917 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1918 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1919 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
1920 1.1 christos int UNUSED written = 0;
1921 1.1 christos IADDR UNUSED pc = abuf->addr;
1922 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1923 1.1 christos
1924 1.1 christos {
1925 1.1 christos SI tmp_tmpopd;
1926 1.1 christos SI tmp_tmpops;
1927 1.1 christos BI tmp_carry;
1928 1.1 christos SI tmp_newval;
1929 1.1 christos tmp_tmpops = FLD (f_s6);
1930 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1931 1.1 christos tmp_carry = CPU (h_cbit);
1932 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1933 1.1 christos ((void) 0); /*nop*/
1934 1.1 christos {
1935 1.1 christos {
1936 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
1937 1.1 christos CPU (h_cbit) = opval;
1938 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1939 1.1 christos }
1940 1.1 christos {
1941 1.1 christos BI opval = LTSI (tmp_newval, 0);
1942 1.1 christos CPU (h_nbit) = opval;
1943 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1944 1.1 christos }
1945 1.1 christos {
1946 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1947 1.1 christos CPU (h_zbit) = opval;
1948 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1949 1.1 christos }
1950 1.1 christos {
1951 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
1952 1.1 christos CPU (h_vbit) = opval;
1953 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1954 1.1 christos }
1955 1.1 christos {
1956 1.1 christos {
1957 1.1 christos BI opval = 0;
1958 1.1 christos CPU (h_xbit) = opval;
1959 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1960 1.1 christos }
1961 1.1 christos {
1962 1.1 christos BI opval = 0;
1963 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1964 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1965 1.1 christos }
1966 1.1 christos }
1967 1.1 christos }
1968 1.1 christos }
1969 1.1 christos
1970 1.1 christos #undef FLD
1971 1.1 christos }
1972 1.1 christos NEXT (vpc);
1973 1.1 christos
1974 1.1 christos CASE (sem, INSN_CMPS_M_B_M) : /* cmps-m.b [${Rs}${inc}],$Rd */
1975 1.1 christos {
1976 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1977 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1978 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1979 1.1 christos int UNUSED written = 0;
1980 1.1 christos IADDR UNUSED pc = abuf->addr;
1981 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1982 1.1 christos
1983 1.1 christos {
1984 1.1 christos SI tmp_tmpopd;
1985 1.1 christos SI tmp_tmpops;
1986 1.1 christos BI tmp_carry;
1987 1.1 christos SI tmp_newval;
1988 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
1989 1.1 christos QI tmp_tmp_mem;
1990 1.1 christos BI tmp_postinc;
1991 1.1 christos tmp_postinc = FLD (f_memmode);
1992 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1993 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
1994 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1995 1.1 christos {
1996 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1997 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
1998 1.1 christos }
1999 1.1 christos {
2000 1.1 christos SI opval = tmp_addr;
2001 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2002 1.1 christos written |= (1 << 9);
2003 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2004 1.1 christos }
2005 1.1 christos }
2006 1.1 christos }
2007 1.1 christos ; tmp_tmp_mem; }));
2008 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2009 1.1 christos tmp_carry = CPU (h_cbit);
2010 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2011 1.1 christos ((void) 0); /*nop*/
2012 1.1 christos {
2013 1.1 christos {
2014 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2015 1.1 christos CPU (h_cbit) = opval;
2016 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2017 1.1 christos }
2018 1.1 christos {
2019 1.1 christos BI opval = LTSI (tmp_newval, 0);
2020 1.1 christos CPU (h_nbit) = opval;
2021 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2022 1.1 christos }
2023 1.1 christos {
2024 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2025 1.1 christos CPU (h_zbit) = opval;
2026 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2027 1.1 christos }
2028 1.1 christos {
2029 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2030 1.1 christos CPU (h_vbit) = opval;
2031 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2032 1.1 christos }
2033 1.1 christos {
2034 1.1 christos {
2035 1.1 christos BI opval = 0;
2036 1.1 christos CPU (h_xbit) = opval;
2037 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2038 1.1 christos }
2039 1.1 christos {
2040 1.1 christos BI opval = 0;
2041 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2042 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2043 1.1 christos }
2044 1.1 christos }
2045 1.1 christos }
2046 1.1 christos }
2047 1.1 christos
2048 1.1 christos abuf->written = written;
2049 1.1 christos #undef FLD
2050 1.1 christos }
2051 1.1 christos NEXT (vpc);
2052 1.1 christos
2053 1.1 christos CASE (sem, INSN_CMPS_M_W_M) : /* cmps-m.w [${Rs}${inc}],$Rd */
2054 1.1 christos {
2055 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2056 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2057 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2058 1.1 christos int UNUSED written = 0;
2059 1.1 christos IADDR UNUSED pc = abuf->addr;
2060 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2061 1.1 christos
2062 1.1 christos {
2063 1.1 christos SI tmp_tmpopd;
2064 1.1 christos SI tmp_tmpops;
2065 1.1 christos BI tmp_carry;
2066 1.1 christos SI tmp_newval;
2067 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
2068 1.1 christos HI tmp_tmp_mem;
2069 1.1 christos BI tmp_postinc;
2070 1.1 christos tmp_postinc = FLD (f_memmode);
2071 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2072 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2073 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2074 1.1 christos {
2075 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2076 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2077 1.1 christos }
2078 1.1 christos {
2079 1.1 christos SI opval = tmp_addr;
2080 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2081 1.1 christos written |= (1 << 9);
2082 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2083 1.1 christos }
2084 1.1 christos }
2085 1.1 christos }
2086 1.1 christos ; tmp_tmp_mem; }));
2087 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2088 1.1 christos tmp_carry = CPU (h_cbit);
2089 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2090 1.1 christos ((void) 0); /*nop*/
2091 1.1 christos {
2092 1.1 christos {
2093 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2094 1.1 christos CPU (h_cbit) = opval;
2095 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2096 1.1 christos }
2097 1.1 christos {
2098 1.1 christos BI opval = LTSI (tmp_newval, 0);
2099 1.1 christos CPU (h_nbit) = opval;
2100 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2101 1.1 christos }
2102 1.1 christos {
2103 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2104 1.1 christos CPU (h_zbit) = opval;
2105 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2106 1.1 christos }
2107 1.1 christos {
2108 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2109 1.1 christos CPU (h_vbit) = opval;
2110 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2111 1.1 christos }
2112 1.1 christos {
2113 1.1 christos {
2114 1.1 christos BI opval = 0;
2115 1.1 christos CPU (h_xbit) = opval;
2116 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2117 1.1 christos }
2118 1.1 christos {
2119 1.1 christos BI opval = 0;
2120 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2121 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2122 1.1 christos }
2123 1.1 christos }
2124 1.1 christos }
2125 1.1 christos }
2126 1.1 christos
2127 1.1 christos abuf->written = written;
2128 1.1 christos #undef FLD
2129 1.1 christos }
2130 1.1 christos NEXT (vpc);
2131 1.1 christos
2132 1.1 christos CASE (sem, INSN_CMPSCBR) : /* [${Rs}${inc}],$Rd */
2133 1.1 christos {
2134 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2135 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2136 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2137 1.1 christos int UNUSED written = 0;
2138 1.1 christos IADDR UNUSED pc = abuf->addr;
2139 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2140 1.1 christos
2141 1.1 christos {
2142 1.1 christos SI tmp_tmpopd;
2143 1.1 christos SI tmp_tmpops;
2144 1.1 christos BI tmp_carry;
2145 1.1 christos SI tmp_newval;
2146 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
2147 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2148 1.1 christos tmp_carry = CPU (h_cbit);
2149 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2150 1.1 christos ((void) 0); /*nop*/
2151 1.1 christos {
2152 1.1 christos {
2153 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2154 1.1 christos CPU (h_cbit) = opval;
2155 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2156 1.1 christos }
2157 1.1 christos {
2158 1.1 christos BI opval = LTSI (tmp_newval, 0);
2159 1.1 christos CPU (h_nbit) = opval;
2160 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2161 1.1 christos }
2162 1.1 christos {
2163 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2164 1.1 christos CPU (h_zbit) = opval;
2165 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2166 1.1 christos }
2167 1.1 christos {
2168 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2169 1.1 christos CPU (h_vbit) = opval;
2170 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2171 1.1 christos }
2172 1.1 christos {
2173 1.1 christos {
2174 1.1 christos BI opval = 0;
2175 1.1 christos CPU (h_xbit) = opval;
2176 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2177 1.1 christos }
2178 1.1 christos {
2179 1.1 christos BI opval = 0;
2180 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2181 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2182 1.1 christos }
2183 1.1 christos }
2184 1.1 christos }
2185 1.1 christos }
2186 1.1 christos
2187 1.1 christos #undef FLD
2188 1.1 christos }
2189 1.1 christos NEXT (vpc);
2190 1.1 christos
2191 1.1 christos CASE (sem, INSN_CMPSCWR) : /* [${Rs}${inc}],$Rd */
2192 1.1 christos {
2193 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2194 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2195 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2196 1.1 christos int UNUSED written = 0;
2197 1.1 christos IADDR UNUSED pc = abuf->addr;
2198 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2199 1.1 christos
2200 1.1 christos {
2201 1.1 christos SI tmp_tmpopd;
2202 1.1 christos SI tmp_tmpops;
2203 1.1 christos BI tmp_carry;
2204 1.1 christos SI tmp_newval;
2205 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
2206 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2207 1.1 christos tmp_carry = CPU (h_cbit);
2208 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2209 1.1 christos ((void) 0); /*nop*/
2210 1.1 christos {
2211 1.1 christos {
2212 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2213 1.1 christos CPU (h_cbit) = opval;
2214 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2215 1.1 christos }
2216 1.1 christos {
2217 1.1 christos BI opval = LTSI (tmp_newval, 0);
2218 1.1 christos CPU (h_nbit) = opval;
2219 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2220 1.1 christos }
2221 1.1 christos {
2222 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2223 1.1 christos CPU (h_zbit) = opval;
2224 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2225 1.1 christos }
2226 1.1 christos {
2227 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2228 1.1 christos CPU (h_vbit) = opval;
2229 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2230 1.1 christos }
2231 1.1 christos {
2232 1.1 christos {
2233 1.1 christos BI opval = 0;
2234 1.1 christos CPU (h_xbit) = opval;
2235 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2236 1.1 christos }
2237 1.1 christos {
2238 1.1 christos BI opval = 0;
2239 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2240 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2241 1.1 christos }
2242 1.1 christos }
2243 1.1 christos }
2244 1.1 christos }
2245 1.1 christos
2246 1.1 christos #undef FLD
2247 1.1 christos }
2248 1.1 christos NEXT (vpc);
2249 1.1 christos
2250 1.1 christos CASE (sem, INSN_CMPU_M_B_M) : /* cmpu-m.b [${Rs}${inc}],$Rd */
2251 1.1 christos {
2252 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2253 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2254 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2255 1.1 christos int UNUSED written = 0;
2256 1.1 christos IADDR UNUSED pc = abuf->addr;
2257 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2258 1.1 christos
2259 1.1 christos {
2260 1.1 christos SI tmp_tmpopd;
2261 1.1 christos SI tmp_tmpops;
2262 1.1 christos BI tmp_carry;
2263 1.1 christos SI tmp_newval;
2264 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
2265 1.1 christos QI tmp_tmp_mem;
2266 1.1 christos BI tmp_postinc;
2267 1.1 christos tmp_postinc = FLD (f_memmode);
2268 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2269 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2270 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2271 1.1 christos {
2272 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2273 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2274 1.1 christos }
2275 1.1 christos {
2276 1.1 christos SI opval = tmp_addr;
2277 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2278 1.1 christos written |= (1 << 9);
2279 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2280 1.1 christos }
2281 1.1 christos }
2282 1.1 christos }
2283 1.1 christos ; tmp_tmp_mem; }));
2284 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2285 1.1 christos tmp_carry = CPU (h_cbit);
2286 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2287 1.1 christos ((void) 0); /*nop*/
2288 1.1 christos {
2289 1.1 christos {
2290 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2291 1.1 christos CPU (h_cbit) = opval;
2292 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2293 1.1 christos }
2294 1.1 christos {
2295 1.1 christos BI opval = LTSI (tmp_newval, 0);
2296 1.1 christos CPU (h_nbit) = opval;
2297 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2298 1.1 christos }
2299 1.1 christos {
2300 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2301 1.1 christos CPU (h_zbit) = opval;
2302 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2303 1.1 christos }
2304 1.1 christos {
2305 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2306 1.1 christos CPU (h_vbit) = opval;
2307 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2308 1.1 christos }
2309 1.1 christos {
2310 1.1 christos {
2311 1.1 christos BI opval = 0;
2312 1.1 christos CPU (h_xbit) = opval;
2313 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2314 1.1 christos }
2315 1.1 christos {
2316 1.1 christos BI opval = 0;
2317 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2318 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2319 1.1 christos }
2320 1.1 christos }
2321 1.1 christos }
2322 1.1 christos }
2323 1.1 christos
2324 1.1 christos abuf->written = written;
2325 1.1 christos #undef FLD
2326 1.1 christos }
2327 1.1 christos NEXT (vpc);
2328 1.1 christos
2329 1.1 christos CASE (sem, INSN_CMPU_M_W_M) : /* cmpu-m.w [${Rs}${inc}],$Rd */
2330 1.1 christos {
2331 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2332 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2333 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2334 1.1 christos int UNUSED written = 0;
2335 1.1 christos IADDR UNUSED pc = abuf->addr;
2336 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2337 1.1 christos
2338 1.1 christos {
2339 1.1 christos SI tmp_tmpopd;
2340 1.1 christos SI tmp_tmpops;
2341 1.1 christos BI tmp_carry;
2342 1.1 christos SI tmp_newval;
2343 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
2344 1.1 christos HI tmp_tmp_mem;
2345 1.1 christos BI tmp_postinc;
2346 1.1 christos tmp_postinc = FLD (f_memmode);
2347 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2348 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2349 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2350 1.1 christos {
2351 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2352 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2353 1.1 christos }
2354 1.1 christos {
2355 1.1 christos SI opval = tmp_addr;
2356 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2357 1.1 christos written |= (1 << 9);
2358 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2359 1.1 christos }
2360 1.1 christos }
2361 1.1 christos }
2362 1.1 christos ; tmp_tmp_mem; }));
2363 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2364 1.1 christos tmp_carry = CPU (h_cbit);
2365 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2366 1.1 christos ((void) 0); /*nop*/
2367 1.1 christos {
2368 1.1 christos {
2369 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2370 1.1 christos CPU (h_cbit) = opval;
2371 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2372 1.1 christos }
2373 1.1 christos {
2374 1.1 christos BI opval = LTSI (tmp_newval, 0);
2375 1.1 christos CPU (h_nbit) = opval;
2376 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2377 1.1 christos }
2378 1.1 christos {
2379 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2380 1.1 christos CPU (h_zbit) = opval;
2381 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2382 1.1 christos }
2383 1.1 christos {
2384 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2385 1.1 christos CPU (h_vbit) = opval;
2386 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2387 1.1 christos }
2388 1.1 christos {
2389 1.1 christos {
2390 1.1 christos BI opval = 0;
2391 1.1 christos CPU (h_xbit) = opval;
2392 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2393 1.1 christos }
2394 1.1 christos {
2395 1.1 christos BI opval = 0;
2396 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2397 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2398 1.1 christos }
2399 1.1 christos }
2400 1.1 christos }
2401 1.1 christos }
2402 1.1 christos
2403 1.1 christos abuf->written = written;
2404 1.1 christos #undef FLD
2405 1.1 christos }
2406 1.1 christos NEXT (vpc);
2407 1.1 christos
2408 1.1 christos CASE (sem, INSN_CMPUCBR) : /* [${Rs}${inc}],$Rd */
2409 1.1 christos {
2410 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2411 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2412 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2413 1.1 christos int UNUSED written = 0;
2414 1.1 christos IADDR UNUSED pc = abuf->addr;
2415 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2416 1.1 christos
2417 1.1 christos {
2418 1.1 christos SI tmp_tmpopd;
2419 1.1 christos SI tmp_tmpops;
2420 1.1 christos BI tmp_carry;
2421 1.1 christos SI tmp_newval;
2422 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
2423 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2424 1.1 christos tmp_carry = CPU (h_cbit);
2425 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2426 1.1 christos ((void) 0); /*nop*/
2427 1.1 christos {
2428 1.1 christos {
2429 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2430 1.1 christos CPU (h_cbit) = opval;
2431 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2432 1.1 christos }
2433 1.1 christos {
2434 1.1 christos BI opval = LTSI (tmp_newval, 0);
2435 1.1 christos CPU (h_nbit) = opval;
2436 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2437 1.1 christos }
2438 1.1 christos {
2439 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2440 1.1 christos CPU (h_zbit) = opval;
2441 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2442 1.1 christos }
2443 1.1 christos {
2444 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2445 1.1 christos CPU (h_vbit) = opval;
2446 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2447 1.1 christos }
2448 1.1 christos {
2449 1.1 christos {
2450 1.1 christos BI opval = 0;
2451 1.1 christos CPU (h_xbit) = opval;
2452 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2453 1.1 christos }
2454 1.1 christos {
2455 1.1 christos BI opval = 0;
2456 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2457 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2458 1.1 christos }
2459 1.1 christos }
2460 1.1 christos }
2461 1.1 christos }
2462 1.1 christos
2463 1.1 christos #undef FLD
2464 1.1 christos }
2465 1.1 christos NEXT (vpc);
2466 1.1 christos
2467 1.1 christos CASE (sem, INSN_CMPUCWR) : /* [${Rs}${inc}],$Rd */
2468 1.1 christos {
2469 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2470 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2471 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2472 1.1 christos int UNUSED written = 0;
2473 1.1 christos IADDR UNUSED pc = abuf->addr;
2474 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2475 1.1 christos
2476 1.1 christos {
2477 1.1 christos SI tmp_tmpopd;
2478 1.1 christos SI tmp_tmpops;
2479 1.1 christos BI tmp_carry;
2480 1.1 christos SI tmp_newval;
2481 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
2482 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2483 1.1 christos tmp_carry = CPU (h_cbit);
2484 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2485 1.1 christos ((void) 0); /*nop*/
2486 1.1 christos {
2487 1.1 christos {
2488 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
2489 1.1 christos CPU (h_cbit) = opval;
2490 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2491 1.1 christos }
2492 1.1 christos {
2493 1.1 christos BI opval = LTSI (tmp_newval, 0);
2494 1.1 christos CPU (h_nbit) = opval;
2495 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2496 1.1 christos }
2497 1.1 christos {
2498 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2499 1.1 christos CPU (h_zbit) = opval;
2500 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2501 1.1 christos }
2502 1.1 christos {
2503 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
2504 1.1 christos CPU (h_vbit) = opval;
2505 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2506 1.1 christos }
2507 1.1 christos {
2508 1.1 christos {
2509 1.1 christos BI opval = 0;
2510 1.1 christos CPU (h_xbit) = opval;
2511 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2512 1.1 christos }
2513 1.1 christos {
2514 1.1 christos BI opval = 0;
2515 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2516 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2517 1.1 christos }
2518 1.1 christos }
2519 1.1 christos }
2520 1.1 christos }
2521 1.1 christos
2522 1.1 christos #undef FLD
2523 1.1 christos }
2524 1.1 christos NEXT (vpc);
2525 1.1 christos
2526 1.1 christos CASE (sem, INSN_MOVE_M_B_M) : /* move-m.b [${Rs}${inc}],${Rd} */
2527 1.1 christos {
2528 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2529 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2530 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2531 1.1 christos int UNUSED written = 0;
2532 1.1 christos IADDR UNUSED pc = abuf->addr;
2533 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2534 1.1 christos
2535 1.1 christos {
2536 1.1 christos SI tmp_tmp;
2537 1.1 christos tmp_tmp = ({ SI tmp_addr;
2538 1.1 christos QI tmp_tmp_mem;
2539 1.1 christos BI tmp_postinc;
2540 1.1 christos tmp_postinc = FLD (f_memmode);
2541 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2542 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2543 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2544 1.1 christos {
2545 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2546 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2547 1.1 christos }
2548 1.1 christos {
2549 1.1 christos SI opval = tmp_addr;
2550 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2551 1.1 christos written |= (1 << 10);
2552 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2553 1.1 christos }
2554 1.1 christos }
2555 1.1 christos }
2556 1.1 christos ; tmp_tmp_mem; });
2557 1.1 christos {
2558 1.1 christos SI tmp_oldregval;
2559 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
2560 1.1 christos {
2561 1.1 christos SI opval = ORSI (ANDSI (tmp_tmp, 255), ANDSI (tmp_oldregval, 0xffffff00));
2562 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2563 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2564 1.1 christos }
2565 1.1 christos }
2566 1.1 christos {
2567 1.1 christos {
2568 1.1 christos BI opval = LTQI (tmp_tmp, 0);
2569 1.1 christos CPU (h_nbit) = opval;
2570 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2571 1.1 christos }
2572 1.1 christos {
2573 1.1 christos BI opval = ANDIF (EQQI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2574 1.1 christos CPU (h_zbit) = opval;
2575 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2576 1.1 christos }
2577 1.1 christos SET_H_CBIT_MOVE (0);
2578 1.1 christos SET_H_VBIT_MOVE (0);
2579 1.1 christos {
2580 1.1 christos {
2581 1.1 christos BI opval = 0;
2582 1.1 christos CPU (h_xbit) = opval;
2583 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2584 1.1 christos }
2585 1.1 christos {
2586 1.1 christos BI opval = 0;
2587 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2588 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2589 1.1 christos }
2590 1.1 christos }
2591 1.1 christos }
2592 1.1 christos }
2593 1.1 christos
2594 1.1 christos abuf->written = written;
2595 1.1 christos #undef FLD
2596 1.1 christos }
2597 1.1 christos NEXT (vpc);
2598 1.1 christos
2599 1.1 christos CASE (sem, INSN_MOVE_M_W_M) : /* move-m.w [${Rs}${inc}],${Rd} */
2600 1.1 christos {
2601 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2602 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2603 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2604 1.1 christos int UNUSED written = 0;
2605 1.1 christos IADDR UNUSED pc = abuf->addr;
2606 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2607 1.1 christos
2608 1.1 christos {
2609 1.1 christos SI tmp_tmp;
2610 1.1 christos tmp_tmp = ({ SI tmp_addr;
2611 1.1 christos HI tmp_tmp_mem;
2612 1.1 christos BI tmp_postinc;
2613 1.1 christos tmp_postinc = FLD (f_memmode);
2614 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2615 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2616 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2617 1.1 christos {
2618 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2619 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2620 1.1 christos }
2621 1.1 christos {
2622 1.1 christos SI opval = tmp_addr;
2623 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2624 1.1 christos written |= (1 << 10);
2625 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2626 1.1 christos }
2627 1.1 christos }
2628 1.1 christos }
2629 1.1 christos ; tmp_tmp_mem; });
2630 1.1 christos {
2631 1.1 christos SI tmp_oldregval;
2632 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
2633 1.1 christos {
2634 1.1 christos SI opval = ORSI (ANDSI (tmp_tmp, 65535), ANDSI (tmp_oldregval, 0xffff0000));
2635 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2636 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2637 1.1 christos }
2638 1.1 christos }
2639 1.1 christos {
2640 1.1 christos {
2641 1.1 christos BI opval = LTHI (tmp_tmp, 0);
2642 1.1 christos CPU (h_nbit) = opval;
2643 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2644 1.1 christos }
2645 1.1 christos {
2646 1.1 christos BI opval = ANDIF (EQHI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2647 1.1 christos CPU (h_zbit) = opval;
2648 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2649 1.1 christos }
2650 1.1 christos SET_H_CBIT_MOVE (0);
2651 1.1 christos SET_H_VBIT_MOVE (0);
2652 1.1 christos {
2653 1.1 christos {
2654 1.1 christos BI opval = 0;
2655 1.1 christos CPU (h_xbit) = opval;
2656 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2657 1.1 christos }
2658 1.1 christos {
2659 1.1 christos BI opval = 0;
2660 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2661 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2662 1.1 christos }
2663 1.1 christos }
2664 1.1 christos }
2665 1.1 christos }
2666 1.1 christos
2667 1.1 christos abuf->written = written;
2668 1.1 christos #undef FLD
2669 1.1 christos }
2670 1.1 christos NEXT (vpc);
2671 1.1 christos
2672 1.1 christos CASE (sem, INSN_MOVE_M_D_M) : /* move-m.d [${Rs}${inc}],${Rd} */
2673 1.1 christos {
2674 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2675 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2676 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2677 1.1 christos int UNUSED written = 0;
2678 1.1 christos IADDR UNUSED pc = abuf->addr;
2679 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2680 1.1 christos
2681 1.1 christos {
2682 1.1 christos SI tmp_tmp;
2683 1.1 christos tmp_tmp = ({ SI tmp_addr;
2684 1.1 christos SI tmp_tmp_mem;
2685 1.1 christos BI tmp_postinc;
2686 1.1 christos tmp_postinc = FLD (f_memmode);
2687 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2688 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
2689 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2690 1.1 christos {
2691 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2692 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
2693 1.1 christos }
2694 1.1 christos {
2695 1.1 christos SI opval = tmp_addr;
2696 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2697 1.1 christos written |= (1 << 9);
2698 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2699 1.1 christos }
2700 1.1 christos }
2701 1.1 christos }
2702 1.1 christos ; tmp_tmp_mem; });
2703 1.1 christos {
2704 1.1 christos SI opval = tmp_tmp;
2705 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2706 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2707 1.1 christos }
2708 1.1 christos {
2709 1.1 christos {
2710 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2711 1.1 christos CPU (h_nbit) = opval;
2712 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2713 1.1 christos }
2714 1.1 christos {
2715 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2716 1.1 christos CPU (h_zbit) = opval;
2717 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2718 1.1 christos }
2719 1.1 christos SET_H_CBIT_MOVE (0);
2720 1.1 christos SET_H_VBIT_MOVE (0);
2721 1.1 christos {
2722 1.1 christos {
2723 1.1 christos BI opval = 0;
2724 1.1 christos CPU (h_xbit) = opval;
2725 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2726 1.1 christos }
2727 1.1 christos {
2728 1.1 christos BI opval = 0;
2729 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2730 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2731 1.1 christos }
2732 1.1 christos }
2733 1.1 christos }
2734 1.1 christos }
2735 1.1 christos
2736 1.1 christos abuf->written = written;
2737 1.1 christos #undef FLD
2738 1.1 christos }
2739 1.1 christos NEXT (vpc);
2740 1.1 christos
2741 1.1 christos CASE (sem, INSN_MOVS_M_B_M) : /* movs-m.b [${Rs}${inc}],${Rd} */
2742 1.1 christos {
2743 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2744 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2745 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2746 1.1 christos int UNUSED written = 0;
2747 1.1 christos IADDR UNUSED pc = abuf->addr;
2748 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2749 1.1 christos
2750 1.1 christos {
2751 1.1 christos SI tmp_tmp;
2752 1.1 christos tmp_tmp = EXTQISI (({ SI tmp_addr;
2753 1.1 christos QI tmp_tmp_mem;
2754 1.1 christos BI tmp_postinc;
2755 1.1 christos tmp_postinc = FLD (f_memmode);
2756 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2757 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2758 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2759 1.1 christos {
2760 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2761 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2762 1.1 christos }
2763 1.1 christos {
2764 1.1 christos SI opval = tmp_addr;
2765 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2766 1.1 christos written |= (1 << 8);
2767 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2768 1.1 christos }
2769 1.1 christos }
2770 1.1 christos }
2771 1.1 christos ; tmp_tmp_mem; }));
2772 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2773 1.1 christos {
2774 1.1 christos SI opval = tmp_tmp;
2775 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2776 1.1 christos written |= (1 << 8);
2777 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2778 1.1 christos }
2779 1.1 christos } else {
2780 1.1 christos {
2781 1.1 christos SI opval = tmp_tmp;
2782 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2783 1.1 christos written |= (1 << 7);
2784 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2785 1.1 christos }
2786 1.1 christos }
2787 1.1 christos {
2788 1.1 christos {
2789 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2790 1.1 christos CPU (h_nbit) = opval;
2791 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2792 1.1 christos }
2793 1.1 christos {
2794 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2795 1.1 christos CPU (h_zbit) = opval;
2796 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2797 1.1 christos }
2798 1.1 christos SET_H_CBIT_MOVE (0);
2799 1.1 christos SET_H_VBIT_MOVE (0);
2800 1.1 christos {
2801 1.1 christos {
2802 1.1 christos BI opval = 0;
2803 1.1 christos CPU (h_xbit) = opval;
2804 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2805 1.1 christos }
2806 1.1 christos {
2807 1.1 christos BI opval = 0;
2808 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2809 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2810 1.1 christos }
2811 1.1 christos }
2812 1.1 christos }
2813 1.1 christos }
2814 1.1 christos
2815 1.1 christos abuf->written = written;
2816 1.1 christos #undef FLD
2817 1.1 christos }
2818 1.1 christos NEXT (vpc);
2819 1.1 christos
2820 1.1 christos CASE (sem, INSN_MOVS_M_W_M) : /* movs-m.w [${Rs}${inc}],${Rd} */
2821 1.1 christos {
2822 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2823 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2824 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2825 1.1 christos int UNUSED written = 0;
2826 1.1 christos IADDR UNUSED pc = abuf->addr;
2827 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2828 1.1 christos
2829 1.1 christos {
2830 1.1 christos SI tmp_tmp;
2831 1.1 christos tmp_tmp = EXTHISI (({ SI tmp_addr;
2832 1.1 christos HI tmp_tmp_mem;
2833 1.1 christos BI tmp_postinc;
2834 1.1 christos tmp_postinc = FLD (f_memmode);
2835 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2836 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2837 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2838 1.1 christos {
2839 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2840 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2841 1.1 christos }
2842 1.1 christos {
2843 1.1 christos SI opval = tmp_addr;
2844 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2845 1.1 christos written |= (1 << 8);
2846 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2847 1.1 christos }
2848 1.1 christos }
2849 1.1 christos }
2850 1.1 christos ; tmp_tmp_mem; }));
2851 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2852 1.1 christos {
2853 1.1 christos SI opval = tmp_tmp;
2854 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2855 1.1 christos written |= (1 << 8);
2856 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2857 1.1 christos }
2858 1.1 christos } else {
2859 1.1 christos {
2860 1.1 christos SI opval = tmp_tmp;
2861 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2862 1.1 christos written |= (1 << 7);
2863 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2864 1.1 christos }
2865 1.1 christos }
2866 1.1 christos {
2867 1.1 christos {
2868 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2869 1.1 christos CPU (h_nbit) = opval;
2870 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2871 1.1 christos }
2872 1.1 christos {
2873 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2874 1.1 christos CPU (h_zbit) = opval;
2875 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2876 1.1 christos }
2877 1.1 christos SET_H_CBIT_MOVE (0);
2878 1.1 christos SET_H_VBIT_MOVE (0);
2879 1.1 christos {
2880 1.1 christos {
2881 1.1 christos BI opval = 0;
2882 1.1 christos CPU (h_xbit) = opval;
2883 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2884 1.1 christos }
2885 1.1 christos {
2886 1.1 christos BI opval = 0;
2887 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2888 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2889 1.1 christos }
2890 1.1 christos }
2891 1.1 christos }
2892 1.1 christos }
2893 1.1 christos
2894 1.1 christos abuf->written = written;
2895 1.1 christos #undef FLD
2896 1.1 christos }
2897 1.1 christos NEXT (vpc);
2898 1.1 christos
2899 1.1 christos CASE (sem, INSN_MOVU_M_B_M) : /* movu-m.b [${Rs}${inc}],${Rd} */
2900 1.1 christos {
2901 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2902 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2903 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2904 1.1 christos int UNUSED written = 0;
2905 1.1 christos IADDR UNUSED pc = abuf->addr;
2906 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2907 1.1 christos
2908 1.1 christos {
2909 1.1 christos SI tmp_tmp;
2910 1.1 christos tmp_tmp = ZEXTQISI (({ SI tmp_addr;
2911 1.1 christos QI tmp_tmp_mem;
2912 1.1 christos BI tmp_postinc;
2913 1.1 christos tmp_postinc = FLD (f_memmode);
2914 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2915 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2916 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2917 1.1 christos {
2918 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2919 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2920 1.1 christos }
2921 1.1 christos {
2922 1.1 christos SI opval = tmp_addr;
2923 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2924 1.1 christos written |= (1 << 8);
2925 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2926 1.1 christos }
2927 1.1 christos }
2928 1.1 christos }
2929 1.1 christos ; tmp_tmp_mem; }));
2930 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2931 1.1 christos {
2932 1.1 christos SI opval = tmp_tmp;
2933 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2934 1.1 christos written |= (1 << 8);
2935 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2936 1.1 christos }
2937 1.1 christos } else {
2938 1.1 christos {
2939 1.1 christos SI opval = tmp_tmp;
2940 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2941 1.1 christos written |= (1 << 7);
2942 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2943 1.1 christos }
2944 1.1 christos }
2945 1.1 christos {
2946 1.1 christos {
2947 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2948 1.1 christos CPU (h_nbit) = opval;
2949 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2950 1.1 christos }
2951 1.1 christos {
2952 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2953 1.1 christos CPU (h_zbit) = opval;
2954 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2955 1.1 christos }
2956 1.1 christos SET_H_CBIT_MOVE (0);
2957 1.1 christos SET_H_VBIT_MOVE (0);
2958 1.1 christos {
2959 1.1 christos {
2960 1.1 christos BI opval = 0;
2961 1.1 christos CPU (h_xbit) = opval;
2962 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2963 1.1 christos }
2964 1.1 christos {
2965 1.1 christos BI opval = 0;
2966 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2967 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2968 1.1 christos }
2969 1.1 christos }
2970 1.1 christos }
2971 1.1 christos }
2972 1.1 christos
2973 1.1 christos abuf->written = written;
2974 1.1 christos #undef FLD
2975 1.1 christos }
2976 1.1 christos NEXT (vpc);
2977 1.1 christos
2978 1.1 christos CASE (sem, INSN_MOVU_M_W_M) : /* movu-m.w [${Rs}${inc}],${Rd} */
2979 1.1 christos {
2980 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2981 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2982 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2983 1.1 christos int UNUSED written = 0;
2984 1.1 christos IADDR UNUSED pc = abuf->addr;
2985 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2986 1.1 christos
2987 1.1 christos {
2988 1.1 christos SI tmp_tmp;
2989 1.1 christos tmp_tmp = ZEXTHISI (({ SI tmp_addr;
2990 1.1 christos HI tmp_tmp_mem;
2991 1.1 christos BI tmp_postinc;
2992 1.1 christos tmp_postinc = FLD (f_memmode);
2993 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2994 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2995 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2996 1.1 christos {
2997 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2998 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2999 1.1 christos }
3000 1.1 christos {
3001 1.1 christos SI opval = tmp_addr;
3002 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3003 1.1 christos written |= (1 << 8);
3004 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3005 1.1 christos }
3006 1.1 christos }
3007 1.1 christos }
3008 1.1 christos ; tmp_tmp_mem; }));
3009 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
3010 1.1 christos {
3011 1.1 christos SI opval = tmp_tmp;
3012 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3013 1.1 christos written |= (1 << 8);
3014 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3015 1.1 christos }
3016 1.1 christos } else {
3017 1.1 christos {
3018 1.1 christos SI opval = tmp_tmp;
3019 1.1 christos SET_H_GR (FLD (f_operand2), opval);
3020 1.1 christos written |= (1 << 7);
3021 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3022 1.1 christos }
3023 1.1 christos }
3024 1.1 christos {
3025 1.1 christos {
3026 1.1 christos BI opval = LTSI (tmp_tmp, 0);
3027 1.1 christos CPU (h_nbit) = opval;
3028 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
3029 1.1 christos }
3030 1.1 christos {
3031 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
3032 1.1 christos CPU (h_zbit) = opval;
3033 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
3034 1.1 christos }
3035 1.1 christos SET_H_CBIT_MOVE (0);
3036 1.1 christos SET_H_VBIT_MOVE (0);
3037 1.1 christos {
3038 1.1 christos {
3039 1.1 christos BI opval = 0;
3040 1.1 christos CPU (h_xbit) = opval;
3041 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3042 1.1 christos }
3043 1.1 christos {
3044 1.1 christos BI opval = 0;
3045 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3046 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3047 1.1 christos }
3048 1.1 christos }
3049 1.1 christos }
3050 1.1 christos }
3051 1.1 christos
3052 1.1 christos abuf->written = written;
3053 1.1 christos #undef FLD
3054 1.1 christos }
3055 1.1 christos NEXT (vpc);
3056 1.1 christos
3057 1.1 christos CASE (sem, INSN_MOVE_R_SPRV32) : /* move ${Rs},${Pd} */
3058 1.1 christos {
3059 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3060 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3061 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
3062 1.1 christos int UNUSED written = 0;
3063 1.1 christos IADDR UNUSED pc = abuf->addr;
3064 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3065 1.1 christos
3066 1.1 christos {
3067 1.1 christos SI tmp_tmp;
3068 1.1 christos SI tmp_rno;
3069 1.1 christos tmp_tmp = GET_H_GR (FLD (f_operand1));
3070 1.1 christos tmp_rno = FLD (f_operand2);
3071 1.1 christos if (ORIF (ORIF (EQSI (tmp_rno, 0), EQSI (tmp_rno, 1)), ORIF (EQSI (tmp_rno, 4), EQSI (tmp_rno, 8)))) {
3072 1.1 christos cgen_rtx_error (current_cpu, "move-r-spr: trying to set a read-only special register");
3073 1.1 christos }
3074 1.1 christos else {
3075 1.1 christos {
3076 1.1 christos SI opval = tmp_tmp;
3077 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3078 1.1 christos written |= (1 << 2);
3079 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3080 1.1 christos }
3081 1.1 christos }
3082 1.1 christos {
3083 1.1 christos {
3084 1.1 christos BI opval = 0;
3085 1.1 christos CPU (h_xbit) = opval;
3086 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3087 1.1 christos }
3088 1.1 christos {
3089 1.1 christos BI opval = 0;
3090 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3091 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3092 1.1 christos }
3093 1.1 christos }
3094 1.1 christos }
3095 1.1 christos
3096 1.1 christos abuf->written = written;
3097 1.1 christos #undef FLD
3098 1.1 christos }
3099 1.1 christos NEXT (vpc);
3100 1.1 christos
3101 1.1 christos CASE (sem, INSN_MOVE_SPR_RV32) : /* move ${Ps},${Rd-sfield} */
3102 1.1 christos {
3103 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3104 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3105 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
3106 1.1 christos int UNUSED written = 0;
3107 1.1 christos IADDR UNUSED pc = abuf->addr;
3108 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3109 1.1 christos
3110 1.1 christos {
3111 1.1 christos SI tmp_prno;
3112 1.1 christos SI tmp_newval;
3113 1.1 christos tmp_prno = FLD (f_operand2);
3114 1.1 christos tmp_newval = GET_H_SR (FLD (f_operand2));
3115 1.1 christos if (EQSI (tmp_prno, 2)) {
3116 1.1 christos {
3117 1.1 christos SI opval = tmp_newval;
3118 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3119 1.1 christos written |= (1 << 4);
3120 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3121 1.1 christos }
3122 1.1 christos }
3123 1.1 christos else if (EQSI (tmp_prno, 3)) {
3124 1.1 christos {
3125 1.1 christos SI tmp_oldregval;
3126 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3127 1.1 christos {
3128 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3129 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3130 1.1 christos written |= (1 << 4);
3131 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3132 1.1 christos }
3133 1.1 christos }
3134 1.1 christos }
3135 1.1 christos else if (EQSI (tmp_prno, 5)) {
3136 1.1 christos {
3137 1.1 christos SI opval = tmp_newval;
3138 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3139 1.1 christos written |= (1 << 4);
3140 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3141 1.1 christos }
3142 1.1 christos }
3143 1.1 christos else if (EQSI (tmp_prno, 6)) {
3144 1.1 christos {
3145 1.1 christos SI opval = tmp_newval;
3146 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3147 1.1 christos written |= (1 << 4);
3148 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3149 1.1 christos }
3150 1.1 christos }
3151 1.1 christos else if (EQSI (tmp_prno, 7)) {
3152 1.1 christos {
3153 1.1 christos SI opval = tmp_newval;
3154 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3155 1.1 christos written |= (1 << 4);
3156 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3157 1.1 christos }
3158 1.1 christos }
3159 1.1 christos else if (EQSI (tmp_prno, 9)) {
3160 1.1 christos {
3161 1.1 christos SI opval = tmp_newval;
3162 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3163 1.1 christos written |= (1 << 4);
3164 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3165 1.1 christos }
3166 1.1 christos }
3167 1.1 christos else if (EQSI (tmp_prno, 10)) {
3168 1.1 christos {
3169 1.1 christos SI opval = tmp_newval;
3170 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3171 1.1 christos written |= (1 << 4);
3172 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3173 1.1 christos }
3174 1.1 christos }
3175 1.1 christos else if (EQSI (tmp_prno, 11)) {
3176 1.1 christos {
3177 1.1 christos SI opval = tmp_newval;
3178 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3179 1.1 christos written |= (1 << 4);
3180 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3181 1.1 christos }
3182 1.1 christos }
3183 1.1 christos else if (EQSI (tmp_prno, 12)) {
3184 1.1 christos {
3185 1.1 christos SI opval = tmp_newval;
3186 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3187 1.1 christos written |= (1 << 4);
3188 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3189 1.1 christos }
3190 1.1 christos }
3191 1.1 christos else if (EQSI (tmp_prno, 13)) {
3192 1.1 christos {
3193 1.1 christos SI opval = tmp_newval;
3194 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3195 1.1 christos written |= (1 << 4);
3196 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3197 1.1 christos }
3198 1.1 christos }
3199 1.1 christos else if (EQSI (tmp_prno, 14)) {
3200 1.1 christos {
3201 1.1 christos SI opval = tmp_newval;
3202 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3203 1.1 christos written |= (1 << 4);
3204 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3205 1.1 christos }
3206 1.1 christos }
3207 1.1 christos else if (EQSI (tmp_prno, 15)) {
3208 1.1 christos {
3209 1.1 christos SI opval = tmp_newval;
3210 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3211 1.1 christos written |= (1 << 4);
3212 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3213 1.1 christos }
3214 1.1 christos }
3215 1.1 christos else if (EQSI (tmp_prno, 0)) {
3216 1.1 christos {
3217 1.1 christos SI tmp_oldregval;
3218 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3219 1.1 christos {
3220 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3221 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3222 1.1 christos written |= (1 << 4);
3223 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3224 1.1 christos }
3225 1.1 christos }
3226 1.1 christos }
3227 1.1 christos else if (EQSI (tmp_prno, 1)) {
3228 1.1 christos {
3229 1.1 christos SI tmp_oldregval;
3230 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3231 1.1 christos {
3232 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3233 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3234 1.1 christos written |= (1 << 4);
3235 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3236 1.1 christos }
3237 1.1 christos }
3238 1.1 christos }
3239 1.1 christos else if (EQSI (tmp_prno, 4)) {
3240 1.1 christos {
3241 1.1 christos SI tmp_oldregval;
3242 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3243 1.1 christos {
3244 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
3245 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3246 1.1 christos written |= (1 << 4);
3247 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3248 1.1 christos }
3249 1.1 christos }
3250 1.1 christos }
3251 1.1 christos else if (EQSI (tmp_prno, 8)) {
3252 1.1 christos {
3253 1.1 christos SI opval = tmp_newval;
3254 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3255 1.1 christos written |= (1 << 4);
3256 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3257 1.1 christos }
3258 1.1 christos }
3259 1.1 christos else {
3260 1.1 christos cgen_rtx_error (current_cpu, "move-spr-r from unimplemented register");
3261 1.1 christos }
3262 1.1 christos {
3263 1.1 christos {
3264 1.1 christos BI opval = 0;
3265 1.1 christos CPU (h_xbit) = opval;
3266 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3267 1.1 christos }
3268 1.1 christos {
3269 1.1 christos BI opval = 0;
3270 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3271 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3272 1.1 christos }
3273 1.1 christos }
3274 1.1 christos }
3275 1.1 christos
3276 1.1 christos abuf->written = written;
3277 1.1 christos #undef FLD
3278 1.1 christos }
3279 1.1 christos NEXT (vpc);
3280 1.1 christos
3281 1.1 christos CASE (sem, INSN_MOVE_M_SPRV32) : /* move [${Rs}${inc}],${Pd} */
3282 1.1 christos {
3283 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3284 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3285 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
3286 1.1 christos int UNUSED written = 0;
3287 1.1 christos IADDR UNUSED pc = abuf->addr;
3288 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3289 1.1 christos
3290 1.1 christos {
3291 1.1 christos SI tmp_rno;
3292 1.1 christos SI tmp_newval;
3293 1.1 christos tmp_rno = FLD (f_operand2);
3294 1.1 christos if (EQSI (tmp_rno, 2)) {
3295 1.1 christos tmp_newval = ({ SI tmp_addr;
3296 1.1 christos SI tmp_tmp_mem;
3297 1.1 christos BI tmp_postinc;
3298 1.1 christos tmp_postinc = FLD (f_memmode);
3299 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3300 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3301 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3302 1.1 christos {
3303 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3304 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3305 1.1 christos }
3306 1.1 christos {
3307 1.1 christos SI opval = tmp_addr;
3308 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3309 1.1 christos written |= (1 << 8);
3310 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3311 1.1 christos }
3312 1.1 christos }
3313 1.1 christos }
3314 1.1 christos ; tmp_tmp_mem; });
3315 1.1 christos }
3316 1.1 christos else if (EQSI (tmp_rno, 3)) {
3317 1.1 christos tmp_newval = EXTQISI (({ SI tmp_addr;
3318 1.1 christos QI tmp_tmp_mem;
3319 1.1 christos BI tmp_postinc;
3320 1.1 christos tmp_postinc = FLD (f_memmode);
3321 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3322 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
3323 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3324 1.1 christos {
3325 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3326 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
3327 1.1 christos }
3328 1.1 christos {
3329 1.1 christos SI opval = tmp_addr;
3330 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3331 1.1 christos written |= (1 << 8);
3332 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3333 1.1 christos }
3334 1.1 christos }
3335 1.1 christos }
3336 1.1 christos ; tmp_tmp_mem; }));
3337 1.1 christos }
3338 1.1 christos else if (EQSI (tmp_rno, 5)) {
3339 1.1 christos tmp_newval = ({ SI tmp_addr;
3340 1.1 christos SI tmp_tmp_mem;
3341 1.1 christos BI tmp_postinc;
3342 1.1 christos tmp_postinc = FLD (f_memmode);
3343 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3344 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3345 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3346 1.1 christos {
3347 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3348 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3349 1.1 christos }
3350 1.1 christos {
3351 1.1 christos SI opval = tmp_addr;
3352 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3353 1.1 christos written |= (1 << 8);
3354 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3355 1.1 christos }
3356 1.1 christos }
3357 1.1 christos }
3358 1.1 christos ; tmp_tmp_mem; });
3359 1.1 christos }
3360 1.1 christos else if (EQSI (tmp_rno, 6)) {
3361 1.1 christos tmp_newval = ({ SI tmp_addr;
3362 1.1 christos SI tmp_tmp_mem;
3363 1.1 christos BI tmp_postinc;
3364 1.1 christos tmp_postinc = FLD (f_memmode);
3365 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3366 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3367 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3368 1.1 christos {
3369 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3370 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3371 1.1 christos }
3372 1.1 christos {
3373 1.1 christos SI opval = tmp_addr;
3374 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3375 1.1 christos written |= (1 << 8);
3376 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3377 1.1 christos }
3378 1.1 christos }
3379 1.1 christos }
3380 1.1 christos ; tmp_tmp_mem; });
3381 1.1 christos }
3382 1.1 christos else if (EQSI (tmp_rno, 7)) {
3383 1.1 christos tmp_newval = ({ SI tmp_addr;
3384 1.1 christos SI tmp_tmp_mem;
3385 1.1 christos BI tmp_postinc;
3386 1.1 christos tmp_postinc = FLD (f_memmode);
3387 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3388 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3389 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3390 1.1 christos {
3391 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3392 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3393 1.1 christos }
3394 1.1 christos {
3395 1.1 christos SI opval = tmp_addr;
3396 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3397 1.1 christos written |= (1 << 8);
3398 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3399 1.1 christos }
3400 1.1 christos }
3401 1.1 christos }
3402 1.1 christos ; tmp_tmp_mem; });
3403 1.1 christos }
3404 1.1 christos else if (EQSI (tmp_rno, 9)) {
3405 1.1 christos tmp_newval = ({ SI tmp_addr;
3406 1.1 christos SI tmp_tmp_mem;
3407 1.1 christos BI tmp_postinc;
3408 1.1 christos tmp_postinc = FLD (f_memmode);
3409 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3410 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3411 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3412 1.1 christos {
3413 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3414 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3415 1.1 christos }
3416 1.1 christos {
3417 1.1 christos SI opval = tmp_addr;
3418 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3419 1.1 christos written |= (1 << 8);
3420 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3421 1.1 christos }
3422 1.1 christos }
3423 1.1 christos }
3424 1.1 christos ; tmp_tmp_mem; });
3425 1.1 christos }
3426 1.1 christos else if (EQSI (tmp_rno, 10)) {
3427 1.1 christos tmp_newval = ({ SI tmp_addr;
3428 1.1 christos SI tmp_tmp_mem;
3429 1.1 christos BI tmp_postinc;
3430 1.1 christos tmp_postinc = FLD (f_memmode);
3431 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3432 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3433 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3434 1.1 christos {
3435 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3436 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3437 1.1 christos }
3438 1.1 christos {
3439 1.1 christos SI opval = tmp_addr;
3440 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3441 1.1 christos written |= (1 << 8);
3442 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3443 1.1 christos }
3444 1.1 christos }
3445 1.1 christos }
3446 1.1 christos ; tmp_tmp_mem; });
3447 1.1 christos }
3448 1.1 christos else if (EQSI (tmp_rno, 11)) {
3449 1.1 christos tmp_newval = ({ SI tmp_addr;
3450 1.1 christos SI tmp_tmp_mem;
3451 1.1 christos BI tmp_postinc;
3452 1.1 christos tmp_postinc = FLD (f_memmode);
3453 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3454 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3455 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3456 1.1 christos {
3457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3459 1.1 christos }
3460 1.1 christos {
3461 1.1 christos SI opval = tmp_addr;
3462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3463 1.1 christos written |= (1 << 8);
3464 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3465 1.1 christos }
3466 1.1 christos }
3467 1.1 christos }
3468 1.1 christos ; tmp_tmp_mem; });
3469 1.1 christos }
3470 1.1 christos else if (EQSI (tmp_rno, 12)) {
3471 1.1 christos tmp_newval = ({ SI tmp_addr;
3472 1.1 christos SI tmp_tmp_mem;
3473 1.1 christos BI tmp_postinc;
3474 1.1 christos tmp_postinc = FLD (f_memmode);
3475 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3476 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3477 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3478 1.1 christos {
3479 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3480 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3481 1.1 christos }
3482 1.1 christos {
3483 1.1 christos SI opval = tmp_addr;
3484 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3485 1.1 christos written |= (1 << 8);
3486 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3487 1.1 christos }
3488 1.1 christos }
3489 1.1 christos }
3490 1.1 christos ; tmp_tmp_mem; });
3491 1.1 christos }
3492 1.1 christos else if (EQSI (tmp_rno, 13)) {
3493 1.1 christos tmp_newval = ({ SI tmp_addr;
3494 1.1 christos SI tmp_tmp_mem;
3495 1.1 christos BI tmp_postinc;
3496 1.1 christos tmp_postinc = FLD (f_memmode);
3497 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3498 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3499 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3500 1.1 christos {
3501 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3502 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3503 1.1 christos }
3504 1.1 christos {
3505 1.1 christos SI opval = tmp_addr;
3506 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3507 1.1 christos written |= (1 << 8);
3508 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3509 1.1 christos }
3510 1.1 christos }
3511 1.1 christos }
3512 1.1 christos ; tmp_tmp_mem; });
3513 1.1 christos }
3514 1.1 christos else if (EQSI (tmp_rno, 14)) {
3515 1.1 christos tmp_newval = ({ SI tmp_addr;
3516 1.1 christos SI tmp_tmp_mem;
3517 1.1 christos BI tmp_postinc;
3518 1.1 christos tmp_postinc = FLD (f_memmode);
3519 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3520 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3521 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3522 1.1 christos {
3523 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3524 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3525 1.1 christos }
3526 1.1 christos {
3527 1.1 christos SI opval = tmp_addr;
3528 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3529 1.1 christos written |= (1 << 8);
3530 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3531 1.1 christos }
3532 1.1 christos }
3533 1.1 christos }
3534 1.1 christos ; tmp_tmp_mem; });
3535 1.1 christos }
3536 1.1 christos else if (EQSI (tmp_rno, 15)) {
3537 1.1 christos tmp_newval = ({ SI tmp_addr;
3538 1.1 christos SI tmp_tmp_mem;
3539 1.1 christos BI tmp_postinc;
3540 1.1 christos tmp_postinc = FLD (f_memmode);
3541 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3542 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3543 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3544 1.1 christos {
3545 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3546 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3547 1.1 christos }
3548 1.1 christos {
3549 1.1 christos SI opval = tmp_addr;
3550 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3551 1.1 christos written |= (1 << 8);
3552 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3553 1.1 christos }
3554 1.1 christos }
3555 1.1 christos }
3556 1.1 christos ; tmp_tmp_mem; });
3557 1.1 christos }
3558 1.1 christos else {
3559 1.1 christos cgen_rtx_error (current_cpu, "Trying to set unimplemented special register");
3560 1.1 christos }
3561 1.1 christos {
3562 1.1 christos SI opval = tmp_newval;
3563 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3564 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3565 1.1 christos }
3566 1.1 christos {
3567 1.1 christos {
3568 1.1 christos BI opval = 0;
3569 1.1 christos CPU (h_xbit) = opval;
3570 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3571 1.1 christos }
3572 1.1 christos {
3573 1.1 christos BI opval = 0;
3574 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3575 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3576 1.1 christos }
3577 1.1 christos }
3578 1.1 christos }
3579 1.1 christos
3580 1.1 christos abuf->written = written;
3581 1.1 christos #undef FLD
3582 1.1 christos }
3583 1.1 christos NEXT (vpc);
3584 1.1 christos
3585 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P2) : /* move ${const32},${Pd} */
3586 1.1 christos {
3587 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3588 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3589 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3590 1.1 christos int UNUSED written = 0;
3591 1.1 christos IADDR UNUSED pc = abuf->addr;
3592 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3593 1.1 christos
3594 1.1 christos {
3595 1.1 christos {
3596 1.1 christos SI opval = FLD (f_indir_pc__dword);
3597 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3598 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3599 1.1 christos }
3600 1.1 christos {
3601 1.1 christos {
3602 1.1 christos BI opval = 0;
3603 1.1 christos CPU (h_xbit) = opval;
3604 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3605 1.1 christos }
3606 1.1 christos {
3607 1.1 christos BI opval = 0;
3608 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3609 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3610 1.1 christos }
3611 1.1 christos }
3612 1.1 christos }
3613 1.1 christos
3614 1.1 christos #undef FLD
3615 1.1 christos }
3616 1.1 christos NEXT (vpc);
3617 1.1 christos
3618 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P3) : /* move ${const32},${Pd} */
3619 1.1 christos {
3620 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3621 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3622 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3623 1.1 christos int UNUSED written = 0;
3624 1.1 christos IADDR UNUSED pc = abuf->addr;
3625 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3626 1.1 christos
3627 1.1 christos {
3628 1.1 christos {
3629 1.1 christos SI opval = FLD (f_indir_pc__dword);
3630 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3631 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3632 1.1 christos }
3633 1.1 christos {
3634 1.1 christos {
3635 1.1 christos BI opval = 0;
3636 1.1 christos CPU (h_xbit) = opval;
3637 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3638 1.1 christos }
3639 1.1 christos {
3640 1.1 christos BI opval = 0;
3641 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3642 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3643 1.1 christos }
3644 1.1 christos }
3645 1.1 christos }
3646 1.1 christos
3647 1.1 christos #undef FLD
3648 1.1 christos }
3649 1.1 christos NEXT (vpc);
3650 1.1 christos
3651 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P5) : /* move ${const32},${Pd} */
3652 1.1 christos {
3653 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3654 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3655 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3656 1.1 christos int UNUSED written = 0;
3657 1.1 christos IADDR UNUSED pc = abuf->addr;
3658 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3659 1.1 christos
3660 1.1 christos {
3661 1.1 christos {
3662 1.1 christos SI opval = FLD (f_indir_pc__dword);
3663 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3664 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3665 1.1 christos }
3666 1.1 christos {
3667 1.1 christos {
3668 1.1 christos BI opval = 0;
3669 1.1 christos CPU (h_xbit) = opval;
3670 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3671 1.1 christos }
3672 1.1 christos {
3673 1.1 christos BI opval = 0;
3674 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3675 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3676 1.1 christos }
3677 1.1 christos }
3678 1.1 christos }
3679 1.1 christos
3680 1.1 christos #undef FLD
3681 1.1 christos }
3682 1.1 christos NEXT (vpc);
3683 1.1 christos
3684 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P6) : /* move ${const32},${Pd} */
3685 1.1 christos {
3686 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3687 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3688 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3689 1.1 christos int UNUSED written = 0;
3690 1.1 christos IADDR UNUSED pc = abuf->addr;
3691 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3692 1.1 christos
3693 1.1 christos {
3694 1.1 christos {
3695 1.1 christos SI opval = FLD (f_indir_pc__dword);
3696 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3697 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3698 1.1 christos }
3699 1.1 christos {
3700 1.1 christos {
3701 1.1 christos BI opval = 0;
3702 1.1 christos CPU (h_xbit) = opval;
3703 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3704 1.1 christos }
3705 1.1 christos {
3706 1.1 christos BI opval = 0;
3707 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3708 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3709 1.1 christos }
3710 1.1 christos }
3711 1.1 christos }
3712 1.1 christos
3713 1.1 christos #undef FLD
3714 1.1 christos }
3715 1.1 christos NEXT (vpc);
3716 1.1 christos
3717 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P7) : /* move ${const32},${Pd} */
3718 1.1 christos {
3719 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3720 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3721 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3722 1.1 christos int UNUSED written = 0;
3723 1.1 christos IADDR UNUSED pc = abuf->addr;
3724 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3725 1.1 christos
3726 1.1 christos {
3727 1.1 christos {
3728 1.1 christos SI opval = FLD (f_indir_pc__dword);
3729 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3730 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3731 1.1 christos }
3732 1.1 christos {
3733 1.1 christos {
3734 1.1 christos BI opval = 0;
3735 1.1 christos CPU (h_xbit) = opval;
3736 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3737 1.1 christos }
3738 1.1 christos {
3739 1.1 christos BI opval = 0;
3740 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3741 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3742 1.1 christos }
3743 1.1 christos }
3744 1.1 christos }
3745 1.1 christos
3746 1.1 christos #undef FLD
3747 1.1 christos }
3748 1.1 christos NEXT (vpc);
3749 1.1 christos
3750 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P9) : /* move ${const32},${Pd} */
3751 1.1 christos {
3752 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3753 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3754 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3755 1.1 christos int UNUSED written = 0;
3756 1.1 christos IADDR UNUSED pc = abuf->addr;
3757 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3758 1.1 christos
3759 1.1 christos {
3760 1.1 christos {
3761 1.1 christos SI opval = FLD (f_indir_pc__dword);
3762 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3763 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3764 1.1 christos }
3765 1.1 christos {
3766 1.1 christos {
3767 1.1 christos BI opval = 0;
3768 1.1 christos CPU (h_xbit) = opval;
3769 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3770 1.1 christos }
3771 1.1 christos {
3772 1.1 christos BI opval = 0;
3773 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3774 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3775 1.1 christos }
3776 1.1 christos }
3777 1.1 christos }
3778 1.1 christos
3779 1.1 christos #undef FLD
3780 1.1 christos }
3781 1.1 christos NEXT (vpc);
3782 1.1 christos
3783 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P10) : /* move ${const32},${Pd} */
3784 1.1 christos {
3785 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3786 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3787 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3788 1.1 christos int UNUSED written = 0;
3789 1.1 christos IADDR UNUSED pc = abuf->addr;
3790 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3791 1.1 christos
3792 1.1 christos {
3793 1.1 christos {
3794 1.1 christos SI opval = FLD (f_indir_pc__dword);
3795 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3796 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3797 1.1 christos }
3798 1.1 christos {
3799 1.1 christos {
3800 1.1 christos BI opval = 0;
3801 1.1 christos CPU (h_xbit) = opval;
3802 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3803 1.1 christos }
3804 1.1 christos {
3805 1.1 christos BI opval = 0;
3806 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3807 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3808 1.1 christos }
3809 1.1 christos }
3810 1.1 christos }
3811 1.1 christos
3812 1.1 christos #undef FLD
3813 1.1 christos }
3814 1.1 christos NEXT (vpc);
3815 1.1 christos
3816 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P11) : /* move ${const32},${Pd} */
3817 1.1 christos {
3818 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3819 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3820 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3821 1.1 christos int UNUSED written = 0;
3822 1.1 christos IADDR UNUSED pc = abuf->addr;
3823 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3824 1.1 christos
3825 1.1 christos {
3826 1.1 christos {
3827 1.1 christos SI opval = FLD (f_indir_pc__dword);
3828 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3829 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3830 1.1 christos }
3831 1.1 christos {
3832 1.1 christos {
3833 1.1 christos BI opval = 0;
3834 1.1 christos CPU (h_xbit) = opval;
3835 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3836 1.1 christos }
3837 1.1 christos {
3838 1.1 christos BI opval = 0;
3839 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3840 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3841 1.1 christos }
3842 1.1 christos }
3843 1.1 christos }
3844 1.1 christos
3845 1.1 christos #undef FLD
3846 1.1 christos }
3847 1.1 christos NEXT (vpc);
3848 1.1 christos
3849 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P12) : /* move ${const32},${Pd} */
3850 1.1 christos {
3851 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3852 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3853 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3854 1.1 christos int UNUSED written = 0;
3855 1.1 christos IADDR UNUSED pc = abuf->addr;
3856 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3857 1.1 christos
3858 1.1 christos {
3859 1.1 christos {
3860 1.1 christos SI opval = FLD (f_indir_pc__dword);
3861 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3862 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3863 1.1 christos }
3864 1.1 christos {
3865 1.1 christos {
3866 1.1 christos BI opval = 0;
3867 1.1 christos CPU (h_xbit) = opval;
3868 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3869 1.1 christos }
3870 1.1 christos {
3871 1.1 christos BI opval = 0;
3872 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3873 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3874 1.1 christos }
3875 1.1 christos }
3876 1.1 christos }
3877 1.1 christos
3878 1.1 christos #undef FLD
3879 1.1 christos }
3880 1.1 christos NEXT (vpc);
3881 1.1 christos
3882 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P13) : /* move ${const32},${Pd} */
3883 1.1 christos {
3884 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3885 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3886 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3887 1.1 christos int UNUSED written = 0;
3888 1.1 christos IADDR UNUSED pc = abuf->addr;
3889 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3890 1.1 christos
3891 1.1 christos {
3892 1.1 christos {
3893 1.1 christos SI opval = FLD (f_indir_pc__dword);
3894 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3895 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3896 1.1 christos }
3897 1.1 christos {
3898 1.1 christos {
3899 1.1 christos BI opval = 0;
3900 1.1 christos CPU (h_xbit) = opval;
3901 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3902 1.1 christos }
3903 1.1 christos {
3904 1.1 christos BI opval = 0;
3905 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3906 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3907 1.1 christos }
3908 1.1 christos }
3909 1.1 christos }
3910 1.1 christos
3911 1.1 christos #undef FLD
3912 1.1 christos }
3913 1.1 christos NEXT (vpc);
3914 1.1 christos
3915 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P14) : /* move ${const32},${Pd} */
3916 1.1 christos {
3917 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3918 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3919 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3920 1.1 christos int UNUSED written = 0;
3921 1.1 christos IADDR UNUSED pc = abuf->addr;
3922 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3923 1.1 christos
3924 1.1 christos {
3925 1.1 christos {
3926 1.1 christos SI opval = FLD (f_indir_pc__dword);
3927 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3928 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3929 1.1 christos }
3930 1.1 christos {
3931 1.1 christos {
3932 1.1 christos BI opval = 0;
3933 1.1 christos CPU (h_xbit) = opval;
3934 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3935 1.1 christos }
3936 1.1 christos {
3937 1.1 christos BI opval = 0;
3938 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3939 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3940 1.1 christos }
3941 1.1 christos }
3942 1.1 christos }
3943 1.1 christos
3944 1.1 christos #undef FLD
3945 1.1 christos }
3946 1.1 christos NEXT (vpc);
3947 1.1 christos
3948 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P15) : /* move ${const32},${Pd} */
3949 1.1 christos {
3950 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3951 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3952 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3953 1.1 christos int UNUSED written = 0;
3954 1.1 christos IADDR UNUSED pc = abuf->addr;
3955 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3956 1.1 christos
3957 1.1 christos {
3958 1.1 christos {
3959 1.1 christos SI opval = FLD (f_indir_pc__dword);
3960 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3961 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3962 1.1 christos }
3963 1.1 christos {
3964 1.1 christos {
3965 1.1 christos BI opval = 0;
3966 1.1 christos CPU (h_xbit) = opval;
3967 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3968 1.1 christos }
3969 1.1 christos {
3970 1.1 christos BI opval = 0;
3971 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3972 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3973 1.1 christos }
3974 1.1 christos }
3975 1.1 christos }
3976 1.1 christos
3977 1.1 christos #undef FLD
3978 1.1 christos }
3979 1.1 christos NEXT (vpc);
3980 1.1 christos
3981 1.1 christos CASE (sem, INSN_MOVE_SPR_MV32) : /* move ${Ps},[${Rd-sfield}${inc}] */
3982 1.1 christos {
3983 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3984 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3985 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3986 1.1 christos int UNUSED written = 0;
3987 1.1 christos IADDR UNUSED pc = abuf->addr;
3988 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3989 1.1 christos
3990 1.1 christos {
3991 1.1 christos SI tmp_rno;
3992 1.1 christos tmp_rno = FLD (f_operand2);
3993 1.1 christos if (EQSI (tmp_rno, 2)) {
3994 1.1 christos {
3995 1.1 christos SI tmp_addr;
3996 1.1 christos BI tmp_postinc;
3997 1.1 christos tmp_postinc = FLD (f_memmode);
3998 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3999 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4000 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4001 1.1 christos {
4002 1.1 christos {
4003 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4004 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4005 1.1 christos written |= (1 << 13);
4006 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4007 1.1 christos }
4008 1.1 christos {
4009 1.1 christos BI opval = CPU (h_pbit);
4010 1.1 christos CPU (h_cbit) = opval;
4011 1.1 christos written |= (1 << 10);
4012 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4013 1.1 christos }
4014 1.1 christos }
4015 1.1 christos } else {
4016 1.1 christos {
4017 1.1 christos BI opval = 1;
4018 1.1 christos CPU (h_cbit) = opval;
4019 1.1 christos written |= (1 << 10);
4020 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4021 1.1 christos }
4022 1.1 christos }
4023 1.1 christos } else {
4024 1.1 christos {
4025 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4026 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4027 1.1 christos written |= (1 << 13);
4028 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4029 1.1 christos }
4030 1.1 christos }
4031 1.1 christos if (NEBI (tmp_postinc, 0)) {
4032 1.1 christos {
4033 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4034 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4035 1.1 christos }
4036 1.1 christos {
4037 1.1 christos SI opval = tmp_addr;
4038 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4039 1.1 christos written |= (1 << 9);
4040 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4041 1.1 christos }
4042 1.1 christos }
4043 1.1 christos }
4044 1.1 christos }
4045 1.1 christos }
4046 1.1 christos else if (EQSI (tmp_rno, 3)) {
4047 1.1 christos {
4048 1.1 christos SI tmp_addr;
4049 1.1 christos BI tmp_postinc;
4050 1.1 christos tmp_postinc = FLD (f_memmode);
4051 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4052 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4053 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4054 1.1 christos {
4055 1.1 christos {
4056 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4057 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4058 1.1 christos written |= (1 << 12);
4059 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4060 1.1 christos }
4061 1.1 christos {
4062 1.1 christos BI opval = CPU (h_pbit);
4063 1.1 christos CPU (h_cbit) = opval;
4064 1.1 christos written |= (1 << 10);
4065 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4066 1.1 christos }
4067 1.1 christos }
4068 1.1 christos } else {
4069 1.1 christos {
4070 1.1 christos BI opval = 1;
4071 1.1 christos CPU (h_cbit) = opval;
4072 1.1 christos written |= (1 << 10);
4073 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4074 1.1 christos }
4075 1.1 christos }
4076 1.1 christos } else {
4077 1.1 christos {
4078 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4079 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4080 1.1 christos written |= (1 << 12);
4081 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4082 1.1 christos }
4083 1.1 christos }
4084 1.1 christos if (NEBI (tmp_postinc, 0)) {
4085 1.1 christos {
4086 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4087 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4088 1.1 christos }
4089 1.1 christos {
4090 1.1 christos SI opval = tmp_addr;
4091 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4092 1.1 christos written |= (1 << 9);
4093 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4094 1.1 christos }
4095 1.1 christos }
4096 1.1 christos }
4097 1.1 christos }
4098 1.1 christos }
4099 1.1 christos else if (EQSI (tmp_rno, 5)) {
4100 1.1 christos {
4101 1.1 christos SI tmp_addr;
4102 1.1 christos BI tmp_postinc;
4103 1.1 christos tmp_postinc = FLD (f_memmode);
4104 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4105 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4106 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4107 1.1 christos {
4108 1.1 christos {
4109 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4110 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4111 1.1 christos written |= (1 << 13);
4112 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4113 1.1 christos }
4114 1.1 christos {
4115 1.1 christos BI opval = CPU (h_pbit);
4116 1.1 christos CPU (h_cbit) = opval;
4117 1.1 christos written |= (1 << 10);
4118 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4119 1.1 christos }
4120 1.1 christos }
4121 1.1 christos } else {
4122 1.1 christos {
4123 1.1 christos BI opval = 1;
4124 1.1 christos CPU (h_cbit) = opval;
4125 1.1 christos written |= (1 << 10);
4126 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4127 1.1 christos }
4128 1.1 christos }
4129 1.1 christos } else {
4130 1.1 christos {
4131 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4132 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4133 1.1 christos written |= (1 << 13);
4134 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4135 1.1 christos }
4136 1.1 christos }
4137 1.1 christos if (NEBI (tmp_postinc, 0)) {
4138 1.1 christos {
4139 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4140 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4141 1.1 christos }
4142 1.1 christos {
4143 1.1 christos SI opval = tmp_addr;
4144 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4145 1.1 christos written |= (1 << 9);
4146 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4147 1.1 christos }
4148 1.1 christos }
4149 1.1 christos }
4150 1.1 christos }
4151 1.1 christos }
4152 1.1 christos else if (EQSI (tmp_rno, 6)) {
4153 1.1 christos {
4154 1.1 christos SI tmp_addr;
4155 1.1 christos BI tmp_postinc;
4156 1.1 christos tmp_postinc = FLD (f_memmode);
4157 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4158 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4159 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4160 1.1 christos {
4161 1.1 christos {
4162 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4163 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4164 1.1 christos written |= (1 << 13);
4165 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4166 1.1 christos }
4167 1.1 christos {
4168 1.1 christos BI opval = CPU (h_pbit);
4169 1.1 christos CPU (h_cbit) = opval;
4170 1.1 christos written |= (1 << 10);
4171 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4172 1.1 christos }
4173 1.1 christos }
4174 1.1 christos } else {
4175 1.1 christos {
4176 1.1 christos BI opval = 1;
4177 1.1 christos CPU (h_cbit) = opval;
4178 1.1 christos written |= (1 << 10);
4179 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4180 1.1 christos }
4181 1.1 christos }
4182 1.1 christos } else {
4183 1.1 christos {
4184 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4185 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4186 1.1 christos written |= (1 << 13);
4187 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4188 1.1 christos }
4189 1.1 christos }
4190 1.1 christos if (NEBI (tmp_postinc, 0)) {
4191 1.1 christos {
4192 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4193 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4194 1.1 christos }
4195 1.1 christos {
4196 1.1 christos SI opval = tmp_addr;
4197 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4198 1.1 christos written |= (1 << 9);
4199 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4200 1.1 christos }
4201 1.1 christos }
4202 1.1 christos }
4203 1.1 christos }
4204 1.1 christos }
4205 1.1 christos else if (EQSI (tmp_rno, 7)) {
4206 1.1 christos {
4207 1.1 christos SI tmp_addr;
4208 1.1 christos BI tmp_postinc;
4209 1.1 christos tmp_postinc = FLD (f_memmode);
4210 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4211 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4212 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4213 1.1 christos {
4214 1.1 christos {
4215 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4216 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4217 1.1 christos written |= (1 << 13);
4218 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4219 1.1 christos }
4220 1.1 christos {
4221 1.1 christos BI opval = CPU (h_pbit);
4222 1.1 christos CPU (h_cbit) = opval;
4223 1.1 christos written |= (1 << 10);
4224 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4225 1.1 christos }
4226 1.1 christos }
4227 1.1 christos } else {
4228 1.1 christos {
4229 1.1 christos BI opval = 1;
4230 1.1 christos CPU (h_cbit) = opval;
4231 1.1 christos written |= (1 << 10);
4232 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4233 1.1 christos }
4234 1.1 christos }
4235 1.1 christos } else {
4236 1.1 christos {
4237 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4238 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4239 1.1 christos written |= (1 << 13);
4240 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4241 1.1 christos }
4242 1.1 christos }
4243 1.1 christos if (NEBI (tmp_postinc, 0)) {
4244 1.1 christos {
4245 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4246 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4247 1.1 christos }
4248 1.1 christos {
4249 1.1 christos SI opval = tmp_addr;
4250 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4251 1.1 christos written |= (1 << 9);
4252 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4253 1.1 christos }
4254 1.1 christos }
4255 1.1 christos }
4256 1.1 christos }
4257 1.1 christos }
4258 1.1 christos else if (EQSI (tmp_rno, 9)) {
4259 1.1 christos {
4260 1.1 christos SI tmp_addr;
4261 1.1 christos BI tmp_postinc;
4262 1.1 christos tmp_postinc = FLD (f_memmode);
4263 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4264 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4265 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4266 1.1 christos {
4267 1.1 christos {
4268 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4269 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4270 1.1 christos written |= (1 << 13);
4271 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4272 1.1 christos }
4273 1.1 christos {
4274 1.1 christos BI opval = CPU (h_pbit);
4275 1.1 christos CPU (h_cbit) = opval;
4276 1.1 christos written |= (1 << 10);
4277 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4278 1.1 christos }
4279 1.1 christos }
4280 1.1 christos } else {
4281 1.1 christos {
4282 1.1 christos BI opval = 1;
4283 1.1 christos CPU (h_cbit) = opval;
4284 1.1 christos written |= (1 << 10);
4285 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4286 1.1 christos }
4287 1.1 christos }
4288 1.1 christos } else {
4289 1.1 christos {
4290 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4291 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4292 1.1 christos written |= (1 << 13);
4293 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4294 1.1 christos }
4295 1.1 christos }
4296 1.1 christos if (NEBI (tmp_postinc, 0)) {
4297 1.1 christos {
4298 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4299 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4300 1.1 christos }
4301 1.1 christos {
4302 1.1 christos SI opval = tmp_addr;
4303 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4304 1.1 christos written |= (1 << 9);
4305 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4306 1.1 christos }
4307 1.1 christos }
4308 1.1 christos }
4309 1.1 christos }
4310 1.1 christos }
4311 1.1 christos else if (EQSI (tmp_rno, 10)) {
4312 1.1 christos {
4313 1.1 christos SI tmp_addr;
4314 1.1 christos BI tmp_postinc;
4315 1.1 christos tmp_postinc = FLD (f_memmode);
4316 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4317 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4318 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4319 1.1 christos {
4320 1.1 christos {
4321 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4322 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4323 1.1 christos written |= (1 << 13);
4324 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4325 1.1 christos }
4326 1.1 christos {
4327 1.1 christos BI opval = CPU (h_pbit);
4328 1.1 christos CPU (h_cbit) = opval;
4329 1.1 christos written |= (1 << 10);
4330 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4331 1.1 christos }
4332 1.1 christos }
4333 1.1 christos } else {
4334 1.1 christos {
4335 1.1 christos BI opval = 1;
4336 1.1 christos CPU (h_cbit) = opval;
4337 1.1 christos written |= (1 << 10);
4338 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4339 1.1 christos }
4340 1.1 christos }
4341 1.1 christos } else {
4342 1.1 christos {
4343 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4344 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4345 1.1 christos written |= (1 << 13);
4346 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4347 1.1 christos }
4348 1.1 christos }
4349 1.1 christos if (NEBI (tmp_postinc, 0)) {
4350 1.1 christos {
4351 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4352 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4353 1.1 christos }
4354 1.1 christos {
4355 1.1 christos SI opval = tmp_addr;
4356 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4357 1.1 christos written |= (1 << 9);
4358 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4359 1.1 christos }
4360 1.1 christos }
4361 1.1 christos }
4362 1.1 christos }
4363 1.1 christos }
4364 1.1 christos else if (EQSI (tmp_rno, 11)) {
4365 1.1 christos {
4366 1.1 christos SI tmp_addr;
4367 1.1 christos BI tmp_postinc;
4368 1.1 christos tmp_postinc = FLD (f_memmode);
4369 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4370 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4371 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4372 1.1 christos {
4373 1.1 christos {
4374 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4375 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4376 1.1 christos written |= (1 << 13);
4377 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4378 1.1 christos }
4379 1.1 christos {
4380 1.1 christos BI opval = CPU (h_pbit);
4381 1.1 christos CPU (h_cbit) = opval;
4382 1.1 christos written |= (1 << 10);
4383 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4384 1.1 christos }
4385 1.1 christos }
4386 1.1 christos } else {
4387 1.1 christos {
4388 1.1 christos BI opval = 1;
4389 1.1 christos CPU (h_cbit) = opval;
4390 1.1 christos written |= (1 << 10);
4391 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4392 1.1 christos }
4393 1.1 christos }
4394 1.1 christos } else {
4395 1.1 christos {
4396 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4397 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4398 1.1 christos written |= (1 << 13);
4399 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4400 1.1 christos }
4401 1.1 christos }
4402 1.1 christos if (NEBI (tmp_postinc, 0)) {
4403 1.1 christos {
4404 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4405 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4406 1.1 christos }
4407 1.1 christos {
4408 1.1 christos SI opval = tmp_addr;
4409 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4410 1.1 christos written |= (1 << 9);
4411 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4412 1.1 christos }
4413 1.1 christos }
4414 1.1 christos }
4415 1.1 christos }
4416 1.1 christos }
4417 1.1 christos else if (EQSI (tmp_rno, 12)) {
4418 1.1 christos {
4419 1.1 christos SI tmp_addr;
4420 1.1 christos BI tmp_postinc;
4421 1.1 christos tmp_postinc = FLD (f_memmode);
4422 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4423 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4424 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4425 1.1 christos {
4426 1.1 christos {
4427 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4428 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4429 1.1 christos written |= (1 << 13);
4430 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4431 1.1 christos }
4432 1.1 christos {
4433 1.1 christos BI opval = CPU (h_pbit);
4434 1.1 christos CPU (h_cbit) = opval;
4435 1.1 christos written |= (1 << 10);
4436 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4437 1.1 christos }
4438 1.1 christos }
4439 1.1 christos } else {
4440 1.1 christos {
4441 1.1 christos BI opval = 1;
4442 1.1 christos CPU (h_cbit) = opval;
4443 1.1 christos written |= (1 << 10);
4444 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4445 1.1 christos }
4446 1.1 christos }
4447 1.1 christos } else {
4448 1.1 christos {
4449 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4450 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4451 1.1 christos written |= (1 << 13);
4452 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4453 1.1 christos }
4454 1.1 christos }
4455 1.1 christos if (NEBI (tmp_postinc, 0)) {
4456 1.1 christos {
4457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4459 1.1 christos }
4460 1.1 christos {
4461 1.1 christos SI opval = tmp_addr;
4462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4463 1.1 christos written |= (1 << 9);
4464 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4465 1.1 christos }
4466 1.1 christos }
4467 1.1 christos }
4468 1.1 christos }
4469 1.1 christos }
4470 1.1 christos else if (EQSI (tmp_rno, 13)) {
4471 1.1 christos {
4472 1.1 christos SI tmp_addr;
4473 1.1 christos BI tmp_postinc;
4474 1.1 christos tmp_postinc = FLD (f_memmode);
4475 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4476 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4477 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4478 1.1 christos {
4479 1.1 christos {
4480 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4481 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4482 1.1 christos written |= (1 << 13);
4483 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4484 1.1 christos }
4485 1.1 christos {
4486 1.1 christos BI opval = CPU (h_pbit);
4487 1.1 christos CPU (h_cbit) = opval;
4488 1.1 christos written |= (1 << 10);
4489 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4490 1.1 christos }
4491 1.1 christos }
4492 1.1 christos } else {
4493 1.1 christos {
4494 1.1 christos BI opval = 1;
4495 1.1 christos CPU (h_cbit) = opval;
4496 1.1 christos written |= (1 << 10);
4497 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4498 1.1 christos }
4499 1.1 christos }
4500 1.1 christos } else {
4501 1.1 christos {
4502 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4503 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4504 1.1 christos written |= (1 << 13);
4505 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4506 1.1 christos }
4507 1.1 christos }
4508 1.1 christos if (NEBI (tmp_postinc, 0)) {
4509 1.1 christos {
4510 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4511 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4512 1.1 christos }
4513 1.1 christos {
4514 1.1 christos SI opval = tmp_addr;
4515 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4516 1.1 christos written |= (1 << 9);
4517 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4518 1.1 christos }
4519 1.1 christos }
4520 1.1 christos }
4521 1.1 christos }
4522 1.1 christos }
4523 1.1 christos else if (EQSI (tmp_rno, 14)) {
4524 1.1 christos {
4525 1.1 christos SI tmp_addr;
4526 1.1 christos BI tmp_postinc;
4527 1.1 christos tmp_postinc = FLD (f_memmode);
4528 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4529 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4530 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4531 1.1 christos {
4532 1.1 christos {
4533 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4534 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4535 1.1 christos written |= (1 << 13);
4536 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4537 1.1 christos }
4538 1.1 christos {
4539 1.1 christos BI opval = CPU (h_pbit);
4540 1.1 christos CPU (h_cbit) = opval;
4541 1.1 christos written |= (1 << 10);
4542 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4543 1.1 christos }
4544 1.1 christos }
4545 1.1 christos } else {
4546 1.1 christos {
4547 1.1 christos BI opval = 1;
4548 1.1 christos CPU (h_cbit) = opval;
4549 1.1 christos written |= (1 << 10);
4550 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4551 1.1 christos }
4552 1.1 christos }
4553 1.1 christos } else {
4554 1.1 christos {
4555 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4556 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4557 1.1 christos written |= (1 << 13);
4558 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4559 1.1 christos }
4560 1.1 christos }
4561 1.1 christos if (NEBI (tmp_postinc, 0)) {
4562 1.1 christos {
4563 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4564 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4565 1.1 christos }
4566 1.1 christos {
4567 1.1 christos SI opval = tmp_addr;
4568 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4569 1.1 christos written |= (1 << 9);
4570 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4571 1.1 christos }
4572 1.1 christos }
4573 1.1 christos }
4574 1.1 christos }
4575 1.1 christos }
4576 1.1 christos else if (EQSI (tmp_rno, 15)) {
4577 1.1 christos {
4578 1.1 christos SI tmp_addr;
4579 1.1 christos BI tmp_postinc;
4580 1.1 christos tmp_postinc = FLD (f_memmode);
4581 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4582 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4583 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4584 1.1 christos {
4585 1.1 christos {
4586 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4587 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4588 1.1 christos written |= (1 << 13);
4589 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4590 1.1 christos }
4591 1.1 christos {
4592 1.1 christos BI opval = CPU (h_pbit);
4593 1.1 christos CPU (h_cbit) = opval;
4594 1.1 christos written |= (1 << 10);
4595 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4596 1.1 christos }
4597 1.1 christos }
4598 1.1 christos } else {
4599 1.1 christos {
4600 1.1 christos BI opval = 1;
4601 1.1 christos CPU (h_cbit) = opval;
4602 1.1 christos written |= (1 << 10);
4603 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4604 1.1 christos }
4605 1.1 christos }
4606 1.1 christos } else {
4607 1.1 christos {
4608 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4609 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4610 1.1 christos written |= (1 << 13);
4611 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4612 1.1 christos }
4613 1.1 christos }
4614 1.1 christos if (NEBI (tmp_postinc, 0)) {
4615 1.1 christos {
4616 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4617 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4618 1.1 christos }
4619 1.1 christos {
4620 1.1 christos SI opval = tmp_addr;
4621 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4622 1.1 christos written |= (1 << 9);
4623 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4624 1.1 christos }
4625 1.1 christos }
4626 1.1 christos }
4627 1.1 christos }
4628 1.1 christos }
4629 1.1 christos else if (EQSI (tmp_rno, 0)) {
4630 1.1 christos {
4631 1.1 christos SI tmp_addr;
4632 1.1 christos BI tmp_postinc;
4633 1.1 christos tmp_postinc = FLD (f_memmode);
4634 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4635 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4636 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4637 1.1 christos {
4638 1.1 christos {
4639 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4640 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4641 1.1 christos written |= (1 << 12);
4642 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4643 1.1 christos }
4644 1.1 christos {
4645 1.1 christos BI opval = CPU (h_pbit);
4646 1.1 christos CPU (h_cbit) = opval;
4647 1.1 christos written |= (1 << 10);
4648 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4649 1.1 christos }
4650 1.1 christos }
4651 1.1 christos } else {
4652 1.1 christos {
4653 1.1 christos BI opval = 1;
4654 1.1 christos CPU (h_cbit) = opval;
4655 1.1 christos written |= (1 << 10);
4656 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4657 1.1 christos }
4658 1.1 christos }
4659 1.1 christos } else {
4660 1.1 christos {
4661 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4662 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4663 1.1 christos written |= (1 << 12);
4664 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4665 1.1 christos }
4666 1.1 christos }
4667 1.1 christos if (NEBI (tmp_postinc, 0)) {
4668 1.1 christos {
4669 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4670 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4671 1.1 christos }
4672 1.1 christos {
4673 1.1 christos SI opval = tmp_addr;
4674 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4675 1.1 christos written |= (1 << 9);
4676 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4677 1.1 christos }
4678 1.1 christos }
4679 1.1 christos }
4680 1.1 christos }
4681 1.1 christos }
4682 1.1 christos else if (EQSI (tmp_rno, 1)) {
4683 1.1 christos {
4684 1.1 christos SI tmp_addr;
4685 1.1 christos BI tmp_postinc;
4686 1.1 christos tmp_postinc = FLD (f_memmode);
4687 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4688 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4689 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4690 1.1 christos {
4691 1.1 christos {
4692 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4693 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4694 1.1 christos written |= (1 << 12);
4695 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4696 1.1 christos }
4697 1.1 christos {
4698 1.1 christos BI opval = CPU (h_pbit);
4699 1.1 christos CPU (h_cbit) = opval;
4700 1.1 christos written |= (1 << 10);
4701 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4702 1.1 christos }
4703 1.1 christos }
4704 1.1 christos } else {
4705 1.1 christos {
4706 1.1 christos BI opval = 1;
4707 1.1 christos CPU (h_cbit) = opval;
4708 1.1 christos written |= (1 << 10);
4709 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4710 1.1 christos }
4711 1.1 christos }
4712 1.1 christos } else {
4713 1.1 christos {
4714 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4715 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4716 1.1 christos written |= (1 << 12);
4717 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4718 1.1 christos }
4719 1.1 christos }
4720 1.1 christos if (NEBI (tmp_postinc, 0)) {
4721 1.1 christos {
4722 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4723 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4724 1.1 christos }
4725 1.1 christos {
4726 1.1 christos SI opval = tmp_addr;
4727 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4728 1.1 christos written |= (1 << 9);
4729 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4730 1.1 christos }
4731 1.1 christos }
4732 1.1 christos }
4733 1.1 christos }
4734 1.1 christos }
4735 1.1 christos else if (EQSI (tmp_rno, 4)) {
4736 1.1 christos {
4737 1.1 christos SI tmp_addr;
4738 1.1 christos BI tmp_postinc;
4739 1.1 christos tmp_postinc = FLD (f_memmode);
4740 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4741 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4742 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4743 1.1 christos {
4744 1.1 christos {
4745 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4746 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4747 1.1 christos written |= (1 << 11);
4748 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4749 1.1 christos }
4750 1.1 christos {
4751 1.1 christos BI opval = CPU (h_pbit);
4752 1.1 christos CPU (h_cbit) = opval;
4753 1.1 christos written |= (1 << 10);
4754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4755 1.1 christos }
4756 1.1 christos }
4757 1.1 christos } else {
4758 1.1 christos {
4759 1.1 christos BI opval = 1;
4760 1.1 christos CPU (h_cbit) = opval;
4761 1.1 christos written |= (1 << 10);
4762 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4763 1.1 christos }
4764 1.1 christos }
4765 1.1 christos } else {
4766 1.1 christos {
4767 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4768 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4769 1.1 christos written |= (1 << 11);
4770 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4771 1.1 christos }
4772 1.1 christos }
4773 1.1 christos if (NEBI (tmp_postinc, 0)) {
4774 1.1 christos {
4775 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4776 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
4777 1.1 christos }
4778 1.1 christos {
4779 1.1 christos SI opval = tmp_addr;
4780 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4781 1.1 christos written |= (1 << 9);
4782 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4783 1.1 christos }
4784 1.1 christos }
4785 1.1 christos }
4786 1.1 christos }
4787 1.1 christos }
4788 1.1 christos else if (EQSI (tmp_rno, 8)) {
4789 1.1 christos {
4790 1.1 christos SI tmp_addr;
4791 1.1 christos BI tmp_postinc;
4792 1.1 christos tmp_postinc = FLD (f_memmode);
4793 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4794 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4795 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4796 1.1 christos {
4797 1.1 christos {
4798 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4799 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4800 1.1 christos written |= (1 << 13);
4801 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4802 1.1 christos }
4803 1.1 christos {
4804 1.1 christos BI opval = CPU (h_pbit);
4805 1.1 christos CPU (h_cbit) = opval;
4806 1.1 christos written |= (1 << 10);
4807 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4808 1.1 christos }
4809 1.1 christos }
4810 1.1 christos } else {
4811 1.1 christos {
4812 1.1 christos BI opval = 1;
4813 1.1 christos CPU (h_cbit) = opval;
4814 1.1 christos written |= (1 << 10);
4815 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4816 1.1 christos }
4817 1.1 christos }
4818 1.1 christos } else {
4819 1.1 christos {
4820 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4821 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4822 1.1 christos written |= (1 << 13);
4823 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4824 1.1 christos }
4825 1.1 christos }
4826 1.1 christos if (NEBI (tmp_postinc, 0)) {
4827 1.1 christos {
4828 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4829 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4830 1.1 christos }
4831 1.1 christos {
4832 1.1 christos SI opval = tmp_addr;
4833 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4834 1.1 christos written |= (1 << 9);
4835 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4836 1.1 christos }
4837 1.1 christos }
4838 1.1 christos }
4839 1.1 christos }
4840 1.1 christos }
4841 1.1 christos else {
4842 1.1 christos cgen_rtx_error (current_cpu, "write from unimplemented special register");
4843 1.1 christos }
4844 1.1 christos {
4845 1.1 christos {
4846 1.1 christos BI opval = 0;
4847 1.1 christos CPU (h_xbit) = opval;
4848 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4849 1.1 christos }
4850 1.1 christos {
4851 1.1 christos BI opval = 0;
4852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4853 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4854 1.1 christos }
4855 1.1 christos }
4856 1.1 christos }
4857 1.1 christos
4858 1.1 christos abuf->written = written;
4859 1.1 christos #undef FLD
4860 1.1 christos }
4861 1.1 christos NEXT (vpc);
4862 1.1 christos
4863 1.1 christos CASE (sem, INSN_MOVE_SS_R) : /* move ${Ss},${Rd-sfield} */
4864 1.1 christos {
4865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4867 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
4868 1.1 christos int UNUSED written = 0;
4869 1.1 christos IADDR UNUSED pc = abuf->addr;
4870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4871 1.1 christos
4872 1.1 christos {
4873 1.1 christos {
4874 1.1 christos SI opval = GET_H_SUPR (FLD (f_operand2));
4875 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4876 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4877 1.1 christos }
4878 1.1 christos {
4879 1.1 christos {
4880 1.1 christos BI opval = 0;
4881 1.1 christos CPU (h_xbit) = opval;
4882 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4883 1.1 christos }
4884 1.1 christos {
4885 1.1 christos BI opval = 0;
4886 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4887 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4888 1.1 christos }
4889 1.1 christos }
4890 1.1 christos }
4891 1.1 christos
4892 1.1 christos #undef FLD
4893 1.1 christos }
4894 1.1 christos NEXT (vpc);
4895 1.1 christos
4896 1.1 christos CASE (sem, INSN_MOVE_R_SS) : /* move ${Rs},${Sd} */
4897 1.1 christos {
4898 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4899 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4900 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
4901 1.1 christos int UNUSED written = 0;
4902 1.1 christos IADDR UNUSED pc = abuf->addr;
4903 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4904 1.1 christos
4905 1.1 christos {
4906 1.1 christos {
4907 1.1 christos SI opval = GET_H_GR (FLD (f_operand1));
4908 1.1 christos SET_H_SUPR (FLD (f_operand2), opval);
4909 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "supr", 'x', opval);
4910 1.1 christos }
4911 1.1 christos {
4912 1.1 christos {
4913 1.1 christos BI opval = 0;
4914 1.1 christos CPU (h_xbit) = opval;
4915 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4916 1.1 christos }
4917 1.1 christos {
4918 1.1 christos BI opval = 0;
4919 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4920 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4921 1.1 christos }
4922 1.1 christos }
4923 1.1 christos }
4924 1.1 christos
4925 1.1 christos #undef FLD
4926 1.1 christos }
4927 1.1 christos NEXT (vpc);
4928 1.1 christos
4929 1.1 christos CASE (sem, INSN_MOVEM_R_M_V32) : /* movem ${Rs-dfield},[${Rd-sfield}${inc}] */
4930 1.1 christos {
4931 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4932 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4933 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f
4934 1.1 christos int UNUSED written = 0;
4935 1.1 christos IADDR UNUSED pc = abuf->addr;
4936 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4937 1.1 christos
4938 1.1 christos {
4939 1.1 christos SI tmp_addr;
4940 1.1 christos BI tmp_postinc;
4941 1.1 christos tmp_postinc = FLD (f_memmode);
4942 1.1 christos {
4943 1.1 christos SI tmp_dummy;
4944 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
4945 1.1 christos }
4946 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
4947 1.1 christos {
4948 1.1 christos if (GESI (FLD (f_operand2), 0)) {
4949 1.1 christos {
4950 1.1 christos SI tmp_tmp;
4951 1.1 christos tmp_tmp = GET_H_GR (((UINT) 0));
4952 1.1 christos {
4953 1.1 christos SI opval = tmp_tmp;
4954 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4955 1.1 christos written |= (1 << 21);
4956 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4957 1.1 christos }
4958 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4959 1.1 christos }
4960 1.1 christos }
4961 1.1 christos if (GESI (FLD (f_operand2), 1)) {
4962 1.1 christos {
4963 1.1 christos SI tmp_tmp;
4964 1.1 christos tmp_tmp = GET_H_GR (((UINT) 1));
4965 1.1 christos {
4966 1.1 christos SI opval = tmp_tmp;
4967 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4968 1.1 christos written |= (1 << 21);
4969 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4970 1.1 christos }
4971 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4972 1.1 christos }
4973 1.1 christos }
4974 1.1 christos if (GESI (FLD (f_operand2), 2)) {
4975 1.1 christos {
4976 1.1 christos SI tmp_tmp;
4977 1.1 christos tmp_tmp = GET_H_GR (((UINT) 2));
4978 1.1 christos {
4979 1.1 christos SI opval = tmp_tmp;
4980 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4981 1.1 christos written |= (1 << 21);
4982 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4983 1.1 christos }
4984 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4985 1.1 christos }
4986 1.1 christos }
4987 1.1 christos if (GESI (FLD (f_operand2), 3)) {
4988 1.1 christos {
4989 1.1 christos SI tmp_tmp;
4990 1.1 christos tmp_tmp = GET_H_GR (((UINT) 3));
4991 1.1 christos {
4992 1.1 christos SI opval = tmp_tmp;
4993 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4994 1.1 christos written |= (1 << 21);
4995 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4996 1.1 christos }
4997 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4998 1.1 christos }
4999 1.1 christos }
5000 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5001 1.1 christos {
5002 1.1 christos SI tmp_tmp;
5003 1.1 christos tmp_tmp = GET_H_GR (((UINT) 4));
5004 1.1 christos {
5005 1.1 christos SI opval = tmp_tmp;
5006 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5007 1.1 christos written |= (1 << 21);
5008 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5009 1.1 christos }
5010 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5011 1.1 christos }
5012 1.1 christos }
5013 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5014 1.1 christos {
5015 1.1 christos SI tmp_tmp;
5016 1.1 christos tmp_tmp = GET_H_GR (((UINT) 5));
5017 1.1 christos {
5018 1.1 christos SI opval = tmp_tmp;
5019 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5020 1.1 christos written |= (1 << 21);
5021 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5022 1.1 christos }
5023 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5024 1.1 christos }
5025 1.1 christos }
5026 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5027 1.1 christos {
5028 1.1 christos SI tmp_tmp;
5029 1.1 christos tmp_tmp = GET_H_GR (((UINT) 6));
5030 1.1 christos {
5031 1.1 christos SI opval = tmp_tmp;
5032 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5033 1.1 christos written |= (1 << 21);
5034 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5035 1.1 christos }
5036 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5037 1.1 christos }
5038 1.1 christos }
5039 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5040 1.1 christos {
5041 1.1 christos SI tmp_tmp;
5042 1.1 christos tmp_tmp = GET_H_GR (((UINT) 7));
5043 1.1 christos {
5044 1.1 christos SI opval = tmp_tmp;
5045 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5046 1.1 christos written |= (1 << 21);
5047 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5048 1.1 christos }
5049 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5050 1.1 christos }
5051 1.1 christos }
5052 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5053 1.1 christos {
5054 1.1 christos SI tmp_tmp;
5055 1.1 christos tmp_tmp = GET_H_GR (((UINT) 8));
5056 1.1 christos {
5057 1.1 christos SI opval = tmp_tmp;
5058 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5059 1.1 christos written |= (1 << 21);
5060 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5061 1.1 christos }
5062 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5063 1.1 christos }
5064 1.1 christos }
5065 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5066 1.1 christos {
5067 1.1 christos SI tmp_tmp;
5068 1.1 christos tmp_tmp = GET_H_GR (((UINT) 9));
5069 1.1 christos {
5070 1.1 christos SI opval = tmp_tmp;
5071 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5072 1.1 christos written |= (1 << 21);
5073 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5074 1.1 christos }
5075 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5076 1.1 christos }
5077 1.1 christos }
5078 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5079 1.1 christos {
5080 1.1 christos SI tmp_tmp;
5081 1.1 christos tmp_tmp = GET_H_GR (((UINT) 10));
5082 1.1 christos {
5083 1.1 christos SI opval = tmp_tmp;
5084 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5085 1.1 christos written |= (1 << 21);
5086 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5087 1.1 christos }
5088 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5089 1.1 christos }
5090 1.1 christos }
5091 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5092 1.1 christos {
5093 1.1 christos SI tmp_tmp;
5094 1.1 christos tmp_tmp = GET_H_GR (((UINT) 11));
5095 1.1 christos {
5096 1.1 christos SI opval = tmp_tmp;
5097 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5098 1.1 christos written |= (1 << 21);
5099 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5100 1.1 christos }
5101 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5102 1.1 christos }
5103 1.1 christos }
5104 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5105 1.1 christos {
5106 1.1 christos SI tmp_tmp;
5107 1.1 christos tmp_tmp = GET_H_GR (((UINT) 12));
5108 1.1 christos {
5109 1.1 christos SI opval = tmp_tmp;
5110 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5111 1.1 christos written |= (1 << 21);
5112 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5113 1.1 christos }
5114 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5115 1.1 christos }
5116 1.1 christos }
5117 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5118 1.1 christos {
5119 1.1 christos SI tmp_tmp;
5120 1.1 christos tmp_tmp = GET_H_GR (((UINT) 13));
5121 1.1 christos {
5122 1.1 christos SI opval = tmp_tmp;
5123 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5124 1.1 christos written |= (1 << 21);
5125 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5126 1.1 christos }
5127 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5128 1.1 christos }
5129 1.1 christos }
5130 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5131 1.1 christos {
5132 1.1 christos SI tmp_tmp;
5133 1.1 christos tmp_tmp = GET_H_GR (((UINT) 14));
5134 1.1 christos {
5135 1.1 christos SI opval = tmp_tmp;
5136 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5137 1.1 christos written |= (1 << 21);
5138 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5139 1.1 christos }
5140 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5141 1.1 christos }
5142 1.1 christos }
5143 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5144 1.1 christos {
5145 1.1 christos SI tmp_tmp;
5146 1.1 christos tmp_tmp = GET_H_GR (((UINT) 15));
5147 1.1 christos {
5148 1.1 christos SI opval = tmp_tmp;
5149 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5150 1.1 christos written |= (1 << 21);
5151 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5152 1.1 christos }
5153 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5154 1.1 christos }
5155 1.1 christos }
5156 1.1 christos }
5157 1.1 christos if (NEBI (tmp_postinc, 0)) {
5158 1.1 christos {
5159 1.1 christos SI opval = tmp_addr;
5160 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5161 1.1 christos written |= (1 << 20);
5162 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5163 1.1 christos }
5164 1.1 christos }
5165 1.1 christos {
5166 1.1 christos {
5167 1.1 christos BI opval = 0;
5168 1.1 christos CPU (h_xbit) = opval;
5169 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5170 1.1 christos }
5171 1.1 christos {
5172 1.1 christos BI opval = 0;
5173 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5174 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5175 1.1 christos }
5176 1.1 christos }
5177 1.1 christos }
5178 1.1 christos
5179 1.1 christos abuf->written = written;
5180 1.1 christos #undef FLD
5181 1.1 christos }
5182 1.1 christos NEXT (vpc);
5183 1.1 christos
5184 1.1 christos CASE (sem, INSN_MOVEM_M_R_V32) : /* movem [${Rs}${inc}],${Rd} */
5185 1.1 christos {
5186 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5187 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5188 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f
5189 1.1 christos int UNUSED written = 0;
5190 1.1 christos IADDR UNUSED pc = abuf->addr;
5191 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5192 1.1 christos
5193 1.1 christos {
5194 1.1 christos SI tmp_addr;
5195 1.1 christos BI tmp_postinc;
5196 1.1 christos tmp_postinc = FLD (f_memmode);
5197 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
5198 1.1 christos {
5199 1.1 christos SI tmp_dummy;
5200 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
5201 1.1 christos }
5202 1.1 christos {
5203 1.1 christos if (GESI (FLD (f_operand2), 0)) {
5204 1.1 christos {
5205 1.1 christos SI tmp_tmp;
5206 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5207 1.1 christos {
5208 1.1 christos SI opval = tmp_tmp;
5209 1.1 christos SET_H_GR (((UINT) 0), opval);
5210 1.1 christos written |= (1 << 6);
5211 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5212 1.1 christos }
5213 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5214 1.1 christos }
5215 1.1 christos }
5216 1.1 christos if (GESI (FLD (f_operand2), 1)) {
5217 1.1 christos {
5218 1.1 christos SI tmp_tmp;
5219 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5220 1.1 christos {
5221 1.1 christos SI opval = tmp_tmp;
5222 1.1 christos SET_H_GR (((UINT) 1), opval);
5223 1.1 christos written |= (1 << 7);
5224 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5225 1.1 christos }
5226 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5227 1.1 christos }
5228 1.1 christos }
5229 1.1 christos if (GESI (FLD (f_operand2), 2)) {
5230 1.1 christos {
5231 1.1 christos SI tmp_tmp;
5232 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5233 1.1 christos {
5234 1.1 christos SI opval = tmp_tmp;
5235 1.1 christos SET_H_GR (((UINT) 2), opval);
5236 1.1 christos written |= (1 << 14);
5237 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5238 1.1 christos }
5239 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5240 1.1 christos }
5241 1.1 christos }
5242 1.1 christos if (GESI (FLD (f_operand2), 3)) {
5243 1.1 christos {
5244 1.1 christos SI tmp_tmp;
5245 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5246 1.1 christos {
5247 1.1 christos SI opval = tmp_tmp;
5248 1.1 christos SET_H_GR (((UINT) 3), opval);
5249 1.1 christos written |= (1 << 15);
5250 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5251 1.1 christos }
5252 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5253 1.1 christos }
5254 1.1 christos }
5255 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5256 1.1 christos {
5257 1.1 christos SI tmp_tmp;
5258 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5259 1.1 christos {
5260 1.1 christos SI opval = tmp_tmp;
5261 1.1 christos SET_H_GR (((UINT) 4), opval);
5262 1.1 christos written |= (1 << 16);
5263 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5264 1.1 christos }
5265 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5266 1.1 christos }
5267 1.1 christos }
5268 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5269 1.1 christos {
5270 1.1 christos SI tmp_tmp;
5271 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5272 1.1 christos {
5273 1.1 christos SI opval = tmp_tmp;
5274 1.1 christos SET_H_GR (((UINT) 5), opval);
5275 1.1 christos written |= (1 << 17);
5276 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5277 1.1 christos }
5278 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5279 1.1 christos }
5280 1.1 christos }
5281 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5282 1.1 christos {
5283 1.1 christos SI tmp_tmp;
5284 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5285 1.1 christos {
5286 1.1 christos SI opval = tmp_tmp;
5287 1.1 christos SET_H_GR (((UINT) 6), opval);
5288 1.1 christos written |= (1 << 18);
5289 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5290 1.1 christos }
5291 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5292 1.1 christos }
5293 1.1 christos }
5294 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5295 1.1 christos {
5296 1.1 christos SI tmp_tmp;
5297 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5298 1.1 christos {
5299 1.1 christos SI opval = tmp_tmp;
5300 1.1 christos SET_H_GR (((UINT) 7), opval);
5301 1.1 christos written |= (1 << 19);
5302 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5303 1.1 christos }
5304 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5305 1.1 christos }
5306 1.1 christos }
5307 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5308 1.1 christos {
5309 1.1 christos SI tmp_tmp;
5310 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5311 1.1 christos {
5312 1.1 christos SI opval = tmp_tmp;
5313 1.1 christos SET_H_GR (((UINT) 8), opval);
5314 1.1 christos written |= (1 << 20);
5315 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5316 1.1 christos }
5317 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5318 1.1 christos }
5319 1.1 christos }
5320 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5321 1.1 christos {
5322 1.1 christos SI tmp_tmp;
5323 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5324 1.1 christos {
5325 1.1 christos SI opval = tmp_tmp;
5326 1.1 christos SET_H_GR (((UINT) 9), opval);
5327 1.1 christos written |= (1 << 21);
5328 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5329 1.1 christos }
5330 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5331 1.1 christos }
5332 1.1 christos }
5333 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5334 1.1 christos {
5335 1.1 christos SI tmp_tmp;
5336 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5337 1.1 christos {
5338 1.1 christos SI opval = tmp_tmp;
5339 1.1 christos SET_H_GR (((UINT) 10), opval);
5340 1.1 christos written |= (1 << 8);
5341 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5342 1.1 christos }
5343 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5344 1.1 christos }
5345 1.1 christos }
5346 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5347 1.1 christos {
5348 1.1 christos SI tmp_tmp;
5349 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5350 1.1 christos {
5351 1.1 christos SI opval = tmp_tmp;
5352 1.1 christos SET_H_GR (((UINT) 11), opval);
5353 1.1 christos written |= (1 << 9);
5354 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5355 1.1 christos }
5356 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5357 1.1 christos }
5358 1.1 christos }
5359 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5360 1.1 christos {
5361 1.1 christos SI tmp_tmp;
5362 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5363 1.1 christos {
5364 1.1 christos SI opval = tmp_tmp;
5365 1.1 christos SET_H_GR (((UINT) 12), opval);
5366 1.1 christos written |= (1 << 10);
5367 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5368 1.1 christos }
5369 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5370 1.1 christos }
5371 1.1 christos }
5372 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5373 1.1 christos {
5374 1.1 christos SI tmp_tmp;
5375 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5376 1.1 christos {
5377 1.1 christos SI opval = tmp_tmp;
5378 1.1 christos SET_H_GR (((UINT) 13), opval);
5379 1.1 christos written |= (1 << 11);
5380 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5381 1.1 christos }
5382 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5383 1.1 christos }
5384 1.1 christos }
5385 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5386 1.1 christos {
5387 1.1 christos SI tmp_tmp;
5388 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5389 1.1 christos {
5390 1.1 christos SI opval = tmp_tmp;
5391 1.1 christos SET_H_GR (((UINT) 14), opval);
5392 1.1 christos written |= (1 << 12);
5393 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5394 1.1 christos }
5395 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5396 1.1 christos }
5397 1.1 christos }
5398 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5399 1.1 christos {
5400 1.1 christos SI tmp_tmp;
5401 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5402 1.1 christos {
5403 1.1 christos SI opval = tmp_tmp;
5404 1.1 christos SET_H_GR (((UINT) 15), opval);
5405 1.1 christos written |= (1 << 13);
5406 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5407 1.1 christos }
5408 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5409 1.1 christos }
5410 1.1 christos }
5411 1.1 christos }
5412 1.1 christos if (NEBI (tmp_postinc, 0)) {
5413 1.1 christos {
5414 1.1 christos SI opval = tmp_addr;
5415 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5416 1.1 christos written |= (1 << 5);
5417 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5418 1.1 christos }
5419 1.1 christos }
5420 1.1 christos {
5421 1.1 christos {
5422 1.1 christos BI opval = 0;
5423 1.1 christos CPU (h_xbit) = opval;
5424 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5425 1.1 christos }
5426 1.1 christos {
5427 1.1 christos BI opval = 0;
5428 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5429 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5430 1.1 christos }
5431 1.1 christos }
5432 1.1 christos }
5433 1.1 christos
5434 1.1 christos abuf->written = written;
5435 1.1 christos #undef FLD
5436 1.1 christos }
5437 1.1 christos NEXT (vpc);
5438 1.1 christos
5439 1.1 christos CASE (sem, INSN_ADD_B_R) : /* add.b $Rs,$Rd */
5440 1.1 christos {
5441 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5442 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5443 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5444 1.1 christos int UNUSED written = 0;
5445 1.1 christos IADDR UNUSED pc = abuf->addr;
5446 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5447 1.1 christos
5448 1.1 christos {
5449 1.1 christos QI tmp_tmpopd;
5450 1.1 christos QI tmp_tmpops;
5451 1.1 christos BI tmp_carry;
5452 1.1 christos QI tmp_newval;
5453 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5454 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5455 1.1 christos tmp_carry = CPU (h_cbit);
5456 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5457 1.1 christos {
5458 1.1 christos SI tmp_oldregval;
5459 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5460 1.1 christos {
5461 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5462 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5463 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5464 1.1 christos }
5465 1.1 christos }
5466 1.1 christos {
5467 1.1 christos {
5468 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5469 1.1 christos CPU (h_cbit) = opval;
5470 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5471 1.1 christos }
5472 1.1 christos {
5473 1.1 christos BI opval = LTQI (tmp_newval, 0);
5474 1.1 christos CPU (h_nbit) = opval;
5475 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5476 1.1 christos }
5477 1.1 christos {
5478 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5479 1.1 christos CPU (h_zbit) = opval;
5480 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5481 1.1 christos }
5482 1.1 christos {
5483 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5484 1.1 christos CPU (h_vbit) = opval;
5485 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5486 1.1 christos }
5487 1.1 christos {
5488 1.1 christos {
5489 1.1 christos BI opval = 0;
5490 1.1 christos CPU (h_xbit) = opval;
5491 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5492 1.1 christos }
5493 1.1 christos {
5494 1.1 christos BI opval = 0;
5495 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5496 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5497 1.1 christos }
5498 1.1 christos }
5499 1.1 christos }
5500 1.1 christos }
5501 1.1 christos
5502 1.1 christos #undef FLD
5503 1.1 christos }
5504 1.1 christos NEXT (vpc);
5505 1.1 christos
5506 1.1 christos CASE (sem, INSN_ADD_W_R) : /* add.w $Rs,$Rd */
5507 1.1 christos {
5508 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5509 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5510 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5511 1.1 christos int UNUSED written = 0;
5512 1.1 christos IADDR UNUSED pc = abuf->addr;
5513 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5514 1.1 christos
5515 1.1 christos {
5516 1.1 christos HI tmp_tmpopd;
5517 1.1 christos HI tmp_tmpops;
5518 1.1 christos BI tmp_carry;
5519 1.1 christos HI tmp_newval;
5520 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5521 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5522 1.1 christos tmp_carry = CPU (h_cbit);
5523 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5524 1.1 christos {
5525 1.1 christos SI tmp_oldregval;
5526 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5527 1.1 christos {
5528 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5529 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5530 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5531 1.1 christos }
5532 1.1 christos }
5533 1.1 christos {
5534 1.1 christos {
5535 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5536 1.1 christos CPU (h_cbit) = opval;
5537 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5538 1.1 christos }
5539 1.1 christos {
5540 1.1 christos BI opval = LTHI (tmp_newval, 0);
5541 1.1 christos CPU (h_nbit) = opval;
5542 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5543 1.1 christos }
5544 1.1 christos {
5545 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5546 1.1 christos CPU (h_zbit) = opval;
5547 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5548 1.1 christos }
5549 1.1 christos {
5550 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
5551 1.1 christos CPU (h_vbit) = opval;
5552 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5553 1.1 christos }
5554 1.1 christos {
5555 1.1 christos {
5556 1.1 christos BI opval = 0;
5557 1.1 christos CPU (h_xbit) = opval;
5558 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5559 1.1 christos }
5560 1.1 christos {
5561 1.1 christos BI opval = 0;
5562 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5563 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5564 1.1 christos }
5565 1.1 christos }
5566 1.1 christos }
5567 1.1 christos }
5568 1.1 christos
5569 1.1 christos #undef FLD
5570 1.1 christos }
5571 1.1 christos NEXT (vpc);
5572 1.1 christos
5573 1.1 christos CASE (sem, INSN_ADD_D_R) : /* add.d $Rs,$Rd */
5574 1.1 christos {
5575 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5576 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5577 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5578 1.1 christos int UNUSED written = 0;
5579 1.1 christos IADDR UNUSED pc = abuf->addr;
5580 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5581 1.1 christos
5582 1.1 christos {
5583 1.1 christos SI tmp_tmpopd;
5584 1.1 christos SI tmp_tmpops;
5585 1.1 christos BI tmp_carry;
5586 1.1 christos SI tmp_newval;
5587 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5588 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5589 1.1 christos tmp_carry = CPU (h_cbit);
5590 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5591 1.1 christos {
5592 1.1 christos SI opval = tmp_newval;
5593 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5594 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5595 1.1 christos }
5596 1.1 christos {
5597 1.1 christos {
5598 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
5599 1.1 christos CPU (h_cbit) = opval;
5600 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5601 1.1 christos }
5602 1.1 christos {
5603 1.1 christos BI opval = LTSI (tmp_newval, 0);
5604 1.1 christos CPU (h_nbit) = opval;
5605 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5606 1.1 christos }
5607 1.1 christos {
5608 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5609 1.1 christos CPU (h_zbit) = opval;
5610 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5611 1.1 christos }
5612 1.1 christos {
5613 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
5614 1.1 christos CPU (h_vbit) = opval;
5615 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5616 1.1 christos }
5617 1.1 christos {
5618 1.1 christos {
5619 1.1 christos BI opval = 0;
5620 1.1 christos CPU (h_xbit) = opval;
5621 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5622 1.1 christos }
5623 1.1 christos {
5624 1.1 christos BI opval = 0;
5625 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5626 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5627 1.1 christos }
5628 1.1 christos }
5629 1.1 christos }
5630 1.1 christos }
5631 1.1 christos
5632 1.1 christos #undef FLD
5633 1.1 christos }
5634 1.1 christos NEXT (vpc);
5635 1.1 christos
5636 1.1 christos CASE (sem, INSN_ADD_M_B_M) : /* add-m.b [${Rs}${inc}],${Rd} */
5637 1.1 christos {
5638 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5639 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5640 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5641 1.1 christos int UNUSED written = 0;
5642 1.1 christos IADDR UNUSED pc = abuf->addr;
5643 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5644 1.1 christos
5645 1.1 christos {
5646 1.1 christos QI tmp_tmpopd;
5647 1.1 christos QI tmp_tmpops;
5648 1.1 christos BI tmp_carry;
5649 1.1 christos QI tmp_newval;
5650 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5651 1.1 christos QI tmp_tmp_mem;
5652 1.1 christos BI tmp_postinc;
5653 1.1 christos tmp_postinc = FLD (f_memmode);
5654 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5655 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
5656 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5657 1.1 christos {
5658 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5659 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
5660 1.1 christos }
5661 1.1 christos {
5662 1.1 christos SI opval = tmp_addr;
5663 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5664 1.1 christos written |= (1 << 12);
5665 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5666 1.1 christos }
5667 1.1 christos }
5668 1.1 christos }
5669 1.1 christos ; tmp_tmp_mem; });
5670 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5671 1.1 christos tmp_carry = CPU (h_cbit);
5672 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5673 1.1 christos {
5674 1.1 christos SI tmp_oldregval;
5675 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
5676 1.1 christos {
5677 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5678 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5679 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5680 1.1 christos }
5681 1.1 christos }
5682 1.1 christos {
5683 1.1 christos {
5684 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5685 1.1 christos CPU (h_cbit) = opval;
5686 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5687 1.1 christos }
5688 1.1 christos {
5689 1.1 christos BI opval = LTQI (tmp_newval, 0);
5690 1.1 christos CPU (h_nbit) = opval;
5691 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5692 1.1 christos }
5693 1.1 christos {
5694 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5695 1.1 christos CPU (h_zbit) = opval;
5696 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5697 1.1 christos }
5698 1.1 christos {
5699 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5700 1.1 christos CPU (h_vbit) = opval;
5701 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5702 1.1 christos }
5703 1.1 christos {
5704 1.1 christos {
5705 1.1 christos BI opval = 0;
5706 1.1 christos CPU (h_xbit) = opval;
5707 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5708 1.1 christos }
5709 1.1 christos {
5710 1.1 christos BI opval = 0;
5711 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5712 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5713 1.1 christos }
5714 1.1 christos }
5715 1.1 christos }
5716 1.1 christos }
5717 1.1 christos
5718 1.1 christos abuf->written = written;
5719 1.1 christos #undef FLD
5720 1.1 christos }
5721 1.1 christos NEXT (vpc);
5722 1.1 christos
5723 1.1 christos CASE (sem, INSN_ADD_M_W_M) : /* add-m.w [${Rs}${inc}],${Rd} */
5724 1.1 christos {
5725 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5726 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5727 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5728 1.1 christos int UNUSED written = 0;
5729 1.1 christos IADDR UNUSED pc = abuf->addr;
5730 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5731 1.1 christos
5732 1.1 christos {
5733 1.1 christos HI tmp_tmpopd;
5734 1.1 christos HI tmp_tmpops;
5735 1.1 christos BI tmp_carry;
5736 1.1 christos HI tmp_newval;
5737 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5738 1.1 christos HI tmp_tmp_mem;
5739 1.1 christos BI tmp_postinc;
5740 1.1 christos tmp_postinc = FLD (f_memmode);
5741 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5742 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
5743 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5744 1.1 christos {
5745 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5746 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
5747 1.1 christos }
5748 1.1 christos {
5749 1.1 christos SI opval = tmp_addr;
5750 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5751 1.1 christos written |= (1 << 12);
5752 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5753 1.1 christos }
5754 1.1 christos }
5755 1.1 christos }
5756 1.1 christos ; tmp_tmp_mem; });
5757 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5758 1.1 christos tmp_carry = CPU (h_cbit);
5759 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5760 1.1 christos {
5761 1.1 christos SI tmp_oldregval;
5762 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
5763 1.1 christos {
5764 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5765 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5766 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5767 1.1 christos }
5768 1.1 christos }
5769 1.1 christos {
5770 1.1 christos {
5771 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5772 1.1 christos CPU (h_cbit) = opval;
5773 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5774 1.1 christos }
5775 1.1 christos {
5776 1.1 christos BI opval = LTHI (tmp_newval, 0);
5777 1.1 christos CPU (h_nbit) = opval;
5778 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5779 1.1 christos }
5780 1.1 christos {
5781 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5782 1.1 christos CPU (h_zbit) = opval;
5783 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5784 1.1 christos }
5785 1.1 christos {
5786 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
5787 1.1 christos CPU (h_vbit) = opval;
5788 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5789 1.1 christos }
5790 1.1 christos {
5791 1.1 christos {
5792 1.1 christos BI opval = 0;
5793 1.1 christos CPU (h_xbit) = opval;
5794 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5795 1.1 christos }
5796 1.1 christos {
5797 1.1 christos BI opval = 0;
5798 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5799 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5800 1.1 christos }
5801 1.1 christos }
5802 1.1 christos }
5803 1.1 christos }
5804 1.1 christos
5805 1.1 christos abuf->written = written;
5806 1.1 christos #undef FLD
5807 1.1 christos }
5808 1.1 christos NEXT (vpc);
5809 1.1 christos
5810 1.1 christos CASE (sem, INSN_ADD_M_D_M) : /* add-m.d [${Rs}${inc}],${Rd} */
5811 1.1 christos {
5812 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5813 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5814 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5815 1.1 christos int UNUSED written = 0;
5816 1.1 christos IADDR UNUSED pc = abuf->addr;
5817 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5818 1.1 christos
5819 1.1 christos {
5820 1.1 christos SI tmp_tmpopd;
5821 1.1 christos SI tmp_tmpops;
5822 1.1 christos BI tmp_carry;
5823 1.1 christos SI tmp_newval;
5824 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5825 1.1 christos SI tmp_tmp_mem;
5826 1.1 christos BI tmp_postinc;
5827 1.1 christos tmp_postinc = FLD (f_memmode);
5828 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5829 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
5830 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5831 1.1 christos {
5832 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5833 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5834 1.1 christos }
5835 1.1 christos {
5836 1.1 christos SI opval = tmp_addr;
5837 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5838 1.1 christos written |= (1 << 11);
5839 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5840 1.1 christos }
5841 1.1 christos }
5842 1.1 christos }
5843 1.1 christos ; tmp_tmp_mem; });
5844 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5845 1.1 christos tmp_carry = CPU (h_cbit);
5846 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5847 1.1 christos {
5848 1.1 christos SI opval = tmp_newval;
5849 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5850 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5851 1.1 christos }
5852 1.1 christos {
5853 1.1 christos {
5854 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
5855 1.1 christos CPU (h_cbit) = opval;
5856 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5857 1.1 christos }
5858 1.1 christos {
5859 1.1 christos BI opval = LTSI (tmp_newval, 0);
5860 1.1 christos CPU (h_nbit) = opval;
5861 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5862 1.1 christos }
5863 1.1 christos {
5864 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5865 1.1 christos CPU (h_zbit) = opval;
5866 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5867 1.1 christos }
5868 1.1 christos {
5869 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
5870 1.1 christos CPU (h_vbit) = opval;
5871 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5872 1.1 christos }
5873 1.1 christos {
5874 1.1 christos {
5875 1.1 christos BI opval = 0;
5876 1.1 christos CPU (h_xbit) = opval;
5877 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5878 1.1 christos }
5879 1.1 christos {
5880 1.1 christos BI opval = 0;
5881 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5882 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5883 1.1 christos }
5884 1.1 christos }
5885 1.1 christos }
5886 1.1 christos }
5887 1.1 christos
5888 1.1 christos abuf->written = written;
5889 1.1 christos #undef FLD
5890 1.1 christos }
5891 1.1 christos NEXT (vpc);
5892 1.1 christos
5893 1.1 christos CASE (sem, INSN_ADDCBR) : /* add.b ${sconst8}],${Rd} */
5894 1.1 christos {
5895 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5896 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5897 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
5898 1.1 christos int UNUSED written = 0;
5899 1.1 christos IADDR UNUSED pc = abuf->addr;
5900 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5901 1.1 christos
5902 1.1 christos {
5903 1.1 christos QI tmp_tmpopd;
5904 1.1 christos QI tmp_tmpops;
5905 1.1 christos BI tmp_carry;
5906 1.1 christos QI tmp_newval;
5907 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
5908 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5909 1.1 christos tmp_carry = CPU (h_cbit);
5910 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5911 1.1 christos {
5912 1.1 christos SI tmp_oldregval;
5913 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5914 1.1 christos {
5915 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5916 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5917 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5918 1.1 christos }
5919 1.1 christos }
5920 1.1 christos {
5921 1.1 christos {
5922 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5923 1.1 christos CPU (h_cbit) = opval;
5924 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5925 1.1 christos }
5926 1.1 christos {
5927 1.1 christos BI opval = LTQI (tmp_newval, 0);
5928 1.1 christos CPU (h_nbit) = opval;
5929 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5930 1.1 christos }
5931 1.1 christos {
5932 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5933 1.1 christos CPU (h_zbit) = opval;
5934 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5935 1.1 christos }
5936 1.1 christos {
5937 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5938 1.1 christos CPU (h_vbit) = opval;
5939 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5940 1.1 christos }
5941 1.1 christos {
5942 1.1 christos {
5943 1.1 christos BI opval = 0;
5944 1.1 christos CPU (h_xbit) = opval;
5945 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5946 1.1 christos }
5947 1.1 christos {
5948 1.1 christos BI opval = 0;
5949 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5950 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5951 1.1 christos }
5952 1.1 christos }
5953 1.1 christos }
5954 1.1 christos }
5955 1.1 christos
5956 1.1 christos #undef FLD
5957 1.1 christos }
5958 1.1 christos NEXT (vpc);
5959 1.1 christos
5960 1.1 christos CASE (sem, INSN_ADDCWR) : /* add.w ${sconst16}],${Rd} */
5961 1.1 christos {
5962 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5963 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5964 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
5965 1.1 christos int UNUSED written = 0;
5966 1.1 christos IADDR UNUSED pc = abuf->addr;
5967 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5968 1.1 christos
5969 1.1 christos {
5970 1.1 christos HI tmp_tmpopd;
5971 1.1 christos HI tmp_tmpops;
5972 1.1 christos BI tmp_carry;
5973 1.1 christos HI tmp_newval;
5974 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
5975 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5976 1.1 christos tmp_carry = CPU (h_cbit);
5977 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5978 1.1 christos {
5979 1.1 christos SI tmp_oldregval;
5980 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5981 1.1 christos {
5982 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5983 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5984 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5985 1.1 christos }
5986 1.1 christos }
5987 1.1 christos {
5988 1.1 christos {
5989 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5990 1.1 christos CPU (h_cbit) = opval;
5991 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5992 1.1 christos }
5993 1.1 christos {
5994 1.1 christos BI opval = LTHI (tmp_newval, 0);
5995 1.1 christos CPU (h_nbit) = opval;
5996 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5997 1.1 christos }
5998 1.1 christos {
5999 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6000 1.1 christos CPU (h_zbit) = opval;
6001 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6002 1.1 christos }
6003 1.1 christos {
6004 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
6005 1.1 christos CPU (h_vbit) = opval;
6006 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6007 1.1 christos }
6008 1.1 christos {
6009 1.1 christos {
6010 1.1 christos BI opval = 0;
6011 1.1 christos CPU (h_xbit) = opval;
6012 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6013 1.1 christos }
6014 1.1 christos {
6015 1.1 christos BI opval = 0;
6016 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6017 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6018 1.1 christos }
6019 1.1 christos }
6020 1.1 christos }
6021 1.1 christos }
6022 1.1 christos
6023 1.1 christos #undef FLD
6024 1.1 christos }
6025 1.1 christos NEXT (vpc);
6026 1.1 christos
6027 1.1 christos CASE (sem, INSN_ADDCDR) : /* add.d ${const32}],${Rd} */
6028 1.1 christos {
6029 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6030 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6031 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
6032 1.1 christos int UNUSED written = 0;
6033 1.1 christos IADDR UNUSED pc = abuf->addr;
6034 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
6035 1.1 christos
6036 1.1 christos {
6037 1.1 christos SI tmp_tmpopd;
6038 1.1 christos SI tmp_tmpops;
6039 1.1 christos BI tmp_carry;
6040 1.1 christos SI tmp_newval;
6041 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
6042 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6043 1.1 christos tmp_carry = CPU (h_cbit);
6044 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6045 1.1 christos {
6046 1.1 christos SI opval = tmp_newval;
6047 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6048 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6049 1.1 christos }
6050 1.1 christos {
6051 1.1 christos {
6052 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6053 1.1 christos CPU (h_cbit) = opval;
6054 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6055 1.1 christos }
6056 1.1 christos {
6057 1.1 christos BI opval = LTSI (tmp_newval, 0);
6058 1.1 christos CPU (h_nbit) = opval;
6059 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6060 1.1 christos }
6061 1.1 christos {
6062 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6063 1.1 christos CPU (h_zbit) = opval;
6064 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6065 1.1 christos }
6066 1.1 christos {
6067 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6068 1.1 christos CPU (h_vbit) = opval;
6069 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6070 1.1 christos }
6071 1.1 christos {
6072 1.1 christos {
6073 1.1 christos BI opval = 0;
6074 1.1 christos CPU (h_xbit) = opval;
6075 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6076 1.1 christos }
6077 1.1 christos {
6078 1.1 christos BI opval = 0;
6079 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6080 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6081 1.1 christos }
6082 1.1 christos }
6083 1.1 christos }
6084 1.1 christos }
6085 1.1 christos
6086 1.1 christos #undef FLD
6087 1.1 christos }
6088 1.1 christos NEXT (vpc);
6089 1.1 christos
6090 1.1 christos CASE (sem, INSN_ADDS_B_R) : /* adds.b $Rs,$Rd */
6091 1.1 christos {
6092 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6093 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6094 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6095 1.1 christos int UNUSED written = 0;
6096 1.1 christos IADDR UNUSED pc = abuf->addr;
6097 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6098 1.1 christos
6099 1.1 christos {
6100 1.1 christos SI tmp_tmpopd;
6101 1.1 christos SI tmp_tmpops;
6102 1.1 christos BI tmp_carry;
6103 1.1 christos SI tmp_newval;
6104 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6105 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6106 1.1 christos tmp_carry = CPU (h_cbit);
6107 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6108 1.1 christos {
6109 1.1 christos SI opval = tmp_newval;
6110 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6111 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6112 1.1 christos }
6113 1.1 christos {
6114 1.1 christos {
6115 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6116 1.1 christos CPU (h_cbit) = opval;
6117 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6118 1.1 christos }
6119 1.1 christos {
6120 1.1 christos BI opval = LTSI (tmp_newval, 0);
6121 1.1 christos CPU (h_nbit) = opval;
6122 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6123 1.1 christos }
6124 1.1 christos {
6125 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6126 1.1 christos CPU (h_zbit) = opval;
6127 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6128 1.1 christos }
6129 1.1 christos {
6130 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6131 1.1 christos CPU (h_vbit) = opval;
6132 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6133 1.1 christos }
6134 1.1 christos {
6135 1.1 christos {
6136 1.1 christos BI opval = 0;
6137 1.1 christos CPU (h_xbit) = opval;
6138 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6139 1.1 christos }
6140 1.1 christos {
6141 1.1 christos BI opval = 0;
6142 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6143 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6144 1.1 christos }
6145 1.1 christos }
6146 1.1 christos }
6147 1.1 christos }
6148 1.1 christos
6149 1.1 christos #undef FLD
6150 1.1 christos }
6151 1.1 christos NEXT (vpc);
6152 1.1 christos
6153 1.1 christos CASE (sem, INSN_ADDS_W_R) : /* adds.w $Rs,$Rd */
6154 1.1 christos {
6155 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6156 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6157 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6158 1.1 christos int UNUSED written = 0;
6159 1.1 christos IADDR UNUSED pc = abuf->addr;
6160 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6161 1.1 christos
6162 1.1 christos {
6163 1.1 christos SI tmp_tmpopd;
6164 1.1 christos SI tmp_tmpops;
6165 1.1 christos BI tmp_carry;
6166 1.1 christos SI tmp_newval;
6167 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6168 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6169 1.1 christos tmp_carry = CPU (h_cbit);
6170 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6171 1.1 christos {
6172 1.1 christos SI opval = tmp_newval;
6173 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6174 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6175 1.1 christos }
6176 1.1 christos {
6177 1.1 christos {
6178 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6179 1.1 christos CPU (h_cbit) = opval;
6180 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6181 1.1 christos }
6182 1.1 christos {
6183 1.1 christos BI opval = LTSI (tmp_newval, 0);
6184 1.1 christos CPU (h_nbit) = opval;
6185 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6186 1.1 christos }
6187 1.1 christos {
6188 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6189 1.1 christos CPU (h_zbit) = opval;
6190 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6191 1.1 christos }
6192 1.1 christos {
6193 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6194 1.1 christos CPU (h_vbit) = opval;
6195 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6196 1.1 christos }
6197 1.1 christos {
6198 1.1 christos {
6199 1.1 christos BI opval = 0;
6200 1.1 christos CPU (h_xbit) = opval;
6201 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6202 1.1 christos }
6203 1.1 christos {
6204 1.1 christos BI opval = 0;
6205 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6206 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6207 1.1 christos }
6208 1.1 christos }
6209 1.1 christos }
6210 1.1 christos }
6211 1.1 christos
6212 1.1 christos #undef FLD
6213 1.1 christos }
6214 1.1 christos NEXT (vpc);
6215 1.1 christos
6216 1.1 christos CASE (sem, INSN_ADDS_M_B_M) : /* adds-m.b [${Rs}${inc}],$Rd */
6217 1.1 christos {
6218 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6219 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6220 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6221 1.1 christos int UNUSED written = 0;
6222 1.1 christos IADDR UNUSED pc = abuf->addr;
6223 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6224 1.1 christos
6225 1.1 christos {
6226 1.1 christos SI tmp_tmpopd;
6227 1.1 christos SI tmp_tmpops;
6228 1.1 christos BI tmp_carry;
6229 1.1 christos SI tmp_newval;
6230 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
6231 1.1 christos QI tmp_tmp_mem;
6232 1.1 christos BI tmp_postinc;
6233 1.1 christos tmp_postinc = FLD (f_memmode);
6234 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6235 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6236 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6237 1.1 christos {
6238 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6239 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6240 1.1 christos }
6241 1.1 christos {
6242 1.1 christos SI opval = tmp_addr;
6243 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6244 1.1 christos written |= (1 << 11);
6245 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6246 1.1 christos }
6247 1.1 christos }
6248 1.1 christos }
6249 1.1 christos ; tmp_tmp_mem; }));
6250 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6251 1.1 christos tmp_carry = CPU (h_cbit);
6252 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6253 1.1 christos {
6254 1.1 christos SI opval = tmp_newval;
6255 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6256 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6257 1.1 christos }
6258 1.1 christos {
6259 1.1 christos {
6260 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6261 1.1 christos CPU (h_cbit) = opval;
6262 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6263 1.1 christos }
6264 1.1 christos {
6265 1.1 christos BI opval = LTSI (tmp_newval, 0);
6266 1.1 christos CPU (h_nbit) = opval;
6267 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6268 1.1 christos }
6269 1.1 christos {
6270 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6271 1.1 christos CPU (h_zbit) = opval;
6272 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6273 1.1 christos }
6274 1.1 christos {
6275 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6276 1.1 christos CPU (h_vbit) = opval;
6277 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6278 1.1 christos }
6279 1.1 christos {
6280 1.1 christos {
6281 1.1 christos BI opval = 0;
6282 1.1 christos CPU (h_xbit) = opval;
6283 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6284 1.1 christos }
6285 1.1 christos {
6286 1.1 christos BI opval = 0;
6287 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6288 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6289 1.1 christos }
6290 1.1 christos }
6291 1.1 christos }
6292 1.1 christos }
6293 1.1 christos
6294 1.1 christos abuf->written = written;
6295 1.1 christos #undef FLD
6296 1.1 christos }
6297 1.1 christos NEXT (vpc);
6298 1.1 christos
6299 1.1 christos CASE (sem, INSN_ADDS_M_W_M) : /* adds-m.w [${Rs}${inc}],$Rd */
6300 1.1 christos {
6301 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6302 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6303 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6304 1.1 christos int UNUSED written = 0;
6305 1.1 christos IADDR UNUSED pc = abuf->addr;
6306 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6307 1.1 christos
6308 1.1 christos {
6309 1.1 christos SI tmp_tmpopd;
6310 1.1 christos SI tmp_tmpops;
6311 1.1 christos BI tmp_carry;
6312 1.1 christos SI tmp_newval;
6313 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
6314 1.1 christos HI tmp_tmp_mem;
6315 1.1 christos BI tmp_postinc;
6316 1.1 christos tmp_postinc = FLD (f_memmode);
6317 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6318 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6319 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6320 1.1 christos {
6321 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6322 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6323 1.1 christos }
6324 1.1 christos {
6325 1.1 christos SI opval = tmp_addr;
6326 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6327 1.1 christos written |= (1 << 11);
6328 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6329 1.1 christos }
6330 1.1 christos }
6331 1.1 christos }
6332 1.1 christos ; tmp_tmp_mem; }));
6333 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6334 1.1 christos tmp_carry = CPU (h_cbit);
6335 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6336 1.1 christos {
6337 1.1 christos SI opval = tmp_newval;
6338 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6339 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6340 1.1 christos }
6341 1.1 christos {
6342 1.1 christos {
6343 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6344 1.1 christos CPU (h_cbit) = opval;
6345 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6346 1.1 christos }
6347 1.1 christos {
6348 1.1 christos BI opval = LTSI (tmp_newval, 0);
6349 1.1 christos CPU (h_nbit) = opval;
6350 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6351 1.1 christos }
6352 1.1 christos {
6353 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6354 1.1 christos CPU (h_zbit) = opval;
6355 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6356 1.1 christos }
6357 1.1 christos {
6358 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6359 1.1 christos CPU (h_vbit) = opval;
6360 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6361 1.1 christos }
6362 1.1 christos {
6363 1.1 christos {
6364 1.1 christos BI opval = 0;
6365 1.1 christos CPU (h_xbit) = opval;
6366 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6367 1.1 christos }
6368 1.1 christos {
6369 1.1 christos BI opval = 0;
6370 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6371 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6372 1.1 christos }
6373 1.1 christos }
6374 1.1 christos }
6375 1.1 christos }
6376 1.1 christos
6377 1.1 christos abuf->written = written;
6378 1.1 christos #undef FLD
6379 1.1 christos }
6380 1.1 christos NEXT (vpc);
6381 1.1 christos
6382 1.1 christos CASE (sem, INSN_ADDSCBR) : /* [${Rs}${inc}],$Rd */
6383 1.1 christos {
6384 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6385 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6386 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6387 1.1 christos int UNUSED written = 0;
6388 1.1 christos IADDR UNUSED pc = abuf->addr;
6389 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6390 1.1 christos
6391 1.1 christos {
6392 1.1 christos SI tmp_tmpopd;
6393 1.1 christos SI tmp_tmpops;
6394 1.1 christos BI tmp_carry;
6395 1.1 christos SI tmp_newval;
6396 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6397 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6398 1.1 christos tmp_carry = CPU (h_cbit);
6399 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6400 1.1 christos {
6401 1.1 christos SI opval = tmp_newval;
6402 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6403 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6404 1.1 christos }
6405 1.1 christos {
6406 1.1 christos {
6407 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6408 1.1 christos CPU (h_cbit) = opval;
6409 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6410 1.1 christos }
6411 1.1 christos {
6412 1.1 christos BI opval = LTSI (tmp_newval, 0);
6413 1.1 christos CPU (h_nbit) = opval;
6414 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6415 1.1 christos }
6416 1.1 christos {
6417 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6418 1.1 christos CPU (h_zbit) = opval;
6419 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6420 1.1 christos }
6421 1.1 christos {
6422 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6423 1.1 christos CPU (h_vbit) = opval;
6424 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6425 1.1 christos }
6426 1.1 christos {
6427 1.1 christos {
6428 1.1 christos BI opval = 0;
6429 1.1 christos CPU (h_xbit) = opval;
6430 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6431 1.1 christos }
6432 1.1 christos {
6433 1.1 christos BI opval = 0;
6434 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6435 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6436 1.1 christos }
6437 1.1 christos }
6438 1.1 christos }
6439 1.1 christos }
6440 1.1 christos
6441 1.1 christos #undef FLD
6442 1.1 christos }
6443 1.1 christos NEXT (vpc);
6444 1.1 christos
6445 1.1 christos CASE (sem, INSN_ADDSCWR) : /* [${Rs}${inc}],$Rd */
6446 1.1 christos {
6447 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6448 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6449 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6450 1.1 christos int UNUSED written = 0;
6451 1.1 christos IADDR UNUSED pc = abuf->addr;
6452 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6453 1.1 christos
6454 1.1 christos {
6455 1.1 christos SI tmp_tmpopd;
6456 1.1 christos SI tmp_tmpops;
6457 1.1 christos BI tmp_carry;
6458 1.1 christos SI tmp_newval;
6459 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6460 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6461 1.1 christos tmp_carry = CPU (h_cbit);
6462 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6463 1.1 christos {
6464 1.1 christos SI opval = tmp_newval;
6465 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6466 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6467 1.1 christos }
6468 1.1 christos {
6469 1.1 christos {
6470 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6471 1.1 christos CPU (h_cbit) = opval;
6472 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6473 1.1 christos }
6474 1.1 christos {
6475 1.1 christos BI opval = LTSI (tmp_newval, 0);
6476 1.1 christos CPU (h_nbit) = opval;
6477 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6478 1.1 christos }
6479 1.1 christos {
6480 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6481 1.1 christos CPU (h_zbit) = opval;
6482 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6483 1.1 christos }
6484 1.1 christos {
6485 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6486 1.1 christos CPU (h_vbit) = opval;
6487 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6488 1.1 christos }
6489 1.1 christos {
6490 1.1 christos {
6491 1.1 christos BI opval = 0;
6492 1.1 christos CPU (h_xbit) = opval;
6493 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6494 1.1 christos }
6495 1.1 christos {
6496 1.1 christos BI opval = 0;
6497 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6498 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6499 1.1 christos }
6500 1.1 christos }
6501 1.1 christos }
6502 1.1 christos }
6503 1.1 christos
6504 1.1 christos #undef FLD
6505 1.1 christos }
6506 1.1 christos NEXT (vpc);
6507 1.1 christos
6508 1.1 christos CASE (sem, INSN_ADDU_B_R) : /* addu.b $Rs,$Rd */
6509 1.1 christos {
6510 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6511 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6512 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6513 1.1 christos int UNUSED written = 0;
6514 1.1 christos IADDR UNUSED pc = abuf->addr;
6515 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6516 1.1 christos
6517 1.1 christos {
6518 1.1 christos SI tmp_tmpopd;
6519 1.1 christos SI tmp_tmpops;
6520 1.1 christos BI tmp_carry;
6521 1.1 christos SI tmp_newval;
6522 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6523 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6524 1.1 christos tmp_carry = CPU (h_cbit);
6525 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6526 1.1 christos {
6527 1.1 christos SI opval = tmp_newval;
6528 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6529 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6530 1.1 christos }
6531 1.1 christos {
6532 1.1 christos {
6533 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6534 1.1 christos CPU (h_cbit) = opval;
6535 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6536 1.1 christos }
6537 1.1 christos {
6538 1.1 christos BI opval = LTSI (tmp_newval, 0);
6539 1.1 christos CPU (h_nbit) = opval;
6540 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6541 1.1 christos }
6542 1.1 christos {
6543 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6544 1.1 christos CPU (h_zbit) = opval;
6545 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6546 1.1 christos }
6547 1.1 christos {
6548 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6549 1.1 christos CPU (h_vbit) = opval;
6550 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6551 1.1 christos }
6552 1.1 christos {
6553 1.1 christos {
6554 1.1 christos BI opval = 0;
6555 1.1 christos CPU (h_xbit) = opval;
6556 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6557 1.1 christos }
6558 1.1 christos {
6559 1.1 christos BI opval = 0;
6560 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6561 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6562 1.1 christos }
6563 1.1 christos }
6564 1.1 christos }
6565 1.1 christos }
6566 1.1 christos
6567 1.1 christos #undef FLD
6568 1.1 christos }
6569 1.1 christos NEXT (vpc);
6570 1.1 christos
6571 1.1 christos CASE (sem, INSN_ADDU_W_R) : /* addu.w $Rs,$Rd */
6572 1.1 christos {
6573 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6574 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6575 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6576 1.1 christos int UNUSED written = 0;
6577 1.1 christos IADDR UNUSED pc = abuf->addr;
6578 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6579 1.1 christos
6580 1.1 christos {
6581 1.1 christos SI tmp_tmpopd;
6582 1.1 christos SI tmp_tmpops;
6583 1.1 christos BI tmp_carry;
6584 1.1 christos SI tmp_newval;
6585 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6586 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6587 1.1 christos tmp_carry = CPU (h_cbit);
6588 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6589 1.1 christos {
6590 1.1 christos SI opval = tmp_newval;
6591 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6592 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6593 1.1 christos }
6594 1.1 christos {
6595 1.1 christos {
6596 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6597 1.1 christos CPU (h_cbit) = opval;
6598 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6599 1.1 christos }
6600 1.1 christos {
6601 1.1 christos BI opval = LTSI (tmp_newval, 0);
6602 1.1 christos CPU (h_nbit) = opval;
6603 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6604 1.1 christos }
6605 1.1 christos {
6606 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6607 1.1 christos CPU (h_zbit) = opval;
6608 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6609 1.1 christos }
6610 1.1 christos {
6611 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6612 1.1 christos CPU (h_vbit) = opval;
6613 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6614 1.1 christos }
6615 1.1 christos {
6616 1.1 christos {
6617 1.1 christos BI opval = 0;
6618 1.1 christos CPU (h_xbit) = opval;
6619 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6620 1.1 christos }
6621 1.1 christos {
6622 1.1 christos BI opval = 0;
6623 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6624 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6625 1.1 christos }
6626 1.1 christos }
6627 1.1 christos }
6628 1.1 christos }
6629 1.1 christos
6630 1.1 christos #undef FLD
6631 1.1 christos }
6632 1.1 christos NEXT (vpc);
6633 1.1 christos
6634 1.1 christos CASE (sem, INSN_ADDU_M_B_M) : /* addu-m.b [${Rs}${inc}],$Rd */
6635 1.1 christos {
6636 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6637 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6638 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6639 1.1 christos int UNUSED written = 0;
6640 1.1 christos IADDR UNUSED pc = abuf->addr;
6641 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6642 1.1 christos
6643 1.1 christos {
6644 1.1 christos SI tmp_tmpopd;
6645 1.1 christos SI tmp_tmpops;
6646 1.1 christos BI tmp_carry;
6647 1.1 christos SI tmp_newval;
6648 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
6649 1.1 christos QI tmp_tmp_mem;
6650 1.1 christos BI tmp_postinc;
6651 1.1 christos tmp_postinc = FLD (f_memmode);
6652 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6653 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6654 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6655 1.1 christos {
6656 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6657 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6658 1.1 christos }
6659 1.1 christos {
6660 1.1 christos SI opval = tmp_addr;
6661 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6662 1.1 christos written |= (1 << 11);
6663 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6664 1.1 christos }
6665 1.1 christos }
6666 1.1 christos }
6667 1.1 christos ; tmp_tmp_mem; }));
6668 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6669 1.1 christos tmp_carry = CPU (h_cbit);
6670 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6671 1.1 christos {
6672 1.1 christos SI opval = tmp_newval;
6673 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6674 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6675 1.1 christos }
6676 1.1 christos {
6677 1.1 christos {
6678 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6679 1.1 christos CPU (h_cbit) = opval;
6680 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6681 1.1 christos }
6682 1.1 christos {
6683 1.1 christos BI opval = LTSI (tmp_newval, 0);
6684 1.1 christos CPU (h_nbit) = opval;
6685 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6686 1.1 christos }
6687 1.1 christos {
6688 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6689 1.1 christos CPU (h_zbit) = opval;
6690 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6691 1.1 christos }
6692 1.1 christos {
6693 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6694 1.1 christos CPU (h_vbit) = opval;
6695 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6696 1.1 christos }
6697 1.1 christos {
6698 1.1 christos {
6699 1.1 christos BI opval = 0;
6700 1.1 christos CPU (h_xbit) = opval;
6701 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6702 1.1 christos }
6703 1.1 christos {
6704 1.1 christos BI opval = 0;
6705 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6706 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6707 1.1 christos }
6708 1.1 christos }
6709 1.1 christos }
6710 1.1 christos }
6711 1.1 christos
6712 1.1 christos abuf->written = written;
6713 1.1 christos #undef FLD
6714 1.1 christos }
6715 1.1 christos NEXT (vpc);
6716 1.1 christos
6717 1.1 christos CASE (sem, INSN_ADDU_M_W_M) : /* addu-m.w [${Rs}${inc}],$Rd */
6718 1.1 christos {
6719 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6720 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6721 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6722 1.1 christos int UNUSED written = 0;
6723 1.1 christos IADDR UNUSED pc = abuf->addr;
6724 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6725 1.1 christos
6726 1.1 christos {
6727 1.1 christos SI tmp_tmpopd;
6728 1.1 christos SI tmp_tmpops;
6729 1.1 christos BI tmp_carry;
6730 1.1 christos SI tmp_newval;
6731 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
6732 1.1 christos HI tmp_tmp_mem;
6733 1.1 christos BI tmp_postinc;
6734 1.1 christos tmp_postinc = FLD (f_memmode);
6735 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6736 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6737 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6738 1.1 christos {
6739 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6740 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6741 1.1 christos }
6742 1.1 christos {
6743 1.1 christos SI opval = tmp_addr;
6744 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6745 1.1 christos written |= (1 << 11);
6746 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6747 1.1 christos }
6748 1.1 christos }
6749 1.1 christos }
6750 1.1 christos ; tmp_tmp_mem; }));
6751 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6752 1.1 christos tmp_carry = CPU (h_cbit);
6753 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6754 1.1 christos {
6755 1.1 christos SI opval = tmp_newval;
6756 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6757 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6758 1.1 christos }
6759 1.1 christos {
6760 1.1 christos {
6761 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6762 1.1 christos CPU (h_cbit) = opval;
6763 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6764 1.1 christos }
6765 1.1 christos {
6766 1.1 christos BI opval = LTSI (tmp_newval, 0);
6767 1.1 christos CPU (h_nbit) = opval;
6768 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6769 1.1 christos }
6770 1.1 christos {
6771 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6772 1.1 christos CPU (h_zbit) = opval;
6773 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6774 1.1 christos }
6775 1.1 christos {
6776 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6777 1.1 christos CPU (h_vbit) = opval;
6778 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6779 1.1 christos }
6780 1.1 christos {
6781 1.1 christos {
6782 1.1 christos BI opval = 0;
6783 1.1 christos CPU (h_xbit) = opval;
6784 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6785 1.1 christos }
6786 1.1 christos {
6787 1.1 christos BI opval = 0;
6788 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6789 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6790 1.1 christos }
6791 1.1 christos }
6792 1.1 christos }
6793 1.1 christos }
6794 1.1 christos
6795 1.1 christos abuf->written = written;
6796 1.1 christos #undef FLD
6797 1.1 christos }
6798 1.1 christos NEXT (vpc);
6799 1.1 christos
6800 1.1 christos CASE (sem, INSN_ADDUCBR) : /* [${Rs}${inc}],$Rd */
6801 1.1 christos {
6802 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6803 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6804 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6805 1.1 christos int UNUSED written = 0;
6806 1.1 christos IADDR UNUSED pc = abuf->addr;
6807 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6808 1.1 christos
6809 1.1 christos {
6810 1.1 christos SI tmp_tmpopd;
6811 1.1 christos SI tmp_tmpops;
6812 1.1 christos BI tmp_carry;
6813 1.1 christos SI tmp_newval;
6814 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6815 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6816 1.1 christos tmp_carry = CPU (h_cbit);
6817 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6818 1.1 christos {
6819 1.1 christos SI opval = tmp_newval;
6820 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6821 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6822 1.1 christos }
6823 1.1 christos {
6824 1.1 christos {
6825 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6826 1.1 christos CPU (h_cbit) = opval;
6827 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6828 1.1 christos }
6829 1.1 christos {
6830 1.1 christos BI opval = LTSI (tmp_newval, 0);
6831 1.1 christos CPU (h_nbit) = opval;
6832 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6833 1.1 christos }
6834 1.1 christos {
6835 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6836 1.1 christos CPU (h_zbit) = opval;
6837 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6838 1.1 christos }
6839 1.1 christos {
6840 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6841 1.1 christos CPU (h_vbit) = opval;
6842 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6843 1.1 christos }
6844 1.1 christos {
6845 1.1 christos {
6846 1.1 christos BI opval = 0;
6847 1.1 christos CPU (h_xbit) = opval;
6848 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6849 1.1 christos }
6850 1.1 christos {
6851 1.1 christos BI opval = 0;
6852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6853 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6854 1.1 christos }
6855 1.1 christos }
6856 1.1 christos }
6857 1.1 christos }
6858 1.1 christos
6859 1.1 christos #undef FLD
6860 1.1 christos }
6861 1.1 christos NEXT (vpc);
6862 1.1 christos
6863 1.1 christos CASE (sem, INSN_ADDUCWR) : /* [${Rs}${inc}],$Rd */
6864 1.1 christos {
6865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6867 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6868 1.1 christos int UNUSED written = 0;
6869 1.1 christos IADDR UNUSED pc = abuf->addr;
6870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6871 1.1 christos
6872 1.1 christos {
6873 1.1 christos SI tmp_tmpopd;
6874 1.1 christos SI tmp_tmpops;
6875 1.1 christos BI tmp_carry;
6876 1.1 christos SI tmp_newval;
6877 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6878 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6879 1.1 christos tmp_carry = CPU (h_cbit);
6880 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6881 1.1 christos {
6882 1.1 christos SI opval = tmp_newval;
6883 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6884 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6885 1.1 christos }
6886 1.1 christos {
6887 1.1 christos {
6888 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6889 1.1 christos CPU (h_cbit) = opval;
6890 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6891 1.1 christos }
6892 1.1 christos {
6893 1.1 christos BI opval = LTSI (tmp_newval, 0);
6894 1.1 christos CPU (h_nbit) = opval;
6895 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6896 1.1 christos }
6897 1.1 christos {
6898 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6899 1.1 christos CPU (h_zbit) = opval;
6900 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6901 1.1 christos }
6902 1.1 christos {
6903 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6904 1.1 christos CPU (h_vbit) = opval;
6905 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6906 1.1 christos }
6907 1.1 christos {
6908 1.1 christos {
6909 1.1 christos BI opval = 0;
6910 1.1 christos CPU (h_xbit) = opval;
6911 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6912 1.1 christos }
6913 1.1 christos {
6914 1.1 christos BI opval = 0;
6915 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6916 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6917 1.1 christos }
6918 1.1 christos }
6919 1.1 christos }
6920 1.1 christos }
6921 1.1 christos
6922 1.1 christos #undef FLD
6923 1.1 christos }
6924 1.1 christos NEXT (vpc);
6925 1.1 christos
6926 1.1 christos CASE (sem, INSN_SUB_B_R) : /* sub.b $Rs,$Rd */
6927 1.1 christos {
6928 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6929 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6930 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6931 1.1 christos int UNUSED written = 0;
6932 1.1 christos IADDR UNUSED pc = abuf->addr;
6933 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6934 1.1 christos
6935 1.1 christos {
6936 1.1 christos QI tmp_tmpopd;
6937 1.1 christos QI tmp_tmpops;
6938 1.1 christos BI tmp_carry;
6939 1.1 christos QI tmp_newval;
6940 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
6941 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6942 1.1 christos tmp_carry = CPU (h_cbit);
6943 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6944 1.1 christos {
6945 1.1 christos SI tmp_oldregval;
6946 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
6947 1.1 christos {
6948 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
6949 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6950 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6951 1.1 christos }
6952 1.1 christos }
6953 1.1 christos {
6954 1.1 christos {
6955 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
6956 1.1 christos CPU (h_cbit) = opval;
6957 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6958 1.1 christos }
6959 1.1 christos {
6960 1.1 christos BI opval = LTQI (tmp_newval, 0);
6961 1.1 christos CPU (h_nbit) = opval;
6962 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6963 1.1 christos }
6964 1.1 christos {
6965 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6966 1.1 christos CPU (h_zbit) = opval;
6967 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6968 1.1 christos }
6969 1.1 christos {
6970 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
6971 1.1 christos CPU (h_vbit) = opval;
6972 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6973 1.1 christos }
6974 1.1 christos {
6975 1.1 christos {
6976 1.1 christos BI opval = 0;
6977 1.1 christos CPU (h_xbit) = opval;
6978 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6979 1.1 christos }
6980 1.1 christos {
6981 1.1 christos BI opval = 0;
6982 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6983 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6984 1.1 christos }
6985 1.1 christos }
6986 1.1 christos }
6987 1.1 christos }
6988 1.1 christos
6989 1.1 christos #undef FLD
6990 1.1 christos }
6991 1.1 christos NEXT (vpc);
6992 1.1 christos
6993 1.1 christos CASE (sem, INSN_SUB_W_R) : /* sub.w $Rs,$Rd */
6994 1.1 christos {
6995 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6996 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6997 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6998 1.1 christos int UNUSED written = 0;
6999 1.1 christos IADDR UNUSED pc = abuf->addr;
7000 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7001 1.1 christos
7002 1.1 christos {
7003 1.1 christos HI tmp_tmpopd;
7004 1.1 christos HI tmp_tmpops;
7005 1.1 christos BI tmp_carry;
7006 1.1 christos HI tmp_newval;
7007 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7008 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7009 1.1 christos tmp_carry = CPU (h_cbit);
7010 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7011 1.1 christos {
7012 1.1 christos SI tmp_oldregval;
7013 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7014 1.1 christos {
7015 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7016 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7017 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7018 1.1 christos }
7019 1.1 christos }
7020 1.1 christos {
7021 1.1 christos {
7022 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7023 1.1 christos CPU (h_cbit) = opval;
7024 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7025 1.1 christos }
7026 1.1 christos {
7027 1.1 christos BI opval = LTHI (tmp_newval, 0);
7028 1.1 christos CPU (h_nbit) = opval;
7029 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7030 1.1 christos }
7031 1.1 christos {
7032 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7033 1.1 christos CPU (h_zbit) = opval;
7034 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7035 1.1 christos }
7036 1.1 christos {
7037 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7038 1.1 christos CPU (h_vbit) = opval;
7039 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7040 1.1 christos }
7041 1.1 christos {
7042 1.1 christos {
7043 1.1 christos BI opval = 0;
7044 1.1 christos CPU (h_xbit) = opval;
7045 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7046 1.1 christos }
7047 1.1 christos {
7048 1.1 christos BI opval = 0;
7049 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7050 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7051 1.1 christos }
7052 1.1 christos }
7053 1.1 christos }
7054 1.1 christos }
7055 1.1 christos
7056 1.1 christos #undef FLD
7057 1.1 christos }
7058 1.1 christos NEXT (vpc);
7059 1.1 christos
7060 1.1 christos CASE (sem, INSN_SUB_D_R) : /* sub.d $Rs,$Rd */
7061 1.1 christos {
7062 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7063 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7064 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7065 1.1 christos int UNUSED written = 0;
7066 1.1 christos IADDR UNUSED pc = abuf->addr;
7067 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7068 1.1 christos
7069 1.1 christos {
7070 1.1 christos SI tmp_tmpopd;
7071 1.1 christos SI tmp_tmpops;
7072 1.1 christos BI tmp_carry;
7073 1.1 christos SI tmp_newval;
7074 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7075 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7076 1.1 christos tmp_carry = CPU (h_cbit);
7077 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7078 1.1 christos {
7079 1.1 christos SI opval = tmp_newval;
7080 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7081 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7082 1.1 christos }
7083 1.1 christos {
7084 1.1 christos {
7085 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7086 1.1 christos CPU (h_cbit) = opval;
7087 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7088 1.1 christos }
7089 1.1 christos {
7090 1.1 christos BI opval = LTSI (tmp_newval, 0);
7091 1.1 christos CPU (h_nbit) = opval;
7092 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7093 1.1 christos }
7094 1.1 christos {
7095 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7096 1.1 christos CPU (h_zbit) = opval;
7097 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7098 1.1 christos }
7099 1.1 christos {
7100 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7101 1.1 christos CPU (h_vbit) = opval;
7102 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7103 1.1 christos }
7104 1.1 christos {
7105 1.1 christos {
7106 1.1 christos BI opval = 0;
7107 1.1 christos CPU (h_xbit) = opval;
7108 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7109 1.1 christos }
7110 1.1 christos {
7111 1.1 christos BI opval = 0;
7112 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7113 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7114 1.1 christos }
7115 1.1 christos }
7116 1.1 christos }
7117 1.1 christos }
7118 1.1 christos
7119 1.1 christos #undef FLD
7120 1.1 christos }
7121 1.1 christos NEXT (vpc);
7122 1.1 christos
7123 1.1 christos CASE (sem, INSN_SUB_M_B_M) : /* sub-m.b [${Rs}${inc}],${Rd} */
7124 1.1 christos {
7125 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7126 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7127 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7128 1.1 christos int UNUSED written = 0;
7129 1.1 christos IADDR UNUSED pc = abuf->addr;
7130 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7131 1.1 christos
7132 1.1 christos {
7133 1.1 christos QI tmp_tmpopd;
7134 1.1 christos QI tmp_tmpops;
7135 1.1 christos BI tmp_carry;
7136 1.1 christos QI tmp_newval;
7137 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7138 1.1 christos QI tmp_tmp_mem;
7139 1.1 christos BI tmp_postinc;
7140 1.1 christos tmp_postinc = FLD (f_memmode);
7141 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7142 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7143 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7144 1.1 christos {
7145 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7146 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7147 1.1 christos }
7148 1.1 christos {
7149 1.1 christos SI opval = tmp_addr;
7150 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7151 1.1 christos written |= (1 << 12);
7152 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7153 1.1 christos }
7154 1.1 christos }
7155 1.1 christos }
7156 1.1 christos ; tmp_tmp_mem; });
7157 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7158 1.1 christos tmp_carry = CPU (h_cbit);
7159 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7160 1.1 christos {
7161 1.1 christos SI tmp_oldregval;
7162 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
7163 1.1 christos {
7164 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7165 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7166 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7167 1.1 christos }
7168 1.1 christos }
7169 1.1 christos {
7170 1.1 christos {
7171 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
7172 1.1 christos CPU (h_cbit) = opval;
7173 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7174 1.1 christos }
7175 1.1 christos {
7176 1.1 christos BI opval = LTQI (tmp_newval, 0);
7177 1.1 christos CPU (h_nbit) = opval;
7178 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7179 1.1 christos }
7180 1.1 christos {
7181 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7182 1.1 christos CPU (h_zbit) = opval;
7183 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7184 1.1 christos }
7185 1.1 christos {
7186 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
7187 1.1 christos CPU (h_vbit) = opval;
7188 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7189 1.1 christos }
7190 1.1 christos {
7191 1.1 christos {
7192 1.1 christos BI opval = 0;
7193 1.1 christos CPU (h_xbit) = opval;
7194 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7195 1.1 christos }
7196 1.1 christos {
7197 1.1 christos BI opval = 0;
7198 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7199 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7200 1.1 christos }
7201 1.1 christos }
7202 1.1 christos }
7203 1.1 christos }
7204 1.1 christos
7205 1.1 christos abuf->written = written;
7206 1.1 christos #undef FLD
7207 1.1 christos }
7208 1.1 christos NEXT (vpc);
7209 1.1 christos
7210 1.1 christos CASE (sem, INSN_SUB_M_W_M) : /* sub-m.w [${Rs}${inc}],${Rd} */
7211 1.1 christos {
7212 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7213 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7214 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7215 1.1 christos int UNUSED written = 0;
7216 1.1 christos IADDR UNUSED pc = abuf->addr;
7217 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7218 1.1 christos
7219 1.1 christos {
7220 1.1 christos HI tmp_tmpopd;
7221 1.1 christos HI tmp_tmpops;
7222 1.1 christos BI tmp_carry;
7223 1.1 christos HI tmp_newval;
7224 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7225 1.1 christos HI tmp_tmp_mem;
7226 1.1 christos BI tmp_postinc;
7227 1.1 christos tmp_postinc = FLD (f_memmode);
7228 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7229 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7230 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7231 1.1 christos {
7232 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7233 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7234 1.1 christos }
7235 1.1 christos {
7236 1.1 christos SI opval = tmp_addr;
7237 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7238 1.1 christos written |= (1 << 12);
7239 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7240 1.1 christos }
7241 1.1 christos }
7242 1.1 christos }
7243 1.1 christos ; tmp_tmp_mem; });
7244 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7245 1.1 christos tmp_carry = CPU (h_cbit);
7246 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7247 1.1 christos {
7248 1.1 christos SI tmp_oldregval;
7249 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
7250 1.1 christos {
7251 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7252 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7253 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7254 1.1 christos }
7255 1.1 christos }
7256 1.1 christos {
7257 1.1 christos {
7258 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7259 1.1 christos CPU (h_cbit) = opval;
7260 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7261 1.1 christos }
7262 1.1 christos {
7263 1.1 christos BI opval = LTHI (tmp_newval, 0);
7264 1.1 christos CPU (h_nbit) = opval;
7265 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7266 1.1 christos }
7267 1.1 christos {
7268 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7269 1.1 christos CPU (h_zbit) = opval;
7270 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7271 1.1 christos }
7272 1.1 christos {
7273 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7274 1.1 christos CPU (h_vbit) = opval;
7275 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7276 1.1 christos }
7277 1.1 christos {
7278 1.1 christos {
7279 1.1 christos BI opval = 0;
7280 1.1 christos CPU (h_xbit) = opval;
7281 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7282 1.1 christos }
7283 1.1 christos {
7284 1.1 christos BI opval = 0;
7285 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7286 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7287 1.1 christos }
7288 1.1 christos }
7289 1.1 christos }
7290 1.1 christos }
7291 1.1 christos
7292 1.1 christos abuf->written = written;
7293 1.1 christos #undef FLD
7294 1.1 christos }
7295 1.1 christos NEXT (vpc);
7296 1.1 christos
7297 1.1 christos CASE (sem, INSN_SUB_M_D_M) : /* sub-m.d [${Rs}${inc}],${Rd} */
7298 1.1 christos {
7299 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7300 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7301 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7302 1.1 christos int UNUSED written = 0;
7303 1.1 christos IADDR UNUSED pc = abuf->addr;
7304 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7305 1.1 christos
7306 1.1 christos {
7307 1.1 christos SI tmp_tmpopd;
7308 1.1 christos SI tmp_tmpops;
7309 1.1 christos BI tmp_carry;
7310 1.1 christos SI tmp_newval;
7311 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7312 1.1 christos SI tmp_tmp_mem;
7313 1.1 christos BI tmp_postinc;
7314 1.1 christos tmp_postinc = FLD (f_memmode);
7315 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7316 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
7317 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7318 1.1 christos {
7319 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7320 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
7321 1.1 christos }
7322 1.1 christos {
7323 1.1 christos SI opval = tmp_addr;
7324 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7325 1.1 christos written |= (1 << 11);
7326 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7327 1.1 christos }
7328 1.1 christos }
7329 1.1 christos }
7330 1.1 christos ; tmp_tmp_mem; });
7331 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7332 1.1 christos tmp_carry = CPU (h_cbit);
7333 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7334 1.1 christos {
7335 1.1 christos SI opval = tmp_newval;
7336 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7337 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7338 1.1 christos }
7339 1.1 christos {
7340 1.1 christos {
7341 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7342 1.1 christos CPU (h_cbit) = opval;
7343 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7344 1.1 christos }
7345 1.1 christos {
7346 1.1 christos BI opval = LTSI (tmp_newval, 0);
7347 1.1 christos CPU (h_nbit) = opval;
7348 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7349 1.1 christos }
7350 1.1 christos {
7351 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7352 1.1 christos CPU (h_zbit) = opval;
7353 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7354 1.1 christos }
7355 1.1 christos {
7356 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7357 1.1 christos CPU (h_vbit) = opval;
7358 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7359 1.1 christos }
7360 1.1 christos {
7361 1.1 christos {
7362 1.1 christos BI opval = 0;
7363 1.1 christos CPU (h_xbit) = opval;
7364 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7365 1.1 christos }
7366 1.1 christos {
7367 1.1 christos BI opval = 0;
7368 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7369 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7370 1.1 christos }
7371 1.1 christos }
7372 1.1 christos }
7373 1.1 christos }
7374 1.1 christos
7375 1.1 christos abuf->written = written;
7376 1.1 christos #undef FLD
7377 1.1 christos }
7378 1.1 christos NEXT (vpc);
7379 1.1 christos
7380 1.1 christos CASE (sem, INSN_SUBCBR) : /* sub.b ${sconst8}],${Rd} */
7381 1.1 christos {
7382 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7383 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7384 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7385 1.1 christos int UNUSED written = 0;
7386 1.1 christos IADDR UNUSED pc = abuf->addr;
7387 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7388 1.1 christos
7389 1.1 christos {
7390 1.1 christos QI tmp_tmpopd;
7391 1.1 christos QI tmp_tmpops;
7392 1.1 christos BI tmp_carry;
7393 1.1 christos QI tmp_newval;
7394 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
7395 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7396 1.1 christos tmp_carry = CPU (h_cbit);
7397 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7398 1.1 christos {
7399 1.1 christos SI tmp_oldregval;
7400 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7401 1.1 christos {
7402 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7403 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7404 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7405 1.1 christos }
7406 1.1 christos }
7407 1.1 christos {
7408 1.1 christos {
7409 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
7410 1.1 christos CPU (h_cbit) = opval;
7411 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7412 1.1 christos }
7413 1.1 christos {
7414 1.1 christos BI opval = LTQI (tmp_newval, 0);
7415 1.1 christos CPU (h_nbit) = opval;
7416 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7417 1.1 christos }
7418 1.1 christos {
7419 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7420 1.1 christos CPU (h_zbit) = opval;
7421 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7422 1.1 christos }
7423 1.1 christos {
7424 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
7425 1.1 christos CPU (h_vbit) = opval;
7426 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7427 1.1 christos }
7428 1.1 christos {
7429 1.1 christos {
7430 1.1 christos BI opval = 0;
7431 1.1 christos CPU (h_xbit) = opval;
7432 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7433 1.1 christos }
7434 1.1 christos {
7435 1.1 christos BI opval = 0;
7436 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7437 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7438 1.1 christos }
7439 1.1 christos }
7440 1.1 christos }
7441 1.1 christos }
7442 1.1 christos
7443 1.1 christos #undef FLD
7444 1.1 christos }
7445 1.1 christos NEXT (vpc);
7446 1.1 christos
7447 1.1 christos CASE (sem, INSN_SUBCWR) : /* sub.w ${sconst16}],${Rd} */
7448 1.1 christos {
7449 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7450 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7451 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7452 1.1 christos int UNUSED written = 0;
7453 1.1 christos IADDR UNUSED pc = abuf->addr;
7454 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7455 1.1 christos
7456 1.1 christos {
7457 1.1 christos HI tmp_tmpopd;
7458 1.1 christos HI tmp_tmpops;
7459 1.1 christos BI tmp_carry;
7460 1.1 christos HI tmp_newval;
7461 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
7462 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7463 1.1 christos tmp_carry = CPU (h_cbit);
7464 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7465 1.1 christos {
7466 1.1 christos SI tmp_oldregval;
7467 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7468 1.1 christos {
7469 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7470 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7471 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7472 1.1 christos }
7473 1.1 christos }
7474 1.1 christos {
7475 1.1 christos {
7476 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7477 1.1 christos CPU (h_cbit) = opval;
7478 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7479 1.1 christos }
7480 1.1 christos {
7481 1.1 christos BI opval = LTHI (tmp_newval, 0);
7482 1.1 christos CPU (h_nbit) = opval;
7483 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7484 1.1 christos }
7485 1.1 christos {
7486 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7487 1.1 christos CPU (h_zbit) = opval;
7488 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7489 1.1 christos }
7490 1.1 christos {
7491 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7492 1.1 christos CPU (h_vbit) = opval;
7493 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7494 1.1 christos }
7495 1.1 christos {
7496 1.1 christos {
7497 1.1 christos BI opval = 0;
7498 1.1 christos CPU (h_xbit) = opval;
7499 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7500 1.1 christos }
7501 1.1 christos {
7502 1.1 christos BI opval = 0;
7503 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7504 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7505 1.1 christos }
7506 1.1 christos }
7507 1.1 christos }
7508 1.1 christos }
7509 1.1 christos
7510 1.1 christos #undef FLD
7511 1.1 christos }
7512 1.1 christos NEXT (vpc);
7513 1.1 christos
7514 1.1 christos CASE (sem, INSN_SUBCDR) : /* sub.d ${const32}],${Rd} */
7515 1.1 christos {
7516 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7517 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7518 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
7519 1.1 christos int UNUSED written = 0;
7520 1.1 christos IADDR UNUSED pc = abuf->addr;
7521 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
7522 1.1 christos
7523 1.1 christos {
7524 1.1 christos SI tmp_tmpopd;
7525 1.1 christos SI tmp_tmpops;
7526 1.1 christos BI tmp_carry;
7527 1.1 christos SI tmp_newval;
7528 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
7529 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7530 1.1 christos tmp_carry = CPU (h_cbit);
7531 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7532 1.1 christos {
7533 1.1 christos SI opval = tmp_newval;
7534 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7535 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7536 1.1 christos }
7537 1.1 christos {
7538 1.1 christos {
7539 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7540 1.1 christos CPU (h_cbit) = opval;
7541 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7542 1.1 christos }
7543 1.1 christos {
7544 1.1 christos BI opval = LTSI (tmp_newval, 0);
7545 1.1 christos CPU (h_nbit) = opval;
7546 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7547 1.1 christos }
7548 1.1 christos {
7549 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7550 1.1 christos CPU (h_zbit) = opval;
7551 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7552 1.1 christos }
7553 1.1 christos {
7554 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7555 1.1 christos CPU (h_vbit) = opval;
7556 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7557 1.1 christos }
7558 1.1 christos {
7559 1.1 christos {
7560 1.1 christos BI opval = 0;
7561 1.1 christos CPU (h_xbit) = opval;
7562 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7563 1.1 christos }
7564 1.1 christos {
7565 1.1 christos BI opval = 0;
7566 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7567 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7568 1.1 christos }
7569 1.1 christos }
7570 1.1 christos }
7571 1.1 christos }
7572 1.1 christos
7573 1.1 christos #undef FLD
7574 1.1 christos }
7575 1.1 christos NEXT (vpc);
7576 1.1 christos
7577 1.1 christos CASE (sem, INSN_SUBS_B_R) : /* subs.b $Rs,$Rd */
7578 1.1 christos {
7579 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7580 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7581 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7582 1.1 christos int UNUSED written = 0;
7583 1.1 christos IADDR UNUSED pc = abuf->addr;
7584 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7585 1.1 christos
7586 1.1 christos {
7587 1.1 christos SI tmp_tmpopd;
7588 1.1 christos SI tmp_tmpops;
7589 1.1 christos BI tmp_carry;
7590 1.1 christos SI tmp_newval;
7591 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
7592 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7593 1.1 christos tmp_carry = CPU (h_cbit);
7594 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7595 1.1 christos {
7596 1.1 christos SI opval = tmp_newval;
7597 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7598 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7599 1.1 christos }
7600 1.1 christos {
7601 1.1 christos {
7602 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7603 1.1 christos CPU (h_cbit) = opval;
7604 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7605 1.1 christos }
7606 1.1 christos {
7607 1.1 christos BI opval = LTSI (tmp_newval, 0);
7608 1.1 christos CPU (h_nbit) = opval;
7609 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7610 1.1 christos }
7611 1.1 christos {
7612 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7613 1.1 christos CPU (h_zbit) = opval;
7614 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7615 1.1 christos }
7616 1.1 christos {
7617 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7618 1.1 christos CPU (h_vbit) = opval;
7619 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7620 1.1 christos }
7621 1.1 christos {
7622 1.1 christos {
7623 1.1 christos BI opval = 0;
7624 1.1 christos CPU (h_xbit) = opval;
7625 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7626 1.1 christos }
7627 1.1 christos {
7628 1.1 christos BI opval = 0;
7629 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7630 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7631 1.1 christos }
7632 1.1 christos }
7633 1.1 christos }
7634 1.1 christos }
7635 1.1 christos
7636 1.1 christos #undef FLD
7637 1.1 christos }
7638 1.1 christos NEXT (vpc);
7639 1.1 christos
7640 1.1 christos CASE (sem, INSN_SUBS_W_R) : /* subs.w $Rs,$Rd */
7641 1.1 christos {
7642 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7643 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7644 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7645 1.1 christos int UNUSED written = 0;
7646 1.1 christos IADDR UNUSED pc = abuf->addr;
7647 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7648 1.1 christos
7649 1.1 christos {
7650 1.1 christos SI tmp_tmpopd;
7651 1.1 christos SI tmp_tmpops;
7652 1.1 christos BI tmp_carry;
7653 1.1 christos SI tmp_newval;
7654 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
7655 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7656 1.1 christos tmp_carry = CPU (h_cbit);
7657 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7658 1.1 christos {
7659 1.1 christos SI opval = tmp_newval;
7660 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7661 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7662 1.1 christos }
7663 1.1 christos {
7664 1.1 christos {
7665 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7666 1.1 christos CPU (h_cbit) = opval;
7667 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7668 1.1 christos }
7669 1.1 christos {
7670 1.1 christos BI opval = LTSI (tmp_newval, 0);
7671 1.1 christos CPU (h_nbit) = opval;
7672 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7673 1.1 christos }
7674 1.1 christos {
7675 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7676 1.1 christos CPU (h_zbit) = opval;
7677 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7678 1.1 christos }
7679 1.1 christos {
7680 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7681 1.1 christos CPU (h_vbit) = opval;
7682 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7683 1.1 christos }
7684 1.1 christos {
7685 1.1 christos {
7686 1.1 christos BI opval = 0;
7687 1.1 christos CPU (h_xbit) = opval;
7688 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7689 1.1 christos }
7690 1.1 christos {
7691 1.1 christos BI opval = 0;
7692 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7693 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7694 1.1 christos }
7695 1.1 christos }
7696 1.1 christos }
7697 1.1 christos }
7698 1.1 christos
7699 1.1 christos #undef FLD
7700 1.1 christos }
7701 1.1 christos NEXT (vpc);
7702 1.1 christos
7703 1.1 christos CASE (sem, INSN_SUBS_M_B_M) : /* subs-m.b [${Rs}${inc}],$Rd */
7704 1.1 christos {
7705 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7706 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7707 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7708 1.1 christos int UNUSED written = 0;
7709 1.1 christos IADDR UNUSED pc = abuf->addr;
7710 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7711 1.1 christos
7712 1.1 christos {
7713 1.1 christos SI tmp_tmpopd;
7714 1.1 christos SI tmp_tmpops;
7715 1.1 christos BI tmp_carry;
7716 1.1 christos SI tmp_newval;
7717 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
7718 1.1 christos QI tmp_tmp_mem;
7719 1.1 christos BI tmp_postinc;
7720 1.1 christos tmp_postinc = FLD (f_memmode);
7721 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7722 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7723 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7724 1.1 christos {
7725 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7726 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7727 1.1 christos }
7728 1.1 christos {
7729 1.1 christos SI opval = tmp_addr;
7730 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7731 1.1 christos written |= (1 << 11);
7732 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7733 1.1 christos }
7734 1.1 christos }
7735 1.1 christos }
7736 1.1 christos ; tmp_tmp_mem; }));
7737 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7738 1.1 christos tmp_carry = CPU (h_cbit);
7739 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7740 1.1 christos {
7741 1.1 christos SI opval = tmp_newval;
7742 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7743 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7744 1.1 christos }
7745 1.1 christos {
7746 1.1 christos {
7747 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7748 1.1 christos CPU (h_cbit) = opval;
7749 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7750 1.1 christos }
7751 1.1 christos {
7752 1.1 christos BI opval = LTSI (tmp_newval, 0);
7753 1.1 christos CPU (h_nbit) = opval;
7754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7755 1.1 christos }
7756 1.1 christos {
7757 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7758 1.1 christos CPU (h_zbit) = opval;
7759 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7760 1.1 christos }
7761 1.1 christos {
7762 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7763 1.1 christos CPU (h_vbit) = opval;
7764 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7765 1.1 christos }
7766 1.1 christos {
7767 1.1 christos {
7768 1.1 christos BI opval = 0;
7769 1.1 christos CPU (h_xbit) = opval;
7770 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7771 1.1 christos }
7772 1.1 christos {
7773 1.1 christos BI opval = 0;
7774 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7775 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7776 1.1 christos }
7777 1.1 christos }
7778 1.1 christos }
7779 1.1 christos }
7780 1.1 christos
7781 1.1 christos abuf->written = written;
7782 1.1 christos #undef FLD
7783 1.1 christos }
7784 1.1 christos NEXT (vpc);
7785 1.1 christos
7786 1.1 christos CASE (sem, INSN_SUBS_M_W_M) : /* subs-m.w [${Rs}${inc}],$Rd */
7787 1.1 christos {
7788 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7789 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7790 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7791 1.1 christos int UNUSED written = 0;
7792 1.1 christos IADDR UNUSED pc = abuf->addr;
7793 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7794 1.1 christos
7795 1.1 christos {
7796 1.1 christos SI tmp_tmpopd;
7797 1.1 christos SI tmp_tmpops;
7798 1.1 christos BI tmp_carry;
7799 1.1 christos SI tmp_newval;
7800 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
7801 1.1 christos HI tmp_tmp_mem;
7802 1.1 christos BI tmp_postinc;
7803 1.1 christos tmp_postinc = FLD (f_memmode);
7804 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7805 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7806 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7807 1.1 christos {
7808 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7809 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7810 1.1 christos }
7811 1.1 christos {
7812 1.1 christos SI opval = tmp_addr;
7813 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7814 1.1 christos written |= (1 << 11);
7815 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7816 1.1 christos }
7817 1.1 christos }
7818 1.1 christos }
7819 1.1 christos ; tmp_tmp_mem; }));
7820 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7821 1.1 christos tmp_carry = CPU (h_cbit);
7822 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7823 1.1 christos {
7824 1.1 christos SI opval = tmp_newval;
7825 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7826 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7827 1.1 christos }
7828 1.1 christos {
7829 1.1 christos {
7830 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7831 1.1 christos CPU (h_cbit) = opval;
7832 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7833 1.1 christos }
7834 1.1 christos {
7835 1.1 christos BI opval = LTSI (tmp_newval, 0);
7836 1.1 christos CPU (h_nbit) = opval;
7837 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7838 1.1 christos }
7839 1.1 christos {
7840 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7841 1.1 christos CPU (h_zbit) = opval;
7842 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7843 1.1 christos }
7844 1.1 christos {
7845 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7846 1.1 christos CPU (h_vbit) = opval;
7847 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7848 1.1 christos }
7849 1.1 christos {
7850 1.1 christos {
7851 1.1 christos BI opval = 0;
7852 1.1 christos CPU (h_xbit) = opval;
7853 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7854 1.1 christos }
7855 1.1 christos {
7856 1.1 christos BI opval = 0;
7857 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7858 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7859 1.1 christos }
7860 1.1 christos }
7861 1.1 christos }
7862 1.1 christos }
7863 1.1 christos
7864 1.1 christos abuf->written = written;
7865 1.1 christos #undef FLD
7866 1.1 christos }
7867 1.1 christos NEXT (vpc);
7868 1.1 christos
7869 1.1 christos CASE (sem, INSN_SUBSCBR) : /* [${Rs}${inc}],$Rd */
7870 1.1 christos {
7871 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7872 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7873 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7874 1.1 christos int UNUSED written = 0;
7875 1.1 christos IADDR UNUSED pc = abuf->addr;
7876 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7877 1.1 christos
7878 1.1 christos {
7879 1.1 christos SI tmp_tmpopd;
7880 1.1 christos SI tmp_tmpops;
7881 1.1 christos BI tmp_carry;
7882 1.1 christos SI tmp_newval;
7883 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
7884 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7885 1.1 christos tmp_carry = CPU (h_cbit);
7886 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7887 1.1 christos {
7888 1.1 christos SI opval = tmp_newval;
7889 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7890 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7891 1.1 christos }
7892 1.1 christos {
7893 1.1 christos {
7894 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7895 1.1 christos CPU (h_cbit) = opval;
7896 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7897 1.1 christos }
7898 1.1 christos {
7899 1.1 christos BI opval = LTSI (tmp_newval, 0);
7900 1.1 christos CPU (h_nbit) = opval;
7901 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7902 1.1 christos }
7903 1.1 christos {
7904 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7905 1.1 christos CPU (h_zbit) = opval;
7906 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7907 1.1 christos }
7908 1.1 christos {
7909 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7910 1.1 christos CPU (h_vbit) = opval;
7911 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7912 1.1 christos }
7913 1.1 christos {
7914 1.1 christos {
7915 1.1 christos BI opval = 0;
7916 1.1 christos CPU (h_xbit) = opval;
7917 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7918 1.1 christos }
7919 1.1 christos {
7920 1.1 christos BI opval = 0;
7921 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7922 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7923 1.1 christos }
7924 1.1 christos }
7925 1.1 christos }
7926 1.1 christos }
7927 1.1 christos
7928 1.1 christos #undef FLD
7929 1.1 christos }
7930 1.1 christos NEXT (vpc);
7931 1.1 christos
7932 1.1 christos CASE (sem, INSN_SUBSCWR) : /* [${Rs}${inc}],$Rd */
7933 1.1 christos {
7934 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7935 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7936 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7937 1.1 christos int UNUSED written = 0;
7938 1.1 christos IADDR UNUSED pc = abuf->addr;
7939 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7940 1.1 christos
7941 1.1 christos {
7942 1.1 christos SI tmp_tmpopd;
7943 1.1 christos SI tmp_tmpops;
7944 1.1 christos BI tmp_carry;
7945 1.1 christos SI tmp_newval;
7946 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
7947 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7948 1.1 christos tmp_carry = CPU (h_cbit);
7949 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7950 1.1 christos {
7951 1.1 christos SI opval = tmp_newval;
7952 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7953 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7954 1.1 christos }
7955 1.1 christos {
7956 1.1 christos {
7957 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7958 1.1 christos CPU (h_cbit) = opval;
7959 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7960 1.1 christos }
7961 1.1 christos {
7962 1.1 christos BI opval = LTSI (tmp_newval, 0);
7963 1.1 christos CPU (h_nbit) = opval;
7964 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7965 1.1 christos }
7966 1.1 christos {
7967 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7968 1.1 christos CPU (h_zbit) = opval;
7969 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7970 1.1 christos }
7971 1.1 christos {
7972 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7973 1.1 christos CPU (h_vbit) = opval;
7974 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7975 1.1 christos }
7976 1.1 christos {
7977 1.1 christos {
7978 1.1 christos BI opval = 0;
7979 1.1 christos CPU (h_xbit) = opval;
7980 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7981 1.1 christos }
7982 1.1 christos {
7983 1.1 christos BI opval = 0;
7984 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7985 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7986 1.1 christos }
7987 1.1 christos }
7988 1.1 christos }
7989 1.1 christos }
7990 1.1 christos
7991 1.1 christos #undef FLD
7992 1.1 christos }
7993 1.1 christos NEXT (vpc);
7994 1.1 christos
7995 1.1 christos CASE (sem, INSN_SUBU_B_R) : /* subu.b $Rs,$Rd */
7996 1.1 christos {
7997 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7998 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7999 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8000 1.1 christos int UNUSED written = 0;
8001 1.1 christos IADDR UNUSED pc = abuf->addr;
8002 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8003 1.1 christos
8004 1.1 christos {
8005 1.1 christos SI tmp_tmpopd;
8006 1.1 christos SI tmp_tmpops;
8007 1.1 christos BI tmp_carry;
8008 1.1 christos SI tmp_newval;
8009 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
8010 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8011 1.1 christos tmp_carry = CPU (h_cbit);
8012 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8013 1.1 christos {
8014 1.1 christos SI opval = tmp_newval;
8015 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8016 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8017 1.1 christos }
8018 1.1 christos {
8019 1.1 christos {
8020 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8021 1.1 christos CPU (h_cbit) = opval;
8022 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8023 1.1 christos }
8024 1.1 christos {
8025 1.1 christos BI opval = LTSI (tmp_newval, 0);
8026 1.1 christos CPU (h_nbit) = opval;
8027 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8028 1.1 christos }
8029 1.1 christos {
8030 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8031 1.1 christos CPU (h_zbit) = opval;
8032 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8033 1.1 christos }
8034 1.1 christos {
8035 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8036 1.1 christos CPU (h_vbit) = opval;
8037 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8038 1.1 christos }
8039 1.1 christos {
8040 1.1 christos {
8041 1.1 christos BI opval = 0;
8042 1.1 christos CPU (h_xbit) = opval;
8043 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8044 1.1 christos }
8045 1.1 christos {
8046 1.1 christos BI opval = 0;
8047 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8048 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8049 1.1 christos }
8050 1.1 christos }
8051 1.1 christos }
8052 1.1 christos }
8053 1.1 christos
8054 1.1 christos #undef FLD
8055 1.1 christos }
8056 1.1 christos NEXT (vpc);
8057 1.1 christos
8058 1.1 christos CASE (sem, INSN_SUBU_W_R) : /* subu.w $Rs,$Rd */
8059 1.1 christos {
8060 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8061 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8062 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8063 1.1 christos int UNUSED written = 0;
8064 1.1 christos IADDR UNUSED pc = abuf->addr;
8065 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8066 1.1 christos
8067 1.1 christos {
8068 1.1 christos SI tmp_tmpopd;
8069 1.1 christos SI tmp_tmpops;
8070 1.1 christos BI tmp_carry;
8071 1.1 christos SI tmp_newval;
8072 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
8073 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8074 1.1 christos tmp_carry = CPU (h_cbit);
8075 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8076 1.1 christos {
8077 1.1 christos SI opval = tmp_newval;
8078 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8079 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8080 1.1 christos }
8081 1.1 christos {
8082 1.1 christos {
8083 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8084 1.1 christos CPU (h_cbit) = opval;
8085 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8086 1.1 christos }
8087 1.1 christos {
8088 1.1 christos BI opval = LTSI (tmp_newval, 0);
8089 1.1 christos CPU (h_nbit) = opval;
8090 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8091 1.1 christos }
8092 1.1 christos {
8093 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8094 1.1 christos CPU (h_zbit) = opval;
8095 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8096 1.1 christos }
8097 1.1 christos {
8098 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8099 1.1 christos CPU (h_vbit) = opval;
8100 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8101 1.1 christos }
8102 1.1 christos {
8103 1.1 christos {
8104 1.1 christos BI opval = 0;
8105 1.1 christos CPU (h_xbit) = opval;
8106 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8107 1.1 christos }
8108 1.1 christos {
8109 1.1 christos BI opval = 0;
8110 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8111 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8112 1.1 christos }
8113 1.1 christos }
8114 1.1 christos }
8115 1.1 christos }
8116 1.1 christos
8117 1.1 christos #undef FLD
8118 1.1 christos }
8119 1.1 christos NEXT (vpc);
8120 1.1 christos
8121 1.1 christos CASE (sem, INSN_SUBU_M_B_M) : /* subu-m.b [${Rs}${inc}],$Rd */
8122 1.1 christos {
8123 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8124 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8125 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8126 1.1 christos int UNUSED written = 0;
8127 1.1 christos IADDR UNUSED pc = abuf->addr;
8128 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8129 1.1 christos
8130 1.1 christos {
8131 1.1 christos SI tmp_tmpopd;
8132 1.1 christos SI tmp_tmpops;
8133 1.1 christos BI tmp_carry;
8134 1.1 christos SI tmp_newval;
8135 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
8136 1.1 christos QI tmp_tmp_mem;
8137 1.1 christos BI tmp_postinc;
8138 1.1 christos tmp_postinc = FLD (f_memmode);
8139 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8140 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
8141 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8142 1.1 christos {
8143 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8144 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
8145 1.1 christos }
8146 1.1 christos {
8147 1.1 christos SI opval = tmp_addr;
8148 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8149 1.1 christos written |= (1 << 11);
8150 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8151 1.1 christos }
8152 1.1 christos }
8153 1.1 christos }
8154 1.1 christos ; tmp_tmp_mem; }));
8155 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8156 1.1 christos tmp_carry = CPU (h_cbit);
8157 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8158 1.1 christos {
8159 1.1 christos SI opval = tmp_newval;
8160 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8161 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8162 1.1 christos }
8163 1.1 christos {
8164 1.1 christos {
8165 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8166 1.1 christos CPU (h_cbit) = opval;
8167 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8168 1.1 christos }
8169 1.1 christos {
8170 1.1 christos BI opval = LTSI (tmp_newval, 0);
8171 1.1 christos CPU (h_nbit) = opval;
8172 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8173 1.1 christos }
8174 1.1 christos {
8175 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8176 1.1 christos CPU (h_zbit) = opval;
8177 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8178 1.1 christos }
8179 1.1 christos {
8180 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8181 1.1 christos CPU (h_vbit) = opval;
8182 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8183 1.1 christos }
8184 1.1 christos {
8185 1.1 christos {
8186 1.1 christos BI opval = 0;
8187 1.1 christos CPU (h_xbit) = opval;
8188 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8189 1.1 christos }
8190 1.1 christos {
8191 1.1 christos BI opval = 0;
8192 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8193 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8194 1.1 christos }
8195 1.1 christos }
8196 1.1 christos }
8197 1.1 christos }
8198 1.1 christos
8199 1.1 christos abuf->written = written;
8200 1.1 christos #undef FLD
8201 1.1 christos }
8202 1.1 christos NEXT (vpc);
8203 1.1 christos
8204 1.1 christos CASE (sem, INSN_SUBU_M_W_M) : /* subu-m.w [${Rs}${inc}],$Rd */
8205 1.1 christos {
8206 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8207 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8208 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8209 1.1 christos int UNUSED written = 0;
8210 1.1 christos IADDR UNUSED pc = abuf->addr;
8211 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8212 1.1 christos
8213 1.1 christos {
8214 1.1 christos SI tmp_tmpopd;
8215 1.1 christos SI tmp_tmpops;
8216 1.1 christos BI tmp_carry;
8217 1.1 christos SI tmp_newval;
8218 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
8219 1.1 christos HI tmp_tmp_mem;
8220 1.1 christos BI tmp_postinc;
8221 1.1 christos tmp_postinc = FLD (f_memmode);
8222 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8223 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
8224 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8225 1.1 christos {
8226 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8227 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
8228 1.1 christos }
8229 1.1 christos {
8230 1.1 christos SI opval = tmp_addr;
8231 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8232 1.1 christos written |= (1 << 11);
8233 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8234 1.1 christos }
8235 1.1 christos }
8236 1.1 christos }
8237 1.1 christos ; tmp_tmp_mem; }));
8238 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8239 1.1 christos tmp_carry = CPU (h_cbit);
8240 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8241 1.1 christos {
8242 1.1 christos SI opval = tmp_newval;
8243 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8244 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8245 1.1 christos }
8246 1.1 christos {
8247 1.1 christos {
8248 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8249 1.1 christos CPU (h_cbit) = opval;
8250 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8251 1.1 christos }
8252 1.1 christos {
8253 1.1 christos BI opval = LTSI (tmp_newval, 0);
8254 1.1 christos CPU (h_nbit) = opval;
8255 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8256 1.1 christos }
8257 1.1 christos {
8258 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8259 1.1 christos CPU (h_zbit) = opval;
8260 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8261 1.1 christos }
8262 1.1 christos {
8263 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8264 1.1 christos CPU (h_vbit) = opval;
8265 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8266 1.1 christos }
8267 1.1 christos {
8268 1.1 christos {
8269 1.1 christos BI opval = 0;
8270 1.1 christos CPU (h_xbit) = opval;
8271 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8272 1.1 christos }
8273 1.1 christos {
8274 1.1 christos BI opval = 0;
8275 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8276 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8277 1.1 christos }
8278 1.1 christos }
8279 1.1 christos }
8280 1.1 christos }
8281 1.1 christos
8282 1.1 christos abuf->written = written;
8283 1.1 christos #undef FLD
8284 1.1 christos }
8285 1.1 christos NEXT (vpc);
8286 1.1 christos
8287 1.1 christos CASE (sem, INSN_SUBUCBR) : /* [${Rs}${inc}],$Rd */
8288 1.1 christos {
8289 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8290 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8291 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
8292 1.1 christos int UNUSED written = 0;
8293 1.1 christos IADDR UNUSED pc = abuf->addr;
8294 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8295 1.1 christos
8296 1.1 christos {
8297 1.1 christos SI tmp_tmpopd;
8298 1.1 christos SI tmp_tmpops;
8299 1.1 christos BI tmp_carry;
8300 1.1 christos SI tmp_newval;
8301 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
8302 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8303 1.1 christos tmp_carry = CPU (h_cbit);
8304 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8305 1.1 christos {
8306 1.1 christos SI opval = tmp_newval;
8307 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8308 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8309 1.1 christos }
8310 1.1 christos {
8311 1.1 christos {
8312 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8313 1.1 christos CPU (h_cbit) = opval;
8314 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8315 1.1 christos }
8316 1.1 christos {
8317 1.1 christos BI opval = LTSI (tmp_newval, 0);
8318 1.1 christos CPU (h_nbit) = opval;
8319 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8320 1.1 christos }
8321 1.1 christos {
8322 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8323 1.1 christos CPU (h_zbit) = opval;
8324 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8325 1.1 christos }
8326 1.1 christos {
8327 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8328 1.1 christos CPU (h_vbit) = opval;
8329 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8330 1.1 christos }
8331 1.1 christos {
8332 1.1 christos {
8333 1.1 christos BI opval = 0;
8334 1.1 christos CPU (h_xbit) = opval;
8335 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8336 1.1 christos }
8337 1.1 christos {
8338 1.1 christos BI opval = 0;
8339 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8340 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8341 1.1 christos }
8342 1.1 christos }
8343 1.1 christos }
8344 1.1 christos }
8345 1.1 christos
8346 1.1 christos #undef FLD
8347 1.1 christos }
8348 1.1 christos NEXT (vpc);
8349 1.1 christos
8350 1.1 christos CASE (sem, INSN_SUBUCWR) : /* [${Rs}${inc}],$Rd */
8351 1.1 christos {
8352 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8353 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8354 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
8355 1.1 christos int UNUSED written = 0;
8356 1.1 christos IADDR UNUSED pc = abuf->addr;
8357 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8358 1.1 christos
8359 1.1 christos {
8360 1.1 christos SI tmp_tmpopd;
8361 1.1 christos SI tmp_tmpops;
8362 1.1 christos BI tmp_carry;
8363 1.1 christos SI tmp_newval;
8364 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
8365 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8366 1.1 christos tmp_carry = CPU (h_cbit);
8367 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8368 1.1 christos {
8369 1.1 christos SI opval = tmp_newval;
8370 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8371 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8372 1.1 christos }
8373 1.1 christos {
8374 1.1 christos {
8375 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8376 1.1 christos CPU (h_cbit) = opval;
8377 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8378 1.1 christos }
8379 1.1 christos {
8380 1.1 christos BI opval = LTSI (tmp_newval, 0);
8381 1.1 christos CPU (h_nbit) = opval;
8382 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8383 1.1 christos }
8384 1.1 christos {
8385 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8386 1.1 christos CPU (h_zbit) = opval;
8387 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8388 1.1 christos }
8389 1.1 christos {
8390 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8391 1.1 christos CPU (h_vbit) = opval;
8392 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8393 1.1 christos }
8394 1.1 christos {
8395 1.1 christos {
8396 1.1 christos BI opval = 0;
8397 1.1 christos CPU (h_xbit) = opval;
8398 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8399 1.1 christos }
8400 1.1 christos {
8401 1.1 christos BI opval = 0;
8402 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8403 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8404 1.1 christos }
8405 1.1 christos }
8406 1.1 christos }
8407 1.1 christos }
8408 1.1 christos
8409 1.1 christos #undef FLD
8410 1.1 christos }
8411 1.1 christos NEXT (vpc);
8412 1.1 christos
8413 1.1 christos CASE (sem, INSN_ADDC_R) : /* addc $Rs,$Rd */
8414 1.1 christos {
8415 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8416 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8417 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8418 1.1 christos int UNUSED written = 0;
8419 1.1 christos IADDR UNUSED pc = abuf->addr;
8420 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8421 1.1 christos
8422 1.1 christos {
8423 1.1 christos CPU (h_xbit) = 1;
8424 1.1 christos {
8425 1.1 christos SI tmp_tmpopd;
8426 1.1 christos SI tmp_tmpops;
8427 1.1 christos BI tmp_carry;
8428 1.1 christos SI tmp_newval;
8429 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8430 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8431 1.1 christos tmp_carry = CPU (h_cbit);
8432 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8433 1.1 christos {
8434 1.1 christos SI opval = tmp_newval;
8435 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8436 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8437 1.1 christos }
8438 1.1 christos {
8439 1.1 christos {
8440 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8441 1.1 christos CPU (h_cbit) = opval;
8442 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8443 1.1 christos }
8444 1.1 christos {
8445 1.1 christos BI opval = LTSI (tmp_newval, 0);
8446 1.1 christos CPU (h_nbit) = opval;
8447 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8448 1.1 christos }
8449 1.1 christos {
8450 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8451 1.1 christos CPU (h_zbit) = opval;
8452 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8453 1.1 christos }
8454 1.1 christos {
8455 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8456 1.1 christos CPU (h_vbit) = opval;
8457 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8458 1.1 christos }
8459 1.1 christos {
8460 1.1 christos {
8461 1.1 christos BI opval = 0;
8462 1.1 christos CPU (h_xbit) = opval;
8463 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8464 1.1 christos }
8465 1.1 christos {
8466 1.1 christos BI opval = 0;
8467 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8468 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8469 1.1 christos }
8470 1.1 christos }
8471 1.1 christos }
8472 1.1 christos }
8473 1.1 christos }
8474 1.1 christos
8475 1.1 christos #undef FLD
8476 1.1 christos }
8477 1.1 christos NEXT (vpc);
8478 1.1 christos
8479 1.1 christos CASE (sem, INSN_ADDC_M) : /* addc [${Rs}${inc}],${Rd} */
8480 1.1 christos {
8481 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8482 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8483 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8484 1.1 christos int UNUSED written = 0;
8485 1.1 christos IADDR UNUSED pc = abuf->addr;
8486 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8487 1.1 christos
8488 1.1 christos {
8489 1.1 christos CPU (h_xbit) = 1;
8490 1.1 christos {
8491 1.1 christos SI tmp_tmpopd;
8492 1.1 christos SI tmp_tmpops;
8493 1.1 christos BI tmp_carry;
8494 1.1 christos SI tmp_newval;
8495 1.1 christos tmp_tmpops = ({ SI tmp_addr;
8496 1.1 christos SI tmp_tmp_mem;
8497 1.1 christos BI tmp_postinc;
8498 1.1 christos tmp_postinc = FLD (f_memmode);
8499 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8500 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
8501 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8502 1.1 christos {
8503 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8504 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
8505 1.1 christos }
8506 1.1 christos {
8507 1.1 christos SI opval = tmp_addr;
8508 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8509 1.1 christos written |= (1 << 10);
8510 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8511 1.1 christos }
8512 1.1 christos }
8513 1.1 christos }
8514 1.1 christos ; tmp_tmp_mem; });
8515 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8516 1.1 christos tmp_carry = CPU (h_cbit);
8517 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8518 1.1 christos {
8519 1.1 christos SI opval = tmp_newval;
8520 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8521 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8522 1.1 christos }
8523 1.1 christos {
8524 1.1 christos {
8525 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8526 1.1 christos CPU (h_cbit) = opval;
8527 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8528 1.1 christos }
8529 1.1 christos {
8530 1.1 christos BI opval = LTSI (tmp_newval, 0);
8531 1.1 christos CPU (h_nbit) = opval;
8532 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8533 1.1 christos }
8534 1.1 christos {
8535 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8536 1.1 christos CPU (h_zbit) = opval;
8537 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8538 1.1 christos }
8539 1.1 christos {
8540 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8541 1.1 christos CPU (h_vbit) = opval;
8542 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8543 1.1 christos }
8544 1.1 christos {
8545 1.1 christos {
8546 1.1 christos BI opval = 0;
8547 1.1 christos CPU (h_xbit) = opval;
8548 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8549 1.1 christos }
8550 1.1 christos {
8551 1.1 christos BI opval = 0;
8552 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8553 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8554 1.1 christos }
8555 1.1 christos }
8556 1.1 christos }
8557 1.1 christos }
8558 1.1 christos }
8559 1.1 christos
8560 1.1 christos abuf->written = written;
8561 1.1 christos #undef FLD
8562 1.1 christos }
8563 1.1 christos NEXT (vpc);
8564 1.1 christos
8565 1.1 christos CASE (sem, INSN_ADDC_C) : /* addc ${const32},${Rd} */
8566 1.1 christos {
8567 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8568 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8569 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
8570 1.1 christos int UNUSED written = 0;
8571 1.1 christos IADDR UNUSED pc = abuf->addr;
8572 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8573 1.1 christos
8574 1.1 christos {
8575 1.1 christos CPU (h_xbit) = 1;
8576 1.1 christos {
8577 1.1 christos SI tmp_tmpopd;
8578 1.1 christos SI tmp_tmpops;
8579 1.1 christos BI tmp_carry;
8580 1.1 christos SI tmp_newval;
8581 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
8582 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8583 1.1 christos tmp_carry = CPU (h_cbit);
8584 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8585 1.1 christos {
8586 1.1 christos SI opval = tmp_newval;
8587 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8588 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8589 1.1 christos }
8590 1.1 christos {
8591 1.1 christos {
8592 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8593 1.1 christos CPU (h_cbit) = opval;
8594 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8595 1.1 christos }
8596 1.1 christos {
8597 1.1 christos BI opval = LTSI (tmp_newval, 0);
8598 1.1 christos CPU (h_nbit) = opval;
8599 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8600 1.1 christos }
8601 1.1 christos {
8602 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8603 1.1 christos CPU (h_zbit) = opval;
8604 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8605 1.1 christos }
8606 1.1 christos {
8607 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8608 1.1 christos CPU (h_vbit) = opval;
8609 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8610 1.1 christos }
8611 1.1 christos {
8612 1.1 christos {
8613 1.1 christos BI opval = 0;
8614 1.1 christos CPU (h_xbit) = opval;
8615 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8616 1.1 christos }
8617 1.1 christos {
8618 1.1 christos BI opval = 0;
8619 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8620 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8621 1.1 christos }
8622 1.1 christos }
8623 1.1 christos }
8624 1.1 christos }
8625 1.1 christos }
8626 1.1 christos
8627 1.1 christos #undef FLD
8628 1.1 christos }
8629 1.1 christos NEXT (vpc);
8630 1.1 christos
8631 1.1 christos CASE (sem, INSN_LAPC_D) : /* lapc.d ${const32-pcrel},${Rd} */
8632 1.1 christos {
8633 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8634 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8635 1.1 christos #define FLD(f) abuf->fields.sfmt_lapc_d.f
8636 1.1 christos int UNUSED written = 0;
8637 1.1 christos IADDR UNUSED pc = abuf->addr;
8638 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8639 1.1 christos
8640 1.1 christos {
8641 1.1 christos {
8642 1.1 christos SI opval = FLD (i_const32_pcrel);
8643 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8644 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8645 1.1 christos }
8646 1.1 christos {
8647 1.1 christos {
8648 1.1 christos BI opval = 0;
8649 1.1 christos CPU (h_xbit) = opval;
8650 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8651 1.1 christos }
8652 1.1 christos {
8653 1.1 christos BI opval = 0;
8654 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8655 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8656 1.1 christos }
8657 1.1 christos }
8658 1.1 christos }
8659 1.1 christos
8660 1.1 christos #undef FLD
8661 1.1 christos }
8662 1.1 christos NEXT (vpc);
8663 1.1 christos
8664 1.1 christos CASE (sem, INSN_LAPCQ) : /* lapcq ${qo},${Rd} */
8665 1.1 christos {
8666 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8667 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8668 1.1 christos #define FLD(f) abuf->fields.sfmt_lapcq.f
8669 1.1 christos int UNUSED written = 0;
8670 1.1 christos IADDR UNUSED pc = abuf->addr;
8671 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8672 1.1 christos
8673 1.1 christos {
8674 1.1 christos {
8675 1.1 christos SI opval = FLD (i_qo);
8676 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8677 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8678 1.1 christos }
8679 1.1 christos {
8680 1.1 christos {
8681 1.1 christos BI opval = 0;
8682 1.1 christos CPU (h_xbit) = opval;
8683 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8684 1.1 christos }
8685 1.1 christos {
8686 1.1 christos BI opval = 0;
8687 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8688 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8689 1.1 christos }
8690 1.1 christos }
8691 1.1 christos }
8692 1.1 christos
8693 1.1 christos #undef FLD
8694 1.1 christos }
8695 1.1 christos NEXT (vpc);
8696 1.1 christos
8697 1.1 christos CASE (sem, INSN_ADDI_B_R) : /* addi.b ${Rs-dfield}.m,${Rd-sfield} */
8698 1.1 christos {
8699 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8700 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8701 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8702 1.1 christos int UNUSED written = 0;
8703 1.1 christos IADDR UNUSED pc = abuf->addr;
8704 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8705 1.1 christos
8706 1.1 christos {
8707 1.1 christos {
8708 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
8709 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8710 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8711 1.1 christos }
8712 1.1 christos {
8713 1.1 christos {
8714 1.1 christos BI opval = 0;
8715 1.1 christos CPU (h_xbit) = opval;
8716 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8717 1.1 christos }
8718 1.1 christos {
8719 1.1 christos BI opval = 0;
8720 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8721 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8722 1.1 christos }
8723 1.1 christos }
8724 1.1 christos }
8725 1.1 christos
8726 1.1 christos #undef FLD
8727 1.1 christos }
8728 1.1 christos NEXT (vpc);
8729 1.1 christos
8730 1.1 christos CASE (sem, INSN_ADDI_W_R) : /* addi.w ${Rs-dfield}.m,${Rd-sfield} */
8731 1.1 christos {
8732 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8733 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8734 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8735 1.1 christos int UNUSED written = 0;
8736 1.1 christos IADDR UNUSED pc = abuf->addr;
8737 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8738 1.1 christos
8739 1.1 christos {
8740 1.1 christos {
8741 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
8742 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8743 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8744 1.1 christos }
8745 1.1 christos {
8746 1.1 christos {
8747 1.1 christos BI opval = 0;
8748 1.1 christos CPU (h_xbit) = opval;
8749 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8750 1.1 christos }
8751 1.1 christos {
8752 1.1 christos BI opval = 0;
8753 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8755 1.1 christos }
8756 1.1 christos }
8757 1.1 christos }
8758 1.1 christos
8759 1.1 christos #undef FLD
8760 1.1 christos }
8761 1.1 christos NEXT (vpc);
8762 1.1 christos
8763 1.1 christos CASE (sem, INSN_ADDI_D_R) : /* addi.d ${Rs-dfield}.m,${Rd-sfield} */
8764 1.1 christos {
8765 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8766 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8767 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8768 1.1 christos int UNUSED written = 0;
8769 1.1 christos IADDR UNUSED pc = abuf->addr;
8770 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8771 1.1 christos
8772 1.1 christos {
8773 1.1 christos {
8774 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
8775 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8776 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8777 1.1 christos }
8778 1.1 christos {
8779 1.1 christos {
8780 1.1 christos BI opval = 0;
8781 1.1 christos CPU (h_xbit) = opval;
8782 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8783 1.1 christos }
8784 1.1 christos {
8785 1.1 christos BI opval = 0;
8786 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8787 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8788 1.1 christos }
8789 1.1 christos }
8790 1.1 christos }
8791 1.1 christos
8792 1.1 christos #undef FLD
8793 1.1 christos }
8794 1.1 christos NEXT (vpc);
8795 1.1 christos
8796 1.1 christos CASE (sem, INSN_NEG_B_R) : /* neg.b $Rs,$Rd */
8797 1.1 christos {
8798 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8799 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8800 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8801 1.1 christos int UNUSED written = 0;
8802 1.1 christos IADDR UNUSED pc = abuf->addr;
8803 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8804 1.1 christos
8805 1.1 christos {
8806 1.1 christos QI tmp_tmpopd;
8807 1.1 christos QI tmp_tmpops;
8808 1.1 christos BI tmp_carry;
8809 1.1 christos QI tmp_newval;
8810 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8811 1.1 christos tmp_tmpopd = 0;
8812 1.1 christos tmp_carry = CPU (h_cbit);
8813 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8814 1.1 christos {
8815 1.1 christos SI tmp_oldregval;
8816 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8817 1.1 christos {
8818 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
8819 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8820 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8821 1.1 christos }
8822 1.1 christos }
8823 1.1 christos {
8824 1.1 christos {
8825 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
8826 1.1 christos CPU (h_cbit) = opval;
8827 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8828 1.1 christos }
8829 1.1 christos {
8830 1.1 christos BI opval = LTQI (tmp_newval, 0);
8831 1.1 christos CPU (h_nbit) = opval;
8832 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8833 1.1 christos }
8834 1.1 christos {
8835 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8836 1.1 christos CPU (h_zbit) = opval;
8837 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8838 1.1 christos }
8839 1.1 christos {
8840 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
8841 1.1 christos CPU (h_vbit) = opval;
8842 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8843 1.1 christos }
8844 1.1 christos {
8845 1.1 christos {
8846 1.1 christos BI opval = 0;
8847 1.1 christos CPU (h_xbit) = opval;
8848 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8849 1.1 christos }
8850 1.1 christos {
8851 1.1 christos BI opval = 0;
8852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8853 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8854 1.1 christos }
8855 1.1 christos }
8856 1.1 christos }
8857 1.1 christos }
8858 1.1 christos
8859 1.1 christos #undef FLD
8860 1.1 christos }
8861 1.1 christos NEXT (vpc);
8862 1.1 christos
8863 1.1 christos CASE (sem, INSN_NEG_W_R) : /* neg.w $Rs,$Rd */
8864 1.1 christos {
8865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8867 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8868 1.1 christos int UNUSED written = 0;
8869 1.1 christos IADDR UNUSED pc = abuf->addr;
8870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8871 1.1 christos
8872 1.1 christos {
8873 1.1 christos HI tmp_tmpopd;
8874 1.1 christos HI tmp_tmpops;
8875 1.1 christos BI tmp_carry;
8876 1.1 christos HI tmp_newval;
8877 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8878 1.1 christos tmp_tmpopd = 0;
8879 1.1 christos tmp_carry = CPU (h_cbit);
8880 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8881 1.1 christos {
8882 1.1 christos SI tmp_oldregval;
8883 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8884 1.1 christos {
8885 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
8886 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8887 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8888 1.1 christos }
8889 1.1 christos }
8890 1.1 christos {
8891 1.1 christos {
8892 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
8893 1.1 christos CPU (h_cbit) = opval;
8894 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8895 1.1 christos }
8896 1.1 christos {
8897 1.1 christos BI opval = LTHI (tmp_newval, 0);
8898 1.1 christos CPU (h_nbit) = opval;
8899 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8900 1.1 christos }
8901 1.1 christos {
8902 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8903 1.1 christos CPU (h_zbit) = opval;
8904 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8905 1.1 christos }
8906 1.1 christos {
8907 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
8908 1.1 christos CPU (h_vbit) = opval;
8909 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8910 1.1 christos }
8911 1.1 christos {
8912 1.1 christos {
8913 1.1 christos BI opval = 0;
8914 1.1 christos CPU (h_xbit) = opval;
8915 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8916 1.1 christos }
8917 1.1 christos {
8918 1.1 christos BI opval = 0;
8919 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8920 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8921 1.1 christos }
8922 1.1 christos }
8923 1.1 christos }
8924 1.1 christos }
8925 1.1 christos
8926 1.1 christos #undef FLD
8927 1.1 christos }
8928 1.1 christos NEXT (vpc);
8929 1.1 christos
8930 1.1 christos CASE (sem, INSN_NEG_D_R) : /* neg.d $Rs,$Rd */
8931 1.1 christos {
8932 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8933 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8934 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8935 1.1 christos int UNUSED written = 0;
8936 1.1 christos IADDR UNUSED pc = abuf->addr;
8937 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8938 1.1 christos
8939 1.1 christos {
8940 1.1 christos SI tmp_tmpopd;
8941 1.1 christos SI tmp_tmpops;
8942 1.1 christos BI tmp_carry;
8943 1.1 christos SI tmp_newval;
8944 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8945 1.1 christos tmp_tmpopd = 0;
8946 1.1 christos tmp_carry = CPU (h_cbit);
8947 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8948 1.1 christos {
8949 1.1 christos SI opval = tmp_newval;
8950 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8951 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8952 1.1 christos }
8953 1.1 christos {
8954 1.1 christos {
8955 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8956 1.1 christos CPU (h_cbit) = opval;
8957 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8958 1.1 christos }
8959 1.1 christos {
8960 1.1 christos BI opval = LTSI (tmp_newval, 0);
8961 1.1 christos CPU (h_nbit) = opval;
8962 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8963 1.1 christos }
8964 1.1 christos {
8965 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8966 1.1 christos CPU (h_zbit) = opval;
8967 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8968 1.1 christos }
8969 1.1 christos {
8970 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8971 1.1 christos CPU (h_vbit) = opval;
8972 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8973 1.1 christos }
8974 1.1 christos {
8975 1.1 christos {
8976 1.1 christos BI opval = 0;
8977 1.1 christos CPU (h_xbit) = opval;
8978 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8979 1.1 christos }
8980 1.1 christos {
8981 1.1 christos BI opval = 0;
8982 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8983 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8984 1.1 christos }
8985 1.1 christos }
8986 1.1 christos }
8987 1.1 christos }
8988 1.1 christos
8989 1.1 christos #undef FLD
8990 1.1 christos }
8991 1.1 christos NEXT (vpc);
8992 1.1 christos
8993 1.1 christos CASE (sem, INSN_TEST_M_B_M) : /* test-m.b [${Rs}${inc}] */
8994 1.1 christos {
8995 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8996 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8997 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
8998 1.1 christos int UNUSED written = 0;
8999 1.1 christos IADDR UNUSED pc = abuf->addr;
9000 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9001 1.1 christos
9002 1.1 christos {
9003 1.1 christos QI tmp_tmpd;
9004 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9005 1.1 christos QI tmp_tmp_mem;
9006 1.1 christos BI tmp_postinc;
9007 1.1 christos tmp_postinc = FLD (f_memmode);
9008 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9009 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
9010 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9011 1.1 christos {
9012 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9013 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9014 1.1 christos }
9015 1.1 christos {
9016 1.1 christos SI opval = tmp_addr;
9017 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9018 1.1 christos written |= (1 << 8);
9019 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9020 1.1 christos }
9021 1.1 christos }
9022 1.1 christos }
9023 1.1 christos ; tmp_tmp_mem; });
9024 1.1 christos {
9025 1.1 christos QI tmp_tmpopd;
9026 1.1 christos QI tmp_tmpops;
9027 1.1 christos BI tmp_carry;
9028 1.1 christos QI tmp_newval;
9029 1.1 christos tmp_tmpops = 0;
9030 1.1 christos tmp_tmpopd = tmp_tmpd;
9031 1.1 christos tmp_carry = CPU (h_cbit);
9032 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9033 1.1 christos ((void) 0); /*nop*/
9034 1.1 christos {
9035 1.1 christos {
9036 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
9037 1.1 christos CPU (h_cbit) = opval;
9038 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9039 1.1 christos }
9040 1.1 christos {
9041 1.1 christos BI opval = LTQI (tmp_newval, 0);
9042 1.1 christos CPU (h_nbit) = opval;
9043 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9044 1.1 christos }
9045 1.1 christos {
9046 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9047 1.1 christos CPU (h_zbit) = opval;
9048 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9049 1.1 christos }
9050 1.1 christos {
9051 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
9052 1.1 christos CPU (h_vbit) = opval;
9053 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9054 1.1 christos }
9055 1.1 christos {
9056 1.1 christos {
9057 1.1 christos BI opval = 0;
9058 1.1 christos CPU (h_xbit) = opval;
9059 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9060 1.1 christos }
9061 1.1 christos {
9062 1.1 christos BI opval = 0;
9063 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9064 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9065 1.1 christos }
9066 1.1 christos }
9067 1.1 christos }
9068 1.1 christos }
9069 1.1 christos }
9070 1.1 christos
9071 1.1 christos abuf->written = written;
9072 1.1 christos #undef FLD
9073 1.1 christos }
9074 1.1 christos NEXT (vpc);
9075 1.1 christos
9076 1.1 christos CASE (sem, INSN_TEST_M_W_M) : /* test-m.w [${Rs}${inc}] */
9077 1.1 christos {
9078 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9079 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9080 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9081 1.1 christos int UNUSED written = 0;
9082 1.1 christos IADDR UNUSED pc = abuf->addr;
9083 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9084 1.1 christos
9085 1.1 christos {
9086 1.1 christos HI tmp_tmpd;
9087 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9088 1.1 christos HI tmp_tmp_mem;
9089 1.1 christos BI tmp_postinc;
9090 1.1 christos tmp_postinc = FLD (f_memmode);
9091 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9092 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
9093 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9094 1.1 christos {
9095 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9096 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9097 1.1 christos }
9098 1.1 christos {
9099 1.1 christos SI opval = tmp_addr;
9100 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9101 1.1 christos written |= (1 << 8);
9102 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9103 1.1 christos }
9104 1.1 christos }
9105 1.1 christos }
9106 1.1 christos ; tmp_tmp_mem; });
9107 1.1 christos {
9108 1.1 christos HI tmp_tmpopd;
9109 1.1 christos HI tmp_tmpops;
9110 1.1 christos BI tmp_carry;
9111 1.1 christos HI tmp_newval;
9112 1.1 christos tmp_tmpops = 0;
9113 1.1 christos tmp_tmpopd = tmp_tmpd;
9114 1.1 christos tmp_carry = CPU (h_cbit);
9115 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9116 1.1 christos ((void) 0); /*nop*/
9117 1.1 christos {
9118 1.1 christos {
9119 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
9120 1.1 christos CPU (h_cbit) = opval;
9121 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9122 1.1 christos }
9123 1.1 christos {
9124 1.1 christos BI opval = LTHI (tmp_newval, 0);
9125 1.1 christos CPU (h_nbit) = opval;
9126 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9127 1.1 christos }
9128 1.1 christos {
9129 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9130 1.1 christos CPU (h_zbit) = opval;
9131 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9132 1.1 christos }
9133 1.1 christos {
9134 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
9135 1.1 christos CPU (h_vbit) = opval;
9136 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9137 1.1 christos }
9138 1.1 christos {
9139 1.1 christos {
9140 1.1 christos BI opval = 0;
9141 1.1 christos CPU (h_xbit) = opval;
9142 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9143 1.1 christos }
9144 1.1 christos {
9145 1.1 christos BI opval = 0;
9146 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9147 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9148 1.1 christos }
9149 1.1 christos }
9150 1.1 christos }
9151 1.1 christos }
9152 1.1 christos }
9153 1.1 christos
9154 1.1 christos abuf->written = written;
9155 1.1 christos #undef FLD
9156 1.1 christos }
9157 1.1 christos NEXT (vpc);
9158 1.1 christos
9159 1.1 christos CASE (sem, INSN_TEST_M_D_M) : /* test-m.d [${Rs}${inc}] */
9160 1.1 christos {
9161 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9162 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9163 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9164 1.1 christos int UNUSED written = 0;
9165 1.1 christos IADDR UNUSED pc = abuf->addr;
9166 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9167 1.1 christos
9168 1.1 christos {
9169 1.1 christos SI tmp_tmpd;
9170 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9171 1.1 christos SI tmp_tmp_mem;
9172 1.1 christos BI tmp_postinc;
9173 1.1 christos tmp_postinc = FLD (f_memmode);
9174 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9175 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
9176 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9177 1.1 christos {
9178 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9179 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9180 1.1 christos }
9181 1.1 christos {
9182 1.1 christos SI opval = tmp_addr;
9183 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9184 1.1 christos written |= (1 << 8);
9185 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9186 1.1 christos }
9187 1.1 christos }
9188 1.1 christos }
9189 1.1 christos ; tmp_tmp_mem; });
9190 1.1 christos {
9191 1.1 christos SI tmp_tmpopd;
9192 1.1 christos SI tmp_tmpops;
9193 1.1 christos BI tmp_carry;
9194 1.1 christos SI tmp_newval;
9195 1.1 christos tmp_tmpops = 0;
9196 1.1 christos tmp_tmpopd = tmp_tmpd;
9197 1.1 christos tmp_carry = CPU (h_cbit);
9198 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9199 1.1 christos ((void) 0); /*nop*/
9200 1.1 christos {
9201 1.1 christos {
9202 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
9203 1.1 christos CPU (h_cbit) = opval;
9204 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9205 1.1 christos }
9206 1.1 christos {
9207 1.1 christos BI opval = LTSI (tmp_newval, 0);
9208 1.1 christos CPU (h_nbit) = opval;
9209 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9210 1.1 christos }
9211 1.1 christos {
9212 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9213 1.1 christos CPU (h_zbit) = opval;
9214 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9215 1.1 christos }
9216 1.1 christos {
9217 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
9218 1.1 christos CPU (h_vbit) = opval;
9219 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9220 1.1 christos }
9221 1.1 christos {
9222 1.1 christos {
9223 1.1 christos BI opval = 0;
9224 1.1 christos CPU (h_xbit) = opval;
9225 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9226 1.1 christos }
9227 1.1 christos {
9228 1.1 christos BI opval = 0;
9229 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9230 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9231 1.1 christos }
9232 1.1 christos }
9233 1.1 christos }
9234 1.1 christos }
9235 1.1 christos }
9236 1.1 christos
9237 1.1 christos abuf->written = written;
9238 1.1 christos #undef FLD
9239 1.1 christos }
9240 1.1 christos NEXT (vpc);
9241 1.1 christos
9242 1.1 christos CASE (sem, INSN_MOVE_R_M_B_M) : /* move-r-m.b ${Rs-dfield},[${Rd-sfield}${inc}] */
9243 1.1 christos {
9244 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9245 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9246 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9247 1.1 christos int UNUSED written = 0;
9248 1.1 christos IADDR UNUSED pc = abuf->addr;
9249 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9250 1.1 christos
9251 1.1 christos {
9252 1.1 christos QI tmp_tmpd;
9253 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9254 1.1 christos {
9255 1.1 christos SI tmp_addr;
9256 1.1 christos BI tmp_postinc;
9257 1.1 christos tmp_postinc = FLD (f_memmode);
9258 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9259 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9260 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9261 1.1 christos {
9262 1.1 christos {
9263 1.1 christos QI opval = tmp_tmpd;
9264 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9265 1.1 christos written |= (1 << 10);
9266 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9267 1.1 christos }
9268 1.1 christos {
9269 1.1 christos BI opval = CPU (h_pbit);
9270 1.1 christos CPU (h_cbit) = opval;
9271 1.1 christos written |= (1 << 9);
9272 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9273 1.1 christos }
9274 1.1 christos }
9275 1.1 christos } else {
9276 1.1 christos {
9277 1.1 christos BI opval = 1;
9278 1.1 christos CPU (h_cbit) = opval;
9279 1.1 christos written |= (1 << 9);
9280 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9281 1.1 christos }
9282 1.1 christos }
9283 1.1 christos } else {
9284 1.1 christos {
9285 1.1 christos QI opval = tmp_tmpd;
9286 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9287 1.1 christos written |= (1 << 10);
9288 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9289 1.1 christos }
9290 1.1 christos }
9291 1.1 christos if (NEBI (tmp_postinc, 0)) {
9292 1.1 christos {
9293 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9294 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9295 1.1 christos }
9296 1.1 christos {
9297 1.1 christos SI opval = tmp_addr;
9298 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9299 1.1 christos written |= (1 << 8);
9300 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9301 1.1 christos }
9302 1.1 christos }
9303 1.1 christos }
9304 1.1 christos }
9305 1.1 christos {
9306 1.1 christos {
9307 1.1 christos BI opval = 0;
9308 1.1 christos CPU (h_xbit) = opval;
9309 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9310 1.1 christos }
9311 1.1 christos {
9312 1.1 christos BI opval = 0;
9313 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9314 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9315 1.1 christos }
9316 1.1 christos }
9317 1.1 christos }
9318 1.1 christos
9319 1.1 christos abuf->written = written;
9320 1.1 christos #undef FLD
9321 1.1 christos }
9322 1.1 christos NEXT (vpc);
9323 1.1 christos
9324 1.1 christos CASE (sem, INSN_MOVE_R_M_W_M) : /* move-r-m.w ${Rs-dfield},[${Rd-sfield}${inc}] */
9325 1.1 christos {
9326 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9327 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9328 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9329 1.1 christos int UNUSED written = 0;
9330 1.1 christos IADDR UNUSED pc = abuf->addr;
9331 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9332 1.1 christos
9333 1.1 christos {
9334 1.1 christos HI tmp_tmpd;
9335 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9336 1.1 christos {
9337 1.1 christos SI tmp_addr;
9338 1.1 christos BI tmp_postinc;
9339 1.1 christos tmp_postinc = FLD (f_memmode);
9340 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9341 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9342 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9343 1.1 christos {
9344 1.1 christos {
9345 1.1 christos HI opval = tmp_tmpd;
9346 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9347 1.1 christos written |= (1 << 10);
9348 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9349 1.1 christos }
9350 1.1 christos {
9351 1.1 christos BI opval = CPU (h_pbit);
9352 1.1 christos CPU (h_cbit) = opval;
9353 1.1 christos written |= (1 << 9);
9354 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9355 1.1 christos }
9356 1.1 christos }
9357 1.1 christos } else {
9358 1.1 christos {
9359 1.1 christos BI opval = 1;
9360 1.1 christos CPU (h_cbit) = opval;
9361 1.1 christos written |= (1 << 9);
9362 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9363 1.1 christos }
9364 1.1 christos }
9365 1.1 christos } else {
9366 1.1 christos {
9367 1.1 christos HI opval = tmp_tmpd;
9368 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9369 1.1 christos written |= (1 << 10);
9370 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9371 1.1 christos }
9372 1.1 christos }
9373 1.1 christos if (NEBI (tmp_postinc, 0)) {
9374 1.1 christos {
9375 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9376 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9377 1.1 christos }
9378 1.1 christos {
9379 1.1 christos SI opval = tmp_addr;
9380 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9381 1.1 christos written |= (1 << 8);
9382 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9383 1.1 christos }
9384 1.1 christos }
9385 1.1 christos }
9386 1.1 christos }
9387 1.1 christos {
9388 1.1 christos {
9389 1.1 christos BI opval = 0;
9390 1.1 christos CPU (h_xbit) = opval;
9391 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9392 1.1 christos }
9393 1.1 christos {
9394 1.1 christos BI opval = 0;
9395 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9396 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9397 1.1 christos }
9398 1.1 christos }
9399 1.1 christos }
9400 1.1 christos
9401 1.1 christos abuf->written = written;
9402 1.1 christos #undef FLD
9403 1.1 christos }
9404 1.1 christos NEXT (vpc);
9405 1.1 christos
9406 1.1 christos CASE (sem, INSN_MOVE_R_M_D_M) : /* move-r-m.d ${Rs-dfield},[${Rd-sfield}${inc}] */
9407 1.1 christos {
9408 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9409 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9410 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9411 1.1 christos int UNUSED written = 0;
9412 1.1 christos IADDR UNUSED pc = abuf->addr;
9413 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9414 1.1 christos
9415 1.1 christos {
9416 1.1 christos SI tmp_tmpd;
9417 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9418 1.1 christos {
9419 1.1 christos SI tmp_addr;
9420 1.1 christos BI tmp_postinc;
9421 1.1 christos tmp_postinc = FLD (f_memmode);
9422 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9423 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9424 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9425 1.1 christos {
9426 1.1 christos {
9427 1.1 christos SI opval = tmp_tmpd;
9428 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9429 1.1 christos written |= (1 << 10);
9430 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9431 1.1 christos }
9432 1.1 christos {
9433 1.1 christos BI opval = CPU (h_pbit);
9434 1.1 christos CPU (h_cbit) = opval;
9435 1.1 christos written |= (1 << 9);
9436 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9437 1.1 christos }
9438 1.1 christos }
9439 1.1 christos } else {
9440 1.1 christos {
9441 1.1 christos BI opval = 1;
9442 1.1 christos CPU (h_cbit) = opval;
9443 1.1 christos written |= (1 << 9);
9444 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9445 1.1 christos }
9446 1.1 christos }
9447 1.1 christos } else {
9448 1.1 christos {
9449 1.1 christos SI opval = tmp_tmpd;
9450 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9451 1.1 christos written |= (1 << 10);
9452 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9453 1.1 christos }
9454 1.1 christos }
9455 1.1 christos if (NEBI (tmp_postinc, 0)) {
9456 1.1 christos {
9457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9459 1.1 christos }
9460 1.1 christos {
9461 1.1 christos SI opval = tmp_addr;
9462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9463 1.1 christos written |= (1 << 8);
9464 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9465 1.1 christos }
9466 1.1 christos }
9467 1.1 christos }
9468 1.1 christos }
9469 1.1 christos {
9470 1.1 christos {
9471 1.1 christos BI opval = 0;
9472 1.1 christos CPU (h_xbit) = opval;
9473 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9474 1.1 christos }
9475 1.1 christos {
9476 1.1 christos BI opval = 0;
9477 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9478 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9479 1.1 christos }
9480 1.1 christos }
9481 1.1 christos }
9482 1.1 christos
9483 1.1 christos abuf->written = written;
9484 1.1 christos #undef FLD
9485 1.1 christos }
9486 1.1 christos NEXT (vpc);
9487 1.1 christos
9488 1.1 christos CASE (sem, INSN_MULS_B) : /* muls.b $Rs,$Rd */
9489 1.1 christos {
9490 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9491 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9492 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9493 1.1 christos int UNUSED written = 0;
9494 1.1 christos IADDR UNUSED pc = abuf->addr;
9495 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9496 1.1 christos
9497 1.1 christos {
9498 1.1 christos DI tmp_src1;
9499 1.1 christos DI tmp_src2;
9500 1.1 christos DI tmp_tmpr;
9501 1.1 christos tmp_src1 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9502 1.1 christos tmp_src2 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9503 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9504 1.1 christos {
9505 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9506 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9507 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9508 1.1 christos }
9509 1.1 christos {
9510 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9511 1.1 christos SET_H_SR (((UINT) 7), opval);
9512 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9513 1.1 christos }
9514 1.1 christos {
9515 1.1 christos {
9516 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9517 1.1 christos CPU (h_cbit) = opval;
9518 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9519 1.1 christos }
9520 1.1 christos {
9521 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9522 1.1 christos CPU (h_nbit) = opval;
9523 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9524 1.1 christos }
9525 1.1 christos {
9526 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9527 1.1 christos CPU (h_zbit) = opval;
9528 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9529 1.1 christos }
9530 1.1 christos {
9531 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9532 1.1 christos CPU (h_vbit) = opval;
9533 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9534 1.1 christos }
9535 1.1 christos {
9536 1.1 christos {
9537 1.1 christos BI opval = 0;
9538 1.1 christos CPU (h_xbit) = opval;
9539 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9540 1.1 christos }
9541 1.1 christos {
9542 1.1 christos BI opval = 0;
9543 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9544 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9545 1.1 christos }
9546 1.1 christos }
9547 1.1 christos }
9548 1.1 christos }
9549 1.1 christos
9550 1.1 christos #undef FLD
9551 1.1 christos }
9552 1.1 christos NEXT (vpc);
9553 1.1 christos
9554 1.1 christos CASE (sem, INSN_MULS_W) : /* muls.w $Rs,$Rd */
9555 1.1 christos {
9556 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9557 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9558 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9559 1.1 christos int UNUSED written = 0;
9560 1.1 christos IADDR UNUSED pc = abuf->addr;
9561 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9562 1.1 christos
9563 1.1 christos {
9564 1.1 christos DI tmp_src1;
9565 1.1 christos DI tmp_src2;
9566 1.1 christos DI tmp_tmpr;
9567 1.1 christos tmp_src1 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9568 1.1 christos tmp_src2 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9569 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9570 1.1 christos {
9571 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9572 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9573 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9574 1.1 christos }
9575 1.1 christos {
9576 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9577 1.1 christos SET_H_SR (((UINT) 7), opval);
9578 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9579 1.1 christos }
9580 1.1 christos {
9581 1.1 christos {
9582 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9583 1.1 christos CPU (h_cbit) = opval;
9584 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9585 1.1 christos }
9586 1.1 christos {
9587 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9588 1.1 christos CPU (h_nbit) = opval;
9589 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9590 1.1 christos }
9591 1.1 christos {
9592 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9593 1.1 christos CPU (h_zbit) = opval;
9594 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9595 1.1 christos }
9596 1.1 christos {
9597 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9598 1.1 christos CPU (h_vbit) = opval;
9599 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9600 1.1 christos }
9601 1.1 christos {
9602 1.1 christos {
9603 1.1 christos BI opval = 0;
9604 1.1 christos CPU (h_xbit) = opval;
9605 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9606 1.1 christos }
9607 1.1 christos {
9608 1.1 christos BI opval = 0;
9609 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9610 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9611 1.1 christos }
9612 1.1 christos }
9613 1.1 christos }
9614 1.1 christos }
9615 1.1 christos
9616 1.1 christos #undef FLD
9617 1.1 christos }
9618 1.1 christos NEXT (vpc);
9619 1.1 christos
9620 1.1 christos CASE (sem, INSN_MULS_D) : /* muls.d $Rs,$Rd */
9621 1.1 christos {
9622 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9623 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9624 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9625 1.1 christos int UNUSED written = 0;
9626 1.1 christos IADDR UNUSED pc = abuf->addr;
9627 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9628 1.1 christos
9629 1.1 christos {
9630 1.1 christos DI tmp_src1;
9631 1.1 christos DI tmp_src2;
9632 1.1 christos DI tmp_tmpr;
9633 1.1 christos tmp_src1 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9634 1.1 christos tmp_src2 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9635 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9636 1.1 christos {
9637 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9638 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9639 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9640 1.1 christos }
9641 1.1 christos {
9642 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9643 1.1 christos SET_H_SR (((UINT) 7), opval);
9644 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9645 1.1 christos }
9646 1.1 christos {
9647 1.1 christos {
9648 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9649 1.1 christos CPU (h_cbit) = opval;
9650 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9651 1.1 christos }
9652 1.1 christos {
9653 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9654 1.1 christos CPU (h_nbit) = opval;
9655 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9656 1.1 christos }
9657 1.1 christos {
9658 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9659 1.1 christos CPU (h_zbit) = opval;
9660 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9661 1.1 christos }
9662 1.1 christos {
9663 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9664 1.1 christos CPU (h_vbit) = opval;
9665 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9666 1.1 christos }
9667 1.1 christos {
9668 1.1 christos {
9669 1.1 christos BI opval = 0;
9670 1.1 christos CPU (h_xbit) = opval;
9671 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9672 1.1 christos }
9673 1.1 christos {
9674 1.1 christos BI opval = 0;
9675 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9676 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9677 1.1 christos }
9678 1.1 christos }
9679 1.1 christos }
9680 1.1 christos }
9681 1.1 christos
9682 1.1 christos #undef FLD
9683 1.1 christos }
9684 1.1 christos NEXT (vpc);
9685 1.1 christos
9686 1.1 christos CASE (sem, INSN_MULU_B) : /* mulu.b $Rs,$Rd */
9687 1.1 christos {
9688 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9689 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9690 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9691 1.1 christos int UNUSED written = 0;
9692 1.1 christos IADDR UNUSED pc = abuf->addr;
9693 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9694 1.1 christos
9695 1.1 christos {
9696 1.1 christos DI tmp_src1;
9697 1.1 christos DI tmp_src2;
9698 1.1 christos DI tmp_tmpr;
9699 1.1 christos tmp_src1 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9700 1.1 christos tmp_src2 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9701 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9702 1.1 christos {
9703 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9704 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9705 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9706 1.1 christos }
9707 1.1 christos {
9708 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9709 1.1 christos SET_H_SR (((UINT) 7), opval);
9710 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9711 1.1 christos }
9712 1.1 christos {
9713 1.1 christos {
9714 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9715 1.1 christos CPU (h_cbit) = opval;
9716 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9717 1.1 christos }
9718 1.1 christos {
9719 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9720 1.1 christos CPU (h_nbit) = opval;
9721 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9722 1.1 christos }
9723 1.1 christos {
9724 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9725 1.1 christos CPU (h_zbit) = opval;
9726 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9727 1.1 christos }
9728 1.1 christos {
9729 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9730 1.1 christos CPU (h_vbit) = opval;
9731 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9732 1.1 christos }
9733 1.1 christos {
9734 1.1 christos {
9735 1.1 christos BI opval = 0;
9736 1.1 christos CPU (h_xbit) = opval;
9737 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9738 1.1 christos }
9739 1.1 christos {
9740 1.1 christos BI opval = 0;
9741 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9742 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9743 1.1 christos }
9744 1.1 christos }
9745 1.1 christos }
9746 1.1 christos }
9747 1.1 christos
9748 1.1 christos #undef FLD
9749 1.1 christos }
9750 1.1 christos NEXT (vpc);
9751 1.1 christos
9752 1.1 christos CASE (sem, INSN_MULU_W) : /* mulu.w $Rs,$Rd */
9753 1.1 christos {
9754 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9755 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9756 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9757 1.1 christos int UNUSED written = 0;
9758 1.1 christos IADDR UNUSED pc = abuf->addr;
9759 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9760 1.1 christos
9761 1.1 christos {
9762 1.1 christos DI tmp_src1;
9763 1.1 christos DI tmp_src2;
9764 1.1 christos DI tmp_tmpr;
9765 1.1 christos tmp_src1 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9766 1.1 christos tmp_src2 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9767 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9768 1.1 christos {
9769 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9770 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9771 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9772 1.1 christos }
9773 1.1 christos {
9774 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9775 1.1 christos SET_H_SR (((UINT) 7), opval);
9776 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9777 1.1 christos }
9778 1.1 christos {
9779 1.1 christos {
9780 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9781 1.1 christos CPU (h_cbit) = opval;
9782 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9783 1.1 christos }
9784 1.1 christos {
9785 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9786 1.1 christos CPU (h_nbit) = opval;
9787 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9788 1.1 christos }
9789 1.1 christos {
9790 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9791 1.1 christos CPU (h_zbit) = opval;
9792 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9793 1.1 christos }
9794 1.1 christos {
9795 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9796 1.1 christos CPU (h_vbit) = opval;
9797 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9798 1.1 christos }
9799 1.1 christos {
9800 1.1 christos {
9801 1.1 christos BI opval = 0;
9802 1.1 christos CPU (h_xbit) = opval;
9803 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9804 1.1 christos }
9805 1.1 christos {
9806 1.1 christos BI opval = 0;
9807 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9808 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9809 1.1 christos }
9810 1.1 christos }
9811 1.1 christos }
9812 1.1 christos }
9813 1.1 christos
9814 1.1 christos #undef FLD
9815 1.1 christos }
9816 1.1 christos NEXT (vpc);
9817 1.1 christos
9818 1.1 christos CASE (sem, INSN_MULU_D) : /* mulu.d $Rs,$Rd */
9819 1.1 christos {
9820 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9821 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9822 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9823 1.1 christos int UNUSED written = 0;
9824 1.1 christos IADDR UNUSED pc = abuf->addr;
9825 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9826 1.1 christos
9827 1.1 christos {
9828 1.1 christos DI tmp_src1;
9829 1.1 christos DI tmp_src2;
9830 1.1 christos DI tmp_tmpr;
9831 1.1 christos tmp_src1 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9832 1.1 christos tmp_src2 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9833 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9834 1.1 christos {
9835 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9836 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9837 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9838 1.1 christos }
9839 1.1 christos {
9840 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9841 1.1 christos SET_H_SR (((UINT) 7), opval);
9842 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9843 1.1 christos }
9844 1.1 christos {
9845 1.1 christos {
9846 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9847 1.1 christos CPU (h_cbit) = opval;
9848 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9849 1.1 christos }
9850 1.1 christos {
9851 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9852 1.1 christos CPU (h_nbit) = opval;
9853 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9854 1.1 christos }
9855 1.1 christos {
9856 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9857 1.1 christos CPU (h_zbit) = opval;
9858 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9859 1.1 christos }
9860 1.1 christos {
9861 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9862 1.1 christos CPU (h_vbit) = opval;
9863 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9864 1.1 christos }
9865 1.1 christos {
9866 1.1 christos {
9867 1.1 christos BI opval = 0;
9868 1.1 christos CPU (h_xbit) = opval;
9869 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9870 1.1 christos }
9871 1.1 christos {
9872 1.1 christos BI opval = 0;
9873 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9874 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9875 1.1 christos }
9876 1.1 christos }
9877 1.1 christos }
9878 1.1 christos }
9879 1.1 christos
9880 1.1 christos #undef FLD
9881 1.1 christos }
9882 1.1 christos NEXT (vpc);
9883 1.1 christos
9884 1.1 christos CASE (sem, INSN_MCP) : /* mcp $Ps,$Rd */
9885 1.1 christos {
9886 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9887 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9888 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
9889 1.1 christos int UNUSED written = 0;
9890 1.1 christos IADDR UNUSED pc = abuf->addr;
9891 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9892 1.1 christos
9893 1.1 christos {
9894 1.1 christos CPU (h_xbit) = 1;
9895 1.1 christos CPU (h_zbit) = 1;
9896 1.1 christos {
9897 1.1 christos SI tmp_tmpopd;
9898 1.1 christos SI tmp_tmpops;
9899 1.1 christos BI tmp_carry;
9900 1.1 christos SI tmp_newval;
9901 1.1 christos tmp_tmpops = GET_H_SR (FLD (f_operand2));
9902 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand1));
9903 1.1 christos tmp_carry = CPU (h_rbit);
9904 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9905 1.1 christos {
9906 1.1 christos SI opval = tmp_newval;
9907 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9908 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9909 1.1 christos }
9910 1.1 christos {
9911 1.1 christos {
9912 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
9913 1.1 christos CPU (h_rbit) = opval;
9914 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "rbit", 'x', opval);
9915 1.1 christos }
9916 1.1 christos {
9917 1.1 christos BI opval = LTSI (tmp_newval, 0);
9918 1.1 christos CPU (h_nbit) = opval;
9919 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9920 1.1 christos }
9921 1.1 christos {
9922 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9923 1.1 christos CPU (h_zbit) = opval;
9924 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9925 1.1 christos }
9926 1.1 christos {
9927 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
9928 1.1 christos CPU (h_vbit) = opval;
9929 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9930 1.1 christos }
9931 1.1 christos {
9932 1.1 christos {
9933 1.1 christos BI opval = 0;
9934 1.1 christos CPU (h_xbit) = opval;
9935 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9936 1.1 christos }
9937 1.1 christos {
9938 1.1 christos BI opval = 0;
9939 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9940 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9941 1.1 christos }
9942 1.1 christos }
9943 1.1 christos }
9944 1.1 christos }
9945 1.1 christos }
9946 1.1 christos
9947 1.1 christos #undef FLD
9948 1.1 christos }
9949 1.1 christos NEXT (vpc);
9950 1.1 christos
9951 1.1 christos CASE (sem, INSN_DSTEP) : /* dstep $Rs,$Rd */
9952 1.1 christos {
9953 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9954 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9955 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9956 1.1 christos int UNUSED written = 0;
9957 1.1 christos IADDR UNUSED pc = abuf->addr;
9958 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9959 1.1 christos
9960 1.1 christos {
9961 1.1 christos SI tmp_tmp;
9962 1.1 christos SI tmp_tmps;
9963 1.1 christos SI tmp_tmpd;
9964 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
9965 1.1 christos tmp_tmp = SLLSI (GET_H_GR (FLD (f_operand2)), 1);
9966 1.1 christos tmp_tmpd = ((GEUSI (tmp_tmp, tmp_tmps)) ? (SUBSI (tmp_tmp, tmp_tmps)) : (tmp_tmp));
9967 1.1 christos {
9968 1.1 christos SI opval = tmp_tmpd;
9969 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9970 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9971 1.1 christos }
9972 1.1 christos {
9973 1.1 christos {
9974 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
9975 1.1 christos CPU (h_nbit) = opval;
9976 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9977 1.1 christos }
9978 1.1 christos {
9979 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
9980 1.1 christos CPU (h_zbit) = opval;
9981 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9982 1.1 christos }
9983 1.1 christos SET_H_CBIT_MOVE (0);
9984 1.1 christos SET_H_VBIT_MOVE (0);
9985 1.1 christos {
9986 1.1 christos {
9987 1.1 christos BI opval = 0;
9988 1.1 christos CPU (h_xbit) = opval;
9989 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9990 1.1 christos }
9991 1.1 christos {
9992 1.1 christos BI opval = 0;
9993 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9994 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9995 1.1 christos }
9996 1.1 christos }
9997 1.1 christos }
9998 1.1 christos }
9999 1.1 christos
10000 1.1 christos #undef FLD
10001 1.1 christos }
10002 1.1 christos NEXT (vpc);
10003 1.1 christos
10004 1.1 christos CASE (sem, INSN_ABS) : /* abs $Rs,$Rd */
10005 1.1 christos {
10006 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10007 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10008 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
10009 1.1 christos int UNUSED written = 0;
10010 1.1 christos IADDR UNUSED pc = abuf->addr;
10011 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10012 1.1 christos
10013 1.1 christos {
10014 1.1 christos SI tmp_tmpd;
10015 1.1 christos tmp_tmpd = ABSSI (GET_H_GR (FLD (f_operand1)));
10016 1.1 christos {
10017 1.1 christos SI opval = tmp_tmpd;
10018 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10019 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10020 1.1 christos }
10021 1.1 christos {
10022 1.1 christos {
10023 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10024 1.1 christos CPU (h_nbit) = opval;
10025 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10026 1.1 christos }
10027 1.1 christos {
10028 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10029 1.1 christos CPU (h_zbit) = opval;
10030 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10031 1.1 christos }
10032 1.1 christos SET_H_CBIT_MOVE (0);
10033 1.1 christos SET_H_VBIT_MOVE (0);
10034 1.1 christos {
10035 1.1 christos {
10036 1.1 christos BI opval = 0;
10037 1.1 christos CPU (h_xbit) = opval;
10038 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10039 1.1 christos }
10040 1.1 christos {
10041 1.1 christos BI opval = 0;
10042 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10043 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10044 1.1 christos }
10045 1.1 christos }
10046 1.1 christos }
10047 1.1 christos }
10048 1.1 christos
10049 1.1 christos #undef FLD
10050 1.1 christos }
10051 1.1 christos NEXT (vpc);
10052 1.1 christos
10053 1.1 christos CASE (sem, INSN_AND_B_R) : /* and.b $Rs,$Rd */
10054 1.1 christos {
10055 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10056 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10057 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10058 1.1 christos int UNUSED written = 0;
10059 1.1 christos IADDR UNUSED pc = abuf->addr;
10060 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10061 1.1 christos
10062 1.1 christos {
10063 1.1 christos QI tmp_tmpd;
10064 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10065 1.1 christos {
10066 1.1 christos SI tmp_oldregval;
10067 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10068 1.1 christos {
10069 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10070 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10071 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10072 1.1 christos }
10073 1.1 christos }
10074 1.1 christos {
10075 1.1 christos {
10076 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10077 1.1 christos CPU (h_nbit) = opval;
10078 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10079 1.1 christos }
10080 1.1 christos {
10081 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10082 1.1 christos CPU (h_zbit) = opval;
10083 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10084 1.1 christos }
10085 1.1 christos SET_H_CBIT_MOVE (0);
10086 1.1 christos SET_H_VBIT_MOVE (0);
10087 1.1 christos {
10088 1.1 christos {
10089 1.1 christos BI opval = 0;
10090 1.1 christos CPU (h_xbit) = opval;
10091 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10092 1.1 christos }
10093 1.1 christos {
10094 1.1 christos BI opval = 0;
10095 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10096 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10097 1.1 christos }
10098 1.1 christos }
10099 1.1 christos }
10100 1.1 christos }
10101 1.1 christos
10102 1.1 christos #undef FLD
10103 1.1 christos }
10104 1.1 christos NEXT (vpc);
10105 1.1 christos
10106 1.1 christos CASE (sem, INSN_AND_W_R) : /* and.w $Rs,$Rd */
10107 1.1 christos {
10108 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10109 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10110 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10111 1.1 christos int UNUSED written = 0;
10112 1.1 christos IADDR UNUSED pc = abuf->addr;
10113 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10114 1.1 christos
10115 1.1 christos {
10116 1.1 christos HI tmp_tmpd;
10117 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10118 1.1 christos {
10119 1.1 christos SI tmp_oldregval;
10120 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10121 1.1 christos {
10122 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10123 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10124 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10125 1.1 christos }
10126 1.1 christos }
10127 1.1 christos {
10128 1.1 christos {
10129 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10130 1.1 christos CPU (h_nbit) = opval;
10131 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10132 1.1 christos }
10133 1.1 christos {
10134 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10135 1.1 christos CPU (h_zbit) = opval;
10136 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10137 1.1 christos }
10138 1.1 christos SET_H_CBIT_MOVE (0);
10139 1.1 christos SET_H_VBIT_MOVE (0);
10140 1.1 christos {
10141 1.1 christos {
10142 1.1 christos BI opval = 0;
10143 1.1 christos CPU (h_xbit) = opval;
10144 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10145 1.1 christos }
10146 1.1 christos {
10147 1.1 christos BI opval = 0;
10148 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10149 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10150 1.1 christos }
10151 1.1 christos }
10152 1.1 christos }
10153 1.1 christos }
10154 1.1 christos
10155 1.1 christos #undef FLD
10156 1.1 christos }
10157 1.1 christos NEXT (vpc);
10158 1.1 christos
10159 1.1 christos CASE (sem, INSN_AND_D_R) : /* and.d $Rs,$Rd */
10160 1.1 christos {
10161 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10162 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10163 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10164 1.1 christos int UNUSED written = 0;
10165 1.1 christos IADDR UNUSED pc = abuf->addr;
10166 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10167 1.1 christos
10168 1.1 christos {
10169 1.1 christos SI tmp_tmpd;
10170 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10171 1.1 christos {
10172 1.1 christos SI opval = tmp_tmpd;
10173 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10174 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10175 1.1 christos }
10176 1.1 christos {
10177 1.1 christos {
10178 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10179 1.1 christos CPU (h_nbit) = opval;
10180 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10181 1.1 christos }
10182 1.1 christos {
10183 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10184 1.1 christos CPU (h_zbit) = opval;
10185 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10186 1.1 christos }
10187 1.1 christos SET_H_CBIT_MOVE (0);
10188 1.1 christos SET_H_VBIT_MOVE (0);
10189 1.1 christos {
10190 1.1 christos {
10191 1.1 christos BI opval = 0;
10192 1.1 christos CPU (h_xbit) = opval;
10193 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10194 1.1 christos }
10195 1.1 christos {
10196 1.1 christos BI opval = 0;
10197 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10198 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10199 1.1 christos }
10200 1.1 christos }
10201 1.1 christos }
10202 1.1 christos }
10203 1.1 christos
10204 1.1 christos #undef FLD
10205 1.1 christos }
10206 1.1 christos NEXT (vpc);
10207 1.1 christos
10208 1.1 christos CASE (sem, INSN_AND_M_B_M) : /* and-m.b [${Rs}${inc}],${Rd} */
10209 1.1 christos {
10210 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10211 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10212 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10213 1.1 christos int UNUSED written = 0;
10214 1.1 christos IADDR UNUSED pc = abuf->addr;
10215 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10216 1.1 christos
10217 1.1 christos {
10218 1.1 christos QI tmp_tmpd;
10219 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10220 1.1 christos QI tmp_tmp_mem;
10221 1.1 christos BI tmp_postinc;
10222 1.1 christos tmp_postinc = FLD (f_memmode);
10223 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10224 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10225 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10226 1.1 christos {
10227 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10228 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10229 1.1 christos }
10230 1.1 christos {
10231 1.1 christos SI opval = tmp_addr;
10232 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10233 1.1 christos written |= (1 << 11);
10234 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10235 1.1 christos }
10236 1.1 christos }
10237 1.1 christos }
10238 1.1 christos ; tmp_tmp_mem; }));
10239 1.1 christos {
10240 1.1 christos SI tmp_oldregval;
10241 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10242 1.1 christos {
10243 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10244 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10245 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10246 1.1 christos }
10247 1.1 christos }
10248 1.1 christos {
10249 1.1 christos {
10250 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10251 1.1 christos CPU (h_nbit) = opval;
10252 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10253 1.1 christos }
10254 1.1 christos {
10255 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10256 1.1 christos CPU (h_zbit) = opval;
10257 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10258 1.1 christos }
10259 1.1 christos SET_H_CBIT_MOVE (0);
10260 1.1 christos SET_H_VBIT_MOVE (0);
10261 1.1 christos {
10262 1.1 christos {
10263 1.1 christos BI opval = 0;
10264 1.1 christos CPU (h_xbit) = opval;
10265 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10266 1.1 christos }
10267 1.1 christos {
10268 1.1 christos BI opval = 0;
10269 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10270 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10271 1.1 christos }
10272 1.1 christos }
10273 1.1 christos }
10274 1.1 christos }
10275 1.1 christos
10276 1.1 christos abuf->written = written;
10277 1.1 christos #undef FLD
10278 1.1 christos }
10279 1.1 christos NEXT (vpc);
10280 1.1 christos
10281 1.1 christos CASE (sem, INSN_AND_M_W_M) : /* and-m.w [${Rs}${inc}],${Rd} */
10282 1.1 christos {
10283 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10284 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10285 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10286 1.1 christos int UNUSED written = 0;
10287 1.1 christos IADDR UNUSED pc = abuf->addr;
10288 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10289 1.1 christos
10290 1.1 christos {
10291 1.1 christos HI tmp_tmpd;
10292 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10293 1.1 christos HI tmp_tmp_mem;
10294 1.1 christos BI tmp_postinc;
10295 1.1 christos tmp_postinc = FLD (f_memmode);
10296 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10297 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10298 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10299 1.1 christos {
10300 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10301 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10302 1.1 christos }
10303 1.1 christos {
10304 1.1 christos SI opval = tmp_addr;
10305 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10306 1.1 christos written |= (1 << 11);
10307 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10308 1.1 christos }
10309 1.1 christos }
10310 1.1 christos }
10311 1.1 christos ; tmp_tmp_mem; }));
10312 1.1 christos {
10313 1.1 christos SI tmp_oldregval;
10314 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10315 1.1 christos {
10316 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10317 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10318 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10319 1.1 christos }
10320 1.1 christos }
10321 1.1 christos {
10322 1.1 christos {
10323 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10324 1.1 christos CPU (h_nbit) = opval;
10325 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10326 1.1 christos }
10327 1.1 christos {
10328 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10329 1.1 christos CPU (h_zbit) = opval;
10330 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10331 1.1 christos }
10332 1.1 christos SET_H_CBIT_MOVE (0);
10333 1.1 christos SET_H_VBIT_MOVE (0);
10334 1.1 christos {
10335 1.1 christos {
10336 1.1 christos BI opval = 0;
10337 1.1 christos CPU (h_xbit) = opval;
10338 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10339 1.1 christos }
10340 1.1 christos {
10341 1.1 christos BI opval = 0;
10342 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10343 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10344 1.1 christos }
10345 1.1 christos }
10346 1.1 christos }
10347 1.1 christos }
10348 1.1 christos
10349 1.1 christos abuf->written = written;
10350 1.1 christos #undef FLD
10351 1.1 christos }
10352 1.1 christos NEXT (vpc);
10353 1.1 christos
10354 1.1 christos CASE (sem, INSN_AND_M_D_M) : /* and-m.d [${Rs}${inc}],${Rd} */
10355 1.1 christos {
10356 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10357 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10358 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10359 1.1 christos int UNUSED written = 0;
10360 1.1 christos IADDR UNUSED pc = abuf->addr;
10361 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10362 1.1 christos
10363 1.1 christos {
10364 1.1 christos SI tmp_tmpd;
10365 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10366 1.1 christos SI tmp_tmp_mem;
10367 1.1 christos BI tmp_postinc;
10368 1.1 christos tmp_postinc = FLD (f_memmode);
10369 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10370 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10371 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10372 1.1 christos {
10373 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10374 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10375 1.1 christos }
10376 1.1 christos {
10377 1.1 christos SI opval = tmp_addr;
10378 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10379 1.1 christos written |= (1 << 10);
10380 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10381 1.1 christos }
10382 1.1 christos }
10383 1.1 christos }
10384 1.1 christos ; tmp_tmp_mem; }));
10385 1.1 christos {
10386 1.1 christos SI opval = tmp_tmpd;
10387 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10388 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10389 1.1 christos }
10390 1.1 christos {
10391 1.1 christos {
10392 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10393 1.1 christos CPU (h_nbit) = opval;
10394 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10395 1.1 christos }
10396 1.1 christos {
10397 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10398 1.1 christos CPU (h_zbit) = opval;
10399 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10400 1.1 christos }
10401 1.1 christos SET_H_CBIT_MOVE (0);
10402 1.1 christos SET_H_VBIT_MOVE (0);
10403 1.1 christos {
10404 1.1 christos {
10405 1.1 christos BI opval = 0;
10406 1.1 christos CPU (h_xbit) = opval;
10407 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10408 1.1 christos }
10409 1.1 christos {
10410 1.1 christos BI opval = 0;
10411 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10412 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10413 1.1 christos }
10414 1.1 christos }
10415 1.1 christos }
10416 1.1 christos }
10417 1.1 christos
10418 1.1 christos abuf->written = written;
10419 1.1 christos #undef FLD
10420 1.1 christos }
10421 1.1 christos NEXT (vpc);
10422 1.1 christos
10423 1.1 christos CASE (sem, INSN_ANDCBR) : /* and.b ${sconst8}],${Rd} */
10424 1.1 christos {
10425 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10426 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10427 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
10428 1.1 christos int UNUSED written = 0;
10429 1.1 christos IADDR UNUSED pc = abuf->addr;
10430 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10431 1.1 christos
10432 1.1 christos {
10433 1.1 christos QI tmp_tmpd;
10434 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
10435 1.1 christos {
10436 1.1 christos SI tmp_oldregval;
10437 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10438 1.1 christos {
10439 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10440 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10441 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10442 1.1 christos }
10443 1.1 christos }
10444 1.1 christos {
10445 1.1 christos {
10446 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10447 1.1 christos CPU (h_nbit) = opval;
10448 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10449 1.1 christos }
10450 1.1 christos {
10451 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10452 1.1 christos CPU (h_zbit) = opval;
10453 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10454 1.1 christos }
10455 1.1 christos SET_H_CBIT_MOVE (0);
10456 1.1 christos SET_H_VBIT_MOVE (0);
10457 1.1 christos {
10458 1.1 christos {
10459 1.1 christos BI opval = 0;
10460 1.1 christos CPU (h_xbit) = opval;
10461 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10462 1.1 christos }
10463 1.1 christos {
10464 1.1 christos BI opval = 0;
10465 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10466 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10467 1.1 christos }
10468 1.1 christos }
10469 1.1 christos }
10470 1.1 christos }
10471 1.1 christos
10472 1.1 christos #undef FLD
10473 1.1 christos }
10474 1.1 christos NEXT (vpc);
10475 1.1 christos
10476 1.1 christos CASE (sem, INSN_ANDCWR) : /* and.w ${sconst16}],${Rd} */
10477 1.1 christos {
10478 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10479 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10480 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
10481 1.1 christos int UNUSED written = 0;
10482 1.1 christos IADDR UNUSED pc = abuf->addr;
10483 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10484 1.1 christos
10485 1.1 christos {
10486 1.1 christos HI tmp_tmpd;
10487 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
10488 1.1 christos {
10489 1.1 christos SI tmp_oldregval;
10490 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10491 1.1 christos {
10492 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10493 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10494 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10495 1.1 christos }
10496 1.1 christos }
10497 1.1 christos {
10498 1.1 christos {
10499 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10500 1.1 christos CPU (h_nbit) = opval;
10501 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10502 1.1 christos }
10503 1.1 christos {
10504 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10505 1.1 christos CPU (h_zbit) = opval;
10506 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10507 1.1 christos }
10508 1.1 christos SET_H_CBIT_MOVE (0);
10509 1.1 christos SET_H_VBIT_MOVE (0);
10510 1.1 christos {
10511 1.1 christos {
10512 1.1 christos BI opval = 0;
10513 1.1 christos CPU (h_xbit) = opval;
10514 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10515 1.1 christos }
10516 1.1 christos {
10517 1.1 christos BI opval = 0;
10518 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10519 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10520 1.1 christos }
10521 1.1 christos }
10522 1.1 christos }
10523 1.1 christos }
10524 1.1 christos
10525 1.1 christos #undef FLD
10526 1.1 christos }
10527 1.1 christos NEXT (vpc);
10528 1.1 christos
10529 1.1 christos CASE (sem, INSN_ANDCDR) : /* and.d ${const32}],${Rd} */
10530 1.1 christos {
10531 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10532 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10533 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
10534 1.1 christos int UNUSED written = 0;
10535 1.1 christos IADDR UNUSED pc = abuf->addr;
10536 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
10537 1.1 christos
10538 1.1 christos {
10539 1.1 christos SI tmp_tmpd;
10540 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
10541 1.1 christos {
10542 1.1 christos SI opval = tmp_tmpd;
10543 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10544 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10545 1.1 christos }
10546 1.1 christos {
10547 1.1 christos {
10548 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10549 1.1 christos CPU (h_nbit) = opval;
10550 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10551 1.1 christos }
10552 1.1 christos {
10553 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10554 1.1 christos CPU (h_zbit) = opval;
10555 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10556 1.1 christos }
10557 1.1 christos SET_H_CBIT_MOVE (0);
10558 1.1 christos SET_H_VBIT_MOVE (0);
10559 1.1 christos {
10560 1.1 christos {
10561 1.1 christos BI opval = 0;
10562 1.1 christos CPU (h_xbit) = opval;
10563 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10564 1.1 christos }
10565 1.1 christos {
10566 1.1 christos BI opval = 0;
10567 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10568 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10569 1.1 christos }
10570 1.1 christos }
10571 1.1 christos }
10572 1.1 christos }
10573 1.1 christos
10574 1.1 christos #undef FLD
10575 1.1 christos }
10576 1.1 christos NEXT (vpc);
10577 1.1 christos
10578 1.1 christos CASE (sem, INSN_ANDQ) : /* andq $i,$Rd */
10579 1.1 christos {
10580 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10581 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10582 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
10583 1.1 christos int UNUSED written = 0;
10584 1.1 christos IADDR UNUSED pc = abuf->addr;
10585 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10586 1.1 christos
10587 1.1 christos {
10588 1.1 christos SI tmp_tmpd;
10589 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
10590 1.1 christos {
10591 1.1 christos SI opval = tmp_tmpd;
10592 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10593 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10594 1.1 christos }
10595 1.1 christos {
10596 1.1 christos {
10597 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10598 1.1 christos CPU (h_nbit) = opval;
10599 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10600 1.1 christos }
10601 1.1 christos {
10602 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10603 1.1 christos CPU (h_zbit) = opval;
10604 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10605 1.1 christos }
10606 1.1 christos SET_H_CBIT_MOVE (0);
10607 1.1 christos SET_H_VBIT_MOVE (0);
10608 1.1 christos {
10609 1.1 christos {
10610 1.1 christos BI opval = 0;
10611 1.1 christos CPU (h_xbit) = opval;
10612 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10613 1.1 christos }
10614 1.1 christos {
10615 1.1 christos BI opval = 0;
10616 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10617 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10618 1.1 christos }
10619 1.1 christos }
10620 1.1 christos }
10621 1.1 christos }
10622 1.1 christos
10623 1.1 christos #undef FLD
10624 1.1 christos }
10625 1.1 christos NEXT (vpc);
10626 1.1 christos
10627 1.1 christos CASE (sem, INSN_ORR_B_R) : /* orr.b $Rs,$Rd */
10628 1.1 christos {
10629 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10630 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10631 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10632 1.1 christos int UNUSED written = 0;
10633 1.1 christos IADDR UNUSED pc = abuf->addr;
10634 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10635 1.1 christos
10636 1.1 christos {
10637 1.1 christos QI tmp_tmpd;
10638 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10639 1.1 christos {
10640 1.1 christos SI tmp_oldregval;
10641 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10642 1.1 christos {
10643 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10644 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10645 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10646 1.1 christos }
10647 1.1 christos }
10648 1.1 christos {
10649 1.1 christos {
10650 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10651 1.1 christos CPU (h_nbit) = opval;
10652 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10653 1.1 christos }
10654 1.1 christos {
10655 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10656 1.1 christos CPU (h_zbit) = opval;
10657 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10658 1.1 christos }
10659 1.1 christos SET_H_CBIT_MOVE (0);
10660 1.1 christos SET_H_VBIT_MOVE (0);
10661 1.1 christos {
10662 1.1 christos {
10663 1.1 christos BI opval = 0;
10664 1.1 christos CPU (h_xbit) = opval;
10665 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10666 1.1 christos }
10667 1.1 christos {
10668 1.1 christos BI opval = 0;
10669 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10670 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10671 1.1 christos }
10672 1.1 christos }
10673 1.1 christos }
10674 1.1 christos }
10675 1.1 christos
10676 1.1 christos #undef FLD
10677 1.1 christos }
10678 1.1 christos NEXT (vpc);
10679 1.1 christos
10680 1.1 christos CASE (sem, INSN_ORR_W_R) : /* orr.w $Rs,$Rd */
10681 1.1 christos {
10682 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10683 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10684 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10685 1.1 christos int UNUSED written = 0;
10686 1.1 christos IADDR UNUSED pc = abuf->addr;
10687 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10688 1.1 christos
10689 1.1 christos {
10690 1.1 christos HI tmp_tmpd;
10691 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10692 1.1 christos {
10693 1.1 christos SI tmp_oldregval;
10694 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10695 1.1 christos {
10696 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10697 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10698 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10699 1.1 christos }
10700 1.1 christos }
10701 1.1 christos {
10702 1.1 christos {
10703 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10704 1.1 christos CPU (h_nbit) = opval;
10705 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10706 1.1 christos }
10707 1.1 christos {
10708 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10709 1.1 christos CPU (h_zbit) = opval;
10710 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10711 1.1 christos }
10712 1.1 christos SET_H_CBIT_MOVE (0);
10713 1.1 christos SET_H_VBIT_MOVE (0);
10714 1.1 christos {
10715 1.1 christos {
10716 1.1 christos BI opval = 0;
10717 1.1 christos CPU (h_xbit) = opval;
10718 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10719 1.1 christos }
10720 1.1 christos {
10721 1.1 christos BI opval = 0;
10722 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10723 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10724 1.1 christos }
10725 1.1 christos }
10726 1.1 christos }
10727 1.1 christos }
10728 1.1 christos
10729 1.1 christos #undef FLD
10730 1.1 christos }
10731 1.1 christos NEXT (vpc);
10732 1.1 christos
10733 1.1 christos CASE (sem, INSN_ORR_D_R) : /* orr.d $Rs,$Rd */
10734 1.1 christos {
10735 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10736 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10737 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10738 1.1 christos int UNUSED written = 0;
10739 1.1 christos IADDR UNUSED pc = abuf->addr;
10740 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10741 1.1 christos
10742 1.1 christos {
10743 1.1 christos SI tmp_tmpd;
10744 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10745 1.1 christos {
10746 1.1 christos SI opval = tmp_tmpd;
10747 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10748 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10749 1.1 christos }
10750 1.1 christos {
10751 1.1 christos {
10752 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10753 1.1 christos CPU (h_nbit) = opval;
10754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10755 1.1 christos }
10756 1.1 christos {
10757 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10758 1.1 christos CPU (h_zbit) = opval;
10759 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10760 1.1 christos }
10761 1.1 christos SET_H_CBIT_MOVE (0);
10762 1.1 christos SET_H_VBIT_MOVE (0);
10763 1.1 christos {
10764 1.1 christos {
10765 1.1 christos BI opval = 0;
10766 1.1 christos CPU (h_xbit) = opval;
10767 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10768 1.1 christos }
10769 1.1 christos {
10770 1.1 christos BI opval = 0;
10771 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10772 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10773 1.1 christos }
10774 1.1 christos }
10775 1.1 christos }
10776 1.1 christos }
10777 1.1 christos
10778 1.1 christos #undef FLD
10779 1.1 christos }
10780 1.1 christos NEXT (vpc);
10781 1.1 christos
10782 1.1 christos CASE (sem, INSN_OR_M_B_M) : /* or-m.b [${Rs}${inc}],${Rd} */
10783 1.1 christos {
10784 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10785 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10786 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10787 1.1 christos int UNUSED written = 0;
10788 1.1 christos IADDR UNUSED pc = abuf->addr;
10789 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10790 1.1 christos
10791 1.1 christos {
10792 1.1 christos QI tmp_tmpd;
10793 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10794 1.1 christos QI tmp_tmp_mem;
10795 1.1 christos BI tmp_postinc;
10796 1.1 christos tmp_postinc = FLD (f_memmode);
10797 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10798 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10799 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10800 1.1 christos {
10801 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10802 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10803 1.1 christos }
10804 1.1 christos {
10805 1.1 christos SI opval = tmp_addr;
10806 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10807 1.1 christos written |= (1 << 11);
10808 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10809 1.1 christos }
10810 1.1 christos }
10811 1.1 christos }
10812 1.1 christos ; tmp_tmp_mem; }));
10813 1.1 christos {
10814 1.1 christos SI tmp_oldregval;
10815 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10816 1.1 christos {
10817 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10818 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10819 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10820 1.1 christos }
10821 1.1 christos }
10822 1.1 christos {
10823 1.1 christos {
10824 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10825 1.1 christos CPU (h_nbit) = opval;
10826 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10827 1.1 christos }
10828 1.1 christos {
10829 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10830 1.1 christos CPU (h_zbit) = opval;
10831 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10832 1.1 christos }
10833 1.1 christos SET_H_CBIT_MOVE (0);
10834 1.1 christos SET_H_VBIT_MOVE (0);
10835 1.1 christos {
10836 1.1 christos {
10837 1.1 christos BI opval = 0;
10838 1.1 christos CPU (h_xbit) = opval;
10839 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10840 1.1 christos }
10841 1.1 christos {
10842 1.1 christos BI opval = 0;
10843 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10844 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10845 1.1 christos }
10846 1.1 christos }
10847 1.1 christos }
10848 1.1 christos }
10849 1.1 christos
10850 1.1 christos abuf->written = written;
10851 1.1 christos #undef FLD
10852 1.1 christos }
10853 1.1 christos NEXT (vpc);
10854 1.1 christos
10855 1.1 christos CASE (sem, INSN_OR_M_W_M) : /* or-m.w [${Rs}${inc}],${Rd} */
10856 1.1 christos {
10857 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10858 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10859 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10860 1.1 christos int UNUSED written = 0;
10861 1.1 christos IADDR UNUSED pc = abuf->addr;
10862 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10863 1.1 christos
10864 1.1 christos {
10865 1.1 christos HI tmp_tmpd;
10866 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10867 1.1 christos HI tmp_tmp_mem;
10868 1.1 christos BI tmp_postinc;
10869 1.1 christos tmp_postinc = FLD (f_memmode);
10870 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10871 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10872 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10873 1.1 christos {
10874 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10875 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10876 1.1 christos }
10877 1.1 christos {
10878 1.1 christos SI opval = tmp_addr;
10879 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10880 1.1 christos written |= (1 << 11);
10881 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10882 1.1 christos }
10883 1.1 christos }
10884 1.1 christos }
10885 1.1 christos ; tmp_tmp_mem; }));
10886 1.1 christos {
10887 1.1 christos SI tmp_oldregval;
10888 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10889 1.1 christos {
10890 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10891 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10892 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10893 1.1 christos }
10894 1.1 christos }
10895 1.1 christos {
10896 1.1 christos {
10897 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10898 1.1 christos CPU (h_nbit) = opval;
10899 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10900 1.1 christos }
10901 1.1 christos {
10902 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10903 1.1 christos CPU (h_zbit) = opval;
10904 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10905 1.1 christos }
10906 1.1 christos SET_H_CBIT_MOVE (0);
10907 1.1 christos SET_H_VBIT_MOVE (0);
10908 1.1 christos {
10909 1.1 christos {
10910 1.1 christos BI opval = 0;
10911 1.1 christos CPU (h_xbit) = opval;
10912 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10913 1.1 christos }
10914 1.1 christos {
10915 1.1 christos BI opval = 0;
10916 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10917 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10918 1.1 christos }
10919 1.1 christos }
10920 1.1 christos }
10921 1.1 christos }
10922 1.1 christos
10923 1.1 christos abuf->written = written;
10924 1.1 christos #undef FLD
10925 1.1 christos }
10926 1.1 christos NEXT (vpc);
10927 1.1 christos
10928 1.1 christos CASE (sem, INSN_OR_M_D_M) : /* or-m.d [${Rs}${inc}],${Rd} */
10929 1.1 christos {
10930 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10931 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10932 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10933 1.1 christos int UNUSED written = 0;
10934 1.1 christos IADDR UNUSED pc = abuf->addr;
10935 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10936 1.1 christos
10937 1.1 christos {
10938 1.1 christos SI tmp_tmpd;
10939 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10940 1.1 christos SI tmp_tmp_mem;
10941 1.1 christos BI tmp_postinc;
10942 1.1 christos tmp_postinc = FLD (f_memmode);
10943 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10944 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10945 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10946 1.1 christos {
10947 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10948 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10949 1.1 christos }
10950 1.1 christos {
10951 1.1 christos SI opval = tmp_addr;
10952 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10953 1.1 christos written |= (1 << 10);
10954 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10955 1.1 christos }
10956 1.1 christos }
10957 1.1 christos }
10958 1.1 christos ; tmp_tmp_mem; }));
10959 1.1 christos {
10960 1.1 christos SI opval = tmp_tmpd;
10961 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10962 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10963 1.1 christos }
10964 1.1 christos {
10965 1.1 christos {
10966 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10967 1.1 christos CPU (h_nbit) = opval;
10968 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10969 1.1 christos }
10970 1.1 christos {
10971 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10972 1.1 christos CPU (h_zbit) = opval;
10973 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10974 1.1 christos }
10975 1.1 christos SET_H_CBIT_MOVE (0);
10976 1.1 christos SET_H_VBIT_MOVE (0);
10977 1.1 christos {
10978 1.1 christos {
10979 1.1 christos BI opval = 0;
10980 1.1 christos CPU (h_xbit) = opval;
10981 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10982 1.1 christos }
10983 1.1 christos {
10984 1.1 christos BI opval = 0;
10985 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10986 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10987 1.1 christos }
10988 1.1 christos }
10989 1.1 christos }
10990 1.1 christos }
10991 1.1 christos
10992 1.1 christos abuf->written = written;
10993 1.1 christos #undef FLD
10994 1.1 christos }
10995 1.1 christos NEXT (vpc);
10996 1.1 christos
10997 1.1 christos CASE (sem, INSN_ORCBR) : /* or.b ${sconst8}],${Rd} */
10998 1.1 christos {
10999 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11000 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11001 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
11002 1.1 christos int UNUSED written = 0;
11003 1.1 christos IADDR UNUSED pc = abuf->addr;
11004 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11005 1.1 christos
11006 1.1 christos {
11007 1.1 christos QI tmp_tmpd;
11008 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
11009 1.1 christos {
11010 1.1 christos SI tmp_oldregval;
11011 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11012 1.1 christos {
11013 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11014 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11015 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11016 1.1 christos }
11017 1.1 christos }
11018 1.1 christos {
11019 1.1 christos {
11020 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11021 1.1 christos CPU (h_nbit) = opval;
11022 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11023 1.1 christos }
11024 1.1 christos {
11025 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11026 1.1 christos CPU (h_zbit) = opval;
11027 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11028 1.1 christos }
11029 1.1 christos SET_H_CBIT_MOVE (0);
11030 1.1 christos SET_H_VBIT_MOVE (0);
11031 1.1 christos {
11032 1.1 christos {
11033 1.1 christos BI opval = 0;
11034 1.1 christos CPU (h_xbit) = opval;
11035 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11036 1.1 christos }
11037 1.1 christos {
11038 1.1 christos BI opval = 0;
11039 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11040 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11041 1.1 christos }
11042 1.1 christos }
11043 1.1 christos }
11044 1.1 christos }
11045 1.1 christos
11046 1.1 christos #undef FLD
11047 1.1 christos }
11048 1.1 christos NEXT (vpc);
11049 1.1 christos
11050 1.1 christos CASE (sem, INSN_ORCWR) : /* or.w ${sconst16}],${Rd} */
11051 1.1 christos {
11052 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11053 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11054 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
11055 1.1 christos int UNUSED written = 0;
11056 1.1 christos IADDR UNUSED pc = abuf->addr;
11057 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11058 1.1 christos
11059 1.1 christos {
11060 1.1 christos HI tmp_tmpd;
11061 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
11062 1.1 christos {
11063 1.1 christos SI tmp_oldregval;
11064 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11065 1.1 christos {
11066 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11067 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11068 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11069 1.1 christos }
11070 1.1 christos }
11071 1.1 christos {
11072 1.1 christos {
11073 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11074 1.1 christos CPU (h_nbit) = opval;
11075 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11076 1.1 christos }
11077 1.1 christos {
11078 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11079 1.1 christos CPU (h_zbit) = opval;
11080 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11081 1.1 christos }
11082 1.1 christos SET_H_CBIT_MOVE (0);
11083 1.1 christos SET_H_VBIT_MOVE (0);
11084 1.1 christos {
11085 1.1 christos {
11086 1.1 christos BI opval = 0;
11087 1.1 christos CPU (h_xbit) = opval;
11088 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11089 1.1 christos }
11090 1.1 christos {
11091 1.1 christos BI opval = 0;
11092 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11093 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11094 1.1 christos }
11095 1.1 christos }
11096 1.1 christos }
11097 1.1 christos }
11098 1.1 christos
11099 1.1 christos #undef FLD
11100 1.1 christos }
11101 1.1 christos NEXT (vpc);
11102 1.1 christos
11103 1.1 christos CASE (sem, INSN_ORCDR) : /* or.d ${const32}],${Rd} */
11104 1.1 christos {
11105 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11106 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11107 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
11108 1.1 christos int UNUSED written = 0;
11109 1.1 christos IADDR UNUSED pc = abuf->addr;
11110 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
11111 1.1 christos
11112 1.1 christos {
11113 1.1 christos SI tmp_tmpd;
11114 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
11115 1.1 christos {
11116 1.1 christos SI opval = tmp_tmpd;
11117 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11118 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11119 1.1 christos }
11120 1.1 christos {
11121 1.1 christos {
11122 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11123 1.1 christos CPU (h_nbit) = opval;
11124 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11125 1.1 christos }
11126 1.1 christos {
11127 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11128 1.1 christos CPU (h_zbit) = opval;
11129 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11130 1.1 christos }
11131 1.1 christos SET_H_CBIT_MOVE (0);
11132 1.1 christos SET_H_VBIT_MOVE (0);
11133 1.1 christos {
11134 1.1 christos {
11135 1.1 christos BI opval = 0;
11136 1.1 christos CPU (h_xbit) = opval;
11137 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11138 1.1 christos }
11139 1.1 christos {
11140 1.1 christos BI opval = 0;
11141 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11142 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11143 1.1 christos }
11144 1.1 christos }
11145 1.1 christos }
11146 1.1 christos }
11147 1.1 christos
11148 1.1 christos #undef FLD
11149 1.1 christos }
11150 1.1 christos NEXT (vpc);
11151 1.1 christos
11152 1.1 christos CASE (sem, INSN_ORQ) : /* orq $i,$Rd */
11153 1.1 christos {
11154 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11155 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11156 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
11157 1.1 christos int UNUSED written = 0;
11158 1.1 christos IADDR UNUSED pc = abuf->addr;
11159 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11160 1.1 christos
11161 1.1 christos {
11162 1.1 christos SI tmp_tmpd;
11163 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
11164 1.1 christos {
11165 1.1 christos SI opval = tmp_tmpd;
11166 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11167 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11168 1.1 christos }
11169 1.1 christos {
11170 1.1 christos {
11171 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11172 1.1 christos CPU (h_nbit) = opval;
11173 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11174 1.1 christos }
11175 1.1 christos {
11176 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11177 1.1 christos CPU (h_zbit) = opval;
11178 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11179 1.1 christos }
11180 1.1 christos SET_H_CBIT_MOVE (0);
11181 1.1 christos SET_H_VBIT_MOVE (0);
11182 1.1 christos {
11183 1.1 christos {
11184 1.1 christos BI opval = 0;
11185 1.1 christos CPU (h_xbit) = opval;
11186 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11187 1.1 christos }
11188 1.1 christos {
11189 1.1 christos BI opval = 0;
11190 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11191 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11192 1.1 christos }
11193 1.1 christos }
11194 1.1 christos }
11195 1.1 christos }
11196 1.1 christos
11197 1.1 christos #undef FLD
11198 1.1 christos }
11199 1.1 christos NEXT (vpc);
11200 1.1 christos
11201 1.1 christos CASE (sem, INSN_XOR) : /* xor $Rs,$Rd */
11202 1.1 christos {
11203 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11204 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11205 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
11206 1.1 christos int UNUSED written = 0;
11207 1.1 christos IADDR UNUSED pc = abuf->addr;
11208 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11209 1.1 christos
11210 1.1 christos {
11211 1.1 christos SI tmp_tmpd;
11212 1.1 christos tmp_tmpd = XORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
11213 1.1 christos {
11214 1.1 christos SI opval = tmp_tmpd;
11215 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11216 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11217 1.1 christos }
11218 1.1 christos {
11219 1.1 christos {
11220 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11221 1.1 christos CPU (h_nbit) = opval;
11222 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11223 1.1 christos }
11224 1.1 christos {
11225 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11226 1.1 christos CPU (h_zbit) = opval;
11227 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11228 1.1 christos }
11229 1.1 christos SET_H_CBIT_MOVE (0);
11230 1.1 christos SET_H_VBIT_MOVE (0);
11231 1.1 christos {
11232 1.1 christos {
11233 1.1 christos BI opval = 0;
11234 1.1 christos CPU (h_xbit) = opval;
11235 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11236 1.1 christos }
11237 1.1 christos {
11238 1.1 christos BI opval = 0;
11239 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11240 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11241 1.1 christos }
11242 1.1 christos }
11243 1.1 christos }
11244 1.1 christos }
11245 1.1 christos
11246 1.1 christos #undef FLD
11247 1.1 christos }
11248 1.1 christos NEXT (vpc);
11249 1.1 christos
11250 1.1 christos CASE (sem, INSN_SWAP) : /* swap${swapoption} ${Rs} */
11251 1.1 christos {
11252 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11253 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11254 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
11255 1.1 christos int UNUSED written = 0;
11256 1.1 christos IADDR UNUSED pc = abuf->addr;
11257 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11258 1.1 christos
11259 1.1 christos {
11260 1.1 christos SI tmp_tmps;
11261 1.1 christos SI tmp_tmpd;
11262 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
11263 1.1 christos tmp_tmpd = ({ SI tmp_tmpcode;
11264 1.1 christos SI tmp_tmpval;
11265 1.1 christos SI tmp_tmpres;
11266 1.1 christos tmp_tmpcode = FLD (f_operand2);
11267 1.1 christos ; tmp_tmpval = tmp_tmps;
11268 1.1 christos ; if (EQSI (tmp_tmpcode, 0)) {
11269 1.1 christos tmp_tmpres = (cgen_rtx_error (current_cpu, "SWAP without swap modifier isn't implemented"), 0);
11270 1.1 christos }
11271 1.1 christos else if (EQSI (tmp_tmpcode, 1)) {
11272 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11273 1.1 christos tmp_tmpr = tmp_tmpval;
11274 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11275 1.1 christos }
11276 1.1 christos else if (EQSI (tmp_tmpcode, 2)) {
11277 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11278 1.1 christos tmp_tmpb = tmp_tmpval;
11279 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11280 1.1 christos }
11281 1.1 christos else if (EQSI (tmp_tmpcode, 3)) {
11282 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11283 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11284 1.1 christos tmp_tmpb = tmp_tmpval;
11285 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11286 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11287 1.1 christos }
11288 1.1 christos else if (EQSI (tmp_tmpcode, 4)) {
11289 1.11 christos tmp_tmpres = ({ SI tmp_tmpw;
11290 1.11 christos tmp_tmpw = tmp_tmpval;
11291 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11292 1.1 christos }
11293 1.1 christos else if (EQSI (tmp_tmpcode, 5)) {
11294 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11295 1.11 christos tmp_tmpr = ({ SI tmp_tmpw;
11296 1.11 christos tmp_tmpw = tmp_tmpval;
11297 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11298 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11299 1.1 christos }
11300 1.1 christos else if (EQSI (tmp_tmpcode, 6)) {
11301 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11302 1.11 christos tmp_tmpb = ({ SI tmp_tmpw;
11303 1.11 christos tmp_tmpw = tmp_tmpval;
11304 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11305 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11306 1.1 christos }
11307 1.1 christos else if (EQSI (tmp_tmpcode, 7)) {
11308 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11309 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11310 1.11 christos tmp_tmpb = ({ SI tmp_tmpw;
11311 1.11 christos tmp_tmpw = tmp_tmpval;
11312 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11313 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11314 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11315 1.1 christos }
11316 1.1 christos else if (EQSI (tmp_tmpcode, 8)) {
11317 1.1 christos tmp_tmpres = INVSI (tmp_tmpval);
11318 1.1 christos }
11319 1.1 christos else if (EQSI (tmp_tmpcode, 9)) {
11320 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11321 1.1 christos tmp_tmpr = INVSI (tmp_tmpval);
11322 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11323 1.1 christos }
11324 1.1 christos else if (EQSI (tmp_tmpcode, 10)) {
11325 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11326 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11327 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11328 1.1 christos }
11329 1.1 christos else if (EQSI (tmp_tmpcode, 11)) {
11330 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11331 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11332 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11333 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11334 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11335 1.1 christos }
11336 1.1 christos else if (EQSI (tmp_tmpcode, 12)) {
11337 1.11 christos tmp_tmpres = ({ SI tmp_tmpw;
11338 1.11 christos tmp_tmpw = INVSI (tmp_tmpval);
11339 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11340 1.1 christos }
11341 1.1 christos else if (EQSI (tmp_tmpcode, 13)) {
11342 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11343 1.11 christos tmp_tmpr = ({ SI tmp_tmpw;
11344 1.11 christos tmp_tmpw = INVSI (tmp_tmpval);
11345 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11346 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11347 1.1 christos }
11348 1.1 christos else if (EQSI (tmp_tmpcode, 14)) {
11349 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11350 1.11 christos tmp_tmpb = ({ SI tmp_tmpw;
11351 1.11 christos tmp_tmpw = INVSI (tmp_tmpval);
11352 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11353 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11354 1.1 christos }
11355 1.1 christos else if (EQSI (tmp_tmpcode, 15)) {
11356 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11357 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11358 1.11 christos tmp_tmpb = ({ SI tmp_tmpw;
11359 1.11 christos tmp_tmpw = INVSI (tmp_tmpval);
11360 1.11 christos ; ORSI (ANDSI (SLLSI (tmp_tmpw, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpw, 16), 65535)); });
11361 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11362 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11363 1.1 christos }
11364 1.11 christos else {
11365 1.11 christos cgen_rtx_error (current_cpu, "Unknown swapcode");
11366 1.11 christos }
11367 1.1 christos ; tmp_tmpres; });
11368 1.1 christos {
11369 1.1 christos SI opval = tmp_tmpd;
11370 1.1 christos SET_H_GR (FLD (f_operand1), opval);
11371 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11372 1.1 christos }
11373 1.1 christos {
11374 1.1 christos {
11375 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11376 1.1 christos CPU (h_nbit) = opval;
11377 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11378 1.1 christos }
11379 1.1 christos {
11380 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11381 1.1 christos CPU (h_zbit) = opval;
11382 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11383 1.1 christos }
11384 1.1 christos SET_H_CBIT_MOVE (0);
11385 1.1 christos SET_H_VBIT_MOVE (0);
11386 1.1 christos {
11387 1.1 christos {
11388 1.1 christos BI opval = 0;
11389 1.1 christos CPU (h_xbit) = opval;
11390 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11391 1.1 christos }
11392 1.1 christos {
11393 1.1 christos BI opval = 0;
11394 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11395 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11396 1.1 christos }
11397 1.1 christos }
11398 1.1 christos }
11399 1.1 christos }
11400 1.1 christos
11401 1.1 christos #undef FLD
11402 1.1 christos }
11403 1.1 christos NEXT (vpc);
11404 1.1 christos
11405 1.1 christos CASE (sem, INSN_ASRR_B_R) : /* asrr.b $Rs,$Rd */
11406 1.1 christos {
11407 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11408 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11409 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11410 1.1 christos int UNUSED written = 0;
11411 1.1 christos IADDR UNUSED pc = abuf->addr;
11412 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11413 1.1 christos
11414 1.1 christos {
11415 1.1 christos QI tmp_tmpd;
11416 1.1 christos SI tmp_cnt1;
11417 1.1 christos SI tmp_cnt2;
11418 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11419 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11420 1.1 christos tmp_tmpd = SRASI (EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11421 1.1 christos {
11422 1.1 christos SI tmp_oldregval;
11423 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11424 1.1 christos {
11425 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11426 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11427 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11428 1.1 christos }
11429 1.1 christos }
11430 1.1 christos {
11431 1.1 christos {
11432 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11433 1.1 christos CPU (h_nbit) = opval;
11434 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11435 1.1 christos }
11436 1.1 christos {
11437 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11438 1.1 christos CPU (h_zbit) = opval;
11439 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11440 1.1 christos }
11441 1.1 christos SET_H_CBIT_MOVE (0);
11442 1.1 christos SET_H_VBIT_MOVE (0);
11443 1.1 christos {
11444 1.1 christos {
11445 1.1 christos BI opval = 0;
11446 1.1 christos CPU (h_xbit) = opval;
11447 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11448 1.1 christos }
11449 1.1 christos {
11450 1.1 christos BI opval = 0;
11451 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11452 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11453 1.1 christos }
11454 1.1 christos }
11455 1.1 christos }
11456 1.1 christos }
11457 1.1 christos
11458 1.1 christos #undef FLD
11459 1.1 christos }
11460 1.1 christos NEXT (vpc);
11461 1.1 christos
11462 1.1 christos CASE (sem, INSN_ASRR_W_R) : /* asrr.w $Rs,$Rd */
11463 1.1 christos {
11464 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11465 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11466 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11467 1.1 christos int UNUSED written = 0;
11468 1.1 christos IADDR UNUSED pc = abuf->addr;
11469 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11470 1.1 christos
11471 1.1 christos {
11472 1.1 christos HI tmp_tmpd;
11473 1.1 christos SI tmp_cnt1;
11474 1.1 christos SI tmp_cnt2;
11475 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11476 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11477 1.1 christos tmp_tmpd = SRASI (EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11478 1.1 christos {
11479 1.1 christos SI tmp_oldregval;
11480 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11481 1.1 christos {
11482 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11483 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11484 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11485 1.1 christos }
11486 1.1 christos }
11487 1.1 christos {
11488 1.1 christos {
11489 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11490 1.1 christos CPU (h_nbit) = opval;
11491 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11492 1.1 christos }
11493 1.1 christos {
11494 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11495 1.1 christos CPU (h_zbit) = opval;
11496 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11497 1.1 christos }
11498 1.1 christos SET_H_CBIT_MOVE (0);
11499 1.1 christos SET_H_VBIT_MOVE (0);
11500 1.1 christos {
11501 1.1 christos {
11502 1.1 christos BI opval = 0;
11503 1.1 christos CPU (h_xbit) = opval;
11504 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11505 1.1 christos }
11506 1.1 christos {
11507 1.1 christos BI opval = 0;
11508 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11509 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11510 1.1 christos }
11511 1.1 christos }
11512 1.1 christos }
11513 1.1 christos }
11514 1.1 christos
11515 1.1 christos #undef FLD
11516 1.1 christos }
11517 1.1 christos NEXT (vpc);
11518 1.1 christos
11519 1.1 christos CASE (sem, INSN_ASRR_D_R) : /* asrr.d $Rs,$Rd */
11520 1.1 christos {
11521 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11522 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11523 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11524 1.1 christos int UNUSED written = 0;
11525 1.1 christos IADDR UNUSED pc = abuf->addr;
11526 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11527 1.1 christos
11528 1.1 christos {
11529 1.1 christos SI tmp_tmpd;
11530 1.1 christos SI tmp_cnt1;
11531 1.1 christos SI tmp_cnt2;
11532 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11533 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11534 1.1 christos tmp_tmpd = SRASI (EXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11535 1.1 christos {
11536 1.1 christos SI opval = tmp_tmpd;
11537 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11538 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11539 1.1 christos }
11540 1.1 christos {
11541 1.1 christos {
11542 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11543 1.1 christos CPU (h_nbit) = opval;
11544 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11545 1.1 christos }
11546 1.1 christos {
11547 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11548 1.1 christos CPU (h_zbit) = opval;
11549 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11550 1.1 christos }
11551 1.1 christos SET_H_CBIT_MOVE (0);
11552 1.1 christos SET_H_VBIT_MOVE (0);
11553 1.1 christos {
11554 1.1 christos {
11555 1.1 christos BI opval = 0;
11556 1.1 christos CPU (h_xbit) = opval;
11557 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11558 1.1 christos }
11559 1.1 christos {
11560 1.1 christos BI opval = 0;
11561 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11562 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11563 1.1 christos }
11564 1.1 christos }
11565 1.1 christos }
11566 1.1 christos }
11567 1.1 christos
11568 1.1 christos #undef FLD
11569 1.1 christos }
11570 1.1 christos NEXT (vpc);
11571 1.1 christos
11572 1.1 christos CASE (sem, INSN_ASRQ) : /* asrq $c,${Rd} */
11573 1.1 christos {
11574 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11575 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11576 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11577 1.1 christos int UNUSED written = 0;
11578 1.1 christos IADDR UNUSED pc = abuf->addr;
11579 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11580 1.1 christos
11581 1.1 christos {
11582 1.1 christos SI tmp_tmpd;
11583 1.1 christos tmp_tmpd = SRASI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11584 1.1 christos {
11585 1.1 christos SI opval = tmp_tmpd;
11586 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11587 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11588 1.1 christos }
11589 1.1 christos {
11590 1.1 christos {
11591 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11592 1.1 christos CPU (h_nbit) = opval;
11593 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11594 1.1 christos }
11595 1.1 christos {
11596 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11597 1.1 christos CPU (h_zbit) = opval;
11598 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11599 1.1 christos }
11600 1.1 christos SET_H_CBIT_MOVE (0);
11601 1.1 christos SET_H_VBIT_MOVE (0);
11602 1.1 christos {
11603 1.1 christos {
11604 1.1 christos BI opval = 0;
11605 1.1 christos CPU (h_xbit) = opval;
11606 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11607 1.1 christos }
11608 1.1 christos {
11609 1.1 christos BI opval = 0;
11610 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11611 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11612 1.1 christos }
11613 1.1 christos }
11614 1.1 christos }
11615 1.1 christos }
11616 1.1 christos
11617 1.1 christos #undef FLD
11618 1.1 christos }
11619 1.1 christos NEXT (vpc);
11620 1.1 christos
11621 1.1 christos CASE (sem, INSN_LSRR_B_R) : /* lsrr.b $Rs,$Rd */
11622 1.1 christos {
11623 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11624 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11625 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11626 1.1 christos int UNUSED written = 0;
11627 1.1 christos IADDR UNUSED pc = abuf->addr;
11628 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11629 1.1 christos
11630 1.1 christos {
11631 1.1 christos SI tmp_tmpd;
11632 1.1 christos SI tmp_cnt;
11633 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11634 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11635 1.1 christos {
11636 1.1 christos SI tmp_oldregval;
11637 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11638 1.1 christos {
11639 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11640 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11641 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11642 1.1 christos }
11643 1.1 christos }
11644 1.1 christos {
11645 1.1 christos {
11646 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11647 1.1 christos CPU (h_nbit) = opval;
11648 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11649 1.1 christos }
11650 1.1 christos {
11651 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11652 1.1 christos CPU (h_zbit) = opval;
11653 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11654 1.1 christos }
11655 1.1 christos SET_H_CBIT_MOVE (0);
11656 1.1 christos SET_H_VBIT_MOVE (0);
11657 1.1 christos {
11658 1.1 christos {
11659 1.1 christos BI opval = 0;
11660 1.1 christos CPU (h_xbit) = opval;
11661 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11662 1.1 christos }
11663 1.1 christos {
11664 1.1 christos BI opval = 0;
11665 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11666 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11667 1.1 christos }
11668 1.1 christos }
11669 1.1 christos }
11670 1.1 christos }
11671 1.1 christos
11672 1.1 christos #undef FLD
11673 1.1 christos }
11674 1.1 christos NEXT (vpc);
11675 1.1 christos
11676 1.1 christos CASE (sem, INSN_LSRR_W_R) : /* lsrr.w $Rs,$Rd */
11677 1.1 christos {
11678 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11679 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11680 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11681 1.1 christos int UNUSED written = 0;
11682 1.1 christos IADDR UNUSED pc = abuf->addr;
11683 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11684 1.1 christos
11685 1.1 christos {
11686 1.1 christos SI tmp_tmpd;
11687 1.1 christos SI tmp_cnt;
11688 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11689 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11690 1.1 christos {
11691 1.1 christos SI tmp_oldregval;
11692 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11693 1.1 christos {
11694 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11695 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11696 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11697 1.1 christos }
11698 1.1 christos }
11699 1.1 christos {
11700 1.1 christos {
11701 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11702 1.1 christos CPU (h_nbit) = opval;
11703 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11704 1.1 christos }
11705 1.1 christos {
11706 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11707 1.1 christos CPU (h_zbit) = opval;
11708 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11709 1.1 christos }
11710 1.1 christos SET_H_CBIT_MOVE (0);
11711 1.1 christos SET_H_VBIT_MOVE (0);
11712 1.1 christos {
11713 1.1 christos {
11714 1.1 christos BI opval = 0;
11715 1.1 christos CPU (h_xbit) = opval;
11716 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11717 1.1 christos }
11718 1.1 christos {
11719 1.1 christos BI opval = 0;
11720 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11721 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11722 1.1 christos }
11723 1.1 christos }
11724 1.1 christos }
11725 1.1 christos }
11726 1.1 christos
11727 1.1 christos #undef FLD
11728 1.1 christos }
11729 1.1 christos NEXT (vpc);
11730 1.1 christos
11731 1.1 christos CASE (sem, INSN_LSRR_D_R) : /* lsrr.d $Rs,$Rd */
11732 1.1 christos {
11733 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11734 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11735 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11736 1.1 christos int UNUSED written = 0;
11737 1.1 christos IADDR UNUSED pc = abuf->addr;
11738 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11739 1.1 christos
11740 1.1 christos {
11741 1.1 christos SI tmp_tmpd;
11742 1.1 christos SI tmp_cnt;
11743 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11744 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SRLSI (ZEXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11745 1.1 christos {
11746 1.1 christos SI opval = tmp_tmpd;
11747 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11748 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11749 1.1 christos }
11750 1.1 christos {
11751 1.1 christos {
11752 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11753 1.1 christos CPU (h_nbit) = opval;
11754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11755 1.1 christos }
11756 1.1 christos {
11757 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11758 1.1 christos CPU (h_zbit) = opval;
11759 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11760 1.1 christos }
11761 1.1 christos SET_H_CBIT_MOVE (0);
11762 1.1 christos SET_H_VBIT_MOVE (0);
11763 1.1 christos {
11764 1.1 christos {
11765 1.1 christos BI opval = 0;
11766 1.1 christos CPU (h_xbit) = opval;
11767 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11768 1.1 christos }
11769 1.1 christos {
11770 1.1 christos BI opval = 0;
11771 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11772 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11773 1.1 christos }
11774 1.1 christos }
11775 1.1 christos }
11776 1.1 christos }
11777 1.1 christos
11778 1.1 christos #undef FLD
11779 1.1 christos }
11780 1.1 christos NEXT (vpc);
11781 1.1 christos
11782 1.1 christos CASE (sem, INSN_LSRQ) : /* lsrq $c,${Rd} */
11783 1.1 christos {
11784 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11785 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11786 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11787 1.1 christos int UNUSED written = 0;
11788 1.1 christos IADDR UNUSED pc = abuf->addr;
11789 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11790 1.1 christos
11791 1.1 christos {
11792 1.1 christos SI tmp_tmpd;
11793 1.1 christos tmp_tmpd = SRLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11794 1.1 christos {
11795 1.1 christos SI opval = tmp_tmpd;
11796 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11797 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11798 1.1 christos }
11799 1.1 christos {
11800 1.1 christos {
11801 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11802 1.1 christos CPU (h_nbit) = opval;
11803 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11804 1.1 christos }
11805 1.1 christos {
11806 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11807 1.1 christos CPU (h_zbit) = opval;
11808 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11809 1.1 christos }
11810 1.1 christos SET_H_CBIT_MOVE (0);
11811 1.1 christos SET_H_VBIT_MOVE (0);
11812 1.1 christos {
11813 1.1 christos {
11814 1.1 christos BI opval = 0;
11815 1.1 christos CPU (h_xbit) = opval;
11816 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11817 1.1 christos }
11818 1.1 christos {
11819 1.1 christos BI opval = 0;
11820 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11821 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11822 1.1 christos }
11823 1.1 christos }
11824 1.1 christos }
11825 1.1 christos }
11826 1.1 christos
11827 1.1 christos #undef FLD
11828 1.1 christos }
11829 1.1 christos NEXT (vpc);
11830 1.1 christos
11831 1.1 christos CASE (sem, INSN_LSLR_B_R) : /* lslr.b $Rs,$Rd */
11832 1.1 christos {
11833 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11834 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11835 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11836 1.1 christos int UNUSED written = 0;
11837 1.1 christos IADDR UNUSED pc = abuf->addr;
11838 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11839 1.1 christos
11840 1.1 christos {
11841 1.1 christos SI tmp_tmpd;
11842 1.1 christos SI tmp_cnt;
11843 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11844 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11845 1.1 christos {
11846 1.1 christos SI tmp_oldregval;
11847 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11848 1.1 christos {
11849 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11850 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11851 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11852 1.1 christos }
11853 1.1 christos }
11854 1.1 christos {
11855 1.1 christos {
11856 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11857 1.1 christos CPU (h_nbit) = opval;
11858 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11859 1.1 christos }
11860 1.1 christos {
11861 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11862 1.1 christos CPU (h_zbit) = opval;
11863 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11864 1.1 christos }
11865 1.1 christos SET_H_CBIT_MOVE (0);
11866 1.1 christos SET_H_VBIT_MOVE (0);
11867 1.1 christos {
11868 1.1 christos {
11869 1.1 christos BI opval = 0;
11870 1.1 christos CPU (h_xbit) = opval;
11871 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11872 1.1 christos }
11873 1.1 christos {
11874 1.1 christos BI opval = 0;
11875 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11876 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11877 1.1 christos }
11878 1.1 christos }
11879 1.1 christos }
11880 1.1 christos }
11881 1.1 christos
11882 1.1 christos #undef FLD
11883 1.1 christos }
11884 1.1 christos NEXT (vpc);
11885 1.1 christos
11886 1.1 christos CASE (sem, INSN_LSLR_W_R) : /* lslr.w $Rs,$Rd */
11887 1.1 christos {
11888 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11889 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11890 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11891 1.1 christos int UNUSED written = 0;
11892 1.1 christos IADDR UNUSED pc = abuf->addr;
11893 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11894 1.1 christos
11895 1.1 christos {
11896 1.1 christos SI tmp_tmpd;
11897 1.1 christos SI tmp_cnt;
11898 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11899 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11900 1.1 christos {
11901 1.1 christos SI tmp_oldregval;
11902 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11903 1.1 christos {
11904 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11905 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11906 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11907 1.1 christos }
11908 1.1 christos }
11909 1.1 christos {
11910 1.1 christos {
11911 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11912 1.1 christos CPU (h_nbit) = opval;
11913 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11914 1.1 christos }
11915 1.1 christos {
11916 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11917 1.1 christos CPU (h_zbit) = opval;
11918 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11919 1.1 christos }
11920 1.1 christos SET_H_CBIT_MOVE (0);
11921 1.1 christos SET_H_VBIT_MOVE (0);
11922 1.1 christos {
11923 1.1 christos {
11924 1.1 christos BI opval = 0;
11925 1.1 christos CPU (h_xbit) = opval;
11926 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11927 1.1 christos }
11928 1.1 christos {
11929 1.1 christos BI opval = 0;
11930 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11931 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11932 1.1 christos }
11933 1.1 christos }
11934 1.1 christos }
11935 1.1 christos }
11936 1.1 christos
11937 1.1 christos #undef FLD
11938 1.1 christos }
11939 1.1 christos NEXT (vpc);
11940 1.1 christos
11941 1.1 christos CASE (sem, INSN_LSLR_D_R) : /* lslr.d $Rs,$Rd */
11942 1.1 christos {
11943 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11944 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11945 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11946 1.1 christos int UNUSED written = 0;
11947 1.1 christos IADDR UNUSED pc = abuf->addr;
11948 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11949 1.1 christos
11950 1.1 christos {
11951 1.1 christos SI tmp_tmpd;
11952 1.1 christos SI tmp_cnt;
11953 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11954 1.1 christos tmp_tmpd = ((NESI (ANDSI (tmp_cnt, 32), 0)) ? (0) : (SLLSI (ZEXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), ANDSI (tmp_cnt, 31))));
11955 1.1 christos {
11956 1.1 christos SI opval = tmp_tmpd;
11957 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11958 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11959 1.1 christos }
11960 1.1 christos {
11961 1.1 christos {
11962 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11963 1.1 christos CPU (h_nbit) = opval;
11964 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11965 1.1 christos }
11966 1.1 christos {
11967 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11968 1.1 christos CPU (h_zbit) = opval;
11969 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11970 1.1 christos }
11971 1.1 christos SET_H_CBIT_MOVE (0);
11972 1.1 christos SET_H_VBIT_MOVE (0);
11973 1.1 christos {
11974 1.1 christos {
11975 1.1 christos BI opval = 0;
11976 1.1 christos CPU (h_xbit) = opval;
11977 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11978 1.1 christos }
11979 1.1 christos {
11980 1.1 christos BI opval = 0;
11981 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11982 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11983 1.1 christos }
11984 1.1 christos }
11985 1.1 christos }
11986 1.1 christos }
11987 1.1 christos
11988 1.1 christos #undef FLD
11989 1.1 christos }
11990 1.1 christos NEXT (vpc);
11991 1.1 christos
11992 1.1 christos CASE (sem, INSN_LSLQ) : /* lslq $c,${Rd} */
11993 1.1 christos {
11994 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11995 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11996 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11997 1.1 christos int UNUSED written = 0;
11998 1.1 christos IADDR UNUSED pc = abuf->addr;
11999 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12000 1.1 christos
12001 1.1 christos {
12002 1.1 christos SI tmp_tmpd;
12003 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
12004 1.1 christos {
12005 1.1 christos SI opval = tmp_tmpd;
12006 1.1 christos SET_H_GR (FLD (f_operand2), opval);
12007 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
12008 1.1 christos }
12009 1.1 christos {
12010 1.1 christos {
12011 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12012 1.1 christos CPU (h_nbit) = opval;
12013 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12014 1.1 christos }
12015 1.1 christos {
12016 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12017 1.1 christos CPU (h_zbit) = opval;
12018 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12019 1.1 christos }
12020 1.1 christos SET_H_CBIT_MOVE (0);
12021 1.1 christos SET_H_VBIT_MOVE (0);
12022 1.1 christos {
12023 1.1 christos {
12024 1.1 christos BI opval = 0;
12025 1.1 christos CPU (h_xbit) = opval;
12026 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12027 1.1 christos }
12028 1.1 christos {
12029 1.1 christos BI opval = 0;
12030 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12031 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12032 1.1 christos }
12033 1.1 christos }
12034 1.1 christos }
12035 1.1 christos }
12036 1.1 christos
12037 1.1 christos #undef FLD
12038 1.1 christos }
12039 1.1 christos NEXT (vpc);
12040 1.1 christos
12041 1.1 christos CASE (sem, INSN_BTST) : /* $Rs,$Rd */
12042 1.1 christos {
12043 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12044 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12045 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
12046 1.1 christos int UNUSED written = 0;
12047 1.1 christos IADDR UNUSED pc = abuf->addr;
12048 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12049 1.1 christos
12050 1.1 christos {
12051 1.1 christos SI tmp_tmpd;
12052 1.1 christos SI tmp_cnt;
12053 1.11 christos tmp_cnt = SUBSI (31, ANDSI (GET_H_GR (FLD (f_operand1)), 31));
12054 1.11 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), tmp_cnt);
12055 1.1 christos {
12056 1.1 christos {
12057 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12058 1.1 christos CPU (h_nbit) = opval;
12059 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12060 1.1 christos }
12061 1.1 christos {
12062 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12063 1.1 christos CPU (h_zbit) = opval;
12064 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12065 1.1 christos }
12066 1.1 christos SET_H_CBIT_MOVE (0);
12067 1.1 christos SET_H_VBIT_MOVE (0);
12068 1.1 christos {
12069 1.1 christos {
12070 1.1 christos BI opval = 0;
12071 1.1 christos CPU (h_xbit) = opval;
12072 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12073 1.1 christos }
12074 1.1 christos {
12075 1.1 christos BI opval = 0;
12076 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12077 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12078 1.1 christos }
12079 1.1 christos }
12080 1.1 christos }
12081 1.1 christos }
12082 1.1 christos
12083 1.1 christos #undef FLD
12084 1.1 christos }
12085 1.1 christos NEXT (vpc);
12086 1.1 christos
12087 1.1 christos CASE (sem, INSN_BTSTQ) : /* btstq $c,${Rd} */
12088 1.1 christos {
12089 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12090 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12091 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
12092 1.1 christos int UNUSED written = 0;
12093 1.1 christos IADDR UNUSED pc = abuf->addr;
12094 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12095 1.1 christos
12096 1.1 christos {
12097 1.1 christos SI tmp_tmpd;
12098 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, FLD (f_u5)));
12099 1.1 christos {
12100 1.1 christos {
12101 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12102 1.1 christos CPU (h_nbit) = opval;
12103 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12104 1.1 christos }
12105 1.1 christos {
12106 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12107 1.1 christos CPU (h_zbit) = opval;
12108 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12109 1.1 christos }
12110 1.1 christos SET_H_CBIT_MOVE (0);
12111 1.1 christos SET_H_VBIT_MOVE (0);
12112 1.1 christos {
12113 1.1 christos {
12114 1.1 christos BI opval = 0;
12115 1.1 christos CPU (h_xbit) = opval;
12116 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12117 1.1 christos }
12118 1.1 christos {
12119 1.1 christos BI opval = 0;
12120 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12121 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12122 1.1 christos }
12123 1.1 christos }
12124 1.1 christos }
12125 1.1 christos }
12126 1.1 christos
12127 1.1 christos #undef FLD
12128 1.1 christos }
12129 1.1 christos NEXT (vpc);
12130 1.1 christos
12131 1.1 christos CASE (sem, INSN_SETF) : /* setf ${list-of-flags} */
12132 1.1 christos {
12133 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12134 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12135 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12136 1.1 christos int UNUSED written = 0;
12137 1.1 christos IADDR UNUSED pc = abuf->addr;
12138 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12139 1.1 christos
12140 1.1 christos {
12141 1.1 christos SI tmp_tmp;
12142 1.1 christos tmp_tmp = FLD (f_dstsrc);
12143 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12144 1.1 christos {
12145 1.1 christos BI opval = 1;
12146 1.1 christos CPU (h_cbit) = opval;
12147 1.1 christos written |= (1 << 1);
12148 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12149 1.1 christos }
12150 1.1 christos }
12151 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12152 1.1 christos {
12153 1.1 christos BI opval = 1;
12154 1.1 christos CPU (h_vbit) = opval;
12155 1.1 christos written |= (1 << 7);
12156 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12157 1.1 christos }
12158 1.1 christos }
12159 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12160 1.1 christos {
12161 1.1 christos BI opval = 1;
12162 1.1 christos CPU (h_zbit) = opval;
12163 1.1 christos written |= (1 << 9);
12164 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12165 1.1 christos }
12166 1.1 christos }
12167 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12168 1.1 christos {
12169 1.1 christos BI opval = 1;
12170 1.1 christos CPU (h_nbit) = opval;
12171 1.1 christos written |= (1 << 3);
12172 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12173 1.1 christos }
12174 1.1 christos }
12175 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12176 1.1 christos {
12177 1.1 christos BI opval = 1;
12178 1.1 christos CPU (h_xbit) = opval;
12179 1.1 christos written |= (1 << 8);
12180 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12181 1.1 christos }
12182 1.1 christos }
12183 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12184 1.1 christos {
12185 1.1 christos BI opval = 1;
12186 1.1 christos SET_H_IBIT (opval);
12187 1.1 christos written |= (1 << 2);
12188 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12189 1.1 christos }
12190 1.1 christos }
12191 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12192 1.1 christos {
12193 1.1 christos BI opval = 1;
12194 1.1 christos SET_H_UBIT (opval);
12195 1.1 christos written |= (1 << 6);
12196 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12197 1.1 christos }
12198 1.1 christos }
12199 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12200 1.1 christos {
12201 1.1 christos BI opval = 1;
12202 1.1 christos CPU (h_pbit) = opval;
12203 1.1 christos written |= (1 << 4);
12204 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12205 1.1 christos }
12206 1.1 christos }
12207 1.1 christos {
12208 1.1 christos BI opval = 0;
12209 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12210 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12211 1.1 christos }
12212 1.1 christos if (EQSI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12213 1.1 christos {
12214 1.1 christos BI opval = 0;
12215 1.1 christos CPU (h_xbit) = opval;
12216 1.1 christos written |= (1 << 8);
12217 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12218 1.1 christos }
12219 1.1 christos }
12220 1.1 christos }
12221 1.1 christos
12222 1.1 christos abuf->written = written;
12223 1.1 christos #undef FLD
12224 1.1 christos }
12225 1.1 christos NEXT (vpc);
12226 1.1 christos
12227 1.1 christos CASE (sem, INSN_CLEARF) : /* clearf ${list-of-flags} */
12228 1.1 christos {
12229 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12230 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12231 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12232 1.1 christos int UNUSED written = 0;
12233 1.1 christos IADDR UNUSED pc = abuf->addr;
12234 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12235 1.1 christos
12236 1.1 christos {
12237 1.1 christos SI tmp_tmp;
12238 1.1 christos tmp_tmp = FLD (f_dstsrc);
12239 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12240 1.1 christos {
12241 1.1 christos BI opval = 0;
12242 1.1 christos CPU (h_cbit) = opval;
12243 1.1 christos written |= (1 << 1);
12244 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12245 1.1 christos }
12246 1.1 christos }
12247 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12248 1.1 christos {
12249 1.1 christos BI opval = 0;
12250 1.1 christos CPU (h_vbit) = opval;
12251 1.1 christos written |= (1 << 7);
12252 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12253 1.1 christos }
12254 1.1 christos }
12255 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12256 1.1 christos {
12257 1.1 christos BI opval = 0;
12258 1.1 christos CPU (h_zbit) = opval;
12259 1.1 christos written |= (1 << 9);
12260 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12261 1.1 christos }
12262 1.1 christos }
12263 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12264 1.1 christos {
12265 1.1 christos BI opval = 0;
12266 1.1 christos CPU (h_nbit) = opval;
12267 1.1 christos written |= (1 << 3);
12268 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12269 1.1 christos }
12270 1.1 christos }
12271 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12272 1.1 christos {
12273 1.1 christos BI opval = 0;
12274 1.1 christos CPU (h_xbit) = opval;
12275 1.1 christos written |= (1 << 8);
12276 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12277 1.1 christos }
12278 1.1 christos }
12279 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12280 1.1 christos {
12281 1.1 christos BI opval = 0;
12282 1.1 christos SET_H_IBIT (opval);
12283 1.1 christos written |= (1 << 2);
12284 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12285 1.1 christos }
12286 1.1 christos }
12287 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12288 1.1 christos {
12289 1.1 christos BI opval = 0;
12290 1.1 christos SET_H_UBIT (opval);
12291 1.1 christos written |= (1 << 6);
12292 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12293 1.1 christos }
12294 1.1 christos }
12295 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12296 1.1 christos {
12297 1.1 christos BI opval = 0;
12298 1.1 christos CPU (h_pbit) = opval;
12299 1.1 christos written |= (1 << 4);
12300 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12301 1.1 christos }
12302 1.1 christos }
12303 1.1 christos {
12304 1.1 christos {
12305 1.1 christos BI opval = 0;
12306 1.1 christos CPU (h_xbit) = opval;
12307 1.1 christos written |= (1 << 8);
12308 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12309 1.1 christos }
12310 1.1 christos {
12311 1.1 christos BI opval = 0;
12312 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12313 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12314 1.1 christos }
12315 1.1 christos }
12316 1.1 christos }
12317 1.1 christos
12318 1.1 christos abuf->written = written;
12319 1.1 christos #undef FLD
12320 1.1 christos }
12321 1.1 christos NEXT (vpc);
12322 1.1 christos
12323 1.1 christos CASE (sem, INSN_RFE) : /* rfe */
12324 1.1 christos {
12325 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12326 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12327 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12328 1.1 christos int UNUSED written = 0;
12329 1.1 christos IADDR UNUSED pc = abuf->addr;
12330 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12331 1.1 christos
12332 1.1 christos {
12333 1.1 christos USI tmp_oldccs;
12334 1.1 christos USI tmp_samebits;
12335 1.1 christos USI tmp_shiftbits;
12336 1.1 christos USI tmp_keepmask;
12337 1.1 christos BI tmp_p1;
12338 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12339 1.1 christos tmp_keepmask = 0xc0000000;
12340 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12341 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12342 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12343 1.1 christos {
12344 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12345 1.1 christos SET_H_SR (((UINT) 13), opval);
12346 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12347 1.1 christos }
12348 1.1 christos }
12349 1.1 christos
12350 1.1 christos #undef FLD
12351 1.1 christos }
12352 1.1 christos NEXT (vpc);
12353 1.1 christos
12354 1.1 christos CASE (sem, INSN_SFE) : /* sfe */
12355 1.1 christos {
12356 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12357 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12358 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12359 1.1 christos int UNUSED written = 0;
12360 1.1 christos IADDR UNUSED pc = abuf->addr;
12361 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12362 1.1 christos
12363 1.1 christos {
12364 1.1 christos SI tmp_oldccs;
12365 1.1 christos SI tmp_savemask;
12366 1.1 christos tmp_savemask = 0xc0000000;
12367 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12368 1.1 christos {
12369 1.1 christos SI opval = ORSI (ANDSI (tmp_savemask, tmp_oldccs), ANDSI (INVSI (tmp_savemask), SLLSI (tmp_oldccs, 10)));
12370 1.1 christos SET_H_SR (((UINT) 13), opval);
12371 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12372 1.1 christos }
12373 1.1 christos }
12374 1.1 christos
12375 1.1 christos #undef FLD
12376 1.1 christos }
12377 1.1 christos NEXT (vpc);
12378 1.1 christos
12379 1.1 christos CASE (sem, INSN_RFG) : /* rfg */
12380 1.1 christos {
12381 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12382 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12383 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12384 1.1 christos int UNUSED written = 0;
12385 1.1 christos IADDR UNUSED pc = abuf->addr;
12386 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12387 1.1 christos
12388 1.1 christos crisv32f_rfg_handler (current_cpu, pc);
12389 1.1 christos
12390 1.1 christos #undef FLD
12391 1.1 christos }
12392 1.1 christos NEXT (vpc);
12393 1.1 christos
12394 1.1 christos CASE (sem, INSN_RFN) : /* rfn */
12395 1.1 christos {
12396 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12397 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12398 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12399 1.1 christos int UNUSED written = 0;
12400 1.1 christos IADDR UNUSED pc = abuf->addr;
12401 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12402 1.1 christos
12403 1.1 christos {
12404 1.1 christos {
12405 1.1 christos USI tmp_oldccs;
12406 1.1 christos USI tmp_samebits;
12407 1.1 christos USI tmp_shiftbits;
12408 1.1 christos USI tmp_keepmask;
12409 1.1 christos BI tmp_p1;
12410 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12411 1.1 christos tmp_keepmask = 0xc0000000;
12412 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12413 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12414 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12415 1.1 christos {
12416 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12417 1.1 christos SET_H_SR (((UINT) 13), opval);
12418 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12419 1.1 christos }
12420 1.1 christos }
12421 1.1 christos {
12422 1.1 christos BI opval = 1;
12423 1.1 christos SET_H_MBIT (opval);
12424 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
12425 1.1 christos }
12426 1.1 christos }
12427 1.1 christos
12428 1.1 christos #undef FLD
12429 1.1 christos }
12430 1.1 christos NEXT (vpc);
12431 1.1 christos
12432 1.1 christos CASE (sem, INSN_HALT) : /* halt */
12433 1.1 christos {
12434 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12435 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12436 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12437 1.1 christos int UNUSED written = 0;
12438 1.1 christos IADDR UNUSED pc = abuf->addr;
12439 1.1 christos SEM_BRANCH_INIT
12440 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12441 1.1 christos
12442 1.1 christos {
12443 1.1 christos USI opval = crisv32f_halt_handler (current_cpu, pc);
12444 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12445 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12446 1.1 christos }
12447 1.1 christos
12448 1.1 christos SEM_BRANCH_FINI (vpc);
12449 1.1 christos #undef FLD
12450 1.1 christos }
12451 1.1 christos NEXT (vpc);
12452 1.1 christos
12453 1.1 christos CASE (sem, INSN_BCC_B) : /* b${cc} ${o-pcrel} */
12454 1.1 christos {
12455 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12456 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12457 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12458 1.1 christos int UNUSED written = 0;
12459 1.1 christos IADDR UNUSED pc = abuf->addr;
12460 1.1 christos SEM_BRANCH_INIT
12461 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12462 1.1 christos
12463 1.1 christos {
12464 1.1 christos BI tmp_truthval;
12465 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12466 1.1 christos BI tmp_condres;
12467 1.1 christos tmp_tmpcond = FLD (f_operand2);
12468 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12469 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12470 1.1 christos }
12471 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12472 1.1 christos tmp_condres = CPU (h_cbit);
12473 1.1 christos }
12474 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12475 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12476 1.1 christos }
12477 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12478 1.1 christos tmp_condres = CPU (h_zbit);
12479 1.1 christos }
12480 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12481 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12482 1.1 christos }
12483 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12484 1.1 christos tmp_condres = CPU (h_vbit);
12485 1.1 christos }
12486 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12487 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12488 1.1 christos }
12489 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12490 1.1 christos tmp_condres = CPU (h_nbit);
12491 1.1 christos }
12492 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12493 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12494 1.1 christos }
12495 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12496 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12497 1.1 christos }
12498 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12499 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12500 1.1 christos }
12501 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12502 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12503 1.1 christos }
12504 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12505 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12506 1.1 christos }
12507 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12508 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12509 1.1 christos }
12510 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12511 1.1 christos tmp_condres = 1;
12512 1.1 christos }
12513 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12514 1.1 christos tmp_condres = CPU (h_pbit);
12515 1.1 christos }
12516 1.11 christos else {
12517 1.11 christos cgen_rtx_error (current_cpu, "Unknown condition code");
12518 1.11 christos }
12519 1.1 christos ; tmp_condres; });
12520 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_pcrel), tmp_truthval);
12521 1.1 christos {
12522 1.1 christos {
12523 1.1 christos BI opval = 0;
12524 1.1 christos CPU (h_xbit) = opval;
12525 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12526 1.1 christos }
12527 1.1 christos {
12528 1.1 christos BI opval = 0;
12529 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12530 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12531 1.1 christos }
12532 1.1 christos }
12533 1.1 christos if (tmp_truthval) {
12534 1.1 christos {
12535 1.1 christos {
12536 1.1 christos USI opval = FLD (i_o_pcrel);
12537 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12538 1.1 christos written |= (1 << 8);
12539 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12540 1.1 christos }
12541 1.1 christos }
12542 1.1 christos }
12543 1.1 christos }
12544 1.1 christos
12545 1.1 christos abuf->written = written;
12546 1.1 christos SEM_BRANCH_FINI (vpc);
12547 1.1 christos #undef FLD
12548 1.1 christos }
12549 1.1 christos NEXT (vpc);
12550 1.1 christos
12551 1.1 christos CASE (sem, INSN_BA_B) : /* ba ${o-pcrel} */
12552 1.1 christos {
12553 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12554 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12555 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12556 1.1 christos int UNUSED written = 0;
12557 1.1 christos IADDR UNUSED pc = abuf->addr;
12558 1.1 christos SEM_BRANCH_INIT
12559 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12560 1.1 christos
12561 1.1 christos {
12562 1.1 christos {
12563 1.1 christos {
12564 1.1 christos BI opval = 0;
12565 1.1 christos CPU (h_xbit) = opval;
12566 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12567 1.1 christos }
12568 1.1 christos {
12569 1.1 christos BI opval = 0;
12570 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12571 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12572 1.1 christos }
12573 1.1 christos }
12574 1.1 christos {
12575 1.1 christos {
12576 1.1 christos USI opval = FLD (i_o_pcrel);
12577 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12578 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12579 1.1 christos }
12580 1.1 christos }
12581 1.1 christos }
12582 1.1 christos
12583 1.1 christos SEM_BRANCH_FINI (vpc);
12584 1.1 christos #undef FLD
12585 1.1 christos }
12586 1.1 christos NEXT (vpc);
12587 1.1 christos
12588 1.1 christos CASE (sem, INSN_BCC_W) : /* b${cc} ${o-word-pcrel} */
12589 1.1 christos {
12590 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12591 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12592 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12593 1.1 christos int UNUSED written = 0;
12594 1.1 christos IADDR UNUSED pc = abuf->addr;
12595 1.1 christos SEM_BRANCH_INIT
12596 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12597 1.1 christos
12598 1.1 christos {
12599 1.1 christos BI tmp_truthval;
12600 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12601 1.1 christos BI tmp_condres;
12602 1.1 christos tmp_tmpcond = FLD (f_operand2);
12603 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12604 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12605 1.1 christos }
12606 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12607 1.1 christos tmp_condres = CPU (h_cbit);
12608 1.1 christos }
12609 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12610 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12611 1.1 christos }
12612 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12613 1.1 christos tmp_condres = CPU (h_zbit);
12614 1.1 christos }
12615 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12616 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12617 1.1 christos }
12618 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12619 1.1 christos tmp_condres = CPU (h_vbit);
12620 1.1 christos }
12621 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12622 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12623 1.1 christos }
12624 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12625 1.1 christos tmp_condres = CPU (h_nbit);
12626 1.1 christos }
12627 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12628 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12629 1.1 christos }
12630 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12631 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12632 1.1 christos }
12633 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12634 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12635 1.1 christos }
12636 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12637 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12638 1.1 christos }
12639 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12640 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12641 1.1 christos }
12642 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12643 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12644 1.1 christos }
12645 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12646 1.1 christos tmp_condres = 1;
12647 1.1 christos }
12648 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12649 1.1 christos tmp_condres = CPU (h_pbit);
12650 1.1 christos }
12651 1.11 christos else {
12652 1.11 christos cgen_rtx_error (current_cpu, "Unknown condition code");
12653 1.11 christos }
12654 1.1 christos ; tmp_condres; });
12655 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_word_pcrel), tmp_truthval);
12656 1.1 christos {
12657 1.1 christos {
12658 1.1 christos BI opval = 0;
12659 1.1 christos CPU (h_xbit) = opval;
12660 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12661 1.1 christos }
12662 1.1 christos {
12663 1.1 christos BI opval = 0;
12664 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12665 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12666 1.1 christos }
12667 1.1 christos }
12668 1.1 christos if (tmp_truthval) {
12669 1.1 christos {
12670 1.1 christos {
12671 1.1 christos USI opval = FLD (i_o_word_pcrel);
12672 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12673 1.1 christos written |= (1 << 8);
12674 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12675 1.1 christos }
12676 1.1 christos }
12677 1.1 christos }
12678 1.1 christos }
12679 1.1 christos
12680 1.1 christos abuf->written = written;
12681 1.1 christos SEM_BRANCH_FINI (vpc);
12682 1.1 christos #undef FLD
12683 1.1 christos }
12684 1.1 christos NEXT (vpc);
12685 1.1 christos
12686 1.1 christos CASE (sem, INSN_BA_W) : /* ba ${o-word-pcrel} */
12687 1.1 christos {
12688 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12689 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12690 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12691 1.1 christos int UNUSED written = 0;
12692 1.1 christos IADDR UNUSED pc = abuf->addr;
12693 1.1 christos SEM_BRANCH_INIT
12694 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12695 1.1 christos
12696 1.1 christos {
12697 1.1 christos {
12698 1.1 christos {
12699 1.1 christos BI opval = 0;
12700 1.1 christos CPU (h_xbit) = opval;
12701 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12702 1.1 christos }
12703 1.1 christos {
12704 1.1 christos BI opval = 0;
12705 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12706 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12707 1.1 christos }
12708 1.1 christos }
12709 1.1 christos {
12710 1.1 christos {
12711 1.1 christos USI opval = FLD (i_o_word_pcrel);
12712 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12713 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12714 1.1 christos }
12715 1.1 christos }
12716 1.1 christos }
12717 1.1 christos
12718 1.1 christos SEM_BRANCH_FINI (vpc);
12719 1.1 christos #undef FLD
12720 1.1 christos }
12721 1.1 christos NEXT (vpc);
12722 1.1 christos
12723 1.1 christos CASE (sem, INSN_JAS_R) : /* jas ${Rs},${Pd} */
12724 1.1 christos {
12725 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12726 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12727 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12728 1.1 christos int UNUSED written = 0;
12729 1.1 christos IADDR UNUSED pc = abuf->addr;
12730 1.1 christos SEM_BRANCH_INIT
12731 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12732 1.1 christos
12733 1.1 christos {
12734 1.1 christos {
12735 1.1 christos {
12736 1.1 christos BI opval = 0;
12737 1.1 christos CPU (h_xbit) = opval;
12738 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12739 1.1 christos }
12740 1.1 christos {
12741 1.1 christos BI opval = 0;
12742 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12743 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12744 1.1 christos }
12745 1.1 christos }
12746 1.1 christos if (ANDIF (EQSI (FLD (f_operand1), 1), EQSI (FLD (f_operand2), 11))) {
12747 1.1 christos cris_flush_simulator_decode_cache (current_cpu, pc);
12748 1.1 christos }
12749 1.1 christos {
12750 1.1 christos {
12751 1.1 christos {
12752 1.1 christos SI opval = ADDSI (pc, 4);
12753 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12754 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12755 1.1 christos }
12756 1.1 christos {
12757 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12758 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12759 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12760 1.1 christos }
12761 1.1 christos }
12762 1.1 christos }
12763 1.1 christos }
12764 1.1 christos
12765 1.1 christos SEM_BRANCH_FINI (vpc);
12766 1.1 christos #undef FLD
12767 1.1 christos }
12768 1.1 christos NEXT (vpc);
12769 1.1 christos
12770 1.1 christos CASE (sem, INSN_JAS_C) : /* jas ${const32},${Pd} */
12771 1.1 christos {
12772 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12773 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12774 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12775 1.1 christos int UNUSED written = 0;
12776 1.1 christos IADDR UNUSED pc = abuf->addr;
12777 1.1 christos SEM_BRANCH_INIT
12778 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12779 1.1 christos
12780 1.1 christos {
12781 1.1 christos {
12782 1.1 christos {
12783 1.1 christos BI opval = 0;
12784 1.1 christos CPU (h_xbit) = opval;
12785 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12786 1.1 christos }
12787 1.1 christos {
12788 1.1 christos BI opval = 0;
12789 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12790 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12791 1.1 christos }
12792 1.1 christos }
12793 1.1 christos {
12794 1.1 christos {
12795 1.1 christos {
12796 1.1 christos SI opval = ADDSI (pc, 8);
12797 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12798 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12799 1.1 christos }
12800 1.1 christos {
12801 1.1 christos USI opval = FLD (f_indir_pc__dword);
12802 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12803 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12804 1.1 christos }
12805 1.1 christos }
12806 1.1 christos }
12807 1.1 christos }
12808 1.1 christos
12809 1.1 christos SEM_BRANCH_FINI (vpc);
12810 1.1 christos #undef FLD
12811 1.1 christos }
12812 1.1 christos NEXT (vpc);
12813 1.1 christos
12814 1.1 christos CASE (sem, INSN_JUMP_P) : /* jump ${Ps} */
12815 1.1 christos {
12816 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12817 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12818 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
12819 1.1 christos int UNUSED written = 0;
12820 1.1 christos IADDR UNUSED pc = abuf->addr;
12821 1.1 christos SEM_BRANCH_INIT
12822 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12823 1.1 christos
12824 1.1 christos {
12825 1.1 christos {
12826 1.1 christos {
12827 1.1 christos BI opval = 0;
12828 1.1 christos CPU (h_xbit) = opval;
12829 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12830 1.1 christos }
12831 1.1 christos {
12832 1.1 christos BI opval = 0;
12833 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12834 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12835 1.1 christos }
12836 1.1 christos }
12837 1.1 christos {
12838 1.1 christos {
12839 1.1 christos USI opval = GET_H_SR (FLD (f_operand2));
12840 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12841 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12842 1.1 christos }
12843 1.1 christos }
12844 1.1 christos }
12845 1.1 christos
12846 1.1 christos SEM_BRANCH_FINI (vpc);
12847 1.1 christos #undef FLD
12848 1.1 christos }
12849 1.1 christos NEXT (vpc);
12850 1.1 christos
12851 1.1 christos CASE (sem, INSN_BAS_C) : /* bas ${const32},${Pd} */
12852 1.1 christos {
12853 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12854 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12855 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12856 1.1 christos int UNUSED written = 0;
12857 1.1 christos IADDR UNUSED pc = abuf->addr;
12858 1.1 christos SEM_BRANCH_INIT
12859 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12860 1.1 christos
12861 1.1 christos {
12862 1.1 christos {
12863 1.1 christos {
12864 1.1 christos BI opval = 0;
12865 1.1 christos CPU (h_xbit) = opval;
12866 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12867 1.1 christos }
12868 1.1 christos {
12869 1.1 christos BI opval = 0;
12870 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12871 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12872 1.1 christos }
12873 1.1 christos }
12874 1.1 christos {
12875 1.1 christos {
12876 1.1 christos {
12877 1.1 christos SI opval = ADDSI (pc, 8);
12878 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12879 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12880 1.1 christos }
12881 1.1 christos {
12882 1.1 christos USI opval = FLD (i_const32_pcrel);
12883 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12884 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12885 1.1 christos }
12886 1.1 christos }
12887 1.1 christos }
12888 1.1 christos }
12889 1.1 christos
12890 1.1 christos SEM_BRANCH_FINI (vpc);
12891 1.1 christos #undef FLD
12892 1.1 christos }
12893 1.1 christos NEXT (vpc);
12894 1.1 christos
12895 1.1 christos CASE (sem, INSN_JASC_R) : /* jasc ${Rs},${Pd} */
12896 1.1 christos {
12897 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12898 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12899 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12900 1.1 christos int UNUSED written = 0;
12901 1.1 christos IADDR UNUSED pc = abuf->addr;
12902 1.1 christos SEM_BRANCH_INIT
12903 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12904 1.1 christos
12905 1.1 christos {
12906 1.1 christos {
12907 1.1 christos {
12908 1.1 christos BI opval = 0;
12909 1.1 christos CPU (h_xbit) = opval;
12910 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12911 1.1 christos }
12912 1.1 christos {
12913 1.1 christos BI opval = 0;
12914 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12915 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12916 1.1 christos }
12917 1.1 christos }
12918 1.1 christos {
12919 1.1 christos {
12920 1.1 christos {
12921 1.1 christos SI opval = ADDSI (pc, 8);
12922 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12923 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12924 1.1 christos }
12925 1.1 christos {
12926 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12927 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12928 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12929 1.1 christos }
12930 1.1 christos }
12931 1.1 christos }
12932 1.1 christos }
12933 1.1 christos
12934 1.1 christos SEM_BRANCH_FINI (vpc);
12935 1.1 christos #undef FLD
12936 1.1 christos }
12937 1.1 christos NEXT (vpc);
12938 1.1 christos
12939 1.1 christos CASE (sem, INSN_JASC_C) : /* jasc ${const32},${Pd} */
12940 1.1 christos {
12941 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12942 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12943 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12944 1.1 christos int UNUSED written = 0;
12945 1.1 christos IADDR UNUSED pc = abuf->addr;
12946 1.1 christos SEM_BRANCH_INIT
12947 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12948 1.1 christos
12949 1.1 christos {
12950 1.1 christos {
12951 1.1 christos {
12952 1.1 christos BI opval = 0;
12953 1.1 christos CPU (h_xbit) = opval;
12954 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12955 1.1 christos }
12956 1.1 christos {
12957 1.1 christos BI opval = 0;
12958 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12959 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12960 1.1 christos }
12961 1.1 christos }
12962 1.1 christos {
12963 1.1 christos {
12964 1.1 christos {
12965 1.1 christos SI opval = ADDSI (pc, 12);
12966 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12967 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12968 1.1 christos }
12969 1.1 christos {
12970 1.1 christos USI opval = FLD (f_indir_pc__dword);
12971 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12972 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12973 1.1 christos }
12974 1.1 christos }
12975 1.1 christos }
12976 1.1 christos }
12977 1.1 christos
12978 1.1 christos SEM_BRANCH_FINI (vpc);
12979 1.1 christos #undef FLD
12980 1.1 christos }
12981 1.1 christos NEXT (vpc);
12982 1.1 christos
12983 1.1 christos CASE (sem, INSN_BASC_C) : /* basc ${const32},${Pd} */
12984 1.1 christos {
12985 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12986 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12987 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12988 1.1 christos int UNUSED written = 0;
12989 1.1 christos IADDR UNUSED pc = abuf->addr;
12990 1.1 christos SEM_BRANCH_INIT
12991 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12992 1.1 christos
12993 1.1 christos {
12994 1.1 christos {
12995 1.1 christos {
12996 1.1 christos BI opval = 0;
12997 1.1 christos CPU (h_xbit) = opval;
12998 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12999 1.1 christos }
13000 1.1 christos {
13001 1.1 christos BI opval = 0;
13002 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13003 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13004 1.1 christos }
13005 1.1 christos }
13006 1.1 christos {
13007 1.1 christos {
13008 1.1 christos {
13009 1.1 christos SI opval = ADDSI (pc, 12);
13010 1.1 christos SET_H_SR (FLD (f_operand2), opval);
13011 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
13012 1.1 christos }
13013 1.1 christos {
13014 1.1 christos USI opval = FLD (i_const32_pcrel);
13015 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13016 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13017 1.1 christos }
13018 1.1 christos }
13019 1.1 christos }
13020 1.1 christos }
13021 1.1 christos
13022 1.1 christos SEM_BRANCH_FINI (vpc);
13023 1.1 christos #undef FLD
13024 1.1 christos }
13025 1.1 christos NEXT (vpc);
13026 1.1 christos
13027 1.1 christos CASE (sem, INSN_BREAK) : /* break $n */
13028 1.1 christos {
13029 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13030 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13031 1.1 christos #define FLD(f) abuf->fields.sfmt_break.f
13032 1.1 christos int UNUSED written = 0;
13033 1.1 christos IADDR UNUSED pc = abuf->addr;
13034 1.1 christos SEM_BRANCH_INIT
13035 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13036 1.1 christos
13037 1.1 christos {
13038 1.1 christos {
13039 1.1 christos {
13040 1.1 christos BI opval = 0;
13041 1.1 christos CPU (h_xbit) = opval;
13042 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13043 1.1 christos }
13044 1.1 christos {
13045 1.1 christos BI opval = 0;
13046 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13047 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13048 1.1 christos }
13049 1.1 christos }
13050 1.1 christos {
13051 1.1 christos USI opval = crisv32f_break_handler (current_cpu, FLD (f_u4), pc);
13052 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13053 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13054 1.1 christos }
13055 1.1 christos }
13056 1.1 christos
13057 1.1 christos SEM_BRANCH_FINI (vpc);
13058 1.1 christos #undef FLD
13059 1.1 christos }
13060 1.1 christos NEXT (vpc);
13061 1.1 christos
13062 1.1 christos CASE (sem, INSN_BOUND_R_B_R) : /* bound-r.b ${Rs},${Rd} */
13063 1.1 christos {
13064 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13065 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13066 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13067 1.1 christos int UNUSED written = 0;
13068 1.1 christos IADDR UNUSED pc = abuf->addr;
13069 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13070 1.1 christos
13071 1.1 christos {
13072 1.1 christos SI tmp_tmpopd;
13073 1.1 christos SI tmp_tmpops;
13074 1.1 christos SI tmp_newval;
13075 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
13076 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13077 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13078 1.1 christos {
13079 1.1 christos SI opval = tmp_newval;
13080 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13081 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13082 1.1 christos }
13083 1.1 christos {
13084 1.1 christos {
13085 1.1 christos BI opval = LTSI (tmp_newval, 0);
13086 1.1 christos CPU (h_nbit) = opval;
13087 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13088 1.1 christos }
13089 1.1 christos {
13090 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13091 1.1 christos CPU (h_zbit) = opval;
13092 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13093 1.1 christos }
13094 1.1 christos SET_H_CBIT_MOVE (0);
13095 1.1 christos SET_H_VBIT_MOVE (0);
13096 1.1 christos {
13097 1.1 christos {
13098 1.1 christos BI opval = 0;
13099 1.1 christos CPU (h_xbit) = opval;
13100 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13101 1.1 christos }
13102 1.1 christos {
13103 1.1 christos BI opval = 0;
13104 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13105 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13106 1.1 christos }
13107 1.1 christos }
13108 1.1 christos }
13109 1.1 christos }
13110 1.1 christos
13111 1.1 christos #undef FLD
13112 1.1 christos }
13113 1.1 christos NEXT (vpc);
13114 1.1 christos
13115 1.1 christos CASE (sem, INSN_BOUND_R_W_R) : /* bound-r.w ${Rs},${Rd} */
13116 1.1 christos {
13117 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13118 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13119 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13120 1.1 christos int UNUSED written = 0;
13121 1.1 christos IADDR UNUSED pc = abuf->addr;
13122 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13123 1.1 christos
13124 1.1 christos {
13125 1.1 christos SI tmp_tmpopd;
13126 1.1 christos SI tmp_tmpops;
13127 1.1 christos SI tmp_newval;
13128 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
13129 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13130 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13131 1.1 christos {
13132 1.1 christos SI opval = tmp_newval;
13133 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13134 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13135 1.1 christos }
13136 1.1 christos {
13137 1.1 christos {
13138 1.1 christos BI opval = LTSI (tmp_newval, 0);
13139 1.1 christos CPU (h_nbit) = opval;
13140 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13141 1.1 christos }
13142 1.1 christos {
13143 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13144 1.1 christos CPU (h_zbit) = opval;
13145 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13146 1.1 christos }
13147 1.1 christos SET_H_CBIT_MOVE (0);
13148 1.1 christos SET_H_VBIT_MOVE (0);
13149 1.1 christos {
13150 1.1 christos {
13151 1.1 christos BI opval = 0;
13152 1.1 christos CPU (h_xbit) = opval;
13153 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13154 1.1 christos }
13155 1.1 christos {
13156 1.1 christos BI opval = 0;
13157 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13158 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13159 1.1 christos }
13160 1.1 christos }
13161 1.1 christos }
13162 1.1 christos }
13163 1.1 christos
13164 1.1 christos #undef FLD
13165 1.1 christos }
13166 1.1 christos NEXT (vpc);
13167 1.1 christos
13168 1.1 christos CASE (sem, INSN_BOUND_R_D_R) : /* bound-r.d ${Rs},${Rd} */
13169 1.1 christos {
13170 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13171 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13172 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13173 1.1 christos int UNUSED written = 0;
13174 1.1 christos IADDR UNUSED pc = abuf->addr;
13175 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13176 1.1 christos
13177 1.1 christos {
13178 1.1 christos SI tmp_tmpopd;
13179 1.1 christos SI tmp_tmpops;
13180 1.1 christos SI tmp_newval;
13181 1.1 christos tmp_tmpops = TRUNCSISI (GET_H_GR (FLD (f_operand1)));
13182 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13183 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13184 1.1 christos {
13185 1.1 christos SI opval = tmp_newval;
13186 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13187 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13188 1.1 christos }
13189 1.1 christos {
13190 1.1 christos {
13191 1.1 christos BI opval = LTSI (tmp_newval, 0);
13192 1.1 christos CPU (h_nbit) = opval;
13193 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13194 1.1 christos }
13195 1.1 christos {
13196 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13197 1.1 christos CPU (h_zbit) = opval;
13198 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13199 1.1 christos }
13200 1.1 christos SET_H_CBIT_MOVE (0);
13201 1.1 christos SET_H_VBIT_MOVE (0);
13202 1.1 christos {
13203 1.1 christos {
13204 1.1 christos BI opval = 0;
13205 1.1 christos CPU (h_xbit) = opval;
13206 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13207 1.1 christos }
13208 1.1 christos {
13209 1.1 christos BI opval = 0;
13210 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13211 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13212 1.1 christos }
13213 1.1 christos }
13214 1.1 christos }
13215 1.1 christos }
13216 1.1 christos
13217 1.1 christos #undef FLD
13218 1.1 christos }
13219 1.1 christos NEXT (vpc);
13220 1.1 christos
13221 1.1 christos CASE (sem, INSN_BOUND_CB) : /* bound.b [PC+],${Rd} */
13222 1.1 christos {
13223 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13224 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13225 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13226 1.1 christos int UNUSED written = 0;
13227 1.1 christos IADDR UNUSED pc = abuf->addr;
13228 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13229 1.1 christos
13230 1.1 christos {
13231 1.1 christos SI tmp_tmpopd;
13232 1.1 christos SI tmp_tmpops;
13233 1.1 christos SI tmp_newval;
13234 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
13235 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13236 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13237 1.1 christos {
13238 1.1 christos SI opval = tmp_newval;
13239 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13240 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13241 1.1 christos }
13242 1.1 christos {
13243 1.1 christos {
13244 1.1 christos BI opval = LTSI (tmp_newval, 0);
13245 1.1 christos CPU (h_nbit) = opval;
13246 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13247 1.1 christos }
13248 1.1 christos {
13249 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13250 1.1 christos CPU (h_zbit) = opval;
13251 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13252 1.1 christos }
13253 1.1 christos SET_H_CBIT_MOVE (0);
13254 1.1 christos SET_H_VBIT_MOVE (0);
13255 1.1 christos {
13256 1.1 christos {
13257 1.1 christos BI opval = 0;
13258 1.1 christos CPU (h_xbit) = opval;
13259 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13260 1.1 christos }
13261 1.1 christos {
13262 1.1 christos BI opval = 0;
13263 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13264 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13265 1.1 christos }
13266 1.1 christos }
13267 1.1 christos }
13268 1.1 christos }
13269 1.1 christos
13270 1.1 christos #undef FLD
13271 1.1 christos }
13272 1.1 christos NEXT (vpc);
13273 1.1 christos
13274 1.1 christos CASE (sem, INSN_BOUND_CW) : /* bound.w [PC+],${Rd} */
13275 1.1 christos {
13276 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13277 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13278 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13279 1.1 christos int UNUSED written = 0;
13280 1.1 christos IADDR UNUSED pc = abuf->addr;
13281 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13282 1.1 christos
13283 1.1 christos {
13284 1.1 christos SI tmp_tmpopd;
13285 1.1 christos SI tmp_tmpops;
13286 1.1 christos SI tmp_newval;
13287 1.1 christos tmp_tmpops = ZEXTSISI (FLD (f_indir_pc__word));
13288 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13289 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13290 1.1 christos {
13291 1.1 christos SI opval = tmp_newval;
13292 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13293 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13294 1.1 christos }
13295 1.1 christos {
13296 1.1 christos {
13297 1.1 christos BI opval = LTSI (tmp_newval, 0);
13298 1.1 christos CPU (h_nbit) = opval;
13299 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13300 1.1 christos }
13301 1.1 christos {
13302 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13303 1.1 christos CPU (h_zbit) = opval;
13304 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13305 1.1 christos }
13306 1.1 christos SET_H_CBIT_MOVE (0);
13307 1.1 christos SET_H_VBIT_MOVE (0);
13308 1.1 christos {
13309 1.1 christos {
13310 1.1 christos BI opval = 0;
13311 1.1 christos CPU (h_xbit) = opval;
13312 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13313 1.1 christos }
13314 1.1 christos {
13315 1.1 christos BI opval = 0;
13316 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13317 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13318 1.1 christos }
13319 1.1 christos }
13320 1.1 christos }
13321 1.1 christos }
13322 1.1 christos
13323 1.1 christos #undef FLD
13324 1.1 christos }
13325 1.1 christos NEXT (vpc);
13326 1.1 christos
13327 1.1 christos CASE (sem, INSN_BOUND_CD) : /* bound.d [PC+],${Rd} */
13328 1.1 christos {
13329 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13330 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13331 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13332 1.1 christos int UNUSED written = 0;
13333 1.1 christos IADDR UNUSED pc = abuf->addr;
13334 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13335 1.1 christos
13336 1.1 christos {
13337 1.1 christos SI tmp_tmpopd;
13338 1.1 christos SI tmp_tmpops;
13339 1.1 christos SI tmp_newval;
13340 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
13341 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13342 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13343 1.1 christos {
13344 1.1 christos SI opval = tmp_newval;
13345 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13346 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13347 1.1 christos }
13348 1.1 christos {
13349 1.1 christos {
13350 1.1 christos BI opval = LTSI (tmp_newval, 0);
13351 1.1 christos CPU (h_nbit) = opval;
13352 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13353 1.1 christos }
13354 1.1 christos {
13355 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13356 1.1 christos CPU (h_zbit) = opval;
13357 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13358 1.1 christos }
13359 1.1 christos SET_H_CBIT_MOVE (0);
13360 1.1 christos SET_H_VBIT_MOVE (0);
13361 1.1 christos {
13362 1.1 christos {
13363 1.1 christos BI opval = 0;
13364 1.1 christos CPU (h_xbit) = opval;
13365 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13366 1.1 christos }
13367 1.1 christos {
13368 1.1 christos BI opval = 0;
13369 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13370 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13371 1.1 christos }
13372 1.1 christos }
13373 1.1 christos }
13374 1.1 christos }
13375 1.1 christos
13376 1.1 christos #undef FLD
13377 1.1 christos }
13378 1.1 christos NEXT (vpc);
13379 1.1 christos
13380 1.1 christos CASE (sem, INSN_SCC) : /* s${cc} ${Rd-sfield} */
13381 1.1 christos {
13382 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13383 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13384 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
13385 1.1 christos int UNUSED written = 0;
13386 1.1 christos IADDR UNUSED pc = abuf->addr;
13387 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13388 1.1 christos
13389 1.1 christos {
13390 1.1 christos BI tmp_truthval;
13391 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
13392 1.1 christos BI tmp_condres;
13393 1.1 christos tmp_tmpcond = FLD (f_operand2);
13394 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
13395 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
13396 1.1 christos }
13397 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
13398 1.1 christos tmp_condres = CPU (h_cbit);
13399 1.1 christos }
13400 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
13401 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
13402 1.1 christos }
13403 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
13404 1.1 christos tmp_condres = CPU (h_zbit);
13405 1.1 christos }
13406 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
13407 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
13408 1.1 christos }
13409 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
13410 1.1 christos tmp_condres = CPU (h_vbit);
13411 1.1 christos }
13412 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
13413 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
13414 1.1 christos }
13415 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
13416 1.1 christos tmp_condres = CPU (h_nbit);
13417 1.1 christos }
13418 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
13419 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
13420 1.1 christos }
13421 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
13422 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
13423 1.1 christos }
13424 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
13425 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
13426 1.1 christos }
13427 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
13428 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
13429 1.1 christos }
13430 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
13431 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
13432 1.1 christos }
13433 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
13434 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
13435 1.1 christos }
13436 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
13437 1.1 christos tmp_condres = 1;
13438 1.1 christos }
13439 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
13440 1.1 christos tmp_condres = CPU (h_pbit);
13441 1.1 christos }
13442 1.11 christos else {
13443 1.11 christos cgen_rtx_error (current_cpu, "Unknown condition code");
13444 1.11 christos }
13445 1.1 christos ; tmp_condres; });
13446 1.1 christos {
13447 1.1 christos SI opval = ZEXTBISI (tmp_truthval);
13448 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13449 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13450 1.1 christos }
13451 1.1 christos {
13452 1.1 christos {
13453 1.1 christos BI opval = 0;
13454 1.1 christos CPU (h_xbit) = opval;
13455 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13456 1.1 christos }
13457 1.1 christos {
13458 1.1 christos BI opval = 0;
13459 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13460 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13461 1.1 christos }
13462 1.1 christos }
13463 1.1 christos }
13464 1.1 christos
13465 1.1 christos #undef FLD
13466 1.1 christos }
13467 1.1 christos NEXT (vpc);
13468 1.1 christos
13469 1.1 christos CASE (sem, INSN_LZ) : /* lz ${Rs},${Rd} */
13470 1.1 christos {
13471 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13472 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13473 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13474 1.1 christos int UNUSED written = 0;
13475 1.1 christos IADDR UNUSED pc = abuf->addr;
13476 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13477 1.1 christos
13478 1.1 christos {
13479 1.1 christos SI tmp_tmpd;
13480 1.1 christos SI tmp_tmp;
13481 1.1 christos tmp_tmp = GET_H_GR (FLD (f_operand1));
13482 1.1 christos tmp_tmpd = 0;
13483 1.1 christos {
13484 1.1 christos if (GESI (tmp_tmp, 0)) {
13485 1.1 christos {
13486 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13487 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13488 1.1 christos }
13489 1.1 christos }
13490 1.1 christos if (GESI (tmp_tmp, 0)) {
13491 1.1 christos {
13492 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13493 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13494 1.1 christos }
13495 1.1 christos }
13496 1.1 christos if (GESI (tmp_tmp, 0)) {
13497 1.1 christos {
13498 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13499 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13500 1.1 christos }
13501 1.1 christos }
13502 1.1 christos if (GESI (tmp_tmp, 0)) {
13503 1.1 christos {
13504 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13505 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13506 1.1 christos }
13507 1.1 christos }
13508 1.1 christos if (GESI (tmp_tmp, 0)) {
13509 1.1 christos {
13510 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13511 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13512 1.1 christos }
13513 1.1 christos }
13514 1.1 christos if (GESI (tmp_tmp, 0)) {
13515 1.1 christos {
13516 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13517 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13518 1.1 christos }
13519 1.1 christos }
13520 1.1 christos if (GESI (tmp_tmp, 0)) {
13521 1.1 christos {
13522 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13523 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13524 1.1 christos }
13525 1.1 christos }
13526 1.1 christos if (GESI (tmp_tmp, 0)) {
13527 1.1 christos {
13528 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13529 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13530 1.1 christos }
13531 1.1 christos }
13532 1.1 christos if (GESI (tmp_tmp, 0)) {
13533 1.1 christos {
13534 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13535 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13536 1.1 christos }
13537 1.1 christos }
13538 1.1 christos if (GESI (tmp_tmp, 0)) {
13539 1.1 christos {
13540 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13541 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13542 1.1 christos }
13543 1.1 christos }
13544 1.1 christos if (GESI (tmp_tmp, 0)) {
13545 1.1 christos {
13546 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13547 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13548 1.1 christos }
13549 1.1 christos }
13550 1.1 christos if (GESI (tmp_tmp, 0)) {
13551 1.1 christos {
13552 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13553 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13554 1.1 christos }
13555 1.1 christos }
13556 1.1 christos if (GESI (tmp_tmp, 0)) {
13557 1.1 christos {
13558 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13559 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13560 1.1 christos }
13561 1.1 christos }
13562 1.1 christos if (GESI (tmp_tmp, 0)) {
13563 1.1 christos {
13564 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13565 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13566 1.1 christos }
13567 1.1 christos }
13568 1.1 christos if (GESI (tmp_tmp, 0)) {
13569 1.1 christos {
13570 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13571 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13572 1.1 christos }
13573 1.1 christos }
13574 1.1 christos if (GESI (tmp_tmp, 0)) {
13575 1.1 christos {
13576 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13577 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13578 1.1 christos }
13579 1.1 christos }
13580 1.1 christos if (GESI (tmp_tmp, 0)) {
13581 1.1 christos {
13582 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13583 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13584 1.1 christos }
13585 1.1 christos }
13586 1.1 christos if (GESI (tmp_tmp, 0)) {
13587 1.1 christos {
13588 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13589 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13590 1.1 christos }
13591 1.1 christos }
13592 1.1 christos if (GESI (tmp_tmp, 0)) {
13593 1.1 christos {
13594 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13595 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13596 1.1 christos }
13597 1.1 christos }
13598 1.1 christos if (GESI (tmp_tmp, 0)) {
13599 1.1 christos {
13600 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13601 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13602 1.1 christos }
13603 1.1 christos }
13604 1.1 christos if (GESI (tmp_tmp, 0)) {
13605 1.1 christos {
13606 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13607 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13608 1.1 christos }
13609 1.1 christos }
13610 1.1 christos if (GESI (tmp_tmp, 0)) {
13611 1.1 christos {
13612 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13613 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13614 1.1 christos }
13615 1.1 christos }
13616 1.1 christos if (GESI (tmp_tmp, 0)) {
13617 1.1 christos {
13618 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13619 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13620 1.1 christos }
13621 1.1 christos }
13622 1.1 christos if (GESI (tmp_tmp, 0)) {
13623 1.1 christos {
13624 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13625 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13626 1.1 christos }
13627 1.1 christos }
13628 1.1 christos if (GESI (tmp_tmp, 0)) {
13629 1.1 christos {
13630 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13631 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13632 1.1 christos }
13633 1.1 christos }
13634 1.1 christos if (GESI (tmp_tmp, 0)) {
13635 1.1 christos {
13636 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13637 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13638 1.1 christos }
13639 1.1 christos }
13640 1.1 christos if (GESI (tmp_tmp, 0)) {
13641 1.1 christos {
13642 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13643 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13644 1.1 christos }
13645 1.1 christos }
13646 1.1 christos if (GESI (tmp_tmp, 0)) {
13647 1.1 christos {
13648 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13649 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13650 1.1 christos }
13651 1.1 christos }
13652 1.1 christos if (GESI (tmp_tmp, 0)) {
13653 1.1 christos {
13654 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13655 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13656 1.1 christos }
13657 1.1 christos }
13658 1.1 christos if (GESI (tmp_tmp, 0)) {
13659 1.1 christos {
13660 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13661 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13662 1.1 christos }
13663 1.1 christos }
13664 1.1 christos if (GESI (tmp_tmp, 0)) {
13665 1.1 christos {
13666 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13667 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13668 1.1 christos }
13669 1.1 christos }
13670 1.1 christos if (GESI (tmp_tmp, 0)) {
13671 1.1 christos {
13672 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13673 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13674 1.1 christos }
13675 1.1 christos }
13676 1.1 christos }
13677 1.1 christos {
13678 1.1 christos SI opval = tmp_tmpd;
13679 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13680 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13681 1.1 christos }
13682 1.1 christos {
13683 1.1 christos {
13684 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
13685 1.1 christos CPU (h_nbit) = opval;
13686 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13687 1.1 christos }
13688 1.1 christos {
13689 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13690 1.1 christos CPU (h_zbit) = opval;
13691 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13692 1.1 christos }
13693 1.1 christos SET_H_CBIT_MOVE (0);
13694 1.1 christos SET_H_VBIT_MOVE (0);
13695 1.1 christos {
13696 1.1 christos {
13697 1.1 christos BI opval = 0;
13698 1.1 christos CPU (h_xbit) = opval;
13699 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13700 1.1 christos }
13701 1.1 christos {
13702 1.1 christos BI opval = 0;
13703 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13704 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13705 1.1 christos }
13706 1.1 christos }
13707 1.1 christos }
13708 1.1 christos }
13709 1.1 christos
13710 1.1 christos #undef FLD
13711 1.1 christos }
13712 1.1 christos NEXT (vpc);
13713 1.1 christos
13714 1.1 christos CASE (sem, INSN_ADDOQ) : /* addoq $o,$Rs,ACR */
13715 1.1 christos {
13716 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13717 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13718 1.1 christos #define FLD(f) abuf->fields.sfmt_addoq.f
13719 1.1 christos int UNUSED written = 0;
13720 1.1 christos IADDR UNUSED pc = abuf->addr;
13721 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13722 1.1 christos
13723 1.1 christos {
13724 1.1 christos {
13725 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s8));
13726 1.1 christos SET_H_PREFIXREG_V32 (opval);
13727 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13728 1.1 christos }
13729 1.1 christos {
13730 1.1 christos BI opval = 1;
13731 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13732 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13733 1.1 christos }
13734 1.1 christos }
13735 1.1 christos
13736 1.1 christos #undef FLD
13737 1.1 christos }
13738 1.1 christos NEXT (vpc);
13739 1.1 christos
13740 1.1 christos CASE (sem, INSN_ADDO_M_B_M) : /* addo-m.b [${Rs}${inc}],$Rd,ACR */
13741 1.1 christos {
13742 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13743 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13744 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13745 1.1 christos int UNUSED written = 0;
13746 1.1 christos IADDR UNUSED pc = abuf->addr;
13747 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13748 1.1 christos
13749 1.1 christos {
13750 1.1 christos QI tmp_tmps;
13751 1.1 christos tmp_tmps = ({ SI tmp_addr;
13752 1.1 christos QI tmp_tmp_mem;
13753 1.1 christos BI tmp_postinc;
13754 1.1 christos tmp_postinc = FLD (f_memmode);
13755 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13756 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
13757 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13758 1.1 christos {
13759 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13760 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
13761 1.1 christos }
13762 1.1 christos {
13763 1.1 christos SI opval = tmp_addr;
13764 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13765 1.1 christos written |= (1 << 6);
13766 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13767 1.1 christos }
13768 1.1 christos }
13769 1.1 christos }
13770 1.1 christos ; tmp_tmp_mem; });
13771 1.1 christos {
13772 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (tmp_tmps));
13773 1.1 christos SET_H_PREFIXREG_V32 (opval);
13774 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13775 1.1 christos }
13776 1.1 christos {
13777 1.1 christos BI opval = 1;
13778 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13779 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13780 1.1 christos }
13781 1.1 christos }
13782 1.1 christos
13783 1.1 christos abuf->written = written;
13784 1.1 christos #undef FLD
13785 1.1 christos }
13786 1.1 christos NEXT (vpc);
13787 1.1 christos
13788 1.1 christos CASE (sem, INSN_ADDO_M_W_M) : /* addo-m.w [${Rs}${inc}],$Rd,ACR */
13789 1.1 christos {
13790 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13791 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13792 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13793 1.1 christos int UNUSED written = 0;
13794 1.1 christos IADDR UNUSED pc = abuf->addr;
13795 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13796 1.1 christos
13797 1.1 christos {
13798 1.1 christos HI tmp_tmps;
13799 1.1 christos tmp_tmps = ({ SI tmp_addr;
13800 1.1 christos HI tmp_tmp_mem;
13801 1.1 christos BI tmp_postinc;
13802 1.1 christos tmp_postinc = FLD (f_memmode);
13803 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13804 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
13805 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13806 1.1 christos {
13807 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13808 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
13809 1.1 christos }
13810 1.1 christos {
13811 1.1 christos SI opval = tmp_addr;
13812 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13813 1.1 christos written |= (1 << 6);
13814 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13815 1.1 christos }
13816 1.1 christos }
13817 1.1 christos }
13818 1.1 christos ; tmp_tmp_mem; });
13819 1.1 christos {
13820 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (tmp_tmps));
13821 1.1 christos SET_H_PREFIXREG_V32 (opval);
13822 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13823 1.1 christos }
13824 1.1 christos {
13825 1.1 christos BI opval = 1;
13826 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13827 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13828 1.1 christos }
13829 1.1 christos }
13830 1.1 christos
13831 1.1 christos abuf->written = written;
13832 1.1 christos #undef FLD
13833 1.1 christos }
13834 1.1 christos NEXT (vpc);
13835 1.1 christos
13836 1.1 christos CASE (sem, INSN_ADDO_M_D_M) : /* addo-m.d [${Rs}${inc}],$Rd,ACR */
13837 1.1 christos {
13838 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13839 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13840 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13841 1.1 christos int UNUSED written = 0;
13842 1.1 christos IADDR UNUSED pc = abuf->addr;
13843 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13844 1.1 christos
13845 1.1 christos {
13846 1.1 christos SI tmp_tmps;
13847 1.1 christos tmp_tmps = ({ SI tmp_addr;
13848 1.1 christos SI tmp_tmp_mem;
13849 1.1 christos BI tmp_postinc;
13850 1.1 christos tmp_postinc = FLD (f_memmode);
13851 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13852 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
13853 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13854 1.1 christos {
13855 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13856 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
13857 1.1 christos }
13858 1.1 christos {
13859 1.1 christos SI opval = tmp_addr;
13860 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13861 1.1 christos written |= (1 << 6);
13862 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13863 1.1 christos }
13864 1.1 christos }
13865 1.1 christos }
13866 1.1 christos ; tmp_tmp_mem; });
13867 1.1 christos {
13868 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), tmp_tmps);
13869 1.1 christos SET_H_PREFIXREG_V32 (opval);
13870 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13871 1.1 christos }
13872 1.1 christos {
13873 1.1 christos BI opval = 1;
13874 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13875 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13876 1.1 christos }
13877 1.1 christos }
13878 1.1 christos
13879 1.1 christos abuf->written = written;
13880 1.1 christos #undef FLD
13881 1.1 christos }
13882 1.1 christos NEXT (vpc);
13883 1.1 christos
13884 1.1 christos CASE (sem, INSN_ADDO_CB) : /* addo.b [PC+],$Rd,ACR */
13885 1.1 christos {
13886 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13887 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13888 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13889 1.1 christos int UNUSED written = 0;
13890 1.1 christos IADDR UNUSED pc = abuf->addr;
13891 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13892 1.1 christos
13893 1.1 christos {
13894 1.1 christos {
13895 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))));
13896 1.1 christos SET_H_PREFIXREG_V32 (opval);
13897 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13898 1.1 christos }
13899 1.1 christos {
13900 1.1 christos BI opval = 1;
13901 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13902 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13903 1.1 christos }
13904 1.1 christos }
13905 1.1 christos
13906 1.1 christos #undef FLD
13907 1.1 christos }
13908 1.1 christos NEXT (vpc);
13909 1.1 christos
13910 1.1 christos CASE (sem, INSN_ADDO_CW) : /* addo.w [PC+],$Rd,ACR */
13911 1.1 christos {
13912 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13913 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13914 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13915 1.1 christos int UNUSED written = 0;
13916 1.1 christos IADDR UNUSED pc = abuf->addr;
13917 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13918 1.1 christos
13919 1.1 christos {
13920 1.1 christos {
13921 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))));
13922 1.1 christos SET_H_PREFIXREG_V32 (opval);
13923 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13924 1.1 christos }
13925 1.1 christos {
13926 1.1 christos BI opval = 1;
13927 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13928 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13929 1.1 christos }
13930 1.1 christos }
13931 1.1 christos
13932 1.1 christos #undef FLD
13933 1.1 christos }
13934 1.1 christos NEXT (vpc);
13935 1.1 christos
13936 1.1 christos CASE (sem, INSN_ADDO_CD) : /* addo.d [PC+],$Rd,ACR */
13937 1.1 christos {
13938 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13939 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13940 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13941 1.1 christos int UNUSED written = 0;
13942 1.1 christos IADDR UNUSED pc = abuf->addr;
13943 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13944 1.1 christos
13945 1.1 christos {
13946 1.1 christos {
13947 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
13948 1.1 christos SET_H_PREFIXREG_V32 (opval);
13949 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13950 1.1 christos }
13951 1.1 christos {
13952 1.1 christos BI opval = 1;
13953 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13954 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13955 1.1 christos }
13956 1.1 christos }
13957 1.1 christos
13958 1.1 christos #undef FLD
13959 1.1 christos }
13960 1.1 christos NEXT (vpc);
13961 1.1 christos
13962 1.1 christos CASE (sem, INSN_ADDI_ACR_B_R) : /* addi-acr.b ${Rs-dfield}.m,${Rd-sfield},ACR */
13963 1.1 christos {
13964 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13965 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13966 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13967 1.1 christos int UNUSED written = 0;
13968 1.1 christos IADDR UNUSED pc = abuf->addr;
13969 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13970 1.1 christos
13971 1.1 christos {
13972 1.1 christos {
13973 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
13974 1.1 christos SET_H_PREFIXREG_V32 (opval);
13975 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13976 1.1 christos }
13977 1.1 christos {
13978 1.1 christos BI opval = 1;
13979 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13980 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13981 1.1 christos }
13982 1.1 christos }
13983 1.1 christos
13984 1.1 christos #undef FLD
13985 1.1 christos }
13986 1.1 christos NEXT (vpc);
13987 1.1 christos
13988 1.1 christos CASE (sem, INSN_ADDI_ACR_W_R) : /* addi-acr.w ${Rs-dfield}.m,${Rd-sfield},ACR */
13989 1.1 christos {
13990 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13991 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13992 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13993 1.1 christos int UNUSED written = 0;
13994 1.1 christos IADDR UNUSED pc = abuf->addr;
13995 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13996 1.1 christos
13997 1.1 christos {
13998 1.1 christos {
13999 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
14000 1.1 christos SET_H_PREFIXREG_V32 (opval);
14001 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
14002 1.1 christos }
14003 1.1 christos {
14004 1.1 christos BI opval = 1;
14005 1.1 christos SET_H_INSN_PREFIXED_P (opval);
14006 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
14007 1.1 christos }
14008 1.1 christos }
14009 1.1 christos
14010 1.1 christos #undef FLD
14011 1.1 christos }
14012 1.1 christos NEXT (vpc);
14013 1.1 christos
14014 1.1 christos CASE (sem, INSN_ADDI_ACR_D_R) : /* addi-acr.d ${Rs-dfield}.m,${Rd-sfield},ACR */
14015 1.1 christos {
14016 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14017 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14018 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
14019 1.1 christos int UNUSED written = 0;
14020 1.1 christos IADDR UNUSED pc = abuf->addr;
14021 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14022 1.1 christos
14023 1.1 christos {
14024 1.1 christos {
14025 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
14026 1.1 christos SET_H_PREFIXREG_V32 (opval);
14027 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
14028 1.1 christos }
14029 1.1 christos {
14030 1.1 christos BI opval = 1;
14031 1.1 christos SET_H_INSN_PREFIXED_P (opval);
14032 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
14033 1.1 christos }
14034 1.1 christos }
14035 1.1 christos
14036 1.1 christos #undef FLD
14037 1.1 christos }
14038 1.1 christos NEXT (vpc);
14039 1.1 christos
14040 1.1 christos CASE (sem, INSN_FIDXI) : /* fidxi [$Rs] */
14041 1.1 christos {
14042 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14043 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14044 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14045 1.1 christos int UNUSED written = 0;
14046 1.1 christos IADDR UNUSED pc = abuf->addr;
14047 1.1 christos SEM_BRANCH_INIT
14048 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14049 1.1 christos
14050 1.1 christos {
14051 1.1 christos USI opval = crisv32f_fidxi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14052 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14053 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14054 1.1 christos }
14055 1.1 christos
14056 1.1 christos SEM_BRANCH_FINI (vpc);
14057 1.1 christos #undef FLD
14058 1.1 christos }
14059 1.1 christos NEXT (vpc);
14060 1.1 christos
14061 1.1 christos CASE (sem, INSN_FTAGI) : /* fidxi [$Rs] */
14062 1.1 christos {
14063 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14064 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14065 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14066 1.1 christos int UNUSED written = 0;
14067 1.1 christos IADDR UNUSED pc = abuf->addr;
14068 1.1 christos SEM_BRANCH_INIT
14069 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14070 1.1 christos
14071 1.1 christos {
14072 1.1 christos USI opval = crisv32f_ftagi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14073 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14074 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14075 1.1 christos }
14076 1.1 christos
14077 1.1 christos SEM_BRANCH_FINI (vpc);
14078 1.1 christos #undef FLD
14079 1.1 christos }
14080 1.1 christos NEXT (vpc);
14081 1.1 christos
14082 1.1 christos CASE (sem, INSN_FIDXD) : /* fidxd [$Rs] */
14083 1.1 christos {
14084 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14085 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14086 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14087 1.1 christos int UNUSED written = 0;
14088 1.1 christos IADDR UNUSED pc = abuf->addr;
14089 1.1 christos SEM_BRANCH_INIT
14090 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14091 1.1 christos
14092 1.1 christos {
14093 1.1 christos USI opval = crisv32f_fidxd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14094 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14095 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14096 1.1 christos }
14097 1.1 christos
14098 1.1 christos SEM_BRANCH_FINI (vpc);
14099 1.1 christos #undef FLD
14100 1.1 christos }
14101 1.1 christos NEXT (vpc);
14102 1.1 christos
14103 1.1 christos CASE (sem, INSN_FTAGD) : /* ftagd [$Rs] */
14104 1.1 christos {
14105 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14106 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14107 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14108 1.1 christos int UNUSED written = 0;
14109 1.1 christos IADDR UNUSED pc = abuf->addr;
14110 1.1 christos SEM_BRANCH_INIT
14111 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14112 1.1 christos
14113 1.1 christos {
14114 1.1 christos USI opval = crisv32f_ftagd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14115 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14116 1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14117 1.1 christos }
14118 1.1 christos
14119 1.1 christos SEM_BRANCH_FINI (vpc);
14120 1.1 christos #undef FLD
14121 1.1 christos }
14122 1.1 christos NEXT (vpc);
14123 1.1 christos
14124 1.1 christos
14125 1.1 christos }
14126 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */
14127 1.1 christos
14128 1.1 christos /* At this point `vpc' contains the next insn to execute. */
14129 1.1 christos }
14130 1.1 christos
14131 1.1 christos #undef DEFINE_SWITCH
14132 1.1 christos #endif /* DEFINE_SWITCH */
14133