semcrisv32f-switch.c revision 1.1.1.1 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.1 christos Copyright 1996-2010 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1 christos with this program; if not, write to the Free Software Foundation, Inc.,
21 1.1 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.1 christos /* FIXME: A better way would be to have 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.1 christos #undef TRACE_RESULT
274 1.1 christos #define 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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.1 christos 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_grno;
3112 1.1 christos SI tmp_prno;
3113 1.1 christos SI tmp_newval;
3114 1.1 christos tmp_prno = FLD (f_operand2);
3115 1.1 christos tmp_newval = GET_H_SR (FLD (f_operand2));
3116 1.1 christos if (EQSI (tmp_prno, 2)) {
3117 1.1 christos {
3118 1.1 christos SI opval = tmp_newval;
3119 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3120 1.1 christos written |= (1 << 4);
3121 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3122 1.1 christos }
3123 1.1 christos }
3124 1.1 christos else if (EQSI (tmp_prno, 3)) {
3125 1.1 christos {
3126 1.1 christos SI tmp_oldregval;
3127 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3128 1.1 christos {
3129 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3130 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3131 1.1 christos written |= (1 << 4);
3132 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3133 1.1 christos }
3134 1.1 christos }
3135 1.1 christos }
3136 1.1 christos else if (EQSI (tmp_prno, 5)) {
3137 1.1 christos {
3138 1.1 christos SI opval = tmp_newval;
3139 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3140 1.1 christos written |= (1 << 4);
3141 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3142 1.1 christos }
3143 1.1 christos }
3144 1.1 christos else if (EQSI (tmp_prno, 6)) {
3145 1.1 christos {
3146 1.1 christos SI opval = tmp_newval;
3147 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3148 1.1 christos written |= (1 << 4);
3149 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3150 1.1 christos }
3151 1.1 christos }
3152 1.1 christos else if (EQSI (tmp_prno, 7)) {
3153 1.1 christos {
3154 1.1 christos SI opval = tmp_newval;
3155 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3156 1.1 christos written |= (1 << 4);
3157 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3158 1.1 christos }
3159 1.1 christos }
3160 1.1 christos else if (EQSI (tmp_prno, 9)) {
3161 1.1 christos {
3162 1.1 christos SI opval = tmp_newval;
3163 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3164 1.1 christos written |= (1 << 4);
3165 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3166 1.1 christos }
3167 1.1 christos }
3168 1.1 christos else if (EQSI (tmp_prno, 10)) {
3169 1.1 christos {
3170 1.1 christos SI opval = tmp_newval;
3171 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3172 1.1 christos written |= (1 << 4);
3173 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3174 1.1 christos }
3175 1.1 christos }
3176 1.1 christos else if (EQSI (tmp_prno, 11)) {
3177 1.1 christos {
3178 1.1 christos SI opval = tmp_newval;
3179 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3180 1.1 christos written |= (1 << 4);
3181 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3182 1.1 christos }
3183 1.1 christos }
3184 1.1 christos else if (EQSI (tmp_prno, 12)) {
3185 1.1 christos {
3186 1.1 christos SI opval = tmp_newval;
3187 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3188 1.1 christos written |= (1 << 4);
3189 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3190 1.1 christos }
3191 1.1 christos }
3192 1.1 christos else if (EQSI (tmp_prno, 13)) {
3193 1.1 christos {
3194 1.1 christos SI opval = tmp_newval;
3195 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3196 1.1 christos written |= (1 << 4);
3197 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3198 1.1 christos }
3199 1.1 christos }
3200 1.1 christos else if (EQSI (tmp_prno, 14)) {
3201 1.1 christos {
3202 1.1 christos SI opval = tmp_newval;
3203 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3204 1.1 christos written |= (1 << 4);
3205 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3206 1.1 christos }
3207 1.1 christos }
3208 1.1 christos else if (EQSI (tmp_prno, 15)) {
3209 1.1 christos {
3210 1.1 christos SI opval = tmp_newval;
3211 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3212 1.1 christos written |= (1 << 4);
3213 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3214 1.1 christos }
3215 1.1 christos }
3216 1.1 christos else if (EQSI (tmp_prno, 0)) {
3217 1.1 christos {
3218 1.1 christos SI tmp_oldregval;
3219 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3220 1.1 christos {
3221 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3222 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3223 1.1 christos written |= (1 << 4);
3224 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3225 1.1 christos }
3226 1.1 christos }
3227 1.1 christos }
3228 1.1 christos else if (EQSI (tmp_prno, 1)) {
3229 1.1 christos {
3230 1.1 christos SI tmp_oldregval;
3231 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3232 1.1 christos {
3233 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3234 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3235 1.1 christos written |= (1 << 4);
3236 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3237 1.1 christos }
3238 1.1 christos }
3239 1.1 christos }
3240 1.1 christos else if (EQSI (tmp_prno, 4)) {
3241 1.1 christos {
3242 1.1 christos SI tmp_oldregval;
3243 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3244 1.1 christos {
3245 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
3246 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3247 1.1 christos written |= (1 << 4);
3248 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3249 1.1 christos }
3250 1.1 christos }
3251 1.1 christos }
3252 1.1 christos else if (EQSI (tmp_prno, 8)) {
3253 1.1 christos {
3254 1.1 christos SI opval = tmp_newval;
3255 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3256 1.1 christos written |= (1 << 4);
3257 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3258 1.1 christos }
3259 1.1 christos }
3260 1.1 christos else {
3261 1.1 christos cgen_rtx_error (current_cpu, "move-spr-r from unimplemented register");
3262 1.1 christos }
3263 1.1 christos {
3264 1.1 christos {
3265 1.1 christos BI opval = 0;
3266 1.1 christos CPU (h_xbit) = opval;
3267 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3268 1.1 christos }
3269 1.1 christos {
3270 1.1 christos BI opval = 0;
3271 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3272 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3273 1.1 christos }
3274 1.1 christos }
3275 1.1 christos }
3276 1.1 christos
3277 1.1 christos abuf->written = written;
3278 1.1 christos #undef FLD
3279 1.1 christos }
3280 1.1 christos NEXT (vpc);
3281 1.1 christos
3282 1.1 christos CASE (sem, INSN_MOVE_M_SPRV32) : /* move [${Rs}${inc}],${Pd} */
3283 1.1 christos {
3284 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3285 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3286 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
3287 1.1 christos int UNUSED written = 0;
3288 1.1 christos IADDR UNUSED pc = abuf->addr;
3289 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3290 1.1 christos
3291 1.1 christos {
3292 1.1 christos SI tmp_rno;
3293 1.1 christos SI tmp_newval;
3294 1.1 christos tmp_rno = FLD (f_operand2);
3295 1.1 christos if (EQSI (tmp_rno, 2)) {
3296 1.1 christos tmp_newval = ({ SI tmp_addr;
3297 1.1 christos SI tmp_tmp_mem;
3298 1.1 christos BI tmp_postinc;
3299 1.1 christos tmp_postinc = FLD (f_memmode);
3300 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3301 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3302 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3303 1.1 christos {
3304 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3305 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3306 1.1 christos }
3307 1.1 christos {
3308 1.1 christos SI opval = tmp_addr;
3309 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3310 1.1 christos written |= (1 << 8);
3311 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3312 1.1 christos }
3313 1.1 christos }
3314 1.1 christos }
3315 1.1 christos ; tmp_tmp_mem; });
3316 1.1 christos }
3317 1.1 christos else if (EQSI (tmp_rno, 3)) {
3318 1.1 christos tmp_newval = EXTQISI (({ SI tmp_addr;
3319 1.1 christos QI tmp_tmp_mem;
3320 1.1 christos BI tmp_postinc;
3321 1.1 christos tmp_postinc = FLD (f_memmode);
3322 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3323 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
3324 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3325 1.1 christos {
3326 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3327 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
3328 1.1 christos }
3329 1.1 christos {
3330 1.1 christos SI opval = tmp_addr;
3331 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3332 1.1 christos written |= (1 << 8);
3333 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3334 1.1 christos }
3335 1.1 christos }
3336 1.1 christos }
3337 1.1 christos ; tmp_tmp_mem; }));
3338 1.1 christos }
3339 1.1 christos else if (EQSI (tmp_rno, 5)) {
3340 1.1 christos tmp_newval = ({ SI tmp_addr;
3341 1.1 christos SI tmp_tmp_mem;
3342 1.1 christos BI tmp_postinc;
3343 1.1 christos tmp_postinc = FLD (f_memmode);
3344 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3345 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3346 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3347 1.1 christos {
3348 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3349 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3350 1.1 christos }
3351 1.1 christos {
3352 1.1 christos SI opval = tmp_addr;
3353 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3354 1.1 christos written |= (1 << 8);
3355 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3356 1.1 christos }
3357 1.1 christos }
3358 1.1 christos }
3359 1.1 christos ; tmp_tmp_mem; });
3360 1.1 christos }
3361 1.1 christos else if (EQSI (tmp_rno, 6)) {
3362 1.1 christos tmp_newval = ({ SI tmp_addr;
3363 1.1 christos SI tmp_tmp_mem;
3364 1.1 christos BI tmp_postinc;
3365 1.1 christos tmp_postinc = FLD (f_memmode);
3366 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3367 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3368 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3369 1.1 christos {
3370 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3371 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3372 1.1 christos }
3373 1.1 christos {
3374 1.1 christos SI opval = tmp_addr;
3375 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3376 1.1 christos written |= (1 << 8);
3377 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3378 1.1 christos }
3379 1.1 christos }
3380 1.1 christos }
3381 1.1 christos ; tmp_tmp_mem; });
3382 1.1 christos }
3383 1.1 christos else if (EQSI (tmp_rno, 7)) {
3384 1.1 christos tmp_newval = ({ SI tmp_addr;
3385 1.1 christos SI tmp_tmp_mem;
3386 1.1 christos BI tmp_postinc;
3387 1.1 christos tmp_postinc = FLD (f_memmode);
3388 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3389 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3390 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3391 1.1 christos {
3392 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3393 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3394 1.1 christos }
3395 1.1 christos {
3396 1.1 christos SI opval = tmp_addr;
3397 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3398 1.1 christos written |= (1 << 8);
3399 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3400 1.1 christos }
3401 1.1 christos }
3402 1.1 christos }
3403 1.1 christos ; tmp_tmp_mem; });
3404 1.1 christos }
3405 1.1 christos else if (EQSI (tmp_rno, 9)) {
3406 1.1 christos tmp_newval = ({ SI tmp_addr;
3407 1.1 christos SI tmp_tmp_mem;
3408 1.1 christos BI tmp_postinc;
3409 1.1 christos tmp_postinc = FLD (f_memmode);
3410 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3411 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3412 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3413 1.1 christos {
3414 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3415 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3416 1.1 christos }
3417 1.1 christos {
3418 1.1 christos SI opval = tmp_addr;
3419 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3420 1.1 christos written |= (1 << 8);
3421 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3422 1.1 christos }
3423 1.1 christos }
3424 1.1 christos }
3425 1.1 christos ; tmp_tmp_mem; });
3426 1.1 christos }
3427 1.1 christos else if (EQSI (tmp_rno, 10)) {
3428 1.1 christos tmp_newval = ({ SI tmp_addr;
3429 1.1 christos SI tmp_tmp_mem;
3430 1.1 christos BI tmp_postinc;
3431 1.1 christos tmp_postinc = FLD (f_memmode);
3432 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3433 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3434 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3435 1.1 christos {
3436 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3437 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3438 1.1 christos }
3439 1.1 christos {
3440 1.1 christos SI opval = tmp_addr;
3441 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3442 1.1 christos written |= (1 << 8);
3443 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3444 1.1 christos }
3445 1.1 christos }
3446 1.1 christos }
3447 1.1 christos ; tmp_tmp_mem; });
3448 1.1 christos }
3449 1.1 christos else if (EQSI (tmp_rno, 11)) {
3450 1.1 christos tmp_newval = ({ SI tmp_addr;
3451 1.1 christos SI tmp_tmp_mem;
3452 1.1 christos BI tmp_postinc;
3453 1.1 christos tmp_postinc = FLD (f_memmode);
3454 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3455 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3456 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3457 1.1 christos {
3458 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3459 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3460 1.1 christos }
3461 1.1 christos {
3462 1.1 christos SI opval = tmp_addr;
3463 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3464 1.1 christos written |= (1 << 8);
3465 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3466 1.1 christos }
3467 1.1 christos }
3468 1.1 christos }
3469 1.1 christos ; tmp_tmp_mem; });
3470 1.1 christos }
3471 1.1 christos else if (EQSI (tmp_rno, 12)) {
3472 1.1 christos tmp_newval = ({ SI tmp_addr;
3473 1.1 christos SI tmp_tmp_mem;
3474 1.1 christos BI tmp_postinc;
3475 1.1 christos tmp_postinc = FLD (f_memmode);
3476 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3477 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3478 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3479 1.1 christos {
3480 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3481 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3482 1.1 christos }
3483 1.1 christos {
3484 1.1 christos SI opval = tmp_addr;
3485 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3486 1.1 christos written |= (1 << 8);
3487 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3488 1.1 christos }
3489 1.1 christos }
3490 1.1 christos }
3491 1.1 christos ; tmp_tmp_mem; });
3492 1.1 christos }
3493 1.1 christos else if (EQSI (tmp_rno, 13)) {
3494 1.1 christos tmp_newval = ({ SI tmp_addr;
3495 1.1 christos SI tmp_tmp_mem;
3496 1.1 christos BI tmp_postinc;
3497 1.1 christos tmp_postinc = FLD (f_memmode);
3498 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3499 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3500 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3501 1.1 christos {
3502 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3503 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3504 1.1 christos }
3505 1.1 christos {
3506 1.1 christos SI opval = tmp_addr;
3507 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3508 1.1 christos written |= (1 << 8);
3509 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3510 1.1 christos }
3511 1.1 christos }
3512 1.1 christos }
3513 1.1 christos ; tmp_tmp_mem; });
3514 1.1 christos }
3515 1.1 christos else if (EQSI (tmp_rno, 14)) {
3516 1.1 christos tmp_newval = ({ SI tmp_addr;
3517 1.1 christos SI tmp_tmp_mem;
3518 1.1 christos BI tmp_postinc;
3519 1.1 christos tmp_postinc = FLD (f_memmode);
3520 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3521 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3522 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3523 1.1 christos {
3524 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3525 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3526 1.1 christos }
3527 1.1 christos {
3528 1.1 christos SI opval = tmp_addr;
3529 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3530 1.1 christos written |= (1 << 8);
3531 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3532 1.1 christos }
3533 1.1 christos }
3534 1.1 christos }
3535 1.1 christos ; tmp_tmp_mem; });
3536 1.1 christos }
3537 1.1 christos else if (EQSI (tmp_rno, 15)) {
3538 1.1 christos tmp_newval = ({ SI tmp_addr;
3539 1.1 christos SI tmp_tmp_mem;
3540 1.1 christos BI tmp_postinc;
3541 1.1 christos tmp_postinc = FLD (f_memmode);
3542 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3543 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3544 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3545 1.1 christos {
3546 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3547 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3548 1.1 christos }
3549 1.1 christos {
3550 1.1 christos SI opval = tmp_addr;
3551 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3552 1.1 christos written |= (1 << 8);
3553 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3554 1.1 christos }
3555 1.1 christos }
3556 1.1 christos }
3557 1.1 christos ; tmp_tmp_mem; });
3558 1.1 christos }
3559 1.1 christos else {
3560 1.1 christos cgen_rtx_error (current_cpu, "Trying to set unimplemented special register");
3561 1.1 christos }
3562 1.1 christos {
3563 1.1 christos SI opval = tmp_newval;
3564 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3565 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3566 1.1 christos }
3567 1.1 christos {
3568 1.1 christos {
3569 1.1 christos BI opval = 0;
3570 1.1 christos CPU (h_xbit) = opval;
3571 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3572 1.1 christos }
3573 1.1 christos {
3574 1.1 christos BI opval = 0;
3575 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3576 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3577 1.1 christos }
3578 1.1 christos }
3579 1.1 christos }
3580 1.1 christos
3581 1.1 christos abuf->written = written;
3582 1.1 christos #undef FLD
3583 1.1 christos }
3584 1.1 christos NEXT (vpc);
3585 1.1 christos
3586 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P2) : /* move ${const32},${Pd} */
3587 1.1 christos {
3588 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3589 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3590 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3591 1.1 christos int UNUSED written = 0;
3592 1.1 christos IADDR UNUSED pc = abuf->addr;
3593 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3594 1.1 christos
3595 1.1 christos {
3596 1.1 christos {
3597 1.1 christos SI opval = FLD (f_indir_pc__dword);
3598 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3599 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3600 1.1 christos }
3601 1.1 christos {
3602 1.1 christos {
3603 1.1 christos BI opval = 0;
3604 1.1 christos CPU (h_xbit) = opval;
3605 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3606 1.1 christos }
3607 1.1 christos {
3608 1.1 christos BI opval = 0;
3609 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3610 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3611 1.1 christos }
3612 1.1 christos }
3613 1.1 christos }
3614 1.1 christos
3615 1.1 christos #undef FLD
3616 1.1 christos }
3617 1.1 christos NEXT (vpc);
3618 1.1 christos
3619 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P3) : /* move ${const32},${Pd} */
3620 1.1 christos {
3621 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3622 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3623 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3624 1.1 christos int UNUSED written = 0;
3625 1.1 christos IADDR UNUSED pc = abuf->addr;
3626 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3627 1.1 christos
3628 1.1 christos {
3629 1.1 christos {
3630 1.1 christos SI opval = FLD (f_indir_pc__dword);
3631 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3632 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3633 1.1 christos }
3634 1.1 christos {
3635 1.1 christos {
3636 1.1 christos BI opval = 0;
3637 1.1 christos CPU (h_xbit) = opval;
3638 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3639 1.1 christos }
3640 1.1 christos {
3641 1.1 christos BI opval = 0;
3642 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3643 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3644 1.1 christos }
3645 1.1 christos }
3646 1.1 christos }
3647 1.1 christos
3648 1.1 christos #undef FLD
3649 1.1 christos }
3650 1.1 christos NEXT (vpc);
3651 1.1 christos
3652 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P5) : /* move ${const32},${Pd} */
3653 1.1 christos {
3654 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3655 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3656 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3657 1.1 christos int UNUSED written = 0;
3658 1.1 christos IADDR UNUSED pc = abuf->addr;
3659 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3660 1.1 christos
3661 1.1 christos {
3662 1.1 christos {
3663 1.1 christos SI opval = FLD (f_indir_pc__dword);
3664 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3665 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3666 1.1 christos }
3667 1.1 christos {
3668 1.1 christos {
3669 1.1 christos BI opval = 0;
3670 1.1 christos CPU (h_xbit) = opval;
3671 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3672 1.1 christos }
3673 1.1 christos {
3674 1.1 christos BI opval = 0;
3675 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3676 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3677 1.1 christos }
3678 1.1 christos }
3679 1.1 christos }
3680 1.1 christos
3681 1.1 christos #undef FLD
3682 1.1 christos }
3683 1.1 christos NEXT (vpc);
3684 1.1 christos
3685 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P6) : /* move ${const32},${Pd} */
3686 1.1 christos {
3687 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3688 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3689 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3690 1.1 christos int UNUSED written = 0;
3691 1.1 christos IADDR UNUSED pc = abuf->addr;
3692 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3693 1.1 christos
3694 1.1 christos {
3695 1.1 christos {
3696 1.1 christos SI opval = FLD (f_indir_pc__dword);
3697 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3698 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3699 1.1 christos }
3700 1.1 christos {
3701 1.1 christos {
3702 1.1 christos BI opval = 0;
3703 1.1 christos CPU (h_xbit) = opval;
3704 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3705 1.1 christos }
3706 1.1 christos {
3707 1.1 christos BI opval = 0;
3708 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3709 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3710 1.1 christos }
3711 1.1 christos }
3712 1.1 christos }
3713 1.1 christos
3714 1.1 christos #undef FLD
3715 1.1 christos }
3716 1.1 christos NEXT (vpc);
3717 1.1 christos
3718 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P7) : /* move ${const32},${Pd} */
3719 1.1 christos {
3720 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3721 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3722 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3723 1.1 christos int UNUSED written = 0;
3724 1.1 christos IADDR UNUSED pc = abuf->addr;
3725 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3726 1.1 christos
3727 1.1 christos {
3728 1.1 christos {
3729 1.1 christos SI opval = FLD (f_indir_pc__dword);
3730 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3731 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3732 1.1 christos }
3733 1.1 christos {
3734 1.1 christos {
3735 1.1 christos BI opval = 0;
3736 1.1 christos CPU (h_xbit) = opval;
3737 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3738 1.1 christos }
3739 1.1 christos {
3740 1.1 christos BI opval = 0;
3741 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3742 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3743 1.1 christos }
3744 1.1 christos }
3745 1.1 christos }
3746 1.1 christos
3747 1.1 christos #undef FLD
3748 1.1 christos }
3749 1.1 christos NEXT (vpc);
3750 1.1 christos
3751 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P9) : /* move ${const32},${Pd} */
3752 1.1 christos {
3753 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3754 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3755 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3756 1.1 christos int UNUSED written = 0;
3757 1.1 christos IADDR UNUSED pc = abuf->addr;
3758 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3759 1.1 christos
3760 1.1 christos {
3761 1.1 christos {
3762 1.1 christos SI opval = FLD (f_indir_pc__dword);
3763 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3764 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3765 1.1 christos }
3766 1.1 christos {
3767 1.1 christos {
3768 1.1 christos BI opval = 0;
3769 1.1 christos CPU (h_xbit) = opval;
3770 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3771 1.1 christos }
3772 1.1 christos {
3773 1.1 christos BI opval = 0;
3774 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3775 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3776 1.1 christos }
3777 1.1 christos }
3778 1.1 christos }
3779 1.1 christos
3780 1.1 christos #undef FLD
3781 1.1 christos }
3782 1.1 christos NEXT (vpc);
3783 1.1 christos
3784 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P10) : /* move ${const32},${Pd} */
3785 1.1 christos {
3786 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3787 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3788 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3789 1.1 christos int UNUSED written = 0;
3790 1.1 christos IADDR UNUSED pc = abuf->addr;
3791 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3792 1.1 christos
3793 1.1 christos {
3794 1.1 christos {
3795 1.1 christos SI opval = FLD (f_indir_pc__dword);
3796 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3797 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3798 1.1 christos }
3799 1.1 christos {
3800 1.1 christos {
3801 1.1 christos BI opval = 0;
3802 1.1 christos CPU (h_xbit) = opval;
3803 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3804 1.1 christos }
3805 1.1 christos {
3806 1.1 christos BI opval = 0;
3807 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3808 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3809 1.1 christos }
3810 1.1 christos }
3811 1.1 christos }
3812 1.1 christos
3813 1.1 christos #undef FLD
3814 1.1 christos }
3815 1.1 christos NEXT (vpc);
3816 1.1 christos
3817 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P11) : /* move ${const32},${Pd} */
3818 1.1 christos {
3819 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3820 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3821 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3822 1.1 christos int UNUSED written = 0;
3823 1.1 christos IADDR UNUSED pc = abuf->addr;
3824 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3825 1.1 christos
3826 1.1 christos {
3827 1.1 christos {
3828 1.1 christos SI opval = FLD (f_indir_pc__dword);
3829 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3830 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3831 1.1 christos }
3832 1.1 christos {
3833 1.1 christos {
3834 1.1 christos BI opval = 0;
3835 1.1 christos CPU (h_xbit) = opval;
3836 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3837 1.1 christos }
3838 1.1 christos {
3839 1.1 christos BI opval = 0;
3840 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3841 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3842 1.1 christos }
3843 1.1 christos }
3844 1.1 christos }
3845 1.1 christos
3846 1.1 christos #undef FLD
3847 1.1 christos }
3848 1.1 christos NEXT (vpc);
3849 1.1 christos
3850 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P12) : /* move ${const32},${Pd} */
3851 1.1 christos {
3852 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3853 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3854 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3855 1.1 christos int UNUSED written = 0;
3856 1.1 christos IADDR UNUSED pc = abuf->addr;
3857 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3858 1.1 christos
3859 1.1 christos {
3860 1.1 christos {
3861 1.1 christos SI opval = FLD (f_indir_pc__dword);
3862 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3863 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3864 1.1 christos }
3865 1.1 christos {
3866 1.1 christos {
3867 1.1 christos BI opval = 0;
3868 1.1 christos CPU (h_xbit) = opval;
3869 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3870 1.1 christos }
3871 1.1 christos {
3872 1.1 christos BI opval = 0;
3873 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3874 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3875 1.1 christos }
3876 1.1 christos }
3877 1.1 christos }
3878 1.1 christos
3879 1.1 christos #undef FLD
3880 1.1 christos }
3881 1.1 christos NEXT (vpc);
3882 1.1 christos
3883 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P13) : /* move ${const32},${Pd} */
3884 1.1 christos {
3885 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3886 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3887 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3888 1.1 christos int UNUSED written = 0;
3889 1.1 christos IADDR UNUSED pc = abuf->addr;
3890 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3891 1.1 christos
3892 1.1 christos {
3893 1.1 christos {
3894 1.1 christos SI opval = FLD (f_indir_pc__dword);
3895 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3896 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3897 1.1 christos }
3898 1.1 christos {
3899 1.1 christos {
3900 1.1 christos BI opval = 0;
3901 1.1 christos CPU (h_xbit) = opval;
3902 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3903 1.1 christos }
3904 1.1 christos {
3905 1.1 christos BI opval = 0;
3906 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3907 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3908 1.1 christos }
3909 1.1 christos }
3910 1.1 christos }
3911 1.1 christos
3912 1.1 christos #undef FLD
3913 1.1 christos }
3914 1.1 christos NEXT (vpc);
3915 1.1 christos
3916 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P14) : /* move ${const32},${Pd} */
3917 1.1 christos {
3918 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3919 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3920 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3921 1.1 christos int UNUSED written = 0;
3922 1.1 christos IADDR UNUSED pc = abuf->addr;
3923 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3924 1.1 christos
3925 1.1 christos {
3926 1.1 christos {
3927 1.1 christos SI opval = FLD (f_indir_pc__dword);
3928 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3929 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3930 1.1 christos }
3931 1.1 christos {
3932 1.1 christos {
3933 1.1 christos BI opval = 0;
3934 1.1 christos CPU (h_xbit) = opval;
3935 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3936 1.1 christos }
3937 1.1 christos {
3938 1.1 christos BI opval = 0;
3939 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3940 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3941 1.1 christos }
3942 1.1 christos }
3943 1.1 christos }
3944 1.1 christos
3945 1.1 christos #undef FLD
3946 1.1 christos }
3947 1.1 christos NEXT (vpc);
3948 1.1 christos
3949 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P15) : /* move ${const32},${Pd} */
3950 1.1 christos {
3951 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3952 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3953 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3954 1.1 christos int UNUSED written = 0;
3955 1.1 christos IADDR UNUSED pc = abuf->addr;
3956 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3957 1.1 christos
3958 1.1 christos {
3959 1.1 christos {
3960 1.1 christos SI opval = FLD (f_indir_pc__dword);
3961 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3962 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3963 1.1 christos }
3964 1.1 christos {
3965 1.1 christos {
3966 1.1 christos BI opval = 0;
3967 1.1 christos CPU (h_xbit) = opval;
3968 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3969 1.1 christos }
3970 1.1 christos {
3971 1.1 christos BI opval = 0;
3972 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3973 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3974 1.1 christos }
3975 1.1 christos }
3976 1.1 christos }
3977 1.1 christos
3978 1.1 christos #undef FLD
3979 1.1 christos }
3980 1.1 christos NEXT (vpc);
3981 1.1 christos
3982 1.1 christos CASE (sem, INSN_MOVE_SPR_MV32) : /* move ${Ps},[${Rd-sfield}${inc}] */
3983 1.1 christos {
3984 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3985 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3986 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3987 1.1 christos int UNUSED written = 0;
3988 1.1 christos IADDR UNUSED pc = abuf->addr;
3989 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3990 1.1 christos
3991 1.1 christos {
3992 1.1 christos SI tmp_rno;
3993 1.1 christos tmp_rno = FLD (f_operand2);
3994 1.1 christos if (EQSI (tmp_rno, 2)) {
3995 1.1 christos {
3996 1.1 christos SI tmp_addr;
3997 1.1 christos BI tmp_postinc;
3998 1.1 christos tmp_postinc = FLD (f_memmode);
3999 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4000 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4001 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4002 1.1 christos {
4003 1.1 christos {
4004 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4005 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4006 1.1 christos written |= (1 << 13);
4007 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4008 1.1 christos }
4009 1.1 christos {
4010 1.1 christos BI opval = CPU (h_pbit);
4011 1.1 christos CPU (h_cbit) = opval;
4012 1.1 christos written |= (1 << 10);
4013 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4014 1.1 christos }
4015 1.1 christos }
4016 1.1 christos } else {
4017 1.1 christos {
4018 1.1 christos BI opval = 1;
4019 1.1 christos CPU (h_cbit) = opval;
4020 1.1 christos written |= (1 << 10);
4021 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4022 1.1 christos }
4023 1.1 christos }
4024 1.1 christos } else {
4025 1.1 christos {
4026 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4027 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4028 1.1 christos written |= (1 << 13);
4029 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4030 1.1 christos }
4031 1.1 christos }
4032 1.1 christos if (NEBI (tmp_postinc, 0)) {
4033 1.1 christos {
4034 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4035 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4036 1.1 christos }
4037 1.1 christos {
4038 1.1 christos SI opval = tmp_addr;
4039 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4040 1.1 christos written |= (1 << 9);
4041 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4042 1.1 christos }
4043 1.1 christos }
4044 1.1 christos }
4045 1.1 christos }
4046 1.1 christos }
4047 1.1 christos else if (EQSI (tmp_rno, 3)) {
4048 1.1 christos {
4049 1.1 christos SI tmp_addr;
4050 1.1 christos BI tmp_postinc;
4051 1.1 christos tmp_postinc = FLD (f_memmode);
4052 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4053 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4054 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4055 1.1 christos {
4056 1.1 christos {
4057 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4058 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4059 1.1 christos written |= (1 << 12);
4060 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4061 1.1 christos }
4062 1.1 christos {
4063 1.1 christos BI opval = CPU (h_pbit);
4064 1.1 christos CPU (h_cbit) = opval;
4065 1.1 christos written |= (1 << 10);
4066 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4067 1.1 christos }
4068 1.1 christos }
4069 1.1 christos } else {
4070 1.1 christos {
4071 1.1 christos BI opval = 1;
4072 1.1 christos CPU (h_cbit) = opval;
4073 1.1 christos written |= (1 << 10);
4074 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4075 1.1 christos }
4076 1.1 christos }
4077 1.1 christos } else {
4078 1.1 christos {
4079 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4080 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4081 1.1 christos written |= (1 << 12);
4082 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4083 1.1 christos }
4084 1.1 christos }
4085 1.1 christos if (NEBI (tmp_postinc, 0)) {
4086 1.1 christos {
4087 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4088 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4089 1.1 christos }
4090 1.1 christos {
4091 1.1 christos SI opval = tmp_addr;
4092 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4093 1.1 christos written |= (1 << 9);
4094 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4095 1.1 christos }
4096 1.1 christos }
4097 1.1 christos }
4098 1.1 christos }
4099 1.1 christos }
4100 1.1 christos else if (EQSI (tmp_rno, 5)) {
4101 1.1 christos {
4102 1.1 christos SI tmp_addr;
4103 1.1 christos BI tmp_postinc;
4104 1.1 christos tmp_postinc = FLD (f_memmode);
4105 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4106 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4107 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4108 1.1 christos {
4109 1.1 christos {
4110 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4111 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4112 1.1 christos written |= (1 << 13);
4113 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4114 1.1 christos }
4115 1.1 christos {
4116 1.1 christos BI opval = CPU (h_pbit);
4117 1.1 christos CPU (h_cbit) = opval;
4118 1.1 christos written |= (1 << 10);
4119 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4120 1.1 christos }
4121 1.1 christos }
4122 1.1 christos } else {
4123 1.1 christos {
4124 1.1 christos BI opval = 1;
4125 1.1 christos CPU (h_cbit) = opval;
4126 1.1 christos written |= (1 << 10);
4127 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4128 1.1 christos }
4129 1.1 christos }
4130 1.1 christos } else {
4131 1.1 christos {
4132 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4133 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4134 1.1 christos written |= (1 << 13);
4135 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4136 1.1 christos }
4137 1.1 christos }
4138 1.1 christos if (NEBI (tmp_postinc, 0)) {
4139 1.1 christos {
4140 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4141 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4142 1.1 christos }
4143 1.1 christos {
4144 1.1 christos SI opval = tmp_addr;
4145 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4146 1.1 christos written |= (1 << 9);
4147 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4148 1.1 christos }
4149 1.1 christos }
4150 1.1 christos }
4151 1.1 christos }
4152 1.1 christos }
4153 1.1 christos else if (EQSI (tmp_rno, 6)) {
4154 1.1 christos {
4155 1.1 christos SI tmp_addr;
4156 1.1 christos BI tmp_postinc;
4157 1.1 christos tmp_postinc = FLD (f_memmode);
4158 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4159 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4160 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4161 1.1 christos {
4162 1.1 christos {
4163 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4164 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4165 1.1 christos written |= (1 << 13);
4166 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4167 1.1 christos }
4168 1.1 christos {
4169 1.1 christos BI opval = CPU (h_pbit);
4170 1.1 christos CPU (h_cbit) = opval;
4171 1.1 christos written |= (1 << 10);
4172 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4173 1.1 christos }
4174 1.1 christos }
4175 1.1 christos } else {
4176 1.1 christos {
4177 1.1 christos BI opval = 1;
4178 1.1 christos CPU (h_cbit) = opval;
4179 1.1 christos written |= (1 << 10);
4180 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4181 1.1 christos }
4182 1.1 christos }
4183 1.1 christos } else {
4184 1.1 christos {
4185 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4186 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4187 1.1 christos written |= (1 << 13);
4188 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4189 1.1 christos }
4190 1.1 christos }
4191 1.1 christos if (NEBI (tmp_postinc, 0)) {
4192 1.1 christos {
4193 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4194 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4195 1.1 christos }
4196 1.1 christos {
4197 1.1 christos SI opval = tmp_addr;
4198 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4199 1.1 christos written |= (1 << 9);
4200 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4201 1.1 christos }
4202 1.1 christos }
4203 1.1 christos }
4204 1.1 christos }
4205 1.1 christos }
4206 1.1 christos else if (EQSI (tmp_rno, 7)) {
4207 1.1 christos {
4208 1.1 christos SI tmp_addr;
4209 1.1 christos BI tmp_postinc;
4210 1.1 christos tmp_postinc = FLD (f_memmode);
4211 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4212 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4213 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4214 1.1 christos {
4215 1.1 christos {
4216 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4217 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4218 1.1 christos written |= (1 << 13);
4219 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4220 1.1 christos }
4221 1.1 christos {
4222 1.1 christos BI opval = CPU (h_pbit);
4223 1.1 christos CPU (h_cbit) = opval;
4224 1.1 christos written |= (1 << 10);
4225 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4226 1.1 christos }
4227 1.1 christos }
4228 1.1 christos } else {
4229 1.1 christos {
4230 1.1 christos BI opval = 1;
4231 1.1 christos CPU (h_cbit) = opval;
4232 1.1 christos written |= (1 << 10);
4233 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4234 1.1 christos }
4235 1.1 christos }
4236 1.1 christos } else {
4237 1.1 christos {
4238 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4239 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4240 1.1 christos written |= (1 << 13);
4241 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4242 1.1 christos }
4243 1.1 christos }
4244 1.1 christos if (NEBI (tmp_postinc, 0)) {
4245 1.1 christos {
4246 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4247 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4248 1.1 christos }
4249 1.1 christos {
4250 1.1 christos SI opval = tmp_addr;
4251 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4252 1.1 christos written |= (1 << 9);
4253 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4254 1.1 christos }
4255 1.1 christos }
4256 1.1 christos }
4257 1.1 christos }
4258 1.1 christos }
4259 1.1 christos else if (EQSI (tmp_rno, 9)) {
4260 1.1 christos {
4261 1.1 christos SI tmp_addr;
4262 1.1 christos BI tmp_postinc;
4263 1.1 christos tmp_postinc = FLD (f_memmode);
4264 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4265 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4266 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4267 1.1 christos {
4268 1.1 christos {
4269 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4270 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4271 1.1 christos written |= (1 << 13);
4272 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4273 1.1 christos }
4274 1.1 christos {
4275 1.1 christos BI opval = CPU (h_pbit);
4276 1.1 christos CPU (h_cbit) = opval;
4277 1.1 christos written |= (1 << 10);
4278 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4279 1.1 christos }
4280 1.1 christos }
4281 1.1 christos } else {
4282 1.1 christos {
4283 1.1 christos BI opval = 1;
4284 1.1 christos CPU (h_cbit) = opval;
4285 1.1 christos written |= (1 << 10);
4286 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4287 1.1 christos }
4288 1.1 christos }
4289 1.1 christos } else {
4290 1.1 christos {
4291 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4292 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4293 1.1 christos written |= (1 << 13);
4294 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4295 1.1 christos }
4296 1.1 christos }
4297 1.1 christos if (NEBI (tmp_postinc, 0)) {
4298 1.1 christos {
4299 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4300 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4301 1.1 christos }
4302 1.1 christos {
4303 1.1 christos SI opval = tmp_addr;
4304 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4305 1.1 christos written |= (1 << 9);
4306 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4307 1.1 christos }
4308 1.1 christos }
4309 1.1 christos }
4310 1.1 christos }
4311 1.1 christos }
4312 1.1 christos else if (EQSI (tmp_rno, 10)) {
4313 1.1 christos {
4314 1.1 christos SI tmp_addr;
4315 1.1 christos BI tmp_postinc;
4316 1.1 christos tmp_postinc = FLD (f_memmode);
4317 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4318 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4319 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4320 1.1 christos {
4321 1.1 christos {
4322 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4323 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4324 1.1 christos written |= (1 << 13);
4325 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4326 1.1 christos }
4327 1.1 christos {
4328 1.1 christos BI opval = CPU (h_pbit);
4329 1.1 christos CPU (h_cbit) = opval;
4330 1.1 christos written |= (1 << 10);
4331 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4332 1.1 christos }
4333 1.1 christos }
4334 1.1 christos } else {
4335 1.1 christos {
4336 1.1 christos BI opval = 1;
4337 1.1 christos CPU (h_cbit) = opval;
4338 1.1 christos written |= (1 << 10);
4339 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4340 1.1 christos }
4341 1.1 christos }
4342 1.1 christos } else {
4343 1.1 christos {
4344 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4345 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4346 1.1 christos written |= (1 << 13);
4347 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4348 1.1 christos }
4349 1.1 christos }
4350 1.1 christos if (NEBI (tmp_postinc, 0)) {
4351 1.1 christos {
4352 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4353 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4354 1.1 christos }
4355 1.1 christos {
4356 1.1 christos SI opval = tmp_addr;
4357 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4358 1.1 christos written |= (1 << 9);
4359 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4360 1.1 christos }
4361 1.1 christos }
4362 1.1 christos }
4363 1.1 christos }
4364 1.1 christos }
4365 1.1 christos else if (EQSI (tmp_rno, 11)) {
4366 1.1 christos {
4367 1.1 christos SI tmp_addr;
4368 1.1 christos BI tmp_postinc;
4369 1.1 christos tmp_postinc = FLD (f_memmode);
4370 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4371 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4372 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4373 1.1 christos {
4374 1.1 christos {
4375 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4376 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4377 1.1 christos written |= (1 << 13);
4378 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4379 1.1 christos }
4380 1.1 christos {
4381 1.1 christos BI opval = CPU (h_pbit);
4382 1.1 christos CPU (h_cbit) = opval;
4383 1.1 christos written |= (1 << 10);
4384 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4385 1.1 christos }
4386 1.1 christos }
4387 1.1 christos } else {
4388 1.1 christos {
4389 1.1 christos BI opval = 1;
4390 1.1 christos CPU (h_cbit) = opval;
4391 1.1 christos written |= (1 << 10);
4392 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4393 1.1 christos }
4394 1.1 christos }
4395 1.1 christos } else {
4396 1.1 christos {
4397 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4398 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4399 1.1 christos written |= (1 << 13);
4400 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4401 1.1 christos }
4402 1.1 christos }
4403 1.1 christos if (NEBI (tmp_postinc, 0)) {
4404 1.1 christos {
4405 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4406 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4407 1.1 christos }
4408 1.1 christos {
4409 1.1 christos SI opval = tmp_addr;
4410 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4411 1.1 christos written |= (1 << 9);
4412 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4413 1.1 christos }
4414 1.1 christos }
4415 1.1 christos }
4416 1.1 christos }
4417 1.1 christos }
4418 1.1 christos else if (EQSI (tmp_rno, 12)) {
4419 1.1 christos {
4420 1.1 christos SI tmp_addr;
4421 1.1 christos BI tmp_postinc;
4422 1.1 christos tmp_postinc = FLD (f_memmode);
4423 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4424 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4425 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4426 1.1 christos {
4427 1.1 christos {
4428 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4429 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4430 1.1 christos written |= (1 << 13);
4431 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4432 1.1 christos }
4433 1.1 christos {
4434 1.1 christos BI opval = CPU (h_pbit);
4435 1.1 christos CPU (h_cbit) = opval;
4436 1.1 christos written |= (1 << 10);
4437 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4438 1.1 christos }
4439 1.1 christos }
4440 1.1 christos } else {
4441 1.1 christos {
4442 1.1 christos BI opval = 1;
4443 1.1 christos CPU (h_cbit) = opval;
4444 1.1 christos written |= (1 << 10);
4445 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4446 1.1 christos }
4447 1.1 christos }
4448 1.1 christos } else {
4449 1.1 christos {
4450 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4451 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4452 1.1 christos written |= (1 << 13);
4453 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4454 1.1 christos }
4455 1.1 christos }
4456 1.1 christos if (NEBI (tmp_postinc, 0)) {
4457 1.1 christos {
4458 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4459 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4460 1.1 christos }
4461 1.1 christos {
4462 1.1 christos SI opval = tmp_addr;
4463 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4464 1.1 christos written |= (1 << 9);
4465 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4466 1.1 christos }
4467 1.1 christos }
4468 1.1 christos }
4469 1.1 christos }
4470 1.1 christos }
4471 1.1 christos else if (EQSI (tmp_rno, 13)) {
4472 1.1 christos {
4473 1.1 christos SI tmp_addr;
4474 1.1 christos BI tmp_postinc;
4475 1.1 christos tmp_postinc = FLD (f_memmode);
4476 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4477 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4478 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4479 1.1 christos {
4480 1.1 christos {
4481 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4482 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4483 1.1 christos written |= (1 << 13);
4484 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4485 1.1 christos }
4486 1.1 christos {
4487 1.1 christos BI opval = CPU (h_pbit);
4488 1.1 christos CPU (h_cbit) = opval;
4489 1.1 christos written |= (1 << 10);
4490 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4491 1.1 christos }
4492 1.1 christos }
4493 1.1 christos } else {
4494 1.1 christos {
4495 1.1 christos BI opval = 1;
4496 1.1 christos CPU (h_cbit) = opval;
4497 1.1 christos written |= (1 << 10);
4498 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4499 1.1 christos }
4500 1.1 christos }
4501 1.1 christos } else {
4502 1.1 christos {
4503 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4504 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4505 1.1 christos written |= (1 << 13);
4506 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4507 1.1 christos }
4508 1.1 christos }
4509 1.1 christos if (NEBI (tmp_postinc, 0)) {
4510 1.1 christos {
4511 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4512 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4513 1.1 christos }
4514 1.1 christos {
4515 1.1 christos SI opval = tmp_addr;
4516 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4517 1.1 christos written |= (1 << 9);
4518 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4519 1.1 christos }
4520 1.1 christos }
4521 1.1 christos }
4522 1.1 christos }
4523 1.1 christos }
4524 1.1 christos else if (EQSI (tmp_rno, 14)) {
4525 1.1 christos {
4526 1.1 christos SI tmp_addr;
4527 1.1 christos BI tmp_postinc;
4528 1.1 christos tmp_postinc = FLD (f_memmode);
4529 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4530 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4531 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4532 1.1 christos {
4533 1.1 christos {
4534 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4535 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4536 1.1 christos written |= (1 << 13);
4537 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4538 1.1 christos }
4539 1.1 christos {
4540 1.1 christos BI opval = CPU (h_pbit);
4541 1.1 christos CPU (h_cbit) = opval;
4542 1.1 christos written |= (1 << 10);
4543 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4544 1.1 christos }
4545 1.1 christos }
4546 1.1 christos } else {
4547 1.1 christos {
4548 1.1 christos BI opval = 1;
4549 1.1 christos CPU (h_cbit) = opval;
4550 1.1 christos written |= (1 << 10);
4551 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4552 1.1 christos }
4553 1.1 christos }
4554 1.1 christos } else {
4555 1.1 christos {
4556 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4557 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4558 1.1 christos written |= (1 << 13);
4559 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4560 1.1 christos }
4561 1.1 christos }
4562 1.1 christos if (NEBI (tmp_postinc, 0)) {
4563 1.1 christos {
4564 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4565 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4566 1.1 christos }
4567 1.1 christos {
4568 1.1 christos SI opval = tmp_addr;
4569 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4570 1.1 christos written |= (1 << 9);
4571 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4572 1.1 christos }
4573 1.1 christos }
4574 1.1 christos }
4575 1.1 christos }
4576 1.1 christos }
4577 1.1 christos else if (EQSI (tmp_rno, 15)) {
4578 1.1 christos {
4579 1.1 christos SI tmp_addr;
4580 1.1 christos BI tmp_postinc;
4581 1.1 christos tmp_postinc = FLD (f_memmode);
4582 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4583 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4584 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4585 1.1 christos {
4586 1.1 christos {
4587 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4588 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4589 1.1 christos written |= (1 << 13);
4590 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4591 1.1 christos }
4592 1.1 christos {
4593 1.1 christos BI opval = CPU (h_pbit);
4594 1.1 christos CPU (h_cbit) = opval;
4595 1.1 christos written |= (1 << 10);
4596 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4597 1.1 christos }
4598 1.1 christos }
4599 1.1 christos } else {
4600 1.1 christos {
4601 1.1 christos BI opval = 1;
4602 1.1 christos CPU (h_cbit) = opval;
4603 1.1 christos written |= (1 << 10);
4604 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4605 1.1 christos }
4606 1.1 christos }
4607 1.1 christos } else {
4608 1.1 christos {
4609 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4610 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4611 1.1 christos written |= (1 << 13);
4612 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4613 1.1 christos }
4614 1.1 christos }
4615 1.1 christos if (NEBI (tmp_postinc, 0)) {
4616 1.1 christos {
4617 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4618 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4619 1.1 christos }
4620 1.1 christos {
4621 1.1 christos SI opval = tmp_addr;
4622 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4623 1.1 christos written |= (1 << 9);
4624 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4625 1.1 christos }
4626 1.1 christos }
4627 1.1 christos }
4628 1.1 christos }
4629 1.1 christos }
4630 1.1 christos else if (EQSI (tmp_rno, 0)) {
4631 1.1 christos {
4632 1.1 christos SI tmp_addr;
4633 1.1 christos BI tmp_postinc;
4634 1.1 christos tmp_postinc = FLD (f_memmode);
4635 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4636 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4637 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4638 1.1 christos {
4639 1.1 christos {
4640 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4641 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4642 1.1 christos written |= (1 << 12);
4643 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4644 1.1 christos }
4645 1.1 christos {
4646 1.1 christos BI opval = CPU (h_pbit);
4647 1.1 christos CPU (h_cbit) = opval;
4648 1.1 christos written |= (1 << 10);
4649 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4650 1.1 christos }
4651 1.1 christos }
4652 1.1 christos } else {
4653 1.1 christos {
4654 1.1 christos BI opval = 1;
4655 1.1 christos CPU (h_cbit) = opval;
4656 1.1 christos written |= (1 << 10);
4657 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4658 1.1 christos }
4659 1.1 christos }
4660 1.1 christos } else {
4661 1.1 christos {
4662 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4663 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4664 1.1 christos written |= (1 << 12);
4665 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4666 1.1 christos }
4667 1.1 christos }
4668 1.1 christos if (NEBI (tmp_postinc, 0)) {
4669 1.1 christos {
4670 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4671 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4672 1.1 christos }
4673 1.1 christos {
4674 1.1 christos SI opval = tmp_addr;
4675 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4676 1.1 christos written |= (1 << 9);
4677 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4678 1.1 christos }
4679 1.1 christos }
4680 1.1 christos }
4681 1.1 christos }
4682 1.1 christos }
4683 1.1 christos else if (EQSI (tmp_rno, 1)) {
4684 1.1 christos {
4685 1.1 christos SI tmp_addr;
4686 1.1 christos BI tmp_postinc;
4687 1.1 christos tmp_postinc = FLD (f_memmode);
4688 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4689 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4690 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4691 1.1 christos {
4692 1.1 christos {
4693 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4694 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4695 1.1 christos written |= (1 << 12);
4696 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4697 1.1 christos }
4698 1.1 christos {
4699 1.1 christos BI opval = CPU (h_pbit);
4700 1.1 christos CPU (h_cbit) = opval;
4701 1.1 christos written |= (1 << 10);
4702 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4703 1.1 christos }
4704 1.1 christos }
4705 1.1 christos } else {
4706 1.1 christos {
4707 1.1 christos BI opval = 1;
4708 1.1 christos CPU (h_cbit) = opval;
4709 1.1 christos written |= (1 << 10);
4710 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4711 1.1 christos }
4712 1.1 christos }
4713 1.1 christos } else {
4714 1.1 christos {
4715 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4716 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4717 1.1 christos written |= (1 << 12);
4718 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4719 1.1 christos }
4720 1.1 christos }
4721 1.1 christos if (NEBI (tmp_postinc, 0)) {
4722 1.1 christos {
4723 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4724 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4725 1.1 christos }
4726 1.1 christos {
4727 1.1 christos SI opval = tmp_addr;
4728 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4729 1.1 christos written |= (1 << 9);
4730 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4731 1.1 christos }
4732 1.1 christos }
4733 1.1 christos }
4734 1.1 christos }
4735 1.1 christos }
4736 1.1 christos else if (EQSI (tmp_rno, 4)) {
4737 1.1 christos {
4738 1.1 christos SI tmp_addr;
4739 1.1 christos BI tmp_postinc;
4740 1.1 christos tmp_postinc = FLD (f_memmode);
4741 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4742 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4743 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4744 1.1 christos {
4745 1.1 christos {
4746 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4747 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4748 1.1 christos written |= (1 << 11);
4749 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4750 1.1 christos }
4751 1.1 christos {
4752 1.1 christos BI opval = CPU (h_pbit);
4753 1.1 christos CPU (h_cbit) = opval;
4754 1.1 christos written |= (1 << 10);
4755 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4756 1.1 christos }
4757 1.1 christos }
4758 1.1 christos } else {
4759 1.1 christos {
4760 1.1 christos BI opval = 1;
4761 1.1 christos CPU (h_cbit) = opval;
4762 1.1 christos written |= (1 << 10);
4763 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4764 1.1 christos }
4765 1.1 christos }
4766 1.1 christos } else {
4767 1.1 christos {
4768 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4769 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4770 1.1 christos written |= (1 << 11);
4771 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4772 1.1 christos }
4773 1.1 christos }
4774 1.1 christos if (NEBI (tmp_postinc, 0)) {
4775 1.1 christos {
4776 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4777 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
4778 1.1 christos }
4779 1.1 christos {
4780 1.1 christos SI opval = tmp_addr;
4781 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4782 1.1 christos written |= (1 << 9);
4783 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4784 1.1 christos }
4785 1.1 christos }
4786 1.1 christos }
4787 1.1 christos }
4788 1.1 christos }
4789 1.1 christos else if (EQSI (tmp_rno, 8)) {
4790 1.1 christos {
4791 1.1 christos SI tmp_addr;
4792 1.1 christos BI tmp_postinc;
4793 1.1 christos tmp_postinc = FLD (f_memmode);
4794 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4795 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4796 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4797 1.1 christos {
4798 1.1 christos {
4799 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4800 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4801 1.1 christos written |= (1 << 13);
4802 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4803 1.1 christos }
4804 1.1 christos {
4805 1.1 christos BI opval = CPU (h_pbit);
4806 1.1 christos CPU (h_cbit) = opval;
4807 1.1 christos written |= (1 << 10);
4808 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4809 1.1 christos }
4810 1.1 christos }
4811 1.1 christos } else {
4812 1.1 christos {
4813 1.1 christos BI opval = 1;
4814 1.1 christos CPU (h_cbit) = opval;
4815 1.1 christos written |= (1 << 10);
4816 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4817 1.1 christos }
4818 1.1 christos }
4819 1.1 christos } else {
4820 1.1 christos {
4821 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4822 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4823 1.1 christos written |= (1 << 13);
4824 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4825 1.1 christos }
4826 1.1 christos }
4827 1.1 christos if (NEBI (tmp_postinc, 0)) {
4828 1.1 christos {
4829 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4830 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4831 1.1 christos }
4832 1.1 christos {
4833 1.1 christos SI opval = tmp_addr;
4834 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4835 1.1 christos written |= (1 << 9);
4836 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4837 1.1 christos }
4838 1.1 christos }
4839 1.1 christos }
4840 1.1 christos }
4841 1.1 christos }
4842 1.1 christos else {
4843 1.1 christos cgen_rtx_error (current_cpu, "write from unimplemented special register");
4844 1.1 christos }
4845 1.1 christos {
4846 1.1 christos {
4847 1.1 christos BI opval = 0;
4848 1.1 christos CPU (h_xbit) = opval;
4849 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4850 1.1 christos }
4851 1.1 christos {
4852 1.1 christos BI opval = 0;
4853 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4854 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4855 1.1 christos }
4856 1.1 christos }
4857 1.1 christos }
4858 1.1 christos
4859 1.1 christos abuf->written = written;
4860 1.1 christos #undef FLD
4861 1.1 christos }
4862 1.1 christos NEXT (vpc);
4863 1.1 christos
4864 1.1 christos CASE (sem, INSN_MOVE_SS_R) : /* move ${Ss},${Rd-sfield} */
4865 1.1 christos {
4866 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4867 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4868 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
4869 1.1 christos int UNUSED written = 0;
4870 1.1 christos IADDR UNUSED pc = abuf->addr;
4871 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4872 1.1 christos
4873 1.1 christos {
4874 1.1 christos {
4875 1.1 christos SI opval = GET_H_SUPR (FLD (f_operand2));
4876 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4877 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4878 1.1 christos }
4879 1.1 christos {
4880 1.1 christos {
4881 1.1 christos BI opval = 0;
4882 1.1 christos CPU (h_xbit) = opval;
4883 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4884 1.1 christos }
4885 1.1 christos {
4886 1.1 christos BI opval = 0;
4887 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4888 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4889 1.1 christos }
4890 1.1 christos }
4891 1.1 christos }
4892 1.1 christos
4893 1.1 christos #undef FLD
4894 1.1 christos }
4895 1.1 christos NEXT (vpc);
4896 1.1 christos
4897 1.1 christos CASE (sem, INSN_MOVE_R_SS) : /* move ${Rs},${Sd} */
4898 1.1 christos {
4899 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4900 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4901 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
4902 1.1 christos int UNUSED written = 0;
4903 1.1 christos IADDR UNUSED pc = abuf->addr;
4904 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4905 1.1 christos
4906 1.1 christos {
4907 1.1 christos {
4908 1.1 christos SI opval = GET_H_GR (FLD (f_operand1));
4909 1.1 christos SET_H_SUPR (FLD (f_operand2), opval);
4910 1.1 christos TRACE_RESULT (current_cpu, abuf, "supr", 'x', opval);
4911 1.1 christos }
4912 1.1 christos {
4913 1.1 christos {
4914 1.1 christos BI opval = 0;
4915 1.1 christos CPU (h_xbit) = opval;
4916 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4917 1.1 christos }
4918 1.1 christos {
4919 1.1 christos BI opval = 0;
4920 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4921 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4922 1.1 christos }
4923 1.1 christos }
4924 1.1 christos }
4925 1.1 christos
4926 1.1 christos #undef FLD
4927 1.1 christos }
4928 1.1 christos NEXT (vpc);
4929 1.1 christos
4930 1.1 christos CASE (sem, INSN_MOVEM_R_M_V32) : /* movem ${Rs-dfield},[${Rd-sfield}${inc}] */
4931 1.1 christos {
4932 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4933 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4934 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f
4935 1.1 christos int UNUSED written = 0;
4936 1.1 christos IADDR UNUSED pc = abuf->addr;
4937 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4938 1.1 christos
4939 1.1 christos {
4940 1.1 christos SI tmp_addr;
4941 1.1 christos BI tmp_postinc;
4942 1.1 christos tmp_postinc = FLD (f_memmode);
4943 1.1 christos {
4944 1.1 christos SI tmp_dummy;
4945 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
4946 1.1 christos }
4947 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
4948 1.1 christos {
4949 1.1 christos if (GESI (FLD (f_operand2), 0)) {
4950 1.1 christos {
4951 1.1 christos SI tmp_tmp;
4952 1.1 christos tmp_tmp = GET_H_GR (((UINT) 0));
4953 1.1 christos {
4954 1.1 christos SI opval = tmp_tmp;
4955 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4956 1.1 christos written |= (1 << 21);
4957 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4958 1.1 christos }
4959 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4960 1.1 christos }
4961 1.1 christos }
4962 1.1 christos if (GESI (FLD (f_operand2), 1)) {
4963 1.1 christos {
4964 1.1 christos SI tmp_tmp;
4965 1.1 christos tmp_tmp = GET_H_GR (((UINT) 1));
4966 1.1 christos {
4967 1.1 christos SI opval = tmp_tmp;
4968 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4969 1.1 christos written |= (1 << 21);
4970 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4971 1.1 christos }
4972 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4973 1.1 christos }
4974 1.1 christos }
4975 1.1 christos if (GESI (FLD (f_operand2), 2)) {
4976 1.1 christos {
4977 1.1 christos SI tmp_tmp;
4978 1.1 christos tmp_tmp = GET_H_GR (((UINT) 2));
4979 1.1 christos {
4980 1.1 christos SI opval = tmp_tmp;
4981 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4982 1.1 christos written |= (1 << 21);
4983 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4984 1.1 christos }
4985 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4986 1.1 christos }
4987 1.1 christos }
4988 1.1 christos if (GESI (FLD (f_operand2), 3)) {
4989 1.1 christos {
4990 1.1 christos SI tmp_tmp;
4991 1.1 christos tmp_tmp = GET_H_GR (((UINT) 3));
4992 1.1 christos {
4993 1.1 christos SI opval = tmp_tmp;
4994 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4995 1.1 christos written |= (1 << 21);
4996 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4997 1.1 christos }
4998 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4999 1.1 christos }
5000 1.1 christos }
5001 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5002 1.1 christos {
5003 1.1 christos SI tmp_tmp;
5004 1.1 christos tmp_tmp = GET_H_GR (((UINT) 4));
5005 1.1 christos {
5006 1.1 christos SI opval = tmp_tmp;
5007 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5008 1.1 christos written |= (1 << 21);
5009 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5010 1.1 christos }
5011 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5012 1.1 christos }
5013 1.1 christos }
5014 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5015 1.1 christos {
5016 1.1 christos SI tmp_tmp;
5017 1.1 christos tmp_tmp = GET_H_GR (((UINT) 5));
5018 1.1 christos {
5019 1.1 christos SI opval = tmp_tmp;
5020 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5021 1.1 christos written |= (1 << 21);
5022 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5023 1.1 christos }
5024 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5025 1.1 christos }
5026 1.1 christos }
5027 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5028 1.1 christos {
5029 1.1 christos SI tmp_tmp;
5030 1.1 christos tmp_tmp = GET_H_GR (((UINT) 6));
5031 1.1 christos {
5032 1.1 christos SI opval = tmp_tmp;
5033 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5034 1.1 christos written |= (1 << 21);
5035 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5036 1.1 christos }
5037 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5038 1.1 christos }
5039 1.1 christos }
5040 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5041 1.1 christos {
5042 1.1 christos SI tmp_tmp;
5043 1.1 christos tmp_tmp = GET_H_GR (((UINT) 7));
5044 1.1 christos {
5045 1.1 christos SI opval = tmp_tmp;
5046 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5047 1.1 christos written |= (1 << 21);
5048 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5049 1.1 christos }
5050 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5051 1.1 christos }
5052 1.1 christos }
5053 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5054 1.1 christos {
5055 1.1 christos SI tmp_tmp;
5056 1.1 christos tmp_tmp = GET_H_GR (((UINT) 8));
5057 1.1 christos {
5058 1.1 christos SI opval = tmp_tmp;
5059 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5060 1.1 christos written |= (1 << 21);
5061 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5062 1.1 christos }
5063 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5064 1.1 christos }
5065 1.1 christos }
5066 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5067 1.1 christos {
5068 1.1 christos SI tmp_tmp;
5069 1.1 christos tmp_tmp = GET_H_GR (((UINT) 9));
5070 1.1 christos {
5071 1.1 christos SI opval = tmp_tmp;
5072 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5073 1.1 christos written |= (1 << 21);
5074 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5075 1.1 christos }
5076 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5077 1.1 christos }
5078 1.1 christos }
5079 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5080 1.1 christos {
5081 1.1 christos SI tmp_tmp;
5082 1.1 christos tmp_tmp = GET_H_GR (((UINT) 10));
5083 1.1 christos {
5084 1.1 christos SI opval = tmp_tmp;
5085 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5086 1.1 christos written |= (1 << 21);
5087 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5088 1.1 christos }
5089 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5090 1.1 christos }
5091 1.1 christos }
5092 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5093 1.1 christos {
5094 1.1 christos SI tmp_tmp;
5095 1.1 christos tmp_tmp = GET_H_GR (((UINT) 11));
5096 1.1 christos {
5097 1.1 christos SI opval = tmp_tmp;
5098 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5099 1.1 christos written |= (1 << 21);
5100 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5101 1.1 christos }
5102 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5103 1.1 christos }
5104 1.1 christos }
5105 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5106 1.1 christos {
5107 1.1 christos SI tmp_tmp;
5108 1.1 christos tmp_tmp = GET_H_GR (((UINT) 12));
5109 1.1 christos {
5110 1.1 christos SI opval = tmp_tmp;
5111 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5112 1.1 christos written |= (1 << 21);
5113 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5114 1.1 christos }
5115 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5116 1.1 christos }
5117 1.1 christos }
5118 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5119 1.1 christos {
5120 1.1 christos SI tmp_tmp;
5121 1.1 christos tmp_tmp = GET_H_GR (((UINT) 13));
5122 1.1 christos {
5123 1.1 christos SI opval = tmp_tmp;
5124 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5125 1.1 christos written |= (1 << 21);
5126 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5127 1.1 christos }
5128 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5129 1.1 christos }
5130 1.1 christos }
5131 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5132 1.1 christos {
5133 1.1 christos SI tmp_tmp;
5134 1.1 christos tmp_tmp = GET_H_GR (((UINT) 14));
5135 1.1 christos {
5136 1.1 christos SI opval = tmp_tmp;
5137 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5138 1.1 christos written |= (1 << 21);
5139 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5140 1.1 christos }
5141 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5142 1.1 christos }
5143 1.1 christos }
5144 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5145 1.1 christos {
5146 1.1 christos SI tmp_tmp;
5147 1.1 christos tmp_tmp = GET_H_GR (((UINT) 15));
5148 1.1 christos {
5149 1.1 christos SI opval = tmp_tmp;
5150 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5151 1.1 christos written |= (1 << 21);
5152 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5153 1.1 christos }
5154 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5155 1.1 christos }
5156 1.1 christos }
5157 1.1 christos }
5158 1.1 christos if (NEBI (tmp_postinc, 0)) {
5159 1.1 christos {
5160 1.1 christos SI opval = tmp_addr;
5161 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5162 1.1 christos written |= (1 << 20);
5163 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5164 1.1 christos }
5165 1.1 christos }
5166 1.1 christos {
5167 1.1 christos {
5168 1.1 christos BI opval = 0;
5169 1.1 christos CPU (h_xbit) = opval;
5170 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5171 1.1 christos }
5172 1.1 christos {
5173 1.1 christos BI opval = 0;
5174 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5175 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5176 1.1 christos }
5177 1.1 christos }
5178 1.1 christos }
5179 1.1 christos
5180 1.1 christos abuf->written = written;
5181 1.1 christos #undef FLD
5182 1.1 christos }
5183 1.1 christos NEXT (vpc);
5184 1.1 christos
5185 1.1 christos CASE (sem, INSN_MOVEM_M_R_V32) : /* movem [${Rs}${inc}],${Rd} */
5186 1.1 christos {
5187 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5188 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5189 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f
5190 1.1 christos int UNUSED written = 0;
5191 1.1 christos IADDR UNUSED pc = abuf->addr;
5192 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5193 1.1 christos
5194 1.1 christos {
5195 1.1 christos SI tmp_addr;
5196 1.1 christos BI tmp_postinc;
5197 1.1 christos tmp_postinc = FLD (f_memmode);
5198 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
5199 1.1 christos {
5200 1.1 christos SI tmp_dummy;
5201 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
5202 1.1 christos }
5203 1.1 christos {
5204 1.1 christos if (GESI (FLD (f_operand2), 0)) {
5205 1.1 christos {
5206 1.1 christos SI tmp_tmp;
5207 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5208 1.1 christos {
5209 1.1 christos SI opval = tmp_tmp;
5210 1.1 christos SET_H_GR (((UINT) 0), opval);
5211 1.1 christos written |= (1 << 6);
5212 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5213 1.1 christos }
5214 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5215 1.1 christos }
5216 1.1 christos }
5217 1.1 christos if (GESI (FLD (f_operand2), 1)) {
5218 1.1 christos {
5219 1.1 christos SI tmp_tmp;
5220 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5221 1.1 christos {
5222 1.1 christos SI opval = tmp_tmp;
5223 1.1 christos SET_H_GR (((UINT) 1), opval);
5224 1.1 christos written |= (1 << 7);
5225 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5226 1.1 christos }
5227 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5228 1.1 christos }
5229 1.1 christos }
5230 1.1 christos if (GESI (FLD (f_operand2), 2)) {
5231 1.1 christos {
5232 1.1 christos SI tmp_tmp;
5233 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5234 1.1 christos {
5235 1.1 christos SI opval = tmp_tmp;
5236 1.1 christos SET_H_GR (((UINT) 2), opval);
5237 1.1 christos written |= (1 << 14);
5238 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5239 1.1 christos }
5240 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5241 1.1 christos }
5242 1.1 christos }
5243 1.1 christos if (GESI (FLD (f_operand2), 3)) {
5244 1.1 christos {
5245 1.1 christos SI tmp_tmp;
5246 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5247 1.1 christos {
5248 1.1 christos SI opval = tmp_tmp;
5249 1.1 christos SET_H_GR (((UINT) 3), opval);
5250 1.1 christos written |= (1 << 15);
5251 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5252 1.1 christos }
5253 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5254 1.1 christos }
5255 1.1 christos }
5256 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5257 1.1 christos {
5258 1.1 christos SI tmp_tmp;
5259 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5260 1.1 christos {
5261 1.1 christos SI opval = tmp_tmp;
5262 1.1 christos SET_H_GR (((UINT) 4), opval);
5263 1.1 christos written |= (1 << 16);
5264 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5265 1.1 christos }
5266 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5267 1.1 christos }
5268 1.1 christos }
5269 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5270 1.1 christos {
5271 1.1 christos SI tmp_tmp;
5272 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5273 1.1 christos {
5274 1.1 christos SI opval = tmp_tmp;
5275 1.1 christos SET_H_GR (((UINT) 5), opval);
5276 1.1 christos written |= (1 << 17);
5277 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5278 1.1 christos }
5279 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5280 1.1 christos }
5281 1.1 christos }
5282 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5283 1.1 christos {
5284 1.1 christos SI tmp_tmp;
5285 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5286 1.1 christos {
5287 1.1 christos SI opval = tmp_tmp;
5288 1.1 christos SET_H_GR (((UINT) 6), opval);
5289 1.1 christos written |= (1 << 18);
5290 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5291 1.1 christos }
5292 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5293 1.1 christos }
5294 1.1 christos }
5295 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5296 1.1 christos {
5297 1.1 christos SI tmp_tmp;
5298 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5299 1.1 christos {
5300 1.1 christos SI opval = tmp_tmp;
5301 1.1 christos SET_H_GR (((UINT) 7), opval);
5302 1.1 christos written |= (1 << 19);
5303 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5304 1.1 christos }
5305 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5306 1.1 christos }
5307 1.1 christos }
5308 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5309 1.1 christos {
5310 1.1 christos SI tmp_tmp;
5311 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5312 1.1 christos {
5313 1.1 christos SI opval = tmp_tmp;
5314 1.1 christos SET_H_GR (((UINT) 8), opval);
5315 1.1 christos written |= (1 << 20);
5316 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5317 1.1 christos }
5318 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5319 1.1 christos }
5320 1.1 christos }
5321 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5322 1.1 christos {
5323 1.1 christos SI tmp_tmp;
5324 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5325 1.1 christos {
5326 1.1 christos SI opval = tmp_tmp;
5327 1.1 christos SET_H_GR (((UINT) 9), opval);
5328 1.1 christos written |= (1 << 21);
5329 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5330 1.1 christos }
5331 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5332 1.1 christos }
5333 1.1 christos }
5334 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5335 1.1 christos {
5336 1.1 christos SI tmp_tmp;
5337 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5338 1.1 christos {
5339 1.1 christos SI opval = tmp_tmp;
5340 1.1 christos SET_H_GR (((UINT) 10), opval);
5341 1.1 christos written |= (1 << 8);
5342 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5343 1.1 christos }
5344 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5345 1.1 christos }
5346 1.1 christos }
5347 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5348 1.1 christos {
5349 1.1 christos SI tmp_tmp;
5350 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5351 1.1 christos {
5352 1.1 christos SI opval = tmp_tmp;
5353 1.1 christos SET_H_GR (((UINT) 11), opval);
5354 1.1 christos written |= (1 << 9);
5355 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5356 1.1 christos }
5357 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5358 1.1 christos }
5359 1.1 christos }
5360 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5361 1.1 christos {
5362 1.1 christos SI tmp_tmp;
5363 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5364 1.1 christos {
5365 1.1 christos SI opval = tmp_tmp;
5366 1.1 christos SET_H_GR (((UINT) 12), opval);
5367 1.1 christos written |= (1 << 10);
5368 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5369 1.1 christos }
5370 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5371 1.1 christos }
5372 1.1 christos }
5373 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5374 1.1 christos {
5375 1.1 christos SI tmp_tmp;
5376 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5377 1.1 christos {
5378 1.1 christos SI opval = tmp_tmp;
5379 1.1 christos SET_H_GR (((UINT) 13), opval);
5380 1.1 christos written |= (1 << 11);
5381 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5382 1.1 christos }
5383 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5384 1.1 christos }
5385 1.1 christos }
5386 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5387 1.1 christos {
5388 1.1 christos SI tmp_tmp;
5389 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5390 1.1 christos {
5391 1.1 christos SI opval = tmp_tmp;
5392 1.1 christos SET_H_GR (((UINT) 14), opval);
5393 1.1 christos written |= (1 << 12);
5394 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5395 1.1 christos }
5396 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5397 1.1 christos }
5398 1.1 christos }
5399 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5400 1.1 christos {
5401 1.1 christos SI tmp_tmp;
5402 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5403 1.1 christos {
5404 1.1 christos SI opval = tmp_tmp;
5405 1.1 christos SET_H_GR (((UINT) 15), opval);
5406 1.1 christos written |= (1 << 13);
5407 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5408 1.1 christos }
5409 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5410 1.1 christos }
5411 1.1 christos }
5412 1.1 christos }
5413 1.1 christos if (NEBI (tmp_postinc, 0)) {
5414 1.1 christos {
5415 1.1 christos SI opval = tmp_addr;
5416 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5417 1.1 christos written |= (1 << 5);
5418 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5419 1.1 christos }
5420 1.1 christos }
5421 1.1 christos {
5422 1.1 christos {
5423 1.1 christos BI opval = 0;
5424 1.1 christos CPU (h_xbit) = opval;
5425 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5426 1.1 christos }
5427 1.1 christos {
5428 1.1 christos BI opval = 0;
5429 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5430 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5431 1.1 christos }
5432 1.1 christos }
5433 1.1 christos }
5434 1.1 christos
5435 1.1 christos abuf->written = written;
5436 1.1 christos #undef FLD
5437 1.1 christos }
5438 1.1 christos NEXT (vpc);
5439 1.1 christos
5440 1.1 christos CASE (sem, INSN_ADD_B_R) : /* add.b $Rs,$Rd */
5441 1.1 christos {
5442 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5443 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5444 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5445 1.1 christos int UNUSED written = 0;
5446 1.1 christos IADDR UNUSED pc = abuf->addr;
5447 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5448 1.1 christos
5449 1.1 christos {
5450 1.1 christos QI tmp_tmpopd;
5451 1.1 christos QI tmp_tmpops;
5452 1.1 christos BI tmp_carry;
5453 1.1 christos QI tmp_newval;
5454 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5455 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5456 1.1 christos tmp_carry = CPU (h_cbit);
5457 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5458 1.1 christos {
5459 1.1 christos SI tmp_oldregval;
5460 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5461 1.1 christos {
5462 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5463 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5464 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5465 1.1 christos }
5466 1.1 christos }
5467 1.1 christos {
5468 1.1 christos {
5469 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))));
5470 1.1 christos CPU (h_cbit) = opval;
5471 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5472 1.1 christos }
5473 1.1 christos {
5474 1.1 christos BI opval = LTQI (tmp_newval, 0);
5475 1.1 christos CPU (h_nbit) = opval;
5476 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5477 1.1 christos }
5478 1.1 christos {
5479 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5480 1.1 christos CPU (h_zbit) = opval;
5481 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5482 1.1 christos }
5483 1.1 christos {
5484 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)));
5485 1.1 christos CPU (h_vbit) = opval;
5486 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5487 1.1 christos }
5488 1.1 christos {
5489 1.1 christos {
5490 1.1 christos BI opval = 0;
5491 1.1 christos CPU (h_xbit) = opval;
5492 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5493 1.1 christos }
5494 1.1 christos {
5495 1.1 christos BI opval = 0;
5496 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5497 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5498 1.1 christos }
5499 1.1 christos }
5500 1.1 christos }
5501 1.1 christos }
5502 1.1 christos
5503 1.1 christos #undef FLD
5504 1.1 christos }
5505 1.1 christos NEXT (vpc);
5506 1.1 christos
5507 1.1 christos CASE (sem, INSN_ADD_W_R) : /* add.w $Rs,$Rd */
5508 1.1 christos {
5509 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5510 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5511 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5512 1.1 christos int UNUSED written = 0;
5513 1.1 christos IADDR UNUSED pc = abuf->addr;
5514 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5515 1.1 christos
5516 1.1 christos {
5517 1.1 christos HI tmp_tmpopd;
5518 1.1 christos HI tmp_tmpops;
5519 1.1 christos BI tmp_carry;
5520 1.1 christos HI tmp_newval;
5521 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5522 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5523 1.1 christos tmp_carry = CPU (h_cbit);
5524 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5525 1.1 christos {
5526 1.1 christos SI tmp_oldregval;
5527 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5528 1.1 christos {
5529 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5530 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5531 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5532 1.1 christos }
5533 1.1 christos }
5534 1.1 christos {
5535 1.1 christos {
5536 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))));
5537 1.1 christos CPU (h_cbit) = opval;
5538 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5539 1.1 christos }
5540 1.1 christos {
5541 1.1 christos BI opval = LTHI (tmp_newval, 0);
5542 1.1 christos CPU (h_nbit) = opval;
5543 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5544 1.1 christos }
5545 1.1 christos {
5546 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5547 1.1 christos CPU (h_zbit) = opval;
5548 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5549 1.1 christos }
5550 1.1 christos {
5551 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)));
5552 1.1 christos CPU (h_vbit) = opval;
5553 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5554 1.1 christos }
5555 1.1 christos {
5556 1.1 christos {
5557 1.1 christos BI opval = 0;
5558 1.1 christos CPU (h_xbit) = opval;
5559 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5560 1.1 christos }
5561 1.1 christos {
5562 1.1 christos BI opval = 0;
5563 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5564 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5565 1.1 christos }
5566 1.1 christos }
5567 1.1 christos }
5568 1.1 christos }
5569 1.1 christos
5570 1.1 christos #undef FLD
5571 1.1 christos }
5572 1.1 christos NEXT (vpc);
5573 1.1 christos
5574 1.1 christos CASE (sem, INSN_ADD_D_R) : /* add.d $Rs,$Rd */
5575 1.1 christos {
5576 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5577 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5578 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5579 1.1 christos int UNUSED written = 0;
5580 1.1 christos IADDR UNUSED pc = abuf->addr;
5581 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5582 1.1 christos
5583 1.1 christos {
5584 1.1 christos SI tmp_tmpopd;
5585 1.1 christos SI tmp_tmpops;
5586 1.1 christos BI tmp_carry;
5587 1.1 christos SI tmp_newval;
5588 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5589 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5590 1.1 christos tmp_carry = CPU (h_cbit);
5591 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5592 1.1 christos {
5593 1.1 christos SI opval = tmp_newval;
5594 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5595 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5596 1.1 christos }
5597 1.1 christos {
5598 1.1 christos {
5599 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))));
5600 1.1 christos CPU (h_cbit) = opval;
5601 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5602 1.1 christos }
5603 1.1 christos {
5604 1.1 christos BI opval = LTSI (tmp_newval, 0);
5605 1.1 christos CPU (h_nbit) = opval;
5606 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5607 1.1 christos }
5608 1.1 christos {
5609 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5610 1.1 christos CPU (h_zbit) = opval;
5611 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5612 1.1 christos }
5613 1.1 christos {
5614 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)));
5615 1.1 christos CPU (h_vbit) = opval;
5616 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5617 1.1 christos }
5618 1.1 christos {
5619 1.1 christos {
5620 1.1 christos BI opval = 0;
5621 1.1 christos CPU (h_xbit) = opval;
5622 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5623 1.1 christos }
5624 1.1 christos {
5625 1.1 christos BI opval = 0;
5626 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5627 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5628 1.1 christos }
5629 1.1 christos }
5630 1.1 christos }
5631 1.1 christos }
5632 1.1 christos
5633 1.1 christos #undef FLD
5634 1.1 christos }
5635 1.1 christos NEXT (vpc);
5636 1.1 christos
5637 1.1 christos CASE (sem, INSN_ADD_M_B_M) : /* add-m.b [${Rs}${inc}],${Rd} */
5638 1.1 christos {
5639 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5640 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5641 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5642 1.1 christos int UNUSED written = 0;
5643 1.1 christos IADDR UNUSED pc = abuf->addr;
5644 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5645 1.1 christos
5646 1.1 christos {
5647 1.1 christos QI tmp_tmpopd;
5648 1.1 christos QI tmp_tmpops;
5649 1.1 christos BI tmp_carry;
5650 1.1 christos QI tmp_newval;
5651 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5652 1.1 christos QI tmp_tmp_mem;
5653 1.1 christos BI tmp_postinc;
5654 1.1 christos tmp_postinc = FLD (f_memmode);
5655 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5656 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
5657 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5658 1.1 christos {
5659 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5660 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
5661 1.1 christos }
5662 1.1 christos {
5663 1.1 christos SI opval = tmp_addr;
5664 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5665 1.1 christos written |= (1 << 12);
5666 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5667 1.1 christos }
5668 1.1 christos }
5669 1.1 christos }
5670 1.1 christos ; tmp_tmp_mem; });
5671 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5672 1.1 christos tmp_carry = CPU (h_cbit);
5673 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5674 1.1 christos {
5675 1.1 christos SI tmp_oldregval;
5676 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))));
5677 1.1 christos {
5678 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5679 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5680 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5681 1.1 christos }
5682 1.1 christos }
5683 1.1 christos {
5684 1.1 christos {
5685 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))));
5686 1.1 christos CPU (h_cbit) = opval;
5687 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5688 1.1 christos }
5689 1.1 christos {
5690 1.1 christos BI opval = LTQI (tmp_newval, 0);
5691 1.1 christos CPU (h_nbit) = opval;
5692 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5693 1.1 christos }
5694 1.1 christos {
5695 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5696 1.1 christos CPU (h_zbit) = opval;
5697 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5698 1.1 christos }
5699 1.1 christos {
5700 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)));
5701 1.1 christos CPU (h_vbit) = opval;
5702 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5703 1.1 christos }
5704 1.1 christos {
5705 1.1 christos {
5706 1.1 christos BI opval = 0;
5707 1.1 christos CPU (h_xbit) = opval;
5708 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5709 1.1 christos }
5710 1.1 christos {
5711 1.1 christos BI opval = 0;
5712 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5713 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5714 1.1 christos }
5715 1.1 christos }
5716 1.1 christos }
5717 1.1 christos }
5718 1.1 christos
5719 1.1 christos abuf->written = written;
5720 1.1 christos #undef FLD
5721 1.1 christos }
5722 1.1 christos NEXT (vpc);
5723 1.1 christos
5724 1.1 christos CASE (sem, INSN_ADD_M_W_M) : /* add-m.w [${Rs}${inc}],${Rd} */
5725 1.1 christos {
5726 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5727 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5728 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5729 1.1 christos int UNUSED written = 0;
5730 1.1 christos IADDR UNUSED pc = abuf->addr;
5731 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5732 1.1 christos
5733 1.1 christos {
5734 1.1 christos HI tmp_tmpopd;
5735 1.1 christos HI tmp_tmpops;
5736 1.1 christos BI tmp_carry;
5737 1.1 christos HI tmp_newval;
5738 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5739 1.1 christos HI tmp_tmp_mem;
5740 1.1 christos BI tmp_postinc;
5741 1.1 christos tmp_postinc = FLD (f_memmode);
5742 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5743 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
5744 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5745 1.1 christos {
5746 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5747 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
5748 1.1 christos }
5749 1.1 christos {
5750 1.1 christos SI opval = tmp_addr;
5751 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5752 1.1 christos written |= (1 << 12);
5753 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5754 1.1 christos }
5755 1.1 christos }
5756 1.1 christos }
5757 1.1 christos ; tmp_tmp_mem; });
5758 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5759 1.1 christos tmp_carry = CPU (h_cbit);
5760 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5761 1.1 christos {
5762 1.1 christos SI tmp_oldregval;
5763 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))));
5764 1.1 christos {
5765 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5766 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5767 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5768 1.1 christos }
5769 1.1 christos }
5770 1.1 christos {
5771 1.1 christos {
5772 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))));
5773 1.1 christos CPU (h_cbit) = opval;
5774 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5775 1.1 christos }
5776 1.1 christos {
5777 1.1 christos BI opval = LTHI (tmp_newval, 0);
5778 1.1 christos CPU (h_nbit) = opval;
5779 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5780 1.1 christos }
5781 1.1 christos {
5782 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5783 1.1 christos CPU (h_zbit) = opval;
5784 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5785 1.1 christos }
5786 1.1 christos {
5787 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)));
5788 1.1 christos CPU (h_vbit) = opval;
5789 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5790 1.1 christos }
5791 1.1 christos {
5792 1.1 christos {
5793 1.1 christos BI opval = 0;
5794 1.1 christos CPU (h_xbit) = opval;
5795 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5796 1.1 christos }
5797 1.1 christos {
5798 1.1 christos BI opval = 0;
5799 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5800 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5801 1.1 christos }
5802 1.1 christos }
5803 1.1 christos }
5804 1.1 christos }
5805 1.1 christos
5806 1.1 christos abuf->written = written;
5807 1.1 christos #undef FLD
5808 1.1 christos }
5809 1.1 christos NEXT (vpc);
5810 1.1 christos
5811 1.1 christos CASE (sem, INSN_ADD_M_D_M) : /* add-m.d [${Rs}${inc}],${Rd} */
5812 1.1 christos {
5813 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5814 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5815 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5816 1.1 christos int UNUSED written = 0;
5817 1.1 christos IADDR UNUSED pc = abuf->addr;
5818 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5819 1.1 christos
5820 1.1 christos {
5821 1.1 christos SI tmp_tmpopd;
5822 1.1 christos SI tmp_tmpops;
5823 1.1 christos BI tmp_carry;
5824 1.1 christos SI tmp_newval;
5825 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5826 1.1 christos SI tmp_tmp_mem;
5827 1.1 christos BI tmp_postinc;
5828 1.1 christos tmp_postinc = FLD (f_memmode);
5829 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5830 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
5831 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5832 1.1 christos {
5833 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5834 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5835 1.1 christos }
5836 1.1 christos {
5837 1.1 christos SI opval = tmp_addr;
5838 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5839 1.1 christos written |= (1 << 11);
5840 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5841 1.1 christos }
5842 1.1 christos }
5843 1.1 christos }
5844 1.1 christos ; tmp_tmp_mem; });
5845 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5846 1.1 christos tmp_carry = CPU (h_cbit);
5847 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5848 1.1 christos {
5849 1.1 christos SI opval = tmp_newval;
5850 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5851 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5852 1.1 christos }
5853 1.1 christos {
5854 1.1 christos {
5855 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))));
5856 1.1 christos CPU (h_cbit) = opval;
5857 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5858 1.1 christos }
5859 1.1 christos {
5860 1.1 christos BI opval = LTSI (tmp_newval, 0);
5861 1.1 christos CPU (h_nbit) = opval;
5862 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5863 1.1 christos }
5864 1.1 christos {
5865 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5866 1.1 christos CPU (h_zbit) = opval;
5867 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5868 1.1 christos }
5869 1.1 christos {
5870 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)));
5871 1.1 christos CPU (h_vbit) = opval;
5872 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5873 1.1 christos }
5874 1.1 christos {
5875 1.1 christos {
5876 1.1 christos BI opval = 0;
5877 1.1 christos CPU (h_xbit) = opval;
5878 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5879 1.1 christos }
5880 1.1 christos {
5881 1.1 christos BI opval = 0;
5882 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5883 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5884 1.1 christos }
5885 1.1 christos }
5886 1.1 christos }
5887 1.1 christos }
5888 1.1 christos
5889 1.1 christos abuf->written = written;
5890 1.1 christos #undef FLD
5891 1.1 christos }
5892 1.1 christos NEXT (vpc);
5893 1.1 christos
5894 1.1 christos CASE (sem, INSN_ADDCBR) : /* add.b ${sconst8}],${Rd} */
5895 1.1 christos {
5896 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5897 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5898 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
5899 1.1 christos int UNUSED written = 0;
5900 1.1 christos IADDR UNUSED pc = abuf->addr;
5901 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5902 1.1 christos
5903 1.1 christos {
5904 1.1 christos QI tmp_tmpopd;
5905 1.1 christos QI tmp_tmpops;
5906 1.1 christos BI tmp_carry;
5907 1.1 christos QI tmp_newval;
5908 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
5909 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5910 1.1 christos tmp_carry = CPU (h_cbit);
5911 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5912 1.1 christos {
5913 1.1 christos SI tmp_oldregval;
5914 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5915 1.1 christos {
5916 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5917 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5918 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5919 1.1 christos }
5920 1.1 christos }
5921 1.1 christos {
5922 1.1 christos {
5923 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))));
5924 1.1 christos CPU (h_cbit) = opval;
5925 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5926 1.1 christos }
5927 1.1 christos {
5928 1.1 christos BI opval = LTQI (tmp_newval, 0);
5929 1.1 christos CPU (h_nbit) = opval;
5930 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5931 1.1 christos }
5932 1.1 christos {
5933 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5934 1.1 christos CPU (h_zbit) = opval;
5935 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5936 1.1 christos }
5937 1.1 christos {
5938 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)));
5939 1.1 christos CPU (h_vbit) = opval;
5940 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5941 1.1 christos }
5942 1.1 christos {
5943 1.1 christos {
5944 1.1 christos BI opval = 0;
5945 1.1 christos CPU (h_xbit) = opval;
5946 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5947 1.1 christos }
5948 1.1 christos {
5949 1.1 christos BI opval = 0;
5950 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5951 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5952 1.1 christos }
5953 1.1 christos }
5954 1.1 christos }
5955 1.1 christos }
5956 1.1 christos
5957 1.1 christos #undef FLD
5958 1.1 christos }
5959 1.1 christos NEXT (vpc);
5960 1.1 christos
5961 1.1 christos CASE (sem, INSN_ADDCWR) : /* add.w ${sconst16}],${Rd} */
5962 1.1 christos {
5963 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5964 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5965 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
5966 1.1 christos int UNUSED written = 0;
5967 1.1 christos IADDR UNUSED pc = abuf->addr;
5968 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5969 1.1 christos
5970 1.1 christos {
5971 1.1 christos HI tmp_tmpopd;
5972 1.1 christos HI tmp_tmpops;
5973 1.1 christos BI tmp_carry;
5974 1.1 christos HI tmp_newval;
5975 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
5976 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5977 1.1 christos tmp_carry = CPU (h_cbit);
5978 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5979 1.1 christos {
5980 1.1 christos SI tmp_oldregval;
5981 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5982 1.1 christos {
5983 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5984 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5985 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5986 1.1 christos }
5987 1.1 christos }
5988 1.1 christos {
5989 1.1 christos {
5990 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))));
5991 1.1 christos CPU (h_cbit) = opval;
5992 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5993 1.1 christos }
5994 1.1 christos {
5995 1.1 christos BI opval = LTHI (tmp_newval, 0);
5996 1.1 christos CPU (h_nbit) = opval;
5997 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5998 1.1 christos }
5999 1.1 christos {
6000 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6001 1.1 christos CPU (h_zbit) = opval;
6002 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6003 1.1 christos }
6004 1.1 christos {
6005 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)));
6006 1.1 christos CPU (h_vbit) = opval;
6007 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6008 1.1 christos }
6009 1.1 christos {
6010 1.1 christos {
6011 1.1 christos BI opval = 0;
6012 1.1 christos CPU (h_xbit) = opval;
6013 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6014 1.1 christos }
6015 1.1 christos {
6016 1.1 christos BI opval = 0;
6017 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6018 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6019 1.1 christos }
6020 1.1 christos }
6021 1.1 christos }
6022 1.1 christos }
6023 1.1 christos
6024 1.1 christos #undef FLD
6025 1.1 christos }
6026 1.1 christos NEXT (vpc);
6027 1.1 christos
6028 1.1 christos CASE (sem, INSN_ADDCDR) : /* add.d ${const32}],${Rd} */
6029 1.1 christos {
6030 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6031 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6032 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
6033 1.1 christos int UNUSED written = 0;
6034 1.1 christos IADDR UNUSED pc = abuf->addr;
6035 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
6036 1.1 christos
6037 1.1 christos {
6038 1.1 christos SI tmp_tmpopd;
6039 1.1 christos SI tmp_tmpops;
6040 1.1 christos BI tmp_carry;
6041 1.1 christos SI tmp_newval;
6042 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
6043 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6044 1.1 christos tmp_carry = CPU (h_cbit);
6045 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6046 1.1 christos {
6047 1.1 christos SI opval = tmp_newval;
6048 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6049 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6050 1.1 christos }
6051 1.1 christos {
6052 1.1 christos {
6053 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))));
6054 1.1 christos CPU (h_cbit) = opval;
6055 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6056 1.1 christos }
6057 1.1 christos {
6058 1.1 christos BI opval = LTSI (tmp_newval, 0);
6059 1.1 christos CPU (h_nbit) = opval;
6060 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6061 1.1 christos }
6062 1.1 christos {
6063 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6064 1.1 christos CPU (h_zbit) = opval;
6065 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6066 1.1 christos }
6067 1.1 christos {
6068 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)));
6069 1.1 christos CPU (h_vbit) = opval;
6070 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6071 1.1 christos }
6072 1.1 christos {
6073 1.1 christos {
6074 1.1 christos BI opval = 0;
6075 1.1 christos CPU (h_xbit) = opval;
6076 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6077 1.1 christos }
6078 1.1 christos {
6079 1.1 christos BI opval = 0;
6080 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6081 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6082 1.1 christos }
6083 1.1 christos }
6084 1.1 christos }
6085 1.1 christos }
6086 1.1 christos
6087 1.1 christos #undef FLD
6088 1.1 christos }
6089 1.1 christos NEXT (vpc);
6090 1.1 christos
6091 1.1 christos CASE (sem, INSN_ADDS_B_R) : /* adds.b $Rs,$Rd */
6092 1.1 christos {
6093 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6094 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6095 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6096 1.1 christos int UNUSED written = 0;
6097 1.1 christos IADDR UNUSED pc = abuf->addr;
6098 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6099 1.1 christos
6100 1.1 christos {
6101 1.1 christos SI tmp_tmpopd;
6102 1.1 christos SI tmp_tmpops;
6103 1.1 christos BI tmp_carry;
6104 1.1 christos SI tmp_newval;
6105 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6106 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6107 1.1 christos tmp_carry = CPU (h_cbit);
6108 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6109 1.1 christos {
6110 1.1 christos SI opval = tmp_newval;
6111 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6112 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6113 1.1 christos }
6114 1.1 christos {
6115 1.1 christos {
6116 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))));
6117 1.1 christos CPU (h_cbit) = opval;
6118 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6119 1.1 christos }
6120 1.1 christos {
6121 1.1 christos BI opval = LTSI (tmp_newval, 0);
6122 1.1 christos CPU (h_nbit) = opval;
6123 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6124 1.1 christos }
6125 1.1 christos {
6126 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6127 1.1 christos CPU (h_zbit) = opval;
6128 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6129 1.1 christos }
6130 1.1 christos {
6131 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)));
6132 1.1 christos CPU (h_vbit) = opval;
6133 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6134 1.1 christos }
6135 1.1 christos {
6136 1.1 christos {
6137 1.1 christos BI opval = 0;
6138 1.1 christos CPU (h_xbit) = opval;
6139 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6140 1.1 christos }
6141 1.1 christos {
6142 1.1 christos BI opval = 0;
6143 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6144 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6145 1.1 christos }
6146 1.1 christos }
6147 1.1 christos }
6148 1.1 christos }
6149 1.1 christos
6150 1.1 christos #undef FLD
6151 1.1 christos }
6152 1.1 christos NEXT (vpc);
6153 1.1 christos
6154 1.1 christos CASE (sem, INSN_ADDS_W_R) : /* adds.w $Rs,$Rd */
6155 1.1 christos {
6156 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6157 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6158 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6159 1.1 christos int UNUSED written = 0;
6160 1.1 christos IADDR UNUSED pc = abuf->addr;
6161 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6162 1.1 christos
6163 1.1 christos {
6164 1.1 christos SI tmp_tmpopd;
6165 1.1 christos SI tmp_tmpops;
6166 1.1 christos BI tmp_carry;
6167 1.1 christos SI tmp_newval;
6168 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6169 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6170 1.1 christos tmp_carry = CPU (h_cbit);
6171 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6172 1.1 christos {
6173 1.1 christos SI opval = tmp_newval;
6174 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6175 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6176 1.1 christos }
6177 1.1 christos {
6178 1.1 christos {
6179 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))));
6180 1.1 christos CPU (h_cbit) = opval;
6181 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6182 1.1 christos }
6183 1.1 christos {
6184 1.1 christos BI opval = LTSI (tmp_newval, 0);
6185 1.1 christos CPU (h_nbit) = opval;
6186 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6187 1.1 christos }
6188 1.1 christos {
6189 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6190 1.1 christos CPU (h_zbit) = opval;
6191 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6192 1.1 christos }
6193 1.1 christos {
6194 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)));
6195 1.1 christos CPU (h_vbit) = opval;
6196 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6197 1.1 christos }
6198 1.1 christos {
6199 1.1 christos {
6200 1.1 christos BI opval = 0;
6201 1.1 christos CPU (h_xbit) = opval;
6202 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6203 1.1 christos }
6204 1.1 christos {
6205 1.1 christos BI opval = 0;
6206 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6207 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6208 1.1 christos }
6209 1.1 christos }
6210 1.1 christos }
6211 1.1 christos }
6212 1.1 christos
6213 1.1 christos #undef FLD
6214 1.1 christos }
6215 1.1 christos NEXT (vpc);
6216 1.1 christos
6217 1.1 christos CASE (sem, INSN_ADDS_M_B_M) : /* adds-m.b [${Rs}${inc}],$Rd */
6218 1.1 christos {
6219 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6220 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6221 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6222 1.1 christos int UNUSED written = 0;
6223 1.1 christos IADDR UNUSED pc = abuf->addr;
6224 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6225 1.1 christos
6226 1.1 christos {
6227 1.1 christos SI tmp_tmpopd;
6228 1.1 christos SI tmp_tmpops;
6229 1.1 christos BI tmp_carry;
6230 1.1 christos SI tmp_newval;
6231 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
6232 1.1 christos QI tmp_tmp_mem;
6233 1.1 christos BI tmp_postinc;
6234 1.1 christos tmp_postinc = FLD (f_memmode);
6235 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6236 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6237 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6238 1.1 christos {
6239 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6240 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6241 1.1 christos }
6242 1.1 christos {
6243 1.1 christos SI opval = tmp_addr;
6244 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6245 1.1 christos written |= (1 << 11);
6246 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6247 1.1 christos }
6248 1.1 christos }
6249 1.1 christos }
6250 1.1 christos ; tmp_tmp_mem; }));
6251 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6252 1.1 christos tmp_carry = CPU (h_cbit);
6253 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6254 1.1 christos {
6255 1.1 christos SI opval = tmp_newval;
6256 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6257 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6258 1.1 christos }
6259 1.1 christos {
6260 1.1 christos {
6261 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))));
6262 1.1 christos CPU (h_cbit) = opval;
6263 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6264 1.1 christos }
6265 1.1 christos {
6266 1.1 christos BI opval = LTSI (tmp_newval, 0);
6267 1.1 christos CPU (h_nbit) = opval;
6268 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6269 1.1 christos }
6270 1.1 christos {
6271 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6272 1.1 christos CPU (h_zbit) = opval;
6273 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6274 1.1 christos }
6275 1.1 christos {
6276 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)));
6277 1.1 christos CPU (h_vbit) = opval;
6278 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6279 1.1 christos }
6280 1.1 christos {
6281 1.1 christos {
6282 1.1 christos BI opval = 0;
6283 1.1 christos CPU (h_xbit) = opval;
6284 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6285 1.1 christos }
6286 1.1 christos {
6287 1.1 christos BI opval = 0;
6288 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6289 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6290 1.1 christos }
6291 1.1 christos }
6292 1.1 christos }
6293 1.1 christos }
6294 1.1 christos
6295 1.1 christos abuf->written = written;
6296 1.1 christos #undef FLD
6297 1.1 christos }
6298 1.1 christos NEXT (vpc);
6299 1.1 christos
6300 1.1 christos CASE (sem, INSN_ADDS_M_W_M) : /* adds-m.w [${Rs}${inc}],$Rd */
6301 1.1 christos {
6302 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6303 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6304 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6305 1.1 christos int UNUSED written = 0;
6306 1.1 christos IADDR UNUSED pc = abuf->addr;
6307 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6308 1.1 christos
6309 1.1 christos {
6310 1.1 christos SI tmp_tmpopd;
6311 1.1 christos SI tmp_tmpops;
6312 1.1 christos BI tmp_carry;
6313 1.1 christos SI tmp_newval;
6314 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
6315 1.1 christos HI tmp_tmp_mem;
6316 1.1 christos BI tmp_postinc;
6317 1.1 christos tmp_postinc = FLD (f_memmode);
6318 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6319 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6320 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6321 1.1 christos {
6322 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6323 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6324 1.1 christos }
6325 1.1 christos {
6326 1.1 christos SI opval = tmp_addr;
6327 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6328 1.1 christos written |= (1 << 11);
6329 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6330 1.1 christos }
6331 1.1 christos }
6332 1.1 christos }
6333 1.1 christos ; tmp_tmp_mem; }));
6334 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6335 1.1 christos tmp_carry = CPU (h_cbit);
6336 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6337 1.1 christos {
6338 1.1 christos SI opval = tmp_newval;
6339 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6340 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6341 1.1 christos }
6342 1.1 christos {
6343 1.1 christos {
6344 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))));
6345 1.1 christos CPU (h_cbit) = opval;
6346 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6347 1.1 christos }
6348 1.1 christos {
6349 1.1 christos BI opval = LTSI (tmp_newval, 0);
6350 1.1 christos CPU (h_nbit) = opval;
6351 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6352 1.1 christos }
6353 1.1 christos {
6354 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6355 1.1 christos CPU (h_zbit) = opval;
6356 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6357 1.1 christos }
6358 1.1 christos {
6359 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)));
6360 1.1 christos CPU (h_vbit) = opval;
6361 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6362 1.1 christos }
6363 1.1 christos {
6364 1.1 christos {
6365 1.1 christos BI opval = 0;
6366 1.1 christos CPU (h_xbit) = opval;
6367 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6368 1.1 christos }
6369 1.1 christos {
6370 1.1 christos BI opval = 0;
6371 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6372 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6373 1.1 christos }
6374 1.1 christos }
6375 1.1 christos }
6376 1.1 christos }
6377 1.1 christos
6378 1.1 christos abuf->written = written;
6379 1.1 christos #undef FLD
6380 1.1 christos }
6381 1.1 christos NEXT (vpc);
6382 1.1 christos
6383 1.1 christos CASE (sem, INSN_ADDSCBR) : /* [${Rs}${inc}],$Rd */
6384 1.1 christos {
6385 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6386 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6387 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6388 1.1 christos int UNUSED written = 0;
6389 1.1 christos IADDR UNUSED pc = abuf->addr;
6390 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6391 1.1 christos
6392 1.1 christos {
6393 1.1 christos SI tmp_tmpopd;
6394 1.1 christos SI tmp_tmpops;
6395 1.1 christos BI tmp_carry;
6396 1.1 christos SI tmp_newval;
6397 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6398 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6399 1.1 christos tmp_carry = CPU (h_cbit);
6400 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6401 1.1 christos {
6402 1.1 christos SI opval = tmp_newval;
6403 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6404 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6405 1.1 christos }
6406 1.1 christos {
6407 1.1 christos {
6408 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))));
6409 1.1 christos CPU (h_cbit) = opval;
6410 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6411 1.1 christos }
6412 1.1 christos {
6413 1.1 christos BI opval = LTSI (tmp_newval, 0);
6414 1.1 christos CPU (h_nbit) = opval;
6415 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6416 1.1 christos }
6417 1.1 christos {
6418 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6419 1.1 christos CPU (h_zbit) = opval;
6420 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6421 1.1 christos }
6422 1.1 christos {
6423 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)));
6424 1.1 christos CPU (h_vbit) = opval;
6425 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6426 1.1 christos }
6427 1.1 christos {
6428 1.1 christos {
6429 1.1 christos BI opval = 0;
6430 1.1 christos CPU (h_xbit) = opval;
6431 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6432 1.1 christos }
6433 1.1 christos {
6434 1.1 christos BI opval = 0;
6435 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6436 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6437 1.1 christos }
6438 1.1 christos }
6439 1.1 christos }
6440 1.1 christos }
6441 1.1 christos
6442 1.1 christos #undef FLD
6443 1.1 christos }
6444 1.1 christos NEXT (vpc);
6445 1.1 christos
6446 1.1 christos CASE (sem, INSN_ADDSCWR) : /* [${Rs}${inc}],$Rd */
6447 1.1 christos {
6448 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6449 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6450 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6451 1.1 christos int UNUSED written = 0;
6452 1.1 christos IADDR UNUSED pc = abuf->addr;
6453 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6454 1.1 christos
6455 1.1 christos {
6456 1.1 christos SI tmp_tmpopd;
6457 1.1 christos SI tmp_tmpops;
6458 1.1 christos BI tmp_carry;
6459 1.1 christos SI tmp_newval;
6460 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6461 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6462 1.1 christos tmp_carry = CPU (h_cbit);
6463 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6464 1.1 christos {
6465 1.1 christos SI opval = tmp_newval;
6466 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6467 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6468 1.1 christos }
6469 1.1 christos {
6470 1.1 christos {
6471 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))));
6472 1.1 christos CPU (h_cbit) = opval;
6473 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6474 1.1 christos }
6475 1.1 christos {
6476 1.1 christos BI opval = LTSI (tmp_newval, 0);
6477 1.1 christos CPU (h_nbit) = opval;
6478 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6479 1.1 christos }
6480 1.1 christos {
6481 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6482 1.1 christos CPU (h_zbit) = opval;
6483 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6484 1.1 christos }
6485 1.1 christos {
6486 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)));
6487 1.1 christos CPU (h_vbit) = opval;
6488 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6489 1.1 christos }
6490 1.1 christos {
6491 1.1 christos {
6492 1.1 christos BI opval = 0;
6493 1.1 christos CPU (h_xbit) = opval;
6494 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6495 1.1 christos }
6496 1.1 christos {
6497 1.1 christos BI opval = 0;
6498 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6499 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6500 1.1 christos }
6501 1.1 christos }
6502 1.1 christos }
6503 1.1 christos }
6504 1.1 christos
6505 1.1 christos #undef FLD
6506 1.1 christos }
6507 1.1 christos NEXT (vpc);
6508 1.1 christos
6509 1.1 christos CASE (sem, INSN_ADDU_B_R) : /* addu.b $Rs,$Rd */
6510 1.1 christos {
6511 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6512 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6513 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6514 1.1 christos int UNUSED written = 0;
6515 1.1 christos IADDR UNUSED pc = abuf->addr;
6516 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6517 1.1 christos
6518 1.1 christos {
6519 1.1 christos SI tmp_tmpopd;
6520 1.1 christos SI tmp_tmpops;
6521 1.1 christos BI tmp_carry;
6522 1.1 christos SI tmp_newval;
6523 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6524 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6525 1.1 christos tmp_carry = CPU (h_cbit);
6526 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6527 1.1 christos {
6528 1.1 christos SI opval = tmp_newval;
6529 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6530 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6531 1.1 christos }
6532 1.1 christos {
6533 1.1 christos {
6534 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))));
6535 1.1 christos CPU (h_cbit) = opval;
6536 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6537 1.1 christos }
6538 1.1 christos {
6539 1.1 christos BI opval = LTSI (tmp_newval, 0);
6540 1.1 christos CPU (h_nbit) = opval;
6541 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6542 1.1 christos }
6543 1.1 christos {
6544 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6545 1.1 christos CPU (h_zbit) = opval;
6546 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6547 1.1 christos }
6548 1.1 christos {
6549 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)));
6550 1.1 christos CPU (h_vbit) = opval;
6551 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6552 1.1 christos }
6553 1.1 christos {
6554 1.1 christos {
6555 1.1 christos BI opval = 0;
6556 1.1 christos CPU (h_xbit) = opval;
6557 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6558 1.1 christos }
6559 1.1 christos {
6560 1.1 christos BI opval = 0;
6561 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6562 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6563 1.1 christos }
6564 1.1 christos }
6565 1.1 christos }
6566 1.1 christos }
6567 1.1 christos
6568 1.1 christos #undef FLD
6569 1.1 christos }
6570 1.1 christos NEXT (vpc);
6571 1.1 christos
6572 1.1 christos CASE (sem, INSN_ADDU_W_R) : /* addu.w $Rs,$Rd */
6573 1.1 christos {
6574 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6575 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6576 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6577 1.1 christos int UNUSED written = 0;
6578 1.1 christos IADDR UNUSED pc = abuf->addr;
6579 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6580 1.1 christos
6581 1.1 christos {
6582 1.1 christos SI tmp_tmpopd;
6583 1.1 christos SI tmp_tmpops;
6584 1.1 christos BI tmp_carry;
6585 1.1 christos SI tmp_newval;
6586 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6587 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6588 1.1 christos tmp_carry = CPU (h_cbit);
6589 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6590 1.1 christos {
6591 1.1 christos SI opval = tmp_newval;
6592 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6593 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6594 1.1 christos }
6595 1.1 christos {
6596 1.1 christos {
6597 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))));
6598 1.1 christos CPU (h_cbit) = opval;
6599 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6600 1.1 christos }
6601 1.1 christos {
6602 1.1 christos BI opval = LTSI (tmp_newval, 0);
6603 1.1 christos CPU (h_nbit) = opval;
6604 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6605 1.1 christos }
6606 1.1 christos {
6607 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6608 1.1 christos CPU (h_zbit) = opval;
6609 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6610 1.1 christos }
6611 1.1 christos {
6612 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)));
6613 1.1 christos CPU (h_vbit) = opval;
6614 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6615 1.1 christos }
6616 1.1 christos {
6617 1.1 christos {
6618 1.1 christos BI opval = 0;
6619 1.1 christos CPU (h_xbit) = opval;
6620 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6621 1.1 christos }
6622 1.1 christos {
6623 1.1 christos BI opval = 0;
6624 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6625 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6626 1.1 christos }
6627 1.1 christos }
6628 1.1 christos }
6629 1.1 christos }
6630 1.1 christos
6631 1.1 christos #undef FLD
6632 1.1 christos }
6633 1.1 christos NEXT (vpc);
6634 1.1 christos
6635 1.1 christos CASE (sem, INSN_ADDU_M_B_M) : /* addu-m.b [${Rs}${inc}],$Rd */
6636 1.1 christos {
6637 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6638 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6639 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6640 1.1 christos int UNUSED written = 0;
6641 1.1 christos IADDR UNUSED pc = abuf->addr;
6642 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6643 1.1 christos
6644 1.1 christos {
6645 1.1 christos SI tmp_tmpopd;
6646 1.1 christos SI tmp_tmpops;
6647 1.1 christos BI tmp_carry;
6648 1.1 christos SI tmp_newval;
6649 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
6650 1.1 christos QI tmp_tmp_mem;
6651 1.1 christos BI tmp_postinc;
6652 1.1 christos tmp_postinc = FLD (f_memmode);
6653 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6654 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6655 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6656 1.1 christos {
6657 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6658 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6659 1.1 christos }
6660 1.1 christos {
6661 1.1 christos SI opval = tmp_addr;
6662 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6663 1.1 christos written |= (1 << 11);
6664 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6665 1.1 christos }
6666 1.1 christos }
6667 1.1 christos }
6668 1.1 christos ; tmp_tmp_mem; }));
6669 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6670 1.1 christos tmp_carry = CPU (h_cbit);
6671 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6672 1.1 christos {
6673 1.1 christos SI opval = tmp_newval;
6674 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6675 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6676 1.1 christos }
6677 1.1 christos {
6678 1.1 christos {
6679 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))));
6680 1.1 christos CPU (h_cbit) = opval;
6681 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6682 1.1 christos }
6683 1.1 christos {
6684 1.1 christos BI opval = LTSI (tmp_newval, 0);
6685 1.1 christos CPU (h_nbit) = opval;
6686 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6687 1.1 christos }
6688 1.1 christos {
6689 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6690 1.1 christos CPU (h_zbit) = opval;
6691 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6692 1.1 christos }
6693 1.1 christos {
6694 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)));
6695 1.1 christos CPU (h_vbit) = opval;
6696 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6697 1.1 christos }
6698 1.1 christos {
6699 1.1 christos {
6700 1.1 christos BI opval = 0;
6701 1.1 christos CPU (h_xbit) = opval;
6702 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6703 1.1 christos }
6704 1.1 christos {
6705 1.1 christos BI opval = 0;
6706 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6707 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6708 1.1 christos }
6709 1.1 christos }
6710 1.1 christos }
6711 1.1 christos }
6712 1.1 christos
6713 1.1 christos abuf->written = written;
6714 1.1 christos #undef FLD
6715 1.1 christos }
6716 1.1 christos NEXT (vpc);
6717 1.1 christos
6718 1.1 christos CASE (sem, INSN_ADDU_M_W_M) : /* addu-m.w [${Rs}${inc}],$Rd */
6719 1.1 christos {
6720 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6721 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6722 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6723 1.1 christos int UNUSED written = 0;
6724 1.1 christos IADDR UNUSED pc = abuf->addr;
6725 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6726 1.1 christos
6727 1.1 christos {
6728 1.1 christos SI tmp_tmpopd;
6729 1.1 christos SI tmp_tmpops;
6730 1.1 christos BI tmp_carry;
6731 1.1 christos SI tmp_newval;
6732 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
6733 1.1 christos HI tmp_tmp_mem;
6734 1.1 christos BI tmp_postinc;
6735 1.1 christos tmp_postinc = FLD (f_memmode);
6736 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6737 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6738 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6739 1.1 christos {
6740 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6741 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6742 1.1 christos }
6743 1.1 christos {
6744 1.1 christos SI opval = tmp_addr;
6745 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6746 1.1 christos written |= (1 << 11);
6747 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6748 1.1 christos }
6749 1.1 christos }
6750 1.1 christos }
6751 1.1 christos ; tmp_tmp_mem; }));
6752 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6753 1.1 christos tmp_carry = CPU (h_cbit);
6754 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6755 1.1 christos {
6756 1.1 christos SI opval = tmp_newval;
6757 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6758 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6759 1.1 christos }
6760 1.1 christos {
6761 1.1 christos {
6762 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))));
6763 1.1 christos CPU (h_cbit) = opval;
6764 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6765 1.1 christos }
6766 1.1 christos {
6767 1.1 christos BI opval = LTSI (tmp_newval, 0);
6768 1.1 christos CPU (h_nbit) = opval;
6769 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6770 1.1 christos }
6771 1.1 christos {
6772 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6773 1.1 christos CPU (h_zbit) = opval;
6774 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6775 1.1 christos }
6776 1.1 christos {
6777 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)));
6778 1.1 christos CPU (h_vbit) = opval;
6779 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6780 1.1 christos }
6781 1.1 christos {
6782 1.1 christos {
6783 1.1 christos BI opval = 0;
6784 1.1 christos CPU (h_xbit) = opval;
6785 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6786 1.1 christos }
6787 1.1 christos {
6788 1.1 christos BI opval = 0;
6789 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6790 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6791 1.1 christos }
6792 1.1 christos }
6793 1.1 christos }
6794 1.1 christos }
6795 1.1 christos
6796 1.1 christos abuf->written = written;
6797 1.1 christos #undef FLD
6798 1.1 christos }
6799 1.1 christos NEXT (vpc);
6800 1.1 christos
6801 1.1 christos CASE (sem, INSN_ADDUCBR) : /* [${Rs}${inc}],$Rd */
6802 1.1 christos {
6803 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6804 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6805 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6806 1.1 christos int UNUSED written = 0;
6807 1.1 christos IADDR UNUSED pc = abuf->addr;
6808 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6809 1.1 christos
6810 1.1 christos {
6811 1.1 christos SI tmp_tmpopd;
6812 1.1 christos SI tmp_tmpops;
6813 1.1 christos BI tmp_carry;
6814 1.1 christos SI tmp_newval;
6815 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6816 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6817 1.1 christos tmp_carry = CPU (h_cbit);
6818 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6819 1.1 christos {
6820 1.1 christos SI opval = tmp_newval;
6821 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6822 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6823 1.1 christos }
6824 1.1 christos {
6825 1.1 christos {
6826 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))));
6827 1.1 christos CPU (h_cbit) = opval;
6828 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6829 1.1 christos }
6830 1.1 christos {
6831 1.1 christos BI opval = LTSI (tmp_newval, 0);
6832 1.1 christos CPU (h_nbit) = opval;
6833 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6834 1.1 christos }
6835 1.1 christos {
6836 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6837 1.1 christos CPU (h_zbit) = opval;
6838 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6839 1.1 christos }
6840 1.1 christos {
6841 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)));
6842 1.1 christos CPU (h_vbit) = opval;
6843 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6844 1.1 christos }
6845 1.1 christos {
6846 1.1 christos {
6847 1.1 christos BI opval = 0;
6848 1.1 christos CPU (h_xbit) = opval;
6849 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6850 1.1 christos }
6851 1.1 christos {
6852 1.1 christos BI opval = 0;
6853 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6854 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6855 1.1 christos }
6856 1.1 christos }
6857 1.1 christos }
6858 1.1 christos }
6859 1.1 christos
6860 1.1 christos #undef FLD
6861 1.1 christos }
6862 1.1 christos NEXT (vpc);
6863 1.1 christos
6864 1.1 christos CASE (sem, INSN_ADDUCWR) : /* [${Rs}${inc}],$Rd */
6865 1.1 christos {
6866 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6867 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6868 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6869 1.1 christos int UNUSED written = 0;
6870 1.1 christos IADDR UNUSED pc = abuf->addr;
6871 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6872 1.1 christos
6873 1.1 christos {
6874 1.1 christos SI tmp_tmpopd;
6875 1.1 christos SI tmp_tmpops;
6876 1.1 christos BI tmp_carry;
6877 1.1 christos SI tmp_newval;
6878 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6879 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6880 1.1 christos tmp_carry = CPU (h_cbit);
6881 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6882 1.1 christos {
6883 1.1 christos SI opval = tmp_newval;
6884 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6885 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6886 1.1 christos }
6887 1.1 christos {
6888 1.1 christos {
6889 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))));
6890 1.1 christos CPU (h_cbit) = opval;
6891 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6892 1.1 christos }
6893 1.1 christos {
6894 1.1 christos BI opval = LTSI (tmp_newval, 0);
6895 1.1 christos CPU (h_nbit) = opval;
6896 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6897 1.1 christos }
6898 1.1 christos {
6899 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6900 1.1 christos CPU (h_zbit) = opval;
6901 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6902 1.1 christos }
6903 1.1 christos {
6904 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)));
6905 1.1 christos CPU (h_vbit) = opval;
6906 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6907 1.1 christos }
6908 1.1 christos {
6909 1.1 christos {
6910 1.1 christos BI opval = 0;
6911 1.1 christos CPU (h_xbit) = opval;
6912 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6913 1.1 christos }
6914 1.1 christos {
6915 1.1 christos BI opval = 0;
6916 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6917 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6918 1.1 christos }
6919 1.1 christos }
6920 1.1 christos }
6921 1.1 christos }
6922 1.1 christos
6923 1.1 christos #undef FLD
6924 1.1 christos }
6925 1.1 christos NEXT (vpc);
6926 1.1 christos
6927 1.1 christos CASE (sem, INSN_SUB_B_R) : /* sub.b $Rs,$Rd */
6928 1.1 christos {
6929 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6930 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6931 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6932 1.1 christos int UNUSED written = 0;
6933 1.1 christos IADDR UNUSED pc = abuf->addr;
6934 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6935 1.1 christos
6936 1.1 christos {
6937 1.1 christos QI tmp_tmpopd;
6938 1.1 christos QI tmp_tmpops;
6939 1.1 christos BI tmp_carry;
6940 1.1 christos QI tmp_newval;
6941 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
6942 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6943 1.1 christos tmp_carry = CPU (h_cbit);
6944 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6945 1.1 christos {
6946 1.1 christos SI tmp_oldregval;
6947 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
6948 1.1 christos {
6949 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
6950 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6951 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6952 1.1 christos }
6953 1.1 christos }
6954 1.1 christos {
6955 1.1 christos {
6956 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))));
6957 1.1 christos CPU (h_cbit) = opval;
6958 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6959 1.1 christos }
6960 1.1 christos {
6961 1.1 christos BI opval = LTQI (tmp_newval, 0);
6962 1.1 christos CPU (h_nbit) = opval;
6963 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6964 1.1 christos }
6965 1.1 christos {
6966 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6967 1.1 christos CPU (h_zbit) = opval;
6968 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6969 1.1 christos }
6970 1.1 christos {
6971 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)));
6972 1.1 christos CPU (h_vbit) = opval;
6973 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6974 1.1 christos }
6975 1.1 christos {
6976 1.1 christos {
6977 1.1 christos BI opval = 0;
6978 1.1 christos CPU (h_xbit) = opval;
6979 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6980 1.1 christos }
6981 1.1 christos {
6982 1.1 christos BI opval = 0;
6983 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6984 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6985 1.1 christos }
6986 1.1 christos }
6987 1.1 christos }
6988 1.1 christos }
6989 1.1 christos
6990 1.1 christos #undef FLD
6991 1.1 christos }
6992 1.1 christos NEXT (vpc);
6993 1.1 christos
6994 1.1 christos CASE (sem, INSN_SUB_W_R) : /* sub.w $Rs,$Rd */
6995 1.1 christos {
6996 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6997 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6998 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6999 1.1 christos int UNUSED written = 0;
7000 1.1 christos IADDR UNUSED pc = abuf->addr;
7001 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7002 1.1 christos
7003 1.1 christos {
7004 1.1 christos HI tmp_tmpopd;
7005 1.1 christos HI tmp_tmpops;
7006 1.1 christos BI tmp_carry;
7007 1.1 christos HI tmp_newval;
7008 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7009 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7010 1.1 christos tmp_carry = CPU (h_cbit);
7011 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7012 1.1 christos {
7013 1.1 christos SI tmp_oldregval;
7014 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7015 1.1 christos {
7016 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7017 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7018 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7019 1.1 christos }
7020 1.1 christos }
7021 1.1 christos {
7022 1.1 christos {
7023 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))));
7024 1.1 christos CPU (h_cbit) = opval;
7025 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7026 1.1 christos }
7027 1.1 christos {
7028 1.1 christos BI opval = LTHI (tmp_newval, 0);
7029 1.1 christos CPU (h_nbit) = opval;
7030 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7031 1.1 christos }
7032 1.1 christos {
7033 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7034 1.1 christos CPU (h_zbit) = opval;
7035 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7036 1.1 christos }
7037 1.1 christos {
7038 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)));
7039 1.1 christos CPU (h_vbit) = opval;
7040 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7041 1.1 christos }
7042 1.1 christos {
7043 1.1 christos {
7044 1.1 christos BI opval = 0;
7045 1.1 christos CPU (h_xbit) = opval;
7046 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7047 1.1 christos }
7048 1.1 christos {
7049 1.1 christos BI opval = 0;
7050 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7051 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7052 1.1 christos }
7053 1.1 christos }
7054 1.1 christos }
7055 1.1 christos }
7056 1.1 christos
7057 1.1 christos #undef FLD
7058 1.1 christos }
7059 1.1 christos NEXT (vpc);
7060 1.1 christos
7061 1.1 christos CASE (sem, INSN_SUB_D_R) : /* sub.d $Rs,$Rd */
7062 1.1 christos {
7063 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7064 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7065 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7066 1.1 christos int UNUSED written = 0;
7067 1.1 christos IADDR UNUSED pc = abuf->addr;
7068 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7069 1.1 christos
7070 1.1 christos {
7071 1.1 christos SI tmp_tmpopd;
7072 1.1 christos SI tmp_tmpops;
7073 1.1 christos BI tmp_carry;
7074 1.1 christos SI tmp_newval;
7075 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7076 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7077 1.1 christos tmp_carry = CPU (h_cbit);
7078 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7079 1.1 christos {
7080 1.1 christos SI opval = tmp_newval;
7081 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7082 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7083 1.1 christos }
7084 1.1 christos {
7085 1.1 christos {
7086 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))));
7087 1.1 christos CPU (h_cbit) = opval;
7088 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7089 1.1 christos }
7090 1.1 christos {
7091 1.1 christos BI opval = LTSI (tmp_newval, 0);
7092 1.1 christos CPU (h_nbit) = opval;
7093 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7094 1.1 christos }
7095 1.1 christos {
7096 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7097 1.1 christos CPU (h_zbit) = opval;
7098 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7099 1.1 christos }
7100 1.1 christos {
7101 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)));
7102 1.1 christos CPU (h_vbit) = opval;
7103 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7104 1.1 christos }
7105 1.1 christos {
7106 1.1 christos {
7107 1.1 christos BI opval = 0;
7108 1.1 christos CPU (h_xbit) = opval;
7109 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7110 1.1 christos }
7111 1.1 christos {
7112 1.1 christos BI opval = 0;
7113 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7114 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7115 1.1 christos }
7116 1.1 christos }
7117 1.1 christos }
7118 1.1 christos }
7119 1.1 christos
7120 1.1 christos #undef FLD
7121 1.1 christos }
7122 1.1 christos NEXT (vpc);
7123 1.1 christos
7124 1.1 christos CASE (sem, INSN_SUB_M_B_M) : /* sub-m.b [${Rs}${inc}],${Rd} */
7125 1.1 christos {
7126 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7127 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7128 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7129 1.1 christos int UNUSED written = 0;
7130 1.1 christos IADDR UNUSED pc = abuf->addr;
7131 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7132 1.1 christos
7133 1.1 christos {
7134 1.1 christos QI tmp_tmpopd;
7135 1.1 christos QI tmp_tmpops;
7136 1.1 christos BI tmp_carry;
7137 1.1 christos QI tmp_newval;
7138 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7139 1.1 christos QI tmp_tmp_mem;
7140 1.1 christos BI tmp_postinc;
7141 1.1 christos tmp_postinc = FLD (f_memmode);
7142 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7143 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7144 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7145 1.1 christos {
7146 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7147 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7148 1.1 christos }
7149 1.1 christos {
7150 1.1 christos SI opval = tmp_addr;
7151 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7152 1.1 christos written |= (1 << 12);
7153 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7154 1.1 christos }
7155 1.1 christos }
7156 1.1 christos }
7157 1.1 christos ; tmp_tmp_mem; });
7158 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7159 1.1 christos tmp_carry = CPU (h_cbit);
7160 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7161 1.1 christos {
7162 1.1 christos SI tmp_oldregval;
7163 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))));
7164 1.1 christos {
7165 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7166 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7167 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7168 1.1 christos }
7169 1.1 christos }
7170 1.1 christos {
7171 1.1 christos {
7172 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))));
7173 1.1 christos CPU (h_cbit) = opval;
7174 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7175 1.1 christos }
7176 1.1 christos {
7177 1.1 christos BI opval = LTQI (tmp_newval, 0);
7178 1.1 christos CPU (h_nbit) = opval;
7179 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7180 1.1 christos }
7181 1.1 christos {
7182 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7183 1.1 christos CPU (h_zbit) = opval;
7184 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7185 1.1 christos }
7186 1.1 christos {
7187 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)));
7188 1.1 christos CPU (h_vbit) = opval;
7189 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7190 1.1 christos }
7191 1.1 christos {
7192 1.1 christos {
7193 1.1 christos BI opval = 0;
7194 1.1 christos CPU (h_xbit) = opval;
7195 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7196 1.1 christos }
7197 1.1 christos {
7198 1.1 christos BI opval = 0;
7199 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7200 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7201 1.1 christos }
7202 1.1 christos }
7203 1.1 christos }
7204 1.1 christos }
7205 1.1 christos
7206 1.1 christos abuf->written = written;
7207 1.1 christos #undef FLD
7208 1.1 christos }
7209 1.1 christos NEXT (vpc);
7210 1.1 christos
7211 1.1 christos CASE (sem, INSN_SUB_M_W_M) : /* sub-m.w [${Rs}${inc}],${Rd} */
7212 1.1 christos {
7213 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7214 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7215 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7216 1.1 christos int UNUSED written = 0;
7217 1.1 christos IADDR UNUSED pc = abuf->addr;
7218 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7219 1.1 christos
7220 1.1 christos {
7221 1.1 christos HI tmp_tmpopd;
7222 1.1 christos HI tmp_tmpops;
7223 1.1 christos BI tmp_carry;
7224 1.1 christos HI tmp_newval;
7225 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7226 1.1 christos HI tmp_tmp_mem;
7227 1.1 christos BI tmp_postinc;
7228 1.1 christos tmp_postinc = FLD (f_memmode);
7229 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7230 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7231 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7232 1.1 christos {
7233 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7234 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7235 1.1 christos }
7236 1.1 christos {
7237 1.1 christos SI opval = tmp_addr;
7238 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7239 1.1 christos written |= (1 << 12);
7240 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7241 1.1 christos }
7242 1.1 christos }
7243 1.1 christos }
7244 1.1 christos ; tmp_tmp_mem; });
7245 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7246 1.1 christos tmp_carry = CPU (h_cbit);
7247 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7248 1.1 christos {
7249 1.1 christos SI tmp_oldregval;
7250 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))));
7251 1.1 christos {
7252 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7253 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7254 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7255 1.1 christos }
7256 1.1 christos }
7257 1.1 christos {
7258 1.1 christos {
7259 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))));
7260 1.1 christos CPU (h_cbit) = opval;
7261 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7262 1.1 christos }
7263 1.1 christos {
7264 1.1 christos BI opval = LTHI (tmp_newval, 0);
7265 1.1 christos CPU (h_nbit) = opval;
7266 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7267 1.1 christos }
7268 1.1 christos {
7269 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7270 1.1 christos CPU (h_zbit) = opval;
7271 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7272 1.1 christos }
7273 1.1 christos {
7274 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)));
7275 1.1 christos CPU (h_vbit) = opval;
7276 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7277 1.1 christos }
7278 1.1 christos {
7279 1.1 christos {
7280 1.1 christos BI opval = 0;
7281 1.1 christos CPU (h_xbit) = opval;
7282 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7283 1.1 christos }
7284 1.1 christos {
7285 1.1 christos BI opval = 0;
7286 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7287 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7288 1.1 christos }
7289 1.1 christos }
7290 1.1 christos }
7291 1.1 christos }
7292 1.1 christos
7293 1.1 christos abuf->written = written;
7294 1.1 christos #undef FLD
7295 1.1 christos }
7296 1.1 christos NEXT (vpc);
7297 1.1 christos
7298 1.1 christos CASE (sem, INSN_SUB_M_D_M) : /* sub-m.d [${Rs}${inc}],${Rd} */
7299 1.1 christos {
7300 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7301 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7302 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7303 1.1 christos int UNUSED written = 0;
7304 1.1 christos IADDR UNUSED pc = abuf->addr;
7305 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7306 1.1 christos
7307 1.1 christos {
7308 1.1 christos SI tmp_tmpopd;
7309 1.1 christos SI tmp_tmpops;
7310 1.1 christos BI tmp_carry;
7311 1.1 christos SI tmp_newval;
7312 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7313 1.1 christos SI tmp_tmp_mem;
7314 1.1 christos BI tmp_postinc;
7315 1.1 christos tmp_postinc = FLD (f_memmode);
7316 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7317 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
7318 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7319 1.1 christos {
7320 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7321 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
7322 1.1 christos }
7323 1.1 christos {
7324 1.1 christos SI opval = tmp_addr;
7325 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7326 1.1 christos written |= (1 << 11);
7327 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7328 1.1 christos }
7329 1.1 christos }
7330 1.1 christos }
7331 1.1 christos ; tmp_tmp_mem; });
7332 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7333 1.1 christos tmp_carry = CPU (h_cbit);
7334 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7335 1.1 christos {
7336 1.1 christos SI opval = tmp_newval;
7337 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7338 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7339 1.1 christos }
7340 1.1 christos {
7341 1.1 christos {
7342 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))));
7343 1.1 christos CPU (h_cbit) = opval;
7344 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7345 1.1 christos }
7346 1.1 christos {
7347 1.1 christos BI opval = LTSI (tmp_newval, 0);
7348 1.1 christos CPU (h_nbit) = opval;
7349 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7350 1.1 christos }
7351 1.1 christos {
7352 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7353 1.1 christos CPU (h_zbit) = opval;
7354 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7355 1.1 christos }
7356 1.1 christos {
7357 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)));
7358 1.1 christos CPU (h_vbit) = opval;
7359 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7360 1.1 christos }
7361 1.1 christos {
7362 1.1 christos {
7363 1.1 christos BI opval = 0;
7364 1.1 christos CPU (h_xbit) = opval;
7365 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7366 1.1 christos }
7367 1.1 christos {
7368 1.1 christos BI opval = 0;
7369 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7370 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7371 1.1 christos }
7372 1.1 christos }
7373 1.1 christos }
7374 1.1 christos }
7375 1.1 christos
7376 1.1 christos abuf->written = written;
7377 1.1 christos #undef FLD
7378 1.1 christos }
7379 1.1 christos NEXT (vpc);
7380 1.1 christos
7381 1.1 christos CASE (sem, INSN_SUBCBR) : /* sub.b ${sconst8}],${Rd} */
7382 1.1 christos {
7383 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7384 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7385 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7386 1.1 christos int UNUSED written = 0;
7387 1.1 christos IADDR UNUSED pc = abuf->addr;
7388 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7389 1.1 christos
7390 1.1 christos {
7391 1.1 christos QI tmp_tmpopd;
7392 1.1 christos QI tmp_tmpops;
7393 1.1 christos BI tmp_carry;
7394 1.1 christos QI tmp_newval;
7395 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
7396 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7397 1.1 christos tmp_carry = CPU (h_cbit);
7398 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7399 1.1 christos {
7400 1.1 christos SI tmp_oldregval;
7401 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7402 1.1 christos {
7403 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7404 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7405 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7406 1.1 christos }
7407 1.1 christos }
7408 1.1 christos {
7409 1.1 christos {
7410 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))));
7411 1.1 christos CPU (h_cbit) = opval;
7412 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7413 1.1 christos }
7414 1.1 christos {
7415 1.1 christos BI opval = LTQI (tmp_newval, 0);
7416 1.1 christos CPU (h_nbit) = opval;
7417 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7418 1.1 christos }
7419 1.1 christos {
7420 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7421 1.1 christos CPU (h_zbit) = opval;
7422 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7423 1.1 christos }
7424 1.1 christos {
7425 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)));
7426 1.1 christos CPU (h_vbit) = opval;
7427 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7428 1.1 christos }
7429 1.1 christos {
7430 1.1 christos {
7431 1.1 christos BI opval = 0;
7432 1.1 christos CPU (h_xbit) = opval;
7433 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7434 1.1 christos }
7435 1.1 christos {
7436 1.1 christos BI opval = 0;
7437 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7438 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7439 1.1 christos }
7440 1.1 christos }
7441 1.1 christos }
7442 1.1 christos }
7443 1.1 christos
7444 1.1 christos #undef FLD
7445 1.1 christos }
7446 1.1 christos NEXT (vpc);
7447 1.1 christos
7448 1.1 christos CASE (sem, INSN_SUBCWR) : /* sub.w ${sconst16}],${Rd} */
7449 1.1 christos {
7450 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7451 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7452 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7453 1.1 christos int UNUSED written = 0;
7454 1.1 christos IADDR UNUSED pc = abuf->addr;
7455 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7456 1.1 christos
7457 1.1 christos {
7458 1.1 christos HI tmp_tmpopd;
7459 1.1 christos HI tmp_tmpops;
7460 1.1 christos BI tmp_carry;
7461 1.1 christos HI tmp_newval;
7462 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
7463 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7464 1.1 christos tmp_carry = CPU (h_cbit);
7465 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7466 1.1 christos {
7467 1.1 christos SI tmp_oldregval;
7468 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7469 1.1 christos {
7470 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7471 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7472 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7473 1.1 christos }
7474 1.1 christos }
7475 1.1 christos {
7476 1.1 christos {
7477 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))));
7478 1.1 christos CPU (h_cbit) = opval;
7479 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7480 1.1 christos }
7481 1.1 christos {
7482 1.1 christos BI opval = LTHI (tmp_newval, 0);
7483 1.1 christos CPU (h_nbit) = opval;
7484 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7485 1.1 christos }
7486 1.1 christos {
7487 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7488 1.1 christos CPU (h_zbit) = opval;
7489 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7490 1.1 christos }
7491 1.1 christos {
7492 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)));
7493 1.1 christos CPU (h_vbit) = opval;
7494 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7495 1.1 christos }
7496 1.1 christos {
7497 1.1 christos {
7498 1.1 christos BI opval = 0;
7499 1.1 christos CPU (h_xbit) = opval;
7500 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7501 1.1 christos }
7502 1.1 christos {
7503 1.1 christos BI opval = 0;
7504 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7505 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7506 1.1 christos }
7507 1.1 christos }
7508 1.1 christos }
7509 1.1 christos }
7510 1.1 christos
7511 1.1 christos #undef FLD
7512 1.1 christos }
7513 1.1 christos NEXT (vpc);
7514 1.1 christos
7515 1.1 christos CASE (sem, INSN_SUBCDR) : /* sub.d ${const32}],${Rd} */
7516 1.1 christos {
7517 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7518 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7519 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
7520 1.1 christos int UNUSED written = 0;
7521 1.1 christos IADDR UNUSED pc = abuf->addr;
7522 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
7523 1.1 christos
7524 1.1 christos {
7525 1.1 christos SI tmp_tmpopd;
7526 1.1 christos SI tmp_tmpops;
7527 1.1 christos BI tmp_carry;
7528 1.1 christos SI tmp_newval;
7529 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
7530 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7531 1.1 christos tmp_carry = CPU (h_cbit);
7532 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7533 1.1 christos {
7534 1.1 christos SI opval = tmp_newval;
7535 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7536 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7537 1.1 christos }
7538 1.1 christos {
7539 1.1 christos {
7540 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))));
7541 1.1 christos CPU (h_cbit) = opval;
7542 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7543 1.1 christos }
7544 1.1 christos {
7545 1.1 christos BI opval = LTSI (tmp_newval, 0);
7546 1.1 christos CPU (h_nbit) = opval;
7547 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7548 1.1 christos }
7549 1.1 christos {
7550 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7551 1.1 christos CPU (h_zbit) = opval;
7552 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7553 1.1 christos }
7554 1.1 christos {
7555 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)));
7556 1.1 christos CPU (h_vbit) = opval;
7557 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7558 1.1 christos }
7559 1.1 christos {
7560 1.1 christos {
7561 1.1 christos BI opval = 0;
7562 1.1 christos CPU (h_xbit) = opval;
7563 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7564 1.1 christos }
7565 1.1 christos {
7566 1.1 christos BI opval = 0;
7567 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7568 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7569 1.1 christos }
7570 1.1 christos }
7571 1.1 christos }
7572 1.1 christos }
7573 1.1 christos
7574 1.1 christos #undef FLD
7575 1.1 christos }
7576 1.1 christos NEXT (vpc);
7577 1.1 christos
7578 1.1 christos CASE (sem, INSN_SUBS_B_R) : /* subs.b $Rs,$Rd */
7579 1.1 christos {
7580 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7581 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7582 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7583 1.1 christos int UNUSED written = 0;
7584 1.1 christos IADDR UNUSED pc = abuf->addr;
7585 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7586 1.1 christos
7587 1.1 christos {
7588 1.1 christos SI tmp_tmpopd;
7589 1.1 christos SI tmp_tmpops;
7590 1.1 christos BI tmp_carry;
7591 1.1 christos SI tmp_newval;
7592 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
7593 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7594 1.1 christos tmp_carry = CPU (h_cbit);
7595 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7596 1.1 christos {
7597 1.1 christos SI opval = tmp_newval;
7598 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7599 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7600 1.1 christos }
7601 1.1 christos {
7602 1.1 christos {
7603 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))));
7604 1.1 christos CPU (h_cbit) = opval;
7605 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7606 1.1 christos }
7607 1.1 christos {
7608 1.1 christos BI opval = LTSI (tmp_newval, 0);
7609 1.1 christos CPU (h_nbit) = opval;
7610 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7611 1.1 christos }
7612 1.1 christos {
7613 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7614 1.1 christos CPU (h_zbit) = opval;
7615 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7616 1.1 christos }
7617 1.1 christos {
7618 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)));
7619 1.1 christos CPU (h_vbit) = opval;
7620 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7621 1.1 christos }
7622 1.1 christos {
7623 1.1 christos {
7624 1.1 christos BI opval = 0;
7625 1.1 christos CPU (h_xbit) = opval;
7626 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7627 1.1 christos }
7628 1.1 christos {
7629 1.1 christos BI opval = 0;
7630 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7631 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7632 1.1 christos }
7633 1.1 christos }
7634 1.1 christos }
7635 1.1 christos }
7636 1.1 christos
7637 1.1 christos #undef FLD
7638 1.1 christos }
7639 1.1 christos NEXT (vpc);
7640 1.1 christos
7641 1.1 christos CASE (sem, INSN_SUBS_W_R) : /* subs.w $Rs,$Rd */
7642 1.1 christos {
7643 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7644 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7645 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7646 1.1 christos int UNUSED written = 0;
7647 1.1 christos IADDR UNUSED pc = abuf->addr;
7648 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7649 1.1 christos
7650 1.1 christos {
7651 1.1 christos SI tmp_tmpopd;
7652 1.1 christos SI tmp_tmpops;
7653 1.1 christos BI tmp_carry;
7654 1.1 christos SI tmp_newval;
7655 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
7656 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7657 1.1 christos tmp_carry = CPU (h_cbit);
7658 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7659 1.1 christos {
7660 1.1 christos SI opval = tmp_newval;
7661 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7662 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7663 1.1 christos }
7664 1.1 christos {
7665 1.1 christos {
7666 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))));
7667 1.1 christos CPU (h_cbit) = opval;
7668 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7669 1.1 christos }
7670 1.1 christos {
7671 1.1 christos BI opval = LTSI (tmp_newval, 0);
7672 1.1 christos CPU (h_nbit) = opval;
7673 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7674 1.1 christos }
7675 1.1 christos {
7676 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7677 1.1 christos CPU (h_zbit) = opval;
7678 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7679 1.1 christos }
7680 1.1 christos {
7681 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)));
7682 1.1 christos CPU (h_vbit) = opval;
7683 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7684 1.1 christos }
7685 1.1 christos {
7686 1.1 christos {
7687 1.1 christos BI opval = 0;
7688 1.1 christos CPU (h_xbit) = opval;
7689 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7690 1.1 christos }
7691 1.1 christos {
7692 1.1 christos BI opval = 0;
7693 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7694 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7695 1.1 christos }
7696 1.1 christos }
7697 1.1 christos }
7698 1.1 christos }
7699 1.1 christos
7700 1.1 christos #undef FLD
7701 1.1 christos }
7702 1.1 christos NEXT (vpc);
7703 1.1 christos
7704 1.1 christos CASE (sem, INSN_SUBS_M_B_M) : /* subs-m.b [${Rs}${inc}],$Rd */
7705 1.1 christos {
7706 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7707 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7708 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7709 1.1 christos int UNUSED written = 0;
7710 1.1 christos IADDR UNUSED pc = abuf->addr;
7711 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7712 1.1 christos
7713 1.1 christos {
7714 1.1 christos SI tmp_tmpopd;
7715 1.1 christos SI tmp_tmpops;
7716 1.1 christos BI tmp_carry;
7717 1.1 christos SI tmp_newval;
7718 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
7719 1.1 christos QI tmp_tmp_mem;
7720 1.1 christos BI tmp_postinc;
7721 1.1 christos tmp_postinc = FLD (f_memmode);
7722 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7723 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7724 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7725 1.1 christos {
7726 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7727 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7728 1.1 christos }
7729 1.1 christos {
7730 1.1 christos SI opval = tmp_addr;
7731 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7732 1.1 christos written |= (1 << 11);
7733 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7734 1.1 christos }
7735 1.1 christos }
7736 1.1 christos }
7737 1.1 christos ; tmp_tmp_mem; }));
7738 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7739 1.1 christos tmp_carry = CPU (h_cbit);
7740 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7741 1.1 christos {
7742 1.1 christos SI opval = tmp_newval;
7743 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7744 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7745 1.1 christos }
7746 1.1 christos {
7747 1.1 christos {
7748 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))));
7749 1.1 christos CPU (h_cbit) = opval;
7750 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7751 1.1 christos }
7752 1.1 christos {
7753 1.1 christos BI opval = LTSI (tmp_newval, 0);
7754 1.1 christos CPU (h_nbit) = opval;
7755 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7756 1.1 christos }
7757 1.1 christos {
7758 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7759 1.1 christos CPU (h_zbit) = opval;
7760 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7761 1.1 christos }
7762 1.1 christos {
7763 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)));
7764 1.1 christos CPU (h_vbit) = opval;
7765 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7766 1.1 christos }
7767 1.1 christos {
7768 1.1 christos {
7769 1.1 christos BI opval = 0;
7770 1.1 christos CPU (h_xbit) = opval;
7771 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7772 1.1 christos }
7773 1.1 christos {
7774 1.1 christos BI opval = 0;
7775 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7776 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7777 1.1 christos }
7778 1.1 christos }
7779 1.1 christos }
7780 1.1 christos }
7781 1.1 christos
7782 1.1 christos abuf->written = written;
7783 1.1 christos #undef FLD
7784 1.1 christos }
7785 1.1 christos NEXT (vpc);
7786 1.1 christos
7787 1.1 christos CASE (sem, INSN_SUBS_M_W_M) : /* subs-m.w [${Rs}${inc}],$Rd */
7788 1.1 christos {
7789 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7790 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7791 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7792 1.1 christos int UNUSED written = 0;
7793 1.1 christos IADDR UNUSED pc = abuf->addr;
7794 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7795 1.1 christos
7796 1.1 christos {
7797 1.1 christos SI tmp_tmpopd;
7798 1.1 christos SI tmp_tmpops;
7799 1.1 christos BI tmp_carry;
7800 1.1 christos SI tmp_newval;
7801 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
7802 1.1 christos HI tmp_tmp_mem;
7803 1.1 christos BI tmp_postinc;
7804 1.1 christos tmp_postinc = FLD (f_memmode);
7805 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7806 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7807 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7808 1.1 christos {
7809 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7810 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7811 1.1 christos }
7812 1.1 christos {
7813 1.1 christos SI opval = tmp_addr;
7814 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7815 1.1 christos written |= (1 << 11);
7816 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7817 1.1 christos }
7818 1.1 christos }
7819 1.1 christos }
7820 1.1 christos ; tmp_tmp_mem; }));
7821 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7822 1.1 christos tmp_carry = CPU (h_cbit);
7823 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7824 1.1 christos {
7825 1.1 christos SI opval = tmp_newval;
7826 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7827 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7828 1.1 christos }
7829 1.1 christos {
7830 1.1 christos {
7831 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))));
7832 1.1 christos CPU (h_cbit) = opval;
7833 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7834 1.1 christos }
7835 1.1 christos {
7836 1.1 christos BI opval = LTSI (tmp_newval, 0);
7837 1.1 christos CPU (h_nbit) = opval;
7838 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7839 1.1 christos }
7840 1.1 christos {
7841 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7842 1.1 christos CPU (h_zbit) = opval;
7843 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7844 1.1 christos }
7845 1.1 christos {
7846 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)));
7847 1.1 christos CPU (h_vbit) = opval;
7848 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7849 1.1 christos }
7850 1.1 christos {
7851 1.1 christos {
7852 1.1 christos BI opval = 0;
7853 1.1 christos CPU (h_xbit) = opval;
7854 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7855 1.1 christos }
7856 1.1 christos {
7857 1.1 christos BI opval = 0;
7858 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7859 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7860 1.1 christos }
7861 1.1 christos }
7862 1.1 christos }
7863 1.1 christos }
7864 1.1 christos
7865 1.1 christos abuf->written = written;
7866 1.1 christos #undef FLD
7867 1.1 christos }
7868 1.1 christos NEXT (vpc);
7869 1.1 christos
7870 1.1 christos CASE (sem, INSN_SUBSCBR) : /* [${Rs}${inc}],$Rd */
7871 1.1 christos {
7872 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7873 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7874 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7875 1.1 christos int UNUSED written = 0;
7876 1.1 christos IADDR UNUSED pc = abuf->addr;
7877 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7878 1.1 christos
7879 1.1 christos {
7880 1.1 christos SI tmp_tmpopd;
7881 1.1 christos SI tmp_tmpops;
7882 1.1 christos BI tmp_carry;
7883 1.1 christos SI tmp_newval;
7884 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
7885 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7886 1.1 christos tmp_carry = CPU (h_cbit);
7887 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7888 1.1 christos {
7889 1.1 christos SI opval = tmp_newval;
7890 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7891 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7892 1.1 christos }
7893 1.1 christos {
7894 1.1 christos {
7895 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))));
7896 1.1 christos CPU (h_cbit) = opval;
7897 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7898 1.1 christos }
7899 1.1 christos {
7900 1.1 christos BI opval = LTSI (tmp_newval, 0);
7901 1.1 christos CPU (h_nbit) = opval;
7902 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7903 1.1 christos }
7904 1.1 christos {
7905 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7906 1.1 christos CPU (h_zbit) = opval;
7907 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7908 1.1 christos }
7909 1.1 christos {
7910 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)));
7911 1.1 christos CPU (h_vbit) = opval;
7912 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7913 1.1 christos }
7914 1.1 christos {
7915 1.1 christos {
7916 1.1 christos BI opval = 0;
7917 1.1 christos CPU (h_xbit) = opval;
7918 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7919 1.1 christos }
7920 1.1 christos {
7921 1.1 christos BI opval = 0;
7922 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7923 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7924 1.1 christos }
7925 1.1 christos }
7926 1.1 christos }
7927 1.1 christos }
7928 1.1 christos
7929 1.1 christos #undef FLD
7930 1.1 christos }
7931 1.1 christos NEXT (vpc);
7932 1.1 christos
7933 1.1 christos CASE (sem, INSN_SUBSCWR) : /* [${Rs}${inc}],$Rd */
7934 1.1 christos {
7935 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7936 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7937 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7938 1.1 christos int UNUSED written = 0;
7939 1.1 christos IADDR UNUSED pc = abuf->addr;
7940 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7941 1.1 christos
7942 1.1 christos {
7943 1.1 christos SI tmp_tmpopd;
7944 1.1 christos SI tmp_tmpops;
7945 1.1 christos BI tmp_carry;
7946 1.1 christos SI tmp_newval;
7947 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
7948 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7949 1.1 christos tmp_carry = CPU (h_cbit);
7950 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7951 1.1 christos {
7952 1.1 christos SI opval = tmp_newval;
7953 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7954 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7955 1.1 christos }
7956 1.1 christos {
7957 1.1 christos {
7958 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))));
7959 1.1 christos CPU (h_cbit) = opval;
7960 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7961 1.1 christos }
7962 1.1 christos {
7963 1.1 christos BI opval = LTSI (tmp_newval, 0);
7964 1.1 christos CPU (h_nbit) = opval;
7965 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7966 1.1 christos }
7967 1.1 christos {
7968 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7969 1.1 christos CPU (h_zbit) = opval;
7970 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7971 1.1 christos }
7972 1.1 christos {
7973 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)));
7974 1.1 christos CPU (h_vbit) = opval;
7975 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7976 1.1 christos }
7977 1.1 christos {
7978 1.1 christos {
7979 1.1 christos BI opval = 0;
7980 1.1 christos CPU (h_xbit) = opval;
7981 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7982 1.1 christos }
7983 1.1 christos {
7984 1.1 christos BI opval = 0;
7985 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7986 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7987 1.1 christos }
7988 1.1 christos }
7989 1.1 christos }
7990 1.1 christos }
7991 1.1 christos
7992 1.1 christos #undef FLD
7993 1.1 christos }
7994 1.1 christos NEXT (vpc);
7995 1.1 christos
7996 1.1 christos CASE (sem, INSN_SUBU_B_R) : /* subu.b $Rs,$Rd */
7997 1.1 christos {
7998 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7999 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8000 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8001 1.1 christos int UNUSED written = 0;
8002 1.1 christos IADDR UNUSED pc = abuf->addr;
8003 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8004 1.1 christos
8005 1.1 christos {
8006 1.1 christos SI tmp_tmpopd;
8007 1.1 christos SI tmp_tmpops;
8008 1.1 christos BI tmp_carry;
8009 1.1 christos SI tmp_newval;
8010 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
8011 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8012 1.1 christos tmp_carry = CPU (h_cbit);
8013 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8014 1.1 christos {
8015 1.1 christos SI opval = tmp_newval;
8016 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8017 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8018 1.1 christos }
8019 1.1 christos {
8020 1.1 christos {
8021 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))));
8022 1.1 christos CPU (h_cbit) = opval;
8023 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8024 1.1 christos }
8025 1.1 christos {
8026 1.1 christos BI opval = LTSI (tmp_newval, 0);
8027 1.1 christos CPU (h_nbit) = opval;
8028 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8029 1.1 christos }
8030 1.1 christos {
8031 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8032 1.1 christos CPU (h_zbit) = opval;
8033 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8034 1.1 christos }
8035 1.1 christos {
8036 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)));
8037 1.1 christos CPU (h_vbit) = opval;
8038 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8039 1.1 christos }
8040 1.1 christos {
8041 1.1 christos {
8042 1.1 christos BI opval = 0;
8043 1.1 christos CPU (h_xbit) = opval;
8044 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8045 1.1 christos }
8046 1.1 christos {
8047 1.1 christos BI opval = 0;
8048 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8049 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8050 1.1 christos }
8051 1.1 christos }
8052 1.1 christos }
8053 1.1 christos }
8054 1.1 christos
8055 1.1 christos #undef FLD
8056 1.1 christos }
8057 1.1 christos NEXT (vpc);
8058 1.1 christos
8059 1.1 christos CASE (sem, INSN_SUBU_W_R) : /* subu.w $Rs,$Rd */
8060 1.1 christos {
8061 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8062 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8063 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8064 1.1 christos int UNUSED written = 0;
8065 1.1 christos IADDR UNUSED pc = abuf->addr;
8066 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8067 1.1 christos
8068 1.1 christos {
8069 1.1 christos SI tmp_tmpopd;
8070 1.1 christos SI tmp_tmpops;
8071 1.1 christos BI tmp_carry;
8072 1.1 christos SI tmp_newval;
8073 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
8074 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8075 1.1 christos tmp_carry = CPU (h_cbit);
8076 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8077 1.1 christos {
8078 1.1 christos SI opval = tmp_newval;
8079 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8080 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8081 1.1 christos }
8082 1.1 christos {
8083 1.1 christos {
8084 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))));
8085 1.1 christos CPU (h_cbit) = opval;
8086 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8087 1.1 christos }
8088 1.1 christos {
8089 1.1 christos BI opval = LTSI (tmp_newval, 0);
8090 1.1 christos CPU (h_nbit) = opval;
8091 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8092 1.1 christos }
8093 1.1 christos {
8094 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8095 1.1 christos CPU (h_zbit) = opval;
8096 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8097 1.1 christos }
8098 1.1 christos {
8099 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)));
8100 1.1 christos CPU (h_vbit) = opval;
8101 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8102 1.1 christos }
8103 1.1 christos {
8104 1.1 christos {
8105 1.1 christos BI opval = 0;
8106 1.1 christos CPU (h_xbit) = opval;
8107 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8108 1.1 christos }
8109 1.1 christos {
8110 1.1 christos BI opval = 0;
8111 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8112 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8113 1.1 christos }
8114 1.1 christos }
8115 1.1 christos }
8116 1.1 christos }
8117 1.1 christos
8118 1.1 christos #undef FLD
8119 1.1 christos }
8120 1.1 christos NEXT (vpc);
8121 1.1 christos
8122 1.1 christos CASE (sem, INSN_SUBU_M_B_M) : /* subu-m.b [${Rs}${inc}],$Rd */
8123 1.1 christos {
8124 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8125 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8126 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8127 1.1 christos int UNUSED written = 0;
8128 1.1 christos IADDR UNUSED pc = abuf->addr;
8129 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8130 1.1 christos
8131 1.1 christos {
8132 1.1 christos SI tmp_tmpopd;
8133 1.1 christos SI tmp_tmpops;
8134 1.1 christos BI tmp_carry;
8135 1.1 christos SI tmp_newval;
8136 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
8137 1.1 christos QI tmp_tmp_mem;
8138 1.1 christos BI tmp_postinc;
8139 1.1 christos tmp_postinc = FLD (f_memmode);
8140 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8141 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
8142 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8143 1.1 christos {
8144 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8145 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
8146 1.1 christos }
8147 1.1 christos {
8148 1.1 christos SI opval = tmp_addr;
8149 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8150 1.1 christos written |= (1 << 11);
8151 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8152 1.1 christos }
8153 1.1 christos }
8154 1.1 christos }
8155 1.1 christos ; tmp_tmp_mem; }));
8156 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8157 1.1 christos tmp_carry = CPU (h_cbit);
8158 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8159 1.1 christos {
8160 1.1 christos SI opval = tmp_newval;
8161 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8162 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8163 1.1 christos }
8164 1.1 christos {
8165 1.1 christos {
8166 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))));
8167 1.1 christos CPU (h_cbit) = opval;
8168 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8169 1.1 christos }
8170 1.1 christos {
8171 1.1 christos BI opval = LTSI (tmp_newval, 0);
8172 1.1 christos CPU (h_nbit) = opval;
8173 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8174 1.1 christos }
8175 1.1 christos {
8176 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8177 1.1 christos CPU (h_zbit) = opval;
8178 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8179 1.1 christos }
8180 1.1 christos {
8181 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)));
8182 1.1 christos CPU (h_vbit) = opval;
8183 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8184 1.1 christos }
8185 1.1 christos {
8186 1.1 christos {
8187 1.1 christos BI opval = 0;
8188 1.1 christos CPU (h_xbit) = opval;
8189 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8190 1.1 christos }
8191 1.1 christos {
8192 1.1 christos BI opval = 0;
8193 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8194 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8195 1.1 christos }
8196 1.1 christos }
8197 1.1 christos }
8198 1.1 christos }
8199 1.1 christos
8200 1.1 christos abuf->written = written;
8201 1.1 christos #undef FLD
8202 1.1 christos }
8203 1.1 christos NEXT (vpc);
8204 1.1 christos
8205 1.1 christos CASE (sem, INSN_SUBU_M_W_M) : /* subu-m.w [${Rs}${inc}],$Rd */
8206 1.1 christos {
8207 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8208 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8209 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8210 1.1 christos int UNUSED written = 0;
8211 1.1 christos IADDR UNUSED pc = abuf->addr;
8212 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8213 1.1 christos
8214 1.1 christos {
8215 1.1 christos SI tmp_tmpopd;
8216 1.1 christos SI tmp_tmpops;
8217 1.1 christos BI tmp_carry;
8218 1.1 christos SI tmp_newval;
8219 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
8220 1.1 christos HI tmp_tmp_mem;
8221 1.1 christos BI tmp_postinc;
8222 1.1 christos tmp_postinc = FLD (f_memmode);
8223 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8224 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
8225 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8226 1.1 christos {
8227 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8228 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
8229 1.1 christos }
8230 1.1 christos {
8231 1.1 christos SI opval = tmp_addr;
8232 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8233 1.1 christos written |= (1 << 11);
8234 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8235 1.1 christos }
8236 1.1 christos }
8237 1.1 christos }
8238 1.1 christos ; tmp_tmp_mem; }));
8239 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8240 1.1 christos tmp_carry = CPU (h_cbit);
8241 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8242 1.1 christos {
8243 1.1 christos SI opval = tmp_newval;
8244 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8245 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8246 1.1 christos }
8247 1.1 christos {
8248 1.1 christos {
8249 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))));
8250 1.1 christos CPU (h_cbit) = opval;
8251 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8252 1.1 christos }
8253 1.1 christos {
8254 1.1 christos BI opval = LTSI (tmp_newval, 0);
8255 1.1 christos CPU (h_nbit) = opval;
8256 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8257 1.1 christos }
8258 1.1 christos {
8259 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8260 1.1 christos CPU (h_zbit) = opval;
8261 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8262 1.1 christos }
8263 1.1 christos {
8264 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)));
8265 1.1 christos CPU (h_vbit) = opval;
8266 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8267 1.1 christos }
8268 1.1 christos {
8269 1.1 christos {
8270 1.1 christos BI opval = 0;
8271 1.1 christos CPU (h_xbit) = opval;
8272 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8273 1.1 christos }
8274 1.1 christos {
8275 1.1 christos BI opval = 0;
8276 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8277 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8278 1.1 christos }
8279 1.1 christos }
8280 1.1 christos }
8281 1.1 christos }
8282 1.1 christos
8283 1.1 christos abuf->written = written;
8284 1.1 christos #undef FLD
8285 1.1 christos }
8286 1.1 christos NEXT (vpc);
8287 1.1 christos
8288 1.1 christos CASE (sem, INSN_SUBUCBR) : /* [${Rs}${inc}],$Rd */
8289 1.1 christos {
8290 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8291 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8292 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
8293 1.1 christos int UNUSED written = 0;
8294 1.1 christos IADDR UNUSED pc = abuf->addr;
8295 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8296 1.1 christos
8297 1.1 christos {
8298 1.1 christos SI tmp_tmpopd;
8299 1.1 christos SI tmp_tmpops;
8300 1.1 christos BI tmp_carry;
8301 1.1 christos SI tmp_newval;
8302 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
8303 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8304 1.1 christos tmp_carry = CPU (h_cbit);
8305 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8306 1.1 christos {
8307 1.1 christos SI opval = tmp_newval;
8308 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8309 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8310 1.1 christos }
8311 1.1 christos {
8312 1.1 christos {
8313 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))));
8314 1.1 christos CPU (h_cbit) = opval;
8315 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8316 1.1 christos }
8317 1.1 christos {
8318 1.1 christos BI opval = LTSI (tmp_newval, 0);
8319 1.1 christos CPU (h_nbit) = opval;
8320 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8321 1.1 christos }
8322 1.1 christos {
8323 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8324 1.1 christos CPU (h_zbit) = opval;
8325 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8326 1.1 christos }
8327 1.1 christos {
8328 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)));
8329 1.1 christos CPU (h_vbit) = opval;
8330 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8331 1.1 christos }
8332 1.1 christos {
8333 1.1 christos {
8334 1.1 christos BI opval = 0;
8335 1.1 christos CPU (h_xbit) = opval;
8336 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8337 1.1 christos }
8338 1.1 christos {
8339 1.1 christos BI opval = 0;
8340 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8341 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8342 1.1 christos }
8343 1.1 christos }
8344 1.1 christos }
8345 1.1 christos }
8346 1.1 christos
8347 1.1 christos #undef FLD
8348 1.1 christos }
8349 1.1 christos NEXT (vpc);
8350 1.1 christos
8351 1.1 christos CASE (sem, INSN_SUBUCWR) : /* [${Rs}${inc}],$Rd */
8352 1.1 christos {
8353 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8354 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8355 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
8356 1.1 christos int UNUSED written = 0;
8357 1.1 christos IADDR UNUSED pc = abuf->addr;
8358 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8359 1.1 christos
8360 1.1 christos {
8361 1.1 christos SI tmp_tmpopd;
8362 1.1 christos SI tmp_tmpops;
8363 1.1 christos BI tmp_carry;
8364 1.1 christos SI tmp_newval;
8365 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
8366 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8367 1.1 christos tmp_carry = CPU (h_cbit);
8368 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8369 1.1 christos {
8370 1.1 christos SI opval = tmp_newval;
8371 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8372 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8373 1.1 christos }
8374 1.1 christos {
8375 1.1 christos {
8376 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))));
8377 1.1 christos CPU (h_cbit) = opval;
8378 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8379 1.1 christos }
8380 1.1 christos {
8381 1.1 christos BI opval = LTSI (tmp_newval, 0);
8382 1.1 christos CPU (h_nbit) = opval;
8383 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8384 1.1 christos }
8385 1.1 christos {
8386 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8387 1.1 christos CPU (h_zbit) = opval;
8388 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8389 1.1 christos }
8390 1.1 christos {
8391 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)));
8392 1.1 christos CPU (h_vbit) = opval;
8393 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8394 1.1 christos }
8395 1.1 christos {
8396 1.1 christos {
8397 1.1 christos BI opval = 0;
8398 1.1 christos CPU (h_xbit) = opval;
8399 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8400 1.1 christos }
8401 1.1 christos {
8402 1.1 christos BI opval = 0;
8403 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8404 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8405 1.1 christos }
8406 1.1 christos }
8407 1.1 christos }
8408 1.1 christos }
8409 1.1 christos
8410 1.1 christos #undef FLD
8411 1.1 christos }
8412 1.1 christos NEXT (vpc);
8413 1.1 christos
8414 1.1 christos CASE (sem, INSN_ADDC_R) : /* addc $Rs,$Rd */
8415 1.1 christos {
8416 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8417 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8418 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8419 1.1 christos int UNUSED written = 0;
8420 1.1 christos IADDR UNUSED pc = abuf->addr;
8421 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8422 1.1 christos
8423 1.1 christos {
8424 1.1 christos CPU (h_xbit) = 1;
8425 1.1 christos {
8426 1.1 christos SI tmp_tmpopd;
8427 1.1 christos SI tmp_tmpops;
8428 1.1 christos BI tmp_carry;
8429 1.1 christos SI tmp_newval;
8430 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8431 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8432 1.1 christos tmp_carry = CPU (h_cbit);
8433 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8434 1.1 christos {
8435 1.1 christos SI opval = tmp_newval;
8436 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8437 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8438 1.1 christos }
8439 1.1 christos {
8440 1.1 christos {
8441 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))));
8442 1.1 christos CPU (h_cbit) = opval;
8443 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8444 1.1 christos }
8445 1.1 christos {
8446 1.1 christos BI opval = LTSI (tmp_newval, 0);
8447 1.1 christos CPU (h_nbit) = opval;
8448 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8449 1.1 christos }
8450 1.1 christos {
8451 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8452 1.1 christos CPU (h_zbit) = opval;
8453 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8454 1.1 christos }
8455 1.1 christos {
8456 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)));
8457 1.1 christos CPU (h_vbit) = opval;
8458 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8459 1.1 christos }
8460 1.1 christos {
8461 1.1 christos {
8462 1.1 christos BI opval = 0;
8463 1.1 christos CPU (h_xbit) = opval;
8464 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8465 1.1 christos }
8466 1.1 christos {
8467 1.1 christos BI opval = 0;
8468 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8469 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8470 1.1 christos }
8471 1.1 christos }
8472 1.1 christos }
8473 1.1 christos }
8474 1.1 christos }
8475 1.1 christos
8476 1.1 christos #undef FLD
8477 1.1 christos }
8478 1.1 christos NEXT (vpc);
8479 1.1 christos
8480 1.1 christos CASE (sem, INSN_ADDC_M) : /* addc [${Rs}${inc}],${Rd} */
8481 1.1 christos {
8482 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8483 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8484 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8485 1.1 christos int UNUSED written = 0;
8486 1.1 christos IADDR UNUSED pc = abuf->addr;
8487 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8488 1.1 christos
8489 1.1 christos {
8490 1.1 christos CPU (h_xbit) = 1;
8491 1.1 christos {
8492 1.1 christos SI tmp_tmpopd;
8493 1.1 christos SI tmp_tmpops;
8494 1.1 christos BI tmp_carry;
8495 1.1 christos SI tmp_newval;
8496 1.1 christos tmp_tmpops = ({ SI tmp_addr;
8497 1.1 christos SI tmp_tmp_mem;
8498 1.1 christos BI tmp_postinc;
8499 1.1 christos tmp_postinc = FLD (f_memmode);
8500 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8501 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
8502 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8503 1.1 christos {
8504 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8505 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
8506 1.1 christos }
8507 1.1 christos {
8508 1.1 christos SI opval = tmp_addr;
8509 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8510 1.1 christos written |= (1 << 10);
8511 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8512 1.1 christos }
8513 1.1 christos }
8514 1.1 christos }
8515 1.1 christos ; tmp_tmp_mem; });
8516 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8517 1.1 christos tmp_carry = CPU (h_cbit);
8518 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8519 1.1 christos {
8520 1.1 christos SI opval = tmp_newval;
8521 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8522 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8523 1.1 christos }
8524 1.1 christos {
8525 1.1 christos {
8526 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))));
8527 1.1 christos CPU (h_cbit) = opval;
8528 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8529 1.1 christos }
8530 1.1 christos {
8531 1.1 christos BI opval = LTSI (tmp_newval, 0);
8532 1.1 christos CPU (h_nbit) = opval;
8533 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8534 1.1 christos }
8535 1.1 christos {
8536 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8537 1.1 christos CPU (h_zbit) = opval;
8538 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8539 1.1 christos }
8540 1.1 christos {
8541 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)));
8542 1.1 christos CPU (h_vbit) = opval;
8543 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8544 1.1 christos }
8545 1.1 christos {
8546 1.1 christos {
8547 1.1 christos BI opval = 0;
8548 1.1 christos CPU (h_xbit) = opval;
8549 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8550 1.1 christos }
8551 1.1 christos {
8552 1.1 christos BI opval = 0;
8553 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8554 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8555 1.1 christos }
8556 1.1 christos }
8557 1.1 christos }
8558 1.1 christos }
8559 1.1 christos }
8560 1.1 christos
8561 1.1 christos abuf->written = written;
8562 1.1 christos #undef FLD
8563 1.1 christos }
8564 1.1 christos NEXT (vpc);
8565 1.1 christos
8566 1.1 christos CASE (sem, INSN_ADDC_C) : /* addc ${const32},${Rd} */
8567 1.1 christos {
8568 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8569 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8570 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
8571 1.1 christos int UNUSED written = 0;
8572 1.1 christos IADDR UNUSED pc = abuf->addr;
8573 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8574 1.1 christos
8575 1.1 christos {
8576 1.1 christos CPU (h_xbit) = 1;
8577 1.1 christos {
8578 1.1 christos SI tmp_tmpopd;
8579 1.1 christos SI tmp_tmpops;
8580 1.1 christos BI tmp_carry;
8581 1.1 christos SI tmp_newval;
8582 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
8583 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8584 1.1 christos tmp_carry = CPU (h_cbit);
8585 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8586 1.1 christos {
8587 1.1 christos SI opval = tmp_newval;
8588 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8589 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8590 1.1 christos }
8591 1.1 christos {
8592 1.1 christos {
8593 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))));
8594 1.1 christos CPU (h_cbit) = opval;
8595 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8596 1.1 christos }
8597 1.1 christos {
8598 1.1 christos BI opval = LTSI (tmp_newval, 0);
8599 1.1 christos CPU (h_nbit) = opval;
8600 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8601 1.1 christos }
8602 1.1 christos {
8603 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8604 1.1 christos CPU (h_zbit) = opval;
8605 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8606 1.1 christos }
8607 1.1 christos {
8608 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)));
8609 1.1 christos CPU (h_vbit) = opval;
8610 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8611 1.1 christos }
8612 1.1 christos {
8613 1.1 christos {
8614 1.1 christos BI opval = 0;
8615 1.1 christos CPU (h_xbit) = opval;
8616 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8617 1.1 christos }
8618 1.1 christos {
8619 1.1 christos BI opval = 0;
8620 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8621 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8622 1.1 christos }
8623 1.1 christos }
8624 1.1 christos }
8625 1.1 christos }
8626 1.1 christos }
8627 1.1 christos
8628 1.1 christos #undef FLD
8629 1.1 christos }
8630 1.1 christos NEXT (vpc);
8631 1.1 christos
8632 1.1 christos CASE (sem, INSN_LAPC_D) : /* lapc.d ${const32-pcrel},${Rd} */
8633 1.1 christos {
8634 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8635 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8636 1.1 christos #define FLD(f) abuf->fields.sfmt_lapc_d.f
8637 1.1 christos int UNUSED written = 0;
8638 1.1 christos IADDR UNUSED pc = abuf->addr;
8639 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8640 1.1 christos
8641 1.1 christos {
8642 1.1 christos {
8643 1.1 christos SI opval = FLD (i_const32_pcrel);
8644 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8645 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8646 1.1 christos }
8647 1.1 christos {
8648 1.1 christos {
8649 1.1 christos BI opval = 0;
8650 1.1 christos CPU (h_xbit) = opval;
8651 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8652 1.1 christos }
8653 1.1 christos {
8654 1.1 christos BI opval = 0;
8655 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8656 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8657 1.1 christos }
8658 1.1 christos }
8659 1.1 christos }
8660 1.1 christos
8661 1.1 christos #undef FLD
8662 1.1 christos }
8663 1.1 christos NEXT (vpc);
8664 1.1 christos
8665 1.1 christos CASE (sem, INSN_LAPCQ) : /* lapcq ${qo},${Rd} */
8666 1.1 christos {
8667 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8668 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8669 1.1 christos #define FLD(f) abuf->fields.sfmt_lapcq.f
8670 1.1 christos int UNUSED written = 0;
8671 1.1 christos IADDR UNUSED pc = abuf->addr;
8672 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8673 1.1 christos
8674 1.1 christos {
8675 1.1 christos {
8676 1.1 christos SI opval = FLD (i_qo);
8677 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8678 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8679 1.1 christos }
8680 1.1 christos {
8681 1.1 christos {
8682 1.1 christos BI opval = 0;
8683 1.1 christos CPU (h_xbit) = opval;
8684 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8685 1.1 christos }
8686 1.1 christos {
8687 1.1 christos BI opval = 0;
8688 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8689 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8690 1.1 christos }
8691 1.1 christos }
8692 1.1 christos }
8693 1.1 christos
8694 1.1 christos #undef FLD
8695 1.1 christos }
8696 1.1 christos NEXT (vpc);
8697 1.1 christos
8698 1.1 christos CASE (sem, INSN_ADDI_B_R) : /* addi.b ${Rs-dfield}.m,${Rd-sfield} */
8699 1.1 christos {
8700 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8701 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8702 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8703 1.1 christos int UNUSED written = 0;
8704 1.1 christos IADDR UNUSED pc = abuf->addr;
8705 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8706 1.1 christos
8707 1.1 christos {
8708 1.1 christos {
8709 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
8710 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8711 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8712 1.1 christos }
8713 1.1 christos {
8714 1.1 christos {
8715 1.1 christos BI opval = 0;
8716 1.1 christos CPU (h_xbit) = opval;
8717 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8718 1.1 christos }
8719 1.1 christos {
8720 1.1 christos BI opval = 0;
8721 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8722 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8723 1.1 christos }
8724 1.1 christos }
8725 1.1 christos }
8726 1.1 christos
8727 1.1 christos #undef FLD
8728 1.1 christos }
8729 1.1 christos NEXT (vpc);
8730 1.1 christos
8731 1.1 christos CASE (sem, INSN_ADDI_W_R) : /* addi.w ${Rs-dfield}.m,${Rd-sfield} */
8732 1.1 christos {
8733 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8734 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8735 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8736 1.1 christos int UNUSED written = 0;
8737 1.1 christos IADDR UNUSED pc = abuf->addr;
8738 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8739 1.1 christos
8740 1.1 christos {
8741 1.1 christos {
8742 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
8743 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8744 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8745 1.1 christos }
8746 1.1 christos {
8747 1.1 christos {
8748 1.1 christos BI opval = 0;
8749 1.1 christos CPU (h_xbit) = opval;
8750 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8751 1.1 christos }
8752 1.1 christos {
8753 1.1 christos BI opval = 0;
8754 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8755 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8756 1.1 christos }
8757 1.1 christos }
8758 1.1 christos }
8759 1.1 christos
8760 1.1 christos #undef FLD
8761 1.1 christos }
8762 1.1 christos NEXT (vpc);
8763 1.1 christos
8764 1.1 christos CASE (sem, INSN_ADDI_D_R) : /* addi.d ${Rs-dfield}.m,${Rd-sfield} */
8765 1.1 christos {
8766 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8767 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8768 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8769 1.1 christos int UNUSED written = 0;
8770 1.1 christos IADDR UNUSED pc = abuf->addr;
8771 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8772 1.1 christos
8773 1.1 christos {
8774 1.1 christos {
8775 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
8776 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8777 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8778 1.1 christos }
8779 1.1 christos {
8780 1.1 christos {
8781 1.1 christos BI opval = 0;
8782 1.1 christos CPU (h_xbit) = opval;
8783 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8784 1.1 christos }
8785 1.1 christos {
8786 1.1 christos BI opval = 0;
8787 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8788 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8789 1.1 christos }
8790 1.1 christos }
8791 1.1 christos }
8792 1.1 christos
8793 1.1 christos #undef FLD
8794 1.1 christos }
8795 1.1 christos NEXT (vpc);
8796 1.1 christos
8797 1.1 christos CASE (sem, INSN_NEG_B_R) : /* neg.b $Rs,$Rd */
8798 1.1 christos {
8799 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8800 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8801 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8802 1.1 christos int UNUSED written = 0;
8803 1.1 christos IADDR UNUSED pc = abuf->addr;
8804 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8805 1.1 christos
8806 1.1 christos {
8807 1.1 christos QI tmp_tmpopd;
8808 1.1 christos QI tmp_tmpops;
8809 1.1 christos BI tmp_carry;
8810 1.1 christos QI tmp_newval;
8811 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8812 1.1 christos tmp_tmpopd = 0;
8813 1.1 christos tmp_carry = CPU (h_cbit);
8814 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8815 1.1 christos {
8816 1.1 christos SI tmp_oldregval;
8817 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8818 1.1 christos {
8819 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
8820 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8821 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8822 1.1 christos }
8823 1.1 christos }
8824 1.1 christos {
8825 1.1 christos {
8826 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))));
8827 1.1 christos CPU (h_cbit) = opval;
8828 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8829 1.1 christos }
8830 1.1 christos {
8831 1.1 christos BI opval = LTQI (tmp_newval, 0);
8832 1.1 christos CPU (h_nbit) = opval;
8833 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8834 1.1 christos }
8835 1.1 christos {
8836 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8837 1.1 christos CPU (h_zbit) = opval;
8838 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8839 1.1 christos }
8840 1.1 christos {
8841 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)));
8842 1.1 christos CPU (h_vbit) = opval;
8843 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8844 1.1 christos }
8845 1.1 christos {
8846 1.1 christos {
8847 1.1 christos BI opval = 0;
8848 1.1 christos CPU (h_xbit) = opval;
8849 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8850 1.1 christos }
8851 1.1 christos {
8852 1.1 christos BI opval = 0;
8853 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8854 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8855 1.1 christos }
8856 1.1 christos }
8857 1.1 christos }
8858 1.1 christos }
8859 1.1 christos
8860 1.1 christos #undef FLD
8861 1.1 christos }
8862 1.1 christos NEXT (vpc);
8863 1.1 christos
8864 1.1 christos CASE (sem, INSN_NEG_W_R) : /* neg.w $Rs,$Rd */
8865 1.1 christos {
8866 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8867 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8868 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8869 1.1 christos int UNUSED written = 0;
8870 1.1 christos IADDR UNUSED pc = abuf->addr;
8871 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8872 1.1 christos
8873 1.1 christos {
8874 1.1 christos HI tmp_tmpopd;
8875 1.1 christos HI tmp_tmpops;
8876 1.1 christos BI tmp_carry;
8877 1.1 christos HI tmp_newval;
8878 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8879 1.1 christos tmp_tmpopd = 0;
8880 1.1 christos tmp_carry = CPU (h_cbit);
8881 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8882 1.1 christos {
8883 1.1 christos SI tmp_oldregval;
8884 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8885 1.1 christos {
8886 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
8887 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8888 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8889 1.1 christos }
8890 1.1 christos }
8891 1.1 christos {
8892 1.1 christos {
8893 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))));
8894 1.1 christos CPU (h_cbit) = opval;
8895 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8896 1.1 christos }
8897 1.1 christos {
8898 1.1 christos BI opval = LTHI (tmp_newval, 0);
8899 1.1 christos CPU (h_nbit) = opval;
8900 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8901 1.1 christos }
8902 1.1 christos {
8903 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8904 1.1 christos CPU (h_zbit) = opval;
8905 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8906 1.1 christos }
8907 1.1 christos {
8908 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)));
8909 1.1 christos CPU (h_vbit) = opval;
8910 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8911 1.1 christos }
8912 1.1 christos {
8913 1.1 christos {
8914 1.1 christos BI opval = 0;
8915 1.1 christos CPU (h_xbit) = opval;
8916 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8917 1.1 christos }
8918 1.1 christos {
8919 1.1 christos BI opval = 0;
8920 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8921 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8922 1.1 christos }
8923 1.1 christos }
8924 1.1 christos }
8925 1.1 christos }
8926 1.1 christos
8927 1.1 christos #undef FLD
8928 1.1 christos }
8929 1.1 christos NEXT (vpc);
8930 1.1 christos
8931 1.1 christos CASE (sem, INSN_NEG_D_R) : /* neg.d $Rs,$Rd */
8932 1.1 christos {
8933 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8934 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8935 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8936 1.1 christos int UNUSED written = 0;
8937 1.1 christos IADDR UNUSED pc = abuf->addr;
8938 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8939 1.1 christos
8940 1.1 christos {
8941 1.1 christos SI tmp_tmpopd;
8942 1.1 christos SI tmp_tmpops;
8943 1.1 christos BI tmp_carry;
8944 1.1 christos SI tmp_newval;
8945 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8946 1.1 christos tmp_tmpopd = 0;
8947 1.1 christos tmp_carry = CPU (h_cbit);
8948 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8949 1.1 christos {
8950 1.1 christos SI opval = tmp_newval;
8951 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8952 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8953 1.1 christos }
8954 1.1 christos {
8955 1.1 christos {
8956 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))));
8957 1.1 christos CPU (h_cbit) = opval;
8958 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8959 1.1 christos }
8960 1.1 christos {
8961 1.1 christos BI opval = LTSI (tmp_newval, 0);
8962 1.1 christos CPU (h_nbit) = opval;
8963 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8964 1.1 christos }
8965 1.1 christos {
8966 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8967 1.1 christos CPU (h_zbit) = opval;
8968 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8969 1.1 christos }
8970 1.1 christos {
8971 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)));
8972 1.1 christos CPU (h_vbit) = opval;
8973 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8974 1.1 christos }
8975 1.1 christos {
8976 1.1 christos {
8977 1.1 christos BI opval = 0;
8978 1.1 christos CPU (h_xbit) = opval;
8979 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8980 1.1 christos }
8981 1.1 christos {
8982 1.1 christos BI opval = 0;
8983 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8984 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8985 1.1 christos }
8986 1.1 christos }
8987 1.1 christos }
8988 1.1 christos }
8989 1.1 christos
8990 1.1 christos #undef FLD
8991 1.1 christos }
8992 1.1 christos NEXT (vpc);
8993 1.1 christos
8994 1.1 christos CASE (sem, INSN_TEST_M_B_M) : /* test-m.b [${Rs}${inc}] */
8995 1.1 christos {
8996 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8997 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8998 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
8999 1.1 christos int UNUSED written = 0;
9000 1.1 christos IADDR UNUSED pc = abuf->addr;
9001 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9002 1.1 christos
9003 1.1 christos {
9004 1.1 christos QI tmp_tmpd;
9005 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9006 1.1 christos QI tmp_tmp_mem;
9007 1.1 christos BI tmp_postinc;
9008 1.1 christos tmp_postinc = FLD (f_memmode);
9009 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9010 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
9011 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9012 1.1 christos {
9013 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9014 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9015 1.1 christos }
9016 1.1 christos {
9017 1.1 christos SI opval = tmp_addr;
9018 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9019 1.1 christos written |= (1 << 8);
9020 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9021 1.1 christos }
9022 1.1 christos }
9023 1.1 christos }
9024 1.1 christos ; tmp_tmp_mem; });
9025 1.1 christos {
9026 1.1 christos QI tmp_tmpopd;
9027 1.1 christos QI tmp_tmpops;
9028 1.1 christos BI tmp_carry;
9029 1.1 christos QI tmp_newval;
9030 1.1 christos tmp_tmpops = 0;
9031 1.1 christos tmp_tmpopd = tmp_tmpd;
9032 1.1 christos tmp_carry = CPU (h_cbit);
9033 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9034 1.1 christos ((void) 0); /*nop*/
9035 1.1 christos {
9036 1.1 christos {
9037 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))));
9038 1.1 christos CPU (h_cbit) = opval;
9039 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9040 1.1 christos }
9041 1.1 christos {
9042 1.1 christos BI opval = LTQI (tmp_newval, 0);
9043 1.1 christos CPU (h_nbit) = opval;
9044 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9045 1.1 christos }
9046 1.1 christos {
9047 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9048 1.1 christos CPU (h_zbit) = opval;
9049 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9050 1.1 christos }
9051 1.1 christos {
9052 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)));
9053 1.1 christos CPU (h_vbit) = opval;
9054 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9055 1.1 christos }
9056 1.1 christos {
9057 1.1 christos {
9058 1.1 christos BI opval = 0;
9059 1.1 christos CPU (h_xbit) = opval;
9060 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9061 1.1 christos }
9062 1.1 christos {
9063 1.1 christos BI opval = 0;
9064 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9065 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9066 1.1 christos }
9067 1.1 christos }
9068 1.1 christos }
9069 1.1 christos }
9070 1.1 christos }
9071 1.1 christos
9072 1.1 christos abuf->written = written;
9073 1.1 christos #undef FLD
9074 1.1 christos }
9075 1.1 christos NEXT (vpc);
9076 1.1 christos
9077 1.1 christos CASE (sem, INSN_TEST_M_W_M) : /* test-m.w [${Rs}${inc}] */
9078 1.1 christos {
9079 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9080 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9081 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9082 1.1 christos int UNUSED written = 0;
9083 1.1 christos IADDR UNUSED pc = abuf->addr;
9084 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9085 1.1 christos
9086 1.1 christos {
9087 1.1 christos HI tmp_tmpd;
9088 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9089 1.1 christos HI tmp_tmp_mem;
9090 1.1 christos BI tmp_postinc;
9091 1.1 christos tmp_postinc = FLD (f_memmode);
9092 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9093 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
9094 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9095 1.1 christos {
9096 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9097 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9098 1.1 christos }
9099 1.1 christos {
9100 1.1 christos SI opval = tmp_addr;
9101 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9102 1.1 christos written |= (1 << 8);
9103 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9104 1.1 christos }
9105 1.1 christos }
9106 1.1 christos }
9107 1.1 christos ; tmp_tmp_mem; });
9108 1.1 christos {
9109 1.1 christos HI tmp_tmpopd;
9110 1.1 christos HI tmp_tmpops;
9111 1.1 christos BI tmp_carry;
9112 1.1 christos HI tmp_newval;
9113 1.1 christos tmp_tmpops = 0;
9114 1.1 christos tmp_tmpopd = tmp_tmpd;
9115 1.1 christos tmp_carry = CPU (h_cbit);
9116 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9117 1.1 christos ((void) 0); /*nop*/
9118 1.1 christos {
9119 1.1 christos {
9120 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))));
9121 1.1 christos CPU (h_cbit) = opval;
9122 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9123 1.1 christos }
9124 1.1 christos {
9125 1.1 christos BI opval = LTHI (tmp_newval, 0);
9126 1.1 christos CPU (h_nbit) = opval;
9127 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9128 1.1 christos }
9129 1.1 christos {
9130 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9131 1.1 christos CPU (h_zbit) = opval;
9132 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9133 1.1 christos }
9134 1.1 christos {
9135 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)));
9136 1.1 christos CPU (h_vbit) = opval;
9137 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9138 1.1 christos }
9139 1.1 christos {
9140 1.1 christos {
9141 1.1 christos BI opval = 0;
9142 1.1 christos CPU (h_xbit) = opval;
9143 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9144 1.1 christos }
9145 1.1 christos {
9146 1.1 christos BI opval = 0;
9147 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9148 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9149 1.1 christos }
9150 1.1 christos }
9151 1.1 christos }
9152 1.1 christos }
9153 1.1 christos }
9154 1.1 christos
9155 1.1 christos abuf->written = written;
9156 1.1 christos #undef FLD
9157 1.1 christos }
9158 1.1 christos NEXT (vpc);
9159 1.1 christos
9160 1.1 christos CASE (sem, INSN_TEST_M_D_M) : /* test-m.d [${Rs}${inc}] */
9161 1.1 christos {
9162 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9163 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9164 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9165 1.1 christos int UNUSED written = 0;
9166 1.1 christos IADDR UNUSED pc = abuf->addr;
9167 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9168 1.1 christos
9169 1.1 christos {
9170 1.1 christos SI tmp_tmpd;
9171 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9172 1.1 christos SI tmp_tmp_mem;
9173 1.1 christos BI tmp_postinc;
9174 1.1 christos tmp_postinc = FLD (f_memmode);
9175 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9176 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
9177 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9178 1.1 christos {
9179 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9180 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9181 1.1 christos }
9182 1.1 christos {
9183 1.1 christos SI opval = tmp_addr;
9184 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9185 1.1 christos written |= (1 << 8);
9186 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9187 1.1 christos }
9188 1.1 christos }
9189 1.1 christos }
9190 1.1 christos ; tmp_tmp_mem; });
9191 1.1 christos {
9192 1.1 christos SI tmp_tmpopd;
9193 1.1 christos SI tmp_tmpops;
9194 1.1 christos BI tmp_carry;
9195 1.1 christos SI tmp_newval;
9196 1.1 christos tmp_tmpops = 0;
9197 1.1 christos tmp_tmpopd = tmp_tmpd;
9198 1.1 christos tmp_carry = CPU (h_cbit);
9199 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9200 1.1 christos ((void) 0); /*nop*/
9201 1.1 christos {
9202 1.1 christos {
9203 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))));
9204 1.1 christos CPU (h_cbit) = opval;
9205 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9206 1.1 christos }
9207 1.1 christos {
9208 1.1 christos BI opval = LTSI (tmp_newval, 0);
9209 1.1 christos CPU (h_nbit) = opval;
9210 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9211 1.1 christos }
9212 1.1 christos {
9213 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9214 1.1 christos CPU (h_zbit) = opval;
9215 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9216 1.1 christos }
9217 1.1 christos {
9218 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)));
9219 1.1 christos CPU (h_vbit) = opval;
9220 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9221 1.1 christos }
9222 1.1 christos {
9223 1.1 christos {
9224 1.1 christos BI opval = 0;
9225 1.1 christos CPU (h_xbit) = opval;
9226 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9227 1.1 christos }
9228 1.1 christos {
9229 1.1 christos BI opval = 0;
9230 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9231 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9232 1.1 christos }
9233 1.1 christos }
9234 1.1 christos }
9235 1.1 christos }
9236 1.1 christos }
9237 1.1 christos
9238 1.1 christos abuf->written = written;
9239 1.1 christos #undef FLD
9240 1.1 christos }
9241 1.1 christos NEXT (vpc);
9242 1.1 christos
9243 1.1 christos CASE (sem, INSN_MOVE_R_M_B_M) : /* move-r-m.b ${Rs-dfield},[${Rd-sfield}${inc}] */
9244 1.1 christos {
9245 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9246 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9247 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9248 1.1 christos int UNUSED written = 0;
9249 1.1 christos IADDR UNUSED pc = abuf->addr;
9250 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9251 1.1 christos
9252 1.1 christos {
9253 1.1 christos QI tmp_tmpd;
9254 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9255 1.1 christos {
9256 1.1 christos SI tmp_addr;
9257 1.1 christos BI tmp_postinc;
9258 1.1 christos tmp_postinc = FLD (f_memmode);
9259 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9260 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9261 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9262 1.1 christos {
9263 1.1 christos {
9264 1.1 christos QI opval = tmp_tmpd;
9265 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9266 1.1 christos written |= (1 << 10);
9267 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9268 1.1 christos }
9269 1.1 christos {
9270 1.1 christos BI opval = CPU (h_pbit);
9271 1.1 christos CPU (h_cbit) = opval;
9272 1.1 christos written |= (1 << 9);
9273 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9274 1.1 christos }
9275 1.1 christos }
9276 1.1 christos } else {
9277 1.1 christos {
9278 1.1 christos BI opval = 1;
9279 1.1 christos CPU (h_cbit) = opval;
9280 1.1 christos written |= (1 << 9);
9281 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9282 1.1 christos }
9283 1.1 christos }
9284 1.1 christos } else {
9285 1.1 christos {
9286 1.1 christos QI opval = tmp_tmpd;
9287 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9288 1.1 christos written |= (1 << 10);
9289 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9290 1.1 christos }
9291 1.1 christos }
9292 1.1 christos if (NEBI (tmp_postinc, 0)) {
9293 1.1 christos {
9294 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9295 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9296 1.1 christos }
9297 1.1 christos {
9298 1.1 christos SI opval = tmp_addr;
9299 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9300 1.1 christos written |= (1 << 8);
9301 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9302 1.1 christos }
9303 1.1 christos }
9304 1.1 christos }
9305 1.1 christos }
9306 1.1 christos {
9307 1.1 christos {
9308 1.1 christos BI opval = 0;
9309 1.1 christos CPU (h_xbit) = opval;
9310 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9311 1.1 christos }
9312 1.1 christos {
9313 1.1 christos BI opval = 0;
9314 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9315 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9316 1.1 christos }
9317 1.1 christos }
9318 1.1 christos }
9319 1.1 christos
9320 1.1 christos abuf->written = written;
9321 1.1 christos #undef FLD
9322 1.1 christos }
9323 1.1 christos NEXT (vpc);
9324 1.1 christos
9325 1.1 christos CASE (sem, INSN_MOVE_R_M_W_M) : /* move-r-m.w ${Rs-dfield},[${Rd-sfield}${inc}] */
9326 1.1 christos {
9327 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9328 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9329 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9330 1.1 christos int UNUSED written = 0;
9331 1.1 christos IADDR UNUSED pc = abuf->addr;
9332 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9333 1.1 christos
9334 1.1 christos {
9335 1.1 christos HI tmp_tmpd;
9336 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9337 1.1 christos {
9338 1.1 christos SI tmp_addr;
9339 1.1 christos BI tmp_postinc;
9340 1.1 christos tmp_postinc = FLD (f_memmode);
9341 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9342 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9343 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9344 1.1 christos {
9345 1.1 christos {
9346 1.1 christos HI opval = tmp_tmpd;
9347 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9348 1.1 christos written |= (1 << 10);
9349 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9350 1.1 christos }
9351 1.1 christos {
9352 1.1 christos BI opval = CPU (h_pbit);
9353 1.1 christos CPU (h_cbit) = opval;
9354 1.1 christos written |= (1 << 9);
9355 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9356 1.1 christos }
9357 1.1 christos }
9358 1.1 christos } else {
9359 1.1 christos {
9360 1.1 christos BI opval = 1;
9361 1.1 christos CPU (h_cbit) = opval;
9362 1.1 christos written |= (1 << 9);
9363 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9364 1.1 christos }
9365 1.1 christos }
9366 1.1 christos } else {
9367 1.1 christos {
9368 1.1 christos HI opval = tmp_tmpd;
9369 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9370 1.1 christos written |= (1 << 10);
9371 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9372 1.1 christos }
9373 1.1 christos }
9374 1.1 christos if (NEBI (tmp_postinc, 0)) {
9375 1.1 christos {
9376 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9377 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9378 1.1 christos }
9379 1.1 christos {
9380 1.1 christos SI opval = tmp_addr;
9381 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9382 1.1 christos written |= (1 << 8);
9383 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9384 1.1 christos }
9385 1.1 christos }
9386 1.1 christos }
9387 1.1 christos }
9388 1.1 christos {
9389 1.1 christos {
9390 1.1 christos BI opval = 0;
9391 1.1 christos CPU (h_xbit) = opval;
9392 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9393 1.1 christos }
9394 1.1 christos {
9395 1.1 christos BI opval = 0;
9396 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9397 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9398 1.1 christos }
9399 1.1 christos }
9400 1.1 christos }
9401 1.1 christos
9402 1.1 christos abuf->written = written;
9403 1.1 christos #undef FLD
9404 1.1 christos }
9405 1.1 christos NEXT (vpc);
9406 1.1 christos
9407 1.1 christos CASE (sem, INSN_MOVE_R_M_D_M) : /* move-r-m.d ${Rs-dfield},[${Rd-sfield}${inc}] */
9408 1.1 christos {
9409 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9410 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9411 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9412 1.1 christos int UNUSED written = 0;
9413 1.1 christos IADDR UNUSED pc = abuf->addr;
9414 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9415 1.1 christos
9416 1.1 christos {
9417 1.1 christos SI tmp_tmpd;
9418 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9419 1.1 christos {
9420 1.1 christos SI tmp_addr;
9421 1.1 christos BI tmp_postinc;
9422 1.1 christos tmp_postinc = FLD (f_memmode);
9423 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9424 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9425 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9426 1.1 christos {
9427 1.1 christos {
9428 1.1 christos SI opval = tmp_tmpd;
9429 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9430 1.1 christos written |= (1 << 10);
9431 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9432 1.1 christos }
9433 1.1 christos {
9434 1.1 christos BI opval = CPU (h_pbit);
9435 1.1 christos CPU (h_cbit) = opval;
9436 1.1 christos written |= (1 << 9);
9437 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9438 1.1 christos }
9439 1.1 christos }
9440 1.1 christos } else {
9441 1.1 christos {
9442 1.1 christos BI opval = 1;
9443 1.1 christos CPU (h_cbit) = opval;
9444 1.1 christos written |= (1 << 9);
9445 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9446 1.1 christos }
9447 1.1 christos }
9448 1.1 christos } else {
9449 1.1 christos {
9450 1.1 christos SI opval = tmp_tmpd;
9451 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9452 1.1 christos written |= (1 << 10);
9453 1.1 christos TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9454 1.1 christos }
9455 1.1 christos }
9456 1.1 christos if (NEBI (tmp_postinc, 0)) {
9457 1.1 christos {
9458 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9459 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9460 1.1 christos }
9461 1.1 christos {
9462 1.1 christos SI opval = tmp_addr;
9463 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9464 1.1 christos written |= (1 << 8);
9465 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9466 1.1 christos }
9467 1.1 christos }
9468 1.1 christos }
9469 1.1 christos }
9470 1.1 christos {
9471 1.1 christos {
9472 1.1 christos BI opval = 0;
9473 1.1 christos CPU (h_xbit) = opval;
9474 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9475 1.1 christos }
9476 1.1 christos {
9477 1.1 christos BI opval = 0;
9478 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9479 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9480 1.1 christos }
9481 1.1 christos }
9482 1.1 christos }
9483 1.1 christos
9484 1.1 christos abuf->written = written;
9485 1.1 christos #undef FLD
9486 1.1 christos }
9487 1.1 christos NEXT (vpc);
9488 1.1 christos
9489 1.1 christos CASE (sem, INSN_MULS_B) : /* muls.b $Rs,$Rd */
9490 1.1 christos {
9491 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9492 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9493 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9494 1.1 christos int UNUSED written = 0;
9495 1.1 christos IADDR UNUSED pc = abuf->addr;
9496 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9497 1.1 christos
9498 1.1 christos {
9499 1.1 christos DI tmp_src1;
9500 1.1 christos DI tmp_src2;
9501 1.1 christos DI tmp_tmpr;
9502 1.1 christos tmp_src1 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9503 1.1 christos tmp_src2 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9504 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9505 1.1 christos {
9506 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9507 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9508 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9509 1.1 christos }
9510 1.1 christos {
9511 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9512 1.1 christos SET_H_SR (((UINT) 7), opval);
9513 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9514 1.1 christos }
9515 1.1 christos {
9516 1.1 christos {
9517 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9518 1.1 christos CPU (h_cbit) = opval;
9519 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9520 1.1 christos }
9521 1.1 christos {
9522 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9523 1.1 christos CPU (h_nbit) = opval;
9524 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9525 1.1 christos }
9526 1.1 christos {
9527 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9528 1.1 christos CPU (h_zbit) = opval;
9529 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9530 1.1 christos }
9531 1.1 christos {
9532 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9533 1.1 christos CPU (h_vbit) = opval;
9534 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9535 1.1 christos }
9536 1.1 christos {
9537 1.1 christos {
9538 1.1 christos BI opval = 0;
9539 1.1 christos CPU (h_xbit) = opval;
9540 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9541 1.1 christos }
9542 1.1 christos {
9543 1.1 christos BI opval = 0;
9544 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9545 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9546 1.1 christos }
9547 1.1 christos }
9548 1.1 christos }
9549 1.1 christos }
9550 1.1 christos
9551 1.1 christos #undef FLD
9552 1.1 christos }
9553 1.1 christos NEXT (vpc);
9554 1.1 christos
9555 1.1 christos CASE (sem, INSN_MULS_W) : /* muls.w $Rs,$Rd */
9556 1.1 christos {
9557 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9558 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9559 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9560 1.1 christos int UNUSED written = 0;
9561 1.1 christos IADDR UNUSED pc = abuf->addr;
9562 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9563 1.1 christos
9564 1.1 christos {
9565 1.1 christos DI tmp_src1;
9566 1.1 christos DI tmp_src2;
9567 1.1 christos DI tmp_tmpr;
9568 1.1 christos tmp_src1 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9569 1.1 christos tmp_src2 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9570 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9571 1.1 christos {
9572 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9573 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9574 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9575 1.1 christos }
9576 1.1 christos {
9577 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9578 1.1 christos SET_H_SR (((UINT) 7), opval);
9579 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9580 1.1 christos }
9581 1.1 christos {
9582 1.1 christos {
9583 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9584 1.1 christos CPU (h_cbit) = opval;
9585 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9586 1.1 christos }
9587 1.1 christos {
9588 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9589 1.1 christos CPU (h_nbit) = opval;
9590 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9591 1.1 christos }
9592 1.1 christos {
9593 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9594 1.1 christos CPU (h_zbit) = opval;
9595 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9596 1.1 christos }
9597 1.1 christos {
9598 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9599 1.1 christos CPU (h_vbit) = opval;
9600 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9601 1.1 christos }
9602 1.1 christos {
9603 1.1 christos {
9604 1.1 christos BI opval = 0;
9605 1.1 christos CPU (h_xbit) = opval;
9606 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9607 1.1 christos }
9608 1.1 christos {
9609 1.1 christos BI opval = 0;
9610 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9611 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9612 1.1 christos }
9613 1.1 christos }
9614 1.1 christos }
9615 1.1 christos }
9616 1.1 christos
9617 1.1 christos #undef FLD
9618 1.1 christos }
9619 1.1 christos NEXT (vpc);
9620 1.1 christos
9621 1.1 christos CASE (sem, INSN_MULS_D) : /* muls.d $Rs,$Rd */
9622 1.1 christos {
9623 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9624 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9625 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9626 1.1 christos int UNUSED written = 0;
9627 1.1 christos IADDR UNUSED pc = abuf->addr;
9628 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9629 1.1 christos
9630 1.1 christos {
9631 1.1 christos DI tmp_src1;
9632 1.1 christos DI tmp_src2;
9633 1.1 christos DI tmp_tmpr;
9634 1.1 christos tmp_src1 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9635 1.1 christos tmp_src2 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9636 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9637 1.1 christos {
9638 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9639 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9640 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9641 1.1 christos }
9642 1.1 christos {
9643 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9644 1.1 christos SET_H_SR (((UINT) 7), opval);
9645 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9646 1.1 christos }
9647 1.1 christos {
9648 1.1 christos {
9649 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9650 1.1 christos CPU (h_cbit) = opval;
9651 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9652 1.1 christos }
9653 1.1 christos {
9654 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9655 1.1 christos CPU (h_nbit) = opval;
9656 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9657 1.1 christos }
9658 1.1 christos {
9659 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9660 1.1 christos CPU (h_zbit) = opval;
9661 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9662 1.1 christos }
9663 1.1 christos {
9664 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9665 1.1 christos CPU (h_vbit) = opval;
9666 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9667 1.1 christos }
9668 1.1 christos {
9669 1.1 christos {
9670 1.1 christos BI opval = 0;
9671 1.1 christos CPU (h_xbit) = opval;
9672 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9673 1.1 christos }
9674 1.1 christos {
9675 1.1 christos BI opval = 0;
9676 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9677 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9678 1.1 christos }
9679 1.1 christos }
9680 1.1 christos }
9681 1.1 christos }
9682 1.1 christos
9683 1.1 christos #undef FLD
9684 1.1 christos }
9685 1.1 christos NEXT (vpc);
9686 1.1 christos
9687 1.1 christos CASE (sem, INSN_MULU_B) : /* mulu.b $Rs,$Rd */
9688 1.1 christos {
9689 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9690 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9691 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9692 1.1 christos int UNUSED written = 0;
9693 1.1 christos IADDR UNUSED pc = abuf->addr;
9694 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9695 1.1 christos
9696 1.1 christos {
9697 1.1 christos DI tmp_src1;
9698 1.1 christos DI tmp_src2;
9699 1.1 christos DI tmp_tmpr;
9700 1.1 christos tmp_src1 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9701 1.1 christos tmp_src2 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9702 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9703 1.1 christos {
9704 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9705 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9706 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9707 1.1 christos }
9708 1.1 christos {
9709 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9710 1.1 christos SET_H_SR (((UINT) 7), opval);
9711 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9712 1.1 christos }
9713 1.1 christos {
9714 1.1 christos {
9715 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9716 1.1 christos CPU (h_cbit) = opval;
9717 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9718 1.1 christos }
9719 1.1 christos {
9720 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9721 1.1 christos CPU (h_nbit) = opval;
9722 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9723 1.1 christos }
9724 1.1 christos {
9725 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9726 1.1 christos CPU (h_zbit) = opval;
9727 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9728 1.1 christos }
9729 1.1 christos {
9730 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9731 1.1 christos CPU (h_vbit) = opval;
9732 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9733 1.1 christos }
9734 1.1 christos {
9735 1.1 christos {
9736 1.1 christos BI opval = 0;
9737 1.1 christos CPU (h_xbit) = opval;
9738 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9739 1.1 christos }
9740 1.1 christos {
9741 1.1 christos BI opval = 0;
9742 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9743 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9744 1.1 christos }
9745 1.1 christos }
9746 1.1 christos }
9747 1.1 christos }
9748 1.1 christos
9749 1.1 christos #undef FLD
9750 1.1 christos }
9751 1.1 christos NEXT (vpc);
9752 1.1 christos
9753 1.1 christos CASE (sem, INSN_MULU_W) : /* mulu.w $Rs,$Rd */
9754 1.1 christos {
9755 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9756 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9757 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9758 1.1 christos int UNUSED written = 0;
9759 1.1 christos IADDR UNUSED pc = abuf->addr;
9760 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9761 1.1 christos
9762 1.1 christos {
9763 1.1 christos DI tmp_src1;
9764 1.1 christos DI tmp_src2;
9765 1.1 christos DI tmp_tmpr;
9766 1.1 christos tmp_src1 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9767 1.1 christos tmp_src2 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9768 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9769 1.1 christos {
9770 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9771 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9772 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9773 1.1 christos }
9774 1.1 christos {
9775 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9776 1.1 christos SET_H_SR (((UINT) 7), opval);
9777 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9778 1.1 christos }
9779 1.1 christos {
9780 1.1 christos {
9781 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9782 1.1 christos CPU (h_cbit) = opval;
9783 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9784 1.1 christos }
9785 1.1 christos {
9786 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9787 1.1 christos CPU (h_nbit) = opval;
9788 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9789 1.1 christos }
9790 1.1 christos {
9791 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9792 1.1 christos CPU (h_zbit) = opval;
9793 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9794 1.1 christos }
9795 1.1 christos {
9796 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9797 1.1 christos CPU (h_vbit) = opval;
9798 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9799 1.1 christos }
9800 1.1 christos {
9801 1.1 christos {
9802 1.1 christos BI opval = 0;
9803 1.1 christos CPU (h_xbit) = opval;
9804 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9805 1.1 christos }
9806 1.1 christos {
9807 1.1 christos BI opval = 0;
9808 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9809 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9810 1.1 christos }
9811 1.1 christos }
9812 1.1 christos }
9813 1.1 christos }
9814 1.1 christos
9815 1.1 christos #undef FLD
9816 1.1 christos }
9817 1.1 christos NEXT (vpc);
9818 1.1 christos
9819 1.1 christos CASE (sem, INSN_MULU_D) : /* mulu.d $Rs,$Rd */
9820 1.1 christos {
9821 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9822 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9823 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9824 1.1 christos int UNUSED written = 0;
9825 1.1 christos IADDR UNUSED pc = abuf->addr;
9826 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9827 1.1 christos
9828 1.1 christos {
9829 1.1 christos DI tmp_src1;
9830 1.1 christos DI tmp_src2;
9831 1.1 christos DI tmp_tmpr;
9832 1.1 christos tmp_src1 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9833 1.1 christos tmp_src2 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9834 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9835 1.1 christos {
9836 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9837 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9838 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9839 1.1 christos }
9840 1.1 christos {
9841 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9842 1.1 christos SET_H_SR (((UINT) 7), opval);
9843 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9844 1.1 christos }
9845 1.1 christos {
9846 1.1 christos {
9847 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9848 1.1 christos CPU (h_cbit) = opval;
9849 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9850 1.1 christos }
9851 1.1 christos {
9852 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9853 1.1 christos CPU (h_nbit) = opval;
9854 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9855 1.1 christos }
9856 1.1 christos {
9857 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9858 1.1 christos CPU (h_zbit) = opval;
9859 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9860 1.1 christos }
9861 1.1 christos {
9862 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9863 1.1 christos CPU (h_vbit) = opval;
9864 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9865 1.1 christos }
9866 1.1 christos {
9867 1.1 christos {
9868 1.1 christos BI opval = 0;
9869 1.1 christos CPU (h_xbit) = opval;
9870 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9871 1.1 christos }
9872 1.1 christos {
9873 1.1 christos BI opval = 0;
9874 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9875 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9876 1.1 christos }
9877 1.1 christos }
9878 1.1 christos }
9879 1.1 christos }
9880 1.1 christos
9881 1.1 christos #undef FLD
9882 1.1 christos }
9883 1.1 christos NEXT (vpc);
9884 1.1 christos
9885 1.1 christos CASE (sem, INSN_MCP) : /* mcp $Ps,$Rd */
9886 1.1 christos {
9887 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9888 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9889 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
9890 1.1 christos int UNUSED written = 0;
9891 1.1 christos IADDR UNUSED pc = abuf->addr;
9892 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9893 1.1 christos
9894 1.1 christos {
9895 1.1 christos CPU (h_xbit) = 1;
9896 1.1 christos CPU (h_zbit) = 1;
9897 1.1 christos {
9898 1.1 christos SI tmp_tmpopd;
9899 1.1 christos SI tmp_tmpops;
9900 1.1 christos BI tmp_carry;
9901 1.1 christos SI tmp_newval;
9902 1.1 christos tmp_tmpops = GET_H_SR (FLD (f_operand2));
9903 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand1));
9904 1.1 christos tmp_carry = CPU (h_rbit);
9905 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9906 1.1 christos {
9907 1.1 christos SI opval = tmp_newval;
9908 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9909 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9910 1.1 christos }
9911 1.1 christos {
9912 1.1 christos {
9913 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))));
9914 1.1 christos CPU (h_rbit) = opval;
9915 1.1 christos TRACE_RESULT (current_cpu, abuf, "rbit", 'x', opval);
9916 1.1 christos }
9917 1.1 christos {
9918 1.1 christos BI opval = LTSI (tmp_newval, 0);
9919 1.1 christos CPU (h_nbit) = opval;
9920 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9921 1.1 christos }
9922 1.1 christos {
9923 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9924 1.1 christos CPU (h_zbit) = opval;
9925 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9926 1.1 christos }
9927 1.1 christos {
9928 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)));
9929 1.1 christos CPU (h_vbit) = opval;
9930 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9931 1.1 christos }
9932 1.1 christos {
9933 1.1 christos {
9934 1.1 christos BI opval = 0;
9935 1.1 christos CPU (h_xbit) = opval;
9936 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9937 1.1 christos }
9938 1.1 christos {
9939 1.1 christos BI opval = 0;
9940 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9941 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9942 1.1 christos }
9943 1.1 christos }
9944 1.1 christos }
9945 1.1 christos }
9946 1.1 christos }
9947 1.1 christos
9948 1.1 christos #undef FLD
9949 1.1 christos }
9950 1.1 christos NEXT (vpc);
9951 1.1 christos
9952 1.1 christos CASE (sem, INSN_DSTEP) : /* dstep $Rs,$Rd */
9953 1.1 christos {
9954 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9955 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9956 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9957 1.1 christos int UNUSED written = 0;
9958 1.1 christos IADDR UNUSED pc = abuf->addr;
9959 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9960 1.1 christos
9961 1.1 christos {
9962 1.1 christos SI tmp_tmp;
9963 1.1 christos SI tmp_tmps;
9964 1.1 christos SI tmp_tmpd;
9965 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
9966 1.1 christos tmp_tmp = SLLSI (GET_H_GR (FLD (f_operand2)), 1);
9967 1.1 christos tmp_tmpd = ((GEUSI (tmp_tmp, tmp_tmps)) ? (SUBSI (tmp_tmp, tmp_tmps)) : (tmp_tmp));
9968 1.1 christos {
9969 1.1 christos SI opval = tmp_tmpd;
9970 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9971 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9972 1.1 christos }
9973 1.1 christos {
9974 1.1 christos {
9975 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
9976 1.1 christos CPU (h_nbit) = opval;
9977 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9978 1.1 christos }
9979 1.1 christos {
9980 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
9981 1.1 christos CPU (h_zbit) = opval;
9982 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9983 1.1 christos }
9984 1.1 christos SET_H_CBIT_MOVE (0);
9985 1.1 christos SET_H_VBIT_MOVE (0);
9986 1.1 christos {
9987 1.1 christos {
9988 1.1 christos BI opval = 0;
9989 1.1 christos CPU (h_xbit) = opval;
9990 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9991 1.1 christos }
9992 1.1 christos {
9993 1.1 christos BI opval = 0;
9994 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9995 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9996 1.1 christos }
9997 1.1 christos }
9998 1.1 christos }
9999 1.1 christos }
10000 1.1 christos
10001 1.1 christos #undef FLD
10002 1.1 christos }
10003 1.1 christos NEXT (vpc);
10004 1.1 christos
10005 1.1 christos CASE (sem, INSN_ABS) : /* abs $Rs,$Rd */
10006 1.1 christos {
10007 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10008 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10009 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
10010 1.1 christos int UNUSED written = 0;
10011 1.1 christos IADDR UNUSED pc = abuf->addr;
10012 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10013 1.1 christos
10014 1.1 christos {
10015 1.1 christos SI tmp_tmpd;
10016 1.1 christos tmp_tmpd = ABSSI (GET_H_GR (FLD (f_operand1)));
10017 1.1 christos {
10018 1.1 christos SI opval = tmp_tmpd;
10019 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10020 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10021 1.1 christos }
10022 1.1 christos {
10023 1.1 christos {
10024 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10025 1.1 christos CPU (h_nbit) = opval;
10026 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10027 1.1 christos }
10028 1.1 christos {
10029 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10030 1.1 christos CPU (h_zbit) = opval;
10031 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10032 1.1 christos }
10033 1.1 christos SET_H_CBIT_MOVE (0);
10034 1.1 christos SET_H_VBIT_MOVE (0);
10035 1.1 christos {
10036 1.1 christos {
10037 1.1 christos BI opval = 0;
10038 1.1 christos CPU (h_xbit) = opval;
10039 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10040 1.1 christos }
10041 1.1 christos {
10042 1.1 christos BI opval = 0;
10043 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10044 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10045 1.1 christos }
10046 1.1 christos }
10047 1.1 christos }
10048 1.1 christos }
10049 1.1 christos
10050 1.1 christos #undef FLD
10051 1.1 christos }
10052 1.1 christos NEXT (vpc);
10053 1.1 christos
10054 1.1 christos CASE (sem, INSN_AND_B_R) : /* and.b $Rs,$Rd */
10055 1.1 christos {
10056 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10057 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10058 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10059 1.1 christos int UNUSED written = 0;
10060 1.1 christos IADDR UNUSED pc = abuf->addr;
10061 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10062 1.1 christos
10063 1.1 christos {
10064 1.1 christos QI tmp_tmpd;
10065 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10066 1.1 christos {
10067 1.1 christos SI tmp_oldregval;
10068 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10069 1.1 christos {
10070 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10071 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10072 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10073 1.1 christos }
10074 1.1 christos }
10075 1.1 christos {
10076 1.1 christos {
10077 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10078 1.1 christos CPU (h_nbit) = opval;
10079 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10080 1.1 christos }
10081 1.1 christos {
10082 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10083 1.1 christos CPU (h_zbit) = opval;
10084 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10085 1.1 christos }
10086 1.1 christos SET_H_CBIT_MOVE (0);
10087 1.1 christos SET_H_VBIT_MOVE (0);
10088 1.1 christos {
10089 1.1 christos {
10090 1.1 christos BI opval = 0;
10091 1.1 christos CPU (h_xbit) = opval;
10092 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10093 1.1 christos }
10094 1.1 christos {
10095 1.1 christos BI opval = 0;
10096 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10097 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10098 1.1 christos }
10099 1.1 christos }
10100 1.1 christos }
10101 1.1 christos }
10102 1.1 christos
10103 1.1 christos #undef FLD
10104 1.1 christos }
10105 1.1 christos NEXT (vpc);
10106 1.1 christos
10107 1.1 christos CASE (sem, INSN_AND_W_R) : /* and.w $Rs,$Rd */
10108 1.1 christos {
10109 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10110 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10111 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10112 1.1 christos int UNUSED written = 0;
10113 1.1 christos IADDR UNUSED pc = abuf->addr;
10114 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10115 1.1 christos
10116 1.1 christos {
10117 1.1 christos HI tmp_tmpd;
10118 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10119 1.1 christos {
10120 1.1 christos SI tmp_oldregval;
10121 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10122 1.1 christos {
10123 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10124 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10125 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10126 1.1 christos }
10127 1.1 christos }
10128 1.1 christos {
10129 1.1 christos {
10130 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10131 1.1 christos CPU (h_nbit) = opval;
10132 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10133 1.1 christos }
10134 1.1 christos {
10135 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10136 1.1 christos CPU (h_zbit) = opval;
10137 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10138 1.1 christos }
10139 1.1 christos SET_H_CBIT_MOVE (0);
10140 1.1 christos SET_H_VBIT_MOVE (0);
10141 1.1 christos {
10142 1.1 christos {
10143 1.1 christos BI opval = 0;
10144 1.1 christos CPU (h_xbit) = opval;
10145 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10146 1.1 christos }
10147 1.1 christos {
10148 1.1 christos BI opval = 0;
10149 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10150 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10151 1.1 christos }
10152 1.1 christos }
10153 1.1 christos }
10154 1.1 christos }
10155 1.1 christos
10156 1.1 christos #undef FLD
10157 1.1 christos }
10158 1.1 christos NEXT (vpc);
10159 1.1 christos
10160 1.1 christos CASE (sem, INSN_AND_D_R) : /* and.d $Rs,$Rd */
10161 1.1 christos {
10162 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10163 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10164 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10165 1.1 christos int UNUSED written = 0;
10166 1.1 christos IADDR UNUSED pc = abuf->addr;
10167 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10168 1.1 christos
10169 1.1 christos {
10170 1.1 christos SI tmp_tmpd;
10171 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10172 1.1 christos {
10173 1.1 christos SI opval = tmp_tmpd;
10174 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10175 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10176 1.1 christos }
10177 1.1 christos {
10178 1.1 christos {
10179 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10180 1.1 christos CPU (h_nbit) = opval;
10181 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10182 1.1 christos }
10183 1.1 christos {
10184 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10185 1.1 christos CPU (h_zbit) = opval;
10186 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10187 1.1 christos }
10188 1.1 christos SET_H_CBIT_MOVE (0);
10189 1.1 christos SET_H_VBIT_MOVE (0);
10190 1.1 christos {
10191 1.1 christos {
10192 1.1 christos BI opval = 0;
10193 1.1 christos CPU (h_xbit) = opval;
10194 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10195 1.1 christos }
10196 1.1 christos {
10197 1.1 christos BI opval = 0;
10198 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10199 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10200 1.1 christos }
10201 1.1 christos }
10202 1.1 christos }
10203 1.1 christos }
10204 1.1 christos
10205 1.1 christos #undef FLD
10206 1.1 christos }
10207 1.1 christos NEXT (vpc);
10208 1.1 christos
10209 1.1 christos CASE (sem, INSN_AND_M_B_M) : /* and-m.b [${Rs}${inc}],${Rd} */
10210 1.1 christos {
10211 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10212 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10213 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10214 1.1 christos int UNUSED written = 0;
10215 1.1 christos IADDR UNUSED pc = abuf->addr;
10216 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10217 1.1 christos
10218 1.1 christos {
10219 1.1 christos QI tmp_tmpd;
10220 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10221 1.1 christos QI tmp_tmp_mem;
10222 1.1 christos BI tmp_postinc;
10223 1.1 christos tmp_postinc = FLD (f_memmode);
10224 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10225 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10226 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10227 1.1 christos {
10228 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10229 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10230 1.1 christos }
10231 1.1 christos {
10232 1.1 christos SI opval = tmp_addr;
10233 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10234 1.1 christos written |= (1 << 11);
10235 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10236 1.1 christos }
10237 1.1 christos }
10238 1.1 christos }
10239 1.1 christos ; tmp_tmp_mem; }));
10240 1.1 christos {
10241 1.1 christos SI tmp_oldregval;
10242 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))));
10243 1.1 christos {
10244 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10245 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10246 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10247 1.1 christos }
10248 1.1 christos }
10249 1.1 christos {
10250 1.1 christos {
10251 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10252 1.1 christos CPU (h_nbit) = opval;
10253 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10254 1.1 christos }
10255 1.1 christos {
10256 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10257 1.1 christos CPU (h_zbit) = opval;
10258 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10259 1.1 christos }
10260 1.1 christos SET_H_CBIT_MOVE (0);
10261 1.1 christos SET_H_VBIT_MOVE (0);
10262 1.1 christos {
10263 1.1 christos {
10264 1.1 christos BI opval = 0;
10265 1.1 christos CPU (h_xbit) = opval;
10266 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10267 1.1 christos }
10268 1.1 christos {
10269 1.1 christos BI opval = 0;
10270 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10271 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10272 1.1 christos }
10273 1.1 christos }
10274 1.1 christos }
10275 1.1 christos }
10276 1.1 christos
10277 1.1 christos abuf->written = written;
10278 1.1 christos #undef FLD
10279 1.1 christos }
10280 1.1 christos NEXT (vpc);
10281 1.1 christos
10282 1.1 christos CASE (sem, INSN_AND_M_W_M) : /* and-m.w [${Rs}${inc}],${Rd} */
10283 1.1 christos {
10284 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10285 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10286 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10287 1.1 christos int UNUSED written = 0;
10288 1.1 christos IADDR UNUSED pc = abuf->addr;
10289 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10290 1.1 christos
10291 1.1 christos {
10292 1.1 christos HI tmp_tmpd;
10293 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10294 1.1 christos HI tmp_tmp_mem;
10295 1.1 christos BI tmp_postinc;
10296 1.1 christos tmp_postinc = FLD (f_memmode);
10297 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10298 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10299 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10300 1.1 christos {
10301 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10302 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10303 1.1 christos }
10304 1.1 christos {
10305 1.1 christos SI opval = tmp_addr;
10306 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10307 1.1 christos written |= (1 << 11);
10308 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10309 1.1 christos }
10310 1.1 christos }
10311 1.1 christos }
10312 1.1 christos ; tmp_tmp_mem; }));
10313 1.1 christos {
10314 1.1 christos SI tmp_oldregval;
10315 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))));
10316 1.1 christos {
10317 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10318 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10319 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10320 1.1 christos }
10321 1.1 christos }
10322 1.1 christos {
10323 1.1 christos {
10324 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10325 1.1 christos CPU (h_nbit) = opval;
10326 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10327 1.1 christos }
10328 1.1 christos {
10329 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10330 1.1 christos CPU (h_zbit) = opval;
10331 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10332 1.1 christos }
10333 1.1 christos SET_H_CBIT_MOVE (0);
10334 1.1 christos SET_H_VBIT_MOVE (0);
10335 1.1 christos {
10336 1.1 christos {
10337 1.1 christos BI opval = 0;
10338 1.1 christos CPU (h_xbit) = opval;
10339 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10340 1.1 christos }
10341 1.1 christos {
10342 1.1 christos BI opval = 0;
10343 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10344 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10345 1.1 christos }
10346 1.1 christos }
10347 1.1 christos }
10348 1.1 christos }
10349 1.1 christos
10350 1.1 christos abuf->written = written;
10351 1.1 christos #undef FLD
10352 1.1 christos }
10353 1.1 christos NEXT (vpc);
10354 1.1 christos
10355 1.1 christos CASE (sem, INSN_AND_M_D_M) : /* and-m.d [${Rs}${inc}],${Rd} */
10356 1.1 christos {
10357 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10358 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10359 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10360 1.1 christos int UNUSED written = 0;
10361 1.1 christos IADDR UNUSED pc = abuf->addr;
10362 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10363 1.1 christos
10364 1.1 christos {
10365 1.1 christos SI tmp_tmpd;
10366 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10367 1.1 christos SI tmp_tmp_mem;
10368 1.1 christos BI tmp_postinc;
10369 1.1 christos tmp_postinc = FLD (f_memmode);
10370 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10371 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10372 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10373 1.1 christos {
10374 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10375 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10376 1.1 christos }
10377 1.1 christos {
10378 1.1 christos SI opval = tmp_addr;
10379 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10380 1.1 christos written |= (1 << 10);
10381 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10382 1.1 christos }
10383 1.1 christos }
10384 1.1 christos }
10385 1.1 christos ; tmp_tmp_mem; }));
10386 1.1 christos {
10387 1.1 christos SI opval = tmp_tmpd;
10388 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10389 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10390 1.1 christos }
10391 1.1 christos {
10392 1.1 christos {
10393 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10394 1.1 christos CPU (h_nbit) = opval;
10395 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10396 1.1 christos }
10397 1.1 christos {
10398 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10399 1.1 christos CPU (h_zbit) = opval;
10400 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10401 1.1 christos }
10402 1.1 christos SET_H_CBIT_MOVE (0);
10403 1.1 christos SET_H_VBIT_MOVE (0);
10404 1.1 christos {
10405 1.1 christos {
10406 1.1 christos BI opval = 0;
10407 1.1 christos CPU (h_xbit) = opval;
10408 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10409 1.1 christos }
10410 1.1 christos {
10411 1.1 christos BI opval = 0;
10412 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10413 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10414 1.1 christos }
10415 1.1 christos }
10416 1.1 christos }
10417 1.1 christos }
10418 1.1 christos
10419 1.1 christos abuf->written = written;
10420 1.1 christos #undef FLD
10421 1.1 christos }
10422 1.1 christos NEXT (vpc);
10423 1.1 christos
10424 1.1 christos CASE (sem, INSN_ANDCBR) : /* and.b ${sconst8}],${Rd} */
10425 1.1 christos {
10426 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10427 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10428 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
10429 1.1 christos int UNUSED written = 0;
10430 1.1 christos IADDR UNUSED pc = abuf->addr;
10431 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10432 1.1 christos
10433 1.1 christos {
10434 1.1 christos QI tmp_tmpd;
10435 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
10436 1.1 christos {
10437 1.1 christos SI tmp_oldregval;
10438 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10439 1.1 christos {
10440 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10441 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10442 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10443 1.1 christos }
10444 1.1 christos }
10445 1.1 christos {
10446 1.1 christos {
10447 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10448 1.1 christos CPU (h_nbit) = opval;
10449 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10450 1.1 christos }
10451 1.1 christos {
10452 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10453 1.1 christos CPU (h_zbit) = opval;
10454 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10455 1.1 christos }
10456 1.1 christos SET_H_CBIT_MOVE (0);
10457 1.1 christos SET_H_VBIT_MOVE (0);
10458 1.1 christos {
10459 1.1 christos {
10460 1.1 christos BI opval = 0;
10461 1.1 christos CPU (h_xbit) = opval;
10462 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10463 1.1 christos }
10464 1.1 christos {
10465 1.1 christos BI opval = 0;
10466 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10467 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10468 1.1 christos }
10469 1.1 christos }
10470 1.1 christos }
10471 1.1 christos }
10472 1.1 christos
10473 1.1 christos #undef FLD
10474 1.1 christos }
10475 1.1 christos NEXT (vpc);
10476 1.1 christos
10477 1.1 christos CASE (sem, INSN_ANDCWR) : /* and.w ${sconst16}],${Rd} */
10478 1.1 christos {
10479 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10480 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10481 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
10482 1.1 christos int UNUSED written = 0;
10483 1.1 christos IADDR UNUSED pc = abuf->addr;
10484 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10485 1.1 christos
10486 1.1 christos {
10487 1.1 christos HI tmp_tmpd;
10488 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
10489 1.1 christos {
10490 1.1 christos SI tmp_oldregval;
10491 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10492 1.1 christos {
10493 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10494 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10495 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10496 1.1 christos }
10497 1.1 christos }
10498 1.1 christos {
10499 1.1 christos {
10500 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10501 1.1 christos CPU (h_nbit) = opval;
10502 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10503 1.1 christos }
10504 1.1 christos {
10505 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10506 1.1 christos CPU (h_zbit) = opval;
10507 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10508 1.1 christos }
10509 1.1 christos SET_H_CBIT_MOVE (0);
10510 1.1 christos SET_H_VBIT_MOVE (0);
10511 1.1 christos {
10512 1.1 christos {
10513 1.1 christos BI opval = 0;
10514 1.1 christos CPU (h_xbit) = opval;
10515 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10516 1.1 christos }
10517 1.1 christos {
10518 1.1 christos BI opval = 0;
10519 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10520 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10521 1.1 christos }
10522 1.1 christos }
10523 1.1 christos }
10524 1.1 christos }
10525 1.1 christos
10526 1.1 christos #undef FLD
10527 1.1 christos }
10528 1.1 christos NEXT (vpc);
10529 1.1 christos
10530 1.1 christos CASE (sem, INSN_ANDCDR) : /* and.d ${const32}],${Rd} */
10531 1.1 christos {
10532 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10533 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10534 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
10535 1.1 christos int UNUSED written = 0;
10536 1.1 christos IADDR UNUSED pc = abuf->addr;
10537 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
10538 1.1 christos
10539 1.1 christos {
10540 1.1 christos SI tmp_tmpd;
10541 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
10542 1.1 christos {
10543 1.1 christos SI opval = tmp_tmpd;
10544 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10545 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10546 1.1 christos }
10547 1.1 christos {
10548 1.1 christos {
10549 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10550 1.1 christos CPU (h_nbit) = opval;
10551 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10552 1.1 christos }
10553 1.1 christos {
10554 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10555 1.1 christos CPU (h_zbit) = opval;
10556 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10557 1.1 christos }
10558 1.1 christos SET_H_CBIT_MOVE (0);
10559 1.1 christos SET_H_VBIT_MOVE (0);
10560 1.1 christos {
10561 1.1 christos {
10562 1.1 christos BI opval = 0;
10563 1.1 christos CPU (h_xbit) = opval;
10564 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10565 1.1 christos }
10566 1.1 christos {
10567 1.1 christos BI opval = 0;
10568 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10569 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10570 1.1 christos }
10571 1.1 christos }
10572 1.1 christos }
10573 1.1 christos }
10574 1.1 christos
10575 1.1 christos #undef FLD
10576 1.1 christos }
10577 1.1 christos NEXT (vpc);
10578 1.1 christos
10579 1.1 christos CASE (sem, INSN_ANDQ) : /* andq $i,$Rd */
10580 1.1 christos {
10581 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10582 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10583 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
10584 1.1 christos int UNUSED written = 0;
10585 1.1 christos IADDR UNUSED pc = abuf->addr;
10586 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10587 1.1 christos
10588 1.1 christos {
10589 1.1 christos SI tmp_tmpd;
10590 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
10591 1.1 christos {
10592 1.1 christos SI opval = tmp_tmpd;
10593 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10594 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10595 1.1 christos }
10596 1.1 christos {
10597 1.1 christos {
10598 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10599 1.1 christos CPU (h_nbit) = opval;
10600 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10601 1.1 christos }
10602 1.1 christos {
10603 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10604 1.1 christos CPU (h_zbit) = opval;
10605 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10606 1.1 christos }
10607 1.1 christos SET_H_CBIT_MOVE (0);
10608 1.1 christos SET_H_VBIT_MOVE (0);
10609 1.1 christos {
10610 1.1 christos {
10611 1.1 christos BI opval = 0;
10612 1.1 christos CPU (h_xbit) = opval;
10613 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10614 1.1 christos }
10615 1.1 christos {
10616 1.1 christos BI opval = 0;
10617 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10618 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10619 1.1 christos }
10620 1.1 christos }
10621 1.1 christos }
10622 1.1 christos }
10623 1.1 christos
10624 1.1 christos #undef FLD
10625 1.1 christos }
10626 1.1 christos NEXT (vpc);
10627 1.1 christos
10628 1.1 christos CASE (sem, INSN_ORR_B_R) : /* orr.b $Rs,$Rd */
10629 1.1 christos {
10630 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10631 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10632 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10633 1.1 christos int UNUSED written = 0;
10634 1.1 christos IADDR UNUSED pc = abuf->addr;
10635 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10636 1.1 christos
10637 1.1 christos {
10638 1.1 christos QI tmp_tmpd;
10639 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10640 1.1 christos {
10641 1.1 christos SI tmp_oldregval;
10642 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10643 1.1 christos {
10644 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10645 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10646 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10647 1.1 christos }
10648 1.1 christos }
10649 1.1 christos {
10650 1.1 christos {
10651 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10652 1.1 christos CPU (h_nbit) = opval;
10653 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10654 1.1 christos }
10655 1.1 christos {
10656 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10657 1.1 christos CPU (h_zbit) = opval;
10658 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10659 1.1 christos }
10660 1.1 christos SET_H_CBIT_MOVE (0);
10661 1.1 christos SET_H_VBIT_MOVE (0);
10662 1.1 christos {
10663 1.1 christos {
10664 1.1 christos BI opval = 0;
10665 1.1 christos CPU (h_xbit) = opval;
10666 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10667 1.1 christos }
10668 1.1 christos {
10669 1.1 christos BI opval = 0;
10670 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10671 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10672 1.1 christos }
10673 1.1 christos }
10674 1.1 christos }
10675 1.1 christos }
10676 1.1 christos
10677 1.1 christos #undef FLD
10678 1.1 christos }
10679 1.1 christos NEXT (vpc);
10680 1.1 christos
10681 1.1 christos CASE (sem, INSN_ORR_W_R) : /* orr.w $Rs,$Rd */
10682 1.1 christos {
10683 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10684 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10685 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10686 1.1 christos int UNUSED written = 0;
10687 1.1 christos IADDR UNUSED pc = abuf->addr;
10688 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10689 1.1 christos
10690 1.1 christos {
10691 1.1 christos HI tmp_tmpd;
10692 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10693 1.1 christos {
10694 1.1 christos SI tmp_oldregval;
10695 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10696 1.1 christos {
10697 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10698 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10699 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10700 1.1 christos }
10701 1.1 christos }
10702 1.1 christos {
10703 1.1 christos {
10704 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10705 1.1 christos CPU (h_nbit) = opval;
10706 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10707 1.1 christos }
10708 1.1 christos {
10709 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10710 1.1 christos CPU (h_zbit) = opval;
10711 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10712 1.1 christos }
10713 1.1 christos SET_H_CBIT_MOVE (0);
10714 1.1 christos SET_H_VBIT_MOVE (0);
10715 1.1 christos {
10716 1.1 christos {
10717 1.1 christos BI opval = 0;
10718 1.1 christos CPU (h_xbit) = opval;
10719 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10720 1.1 christos }
10721 1.1 christos {
10722 1.1 christos BI opval = 0;
10723 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10724 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10725 1.1 christos }
10726 1.1 christos }
10727 1.1 christos }
10728 1.1 christos }
10729 1.1 christos
10730 1.1 christos #undef FLD
10731 1.1 christos }
10732 1.1 christos NEXT (vpc);
10733 1.1 christos
10734 1.1 christos CASE (sem, INSN_ORR_D_R) : /* orr.d $Rs,$Rd */
10735 1.1 christos {
10736 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10737 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10738 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10739 1.1 christos int UNUSED written = 0;
10740 1.1 christos IADDR UNUSED pc = abuf->addr;
10741 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10742 1.1 christos
10743 1.1 christos {
10744 1.1 christos SI tmp_tmpd;
10745 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10746 1.1 christos {
10747 1.1 christos SI opval = tmp_tmpd;
10748 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10749 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10750 1.1 christos }
10751 1.1 christos {
10752 1.1 christos {
10753 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10754 1.1 christos CPU (h_nbit) = opval;
10755 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10756 1.1 christos }
10757 1.1 christos {
10758 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10759 1.1 christos CPU (h_zbit) = opval;
10760 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10761 1.1 christos }
10762 1.1 christos SET_H_CBIT_MOVE (0);
10763 1.1 christos SET_H_VBIT_MOVE (0);
10764 1.1 christos {
10765 1.1 christos {
10766 1.1 christos BI opval = 0;
10767 1.1 christos CPU (h_xbit) = opval;
10768 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10769 1.1 christos }
10770 1.1 christos {
10771 1.1 christos BI opval = 0;
10772 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10773 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10774 1.1 christos }
10775 1.1 christos }
10776 1.1 christos }
10777 1.1 christos }
10778 1.1 christos
10779 1.1 christos #undef FLD
10780 1.1 christos }
10781 1.1 christos NEXT (vpc);
10782 1.1 christos
10783 1.1 christos CASE (sem, INSN_OR_M_B_M) : /* or-m.b [${Rs}${inc}],${Rd} */
10784 1.1 christos {
10785 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10786 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10787 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10788 1.1 christos int UNUSED written = 0;
10789 1.1 christos IADDR UNUSED pc = abuf->addr;
10790 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10791 1.1 christos
10792 1.1 christos {
10793 1.1 christos QI tmp_tmpd;
10794 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10795 1.1 christos QI tmp_tmp_mem;
10796 1.1 christos BI tmp_postinc;
10797 1.1 christos tmp_postinc = FLD (f_memmode);
10798 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10799 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10800 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10801 1.1 christos {
10802 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10803 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10804 1.1 christos }
10805 1.1 christos {
10806 1.1 christos SI opval = tmp_addr;
10807 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10808 1.1 christos written |= (1 << 11);
10809 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10810 1.1 christos }
10811 1.1 christos }
10812 1.1 christos }
10813 1.1 christos ; tmp_tmp_mem; }));
10814 1.1 christos {
10815 1.1 christos SI tmp_oldregval;
10816 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))));
10817 1.1 christos {
10818 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10819 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10820 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10821 1.1 christos }
10822 1.1 christos }
10823 1.1 christos {
10824 1.1 christos {
10825 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10826 1.1 christos CPU (h_nbit) = opval;
10827 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10828 1.1 christos }
10829 1.1 christos {
10830 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10831 1.1 christos CPU (h_zbit) = opval;
10832 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10833 1.1 christos }
10834 1.1 christos SET_H_CBIT_MOVE (0);
10835 1.1 christos SET_H_VBIT_MOVE (0);
10836 1.1 christos {
10837 1.1 christos {
10838 1.1 christos BI opval = 0;
10839 1.1 christos CPU (h_xbit) = opval;
10840 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10841 1.1 christos }
10842 1.1 christos {
10843 1.1 christos BI opval = 0;
10844 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10845 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10846 1.1 christos }
10847 1.1 christos }
10848 1.1 christos }
10849 1.1 christos }
10850 1.1 christos
10851 1.1 christos abuf->written = written;
10852 1.1 christos #undef FLD
10853 1.1 christos }
10854 1.1 christos NEXT (vpc);
10855 1.1 christos
10856 1.1 christos CASE (sem, INSN_OR_M_W_M) : /* or-m.w [${Rs}${inc}],${Rd} */
10857 1.1 christos {
10858 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10859 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10860 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10861 1.1 christos int UNUSED written = 0;
10862 1.1 christos IADDR UNUSED pc = abuf->addr;
10863 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10864 1.1 christos
10865 1.1 christos {
10866 1.1 christos HI tmp_tmpd;
10867 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10868 1.1 christos HI tmp_tmp_mem;
10869 1.1 christos BI tmp_postinc;
10870 1.1 christos tmp_postinc = FLD (f_memmode);
10871 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10872 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10873 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10874 1.1 christos {
10875 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10876 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10877 1.1 christos }
10878 1.1 christos {
10879 1.1 christos SI opval = tmp_addr;
10880 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10881 1.1 christos written |= (1 << 11);
10882 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10883 1.1 christos }
10884 1.1 christos }
10885 1.1 christos }
10886 1.1 christos ; tmp_tmp_mem; }));
10887 1.1 christos {
10888 1.1 christos SI tmp_oldregval;
10889 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))));
10890 1.1 christos {
10891 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10892 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10893 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10894 1.1 christos }
10895 1.1 christos }
10896 1.1 christos {
10897 1.1 christos {
10898 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10899 1.1 christos CPU (h_nbit) = opval;
10900 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10901 1.1 christos }
10902 1.1 christos {
10903 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10904 1.1 christos CPU (h_zbit) = opval;
10905 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10906 1.1 christos }
10907 1.1 christos SET_H_CBIT_MOVE (0);
10908 1.1 christos SET_H_VBIT_MOVE (0);
10909 1.1 christos {
10910 1.1 christos {
10911 1.1 christos BI opval = 0;
10912 1.1 christos CPU (h_xbit) = opval;
10913 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10914 1.1 christos }
10915 1.1 christos {
10916 1.1 christos BI opval = 0;
10917 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10918 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10919 1.1 christos }
10920 1.1 christos }
10921 1.1 christos }
10922 1.1 christos }
10923 1.1 christos
10924 1.1 christos abuf->written = written;
10925 1.1 christos #undef FLD
10926 1.1 christos }
10927 1.1 christos NEXT (vpc);
10928 1.1 christos
10929 1.1 christos CASE (sem, INSN_OR_M_D_M) : /* or-m.d [${Rs}${inc}],${Rd} */
10930 1.1 christos {
10931 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10932 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10933 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10934 1.1 christos int UNUSED written = 0;
10935 1.1 christos IADDR UNUSED pc = abuf->addr;
10936 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10937 1.1 christos
10938 1.1 christos {
10939 1.1 christos SI tmp_tmpd;
10940 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10941 1.1 christos SI tmp_tmp_mem;
10942 1.1 christos BI tmp_postinc;
10943 1.1 christos tmp_postinc = FLD (f_memmode);
10944 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10945 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10946 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10947 1.1 christos {
10948 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10949 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10950 1.1 christos }
10951 1.1 christos {
10952 1.1 christos SI opval = tmp_addr;
10953 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10954 1.1 christos written |= (1 << 10);
10955 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10956 1.1 christos }
10957 1.1 christos }
10958 1.1 christos }
10959 1.1 christos ; tmp_tmp_mem; }));
10960 1.1 christos {
10961 1.1 christos SI opval = tmp_tmpd;
10962 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10963 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10964 1.1 christos }
10965 1.1 christos {
10966 1.1 christos {
10967 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10968 1.1 christos CPU (h_nbit) = opval;
10969 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10970 1.1 christos }
10971 1.1 christos {
10972 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10973 1.1 christos CPU (h_zbit) = opval;
10974 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10975 1.1 christos }
10976 1.1 christos SET_H_CBIT_MOVE (0);
10977 1.1 christos SET_H_VBIT_MOVE (0);
10978 1.1 christos {
10979 1.1 christos {
10980 1.1 christos BI opval = 0;
10981 1.1 christos CPU (h_xbit) = opval;
10982 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10983 1.1 christos }
10984 1.1 christos {
10985 1.1 christos BI opval = 0;
10986 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10987 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10988 1.1 christos }
10989 1.1 christos }
10990 1.1 christos }
10991 1.1 christos }
10992 1.1 christos
10993 1.1 christos abuf->written = written;
10994 1.1 christos #undef FLD
10995 1.1 christos }
10996 1.1 christos NEXT (vpc);
10997 1.1 christos
10998 1.1 christos CASE (sem, INSN_ORCBR) : /* or.b ${sconst8}],${Rd} */
10999 1.1 christos {
11000 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11001 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11002 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
11003 1.1 christos int UNUSED written = 0;
11004 1.1 christos IADDR UNUSED pc = abuf->addr;
11005 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11006 1.1 christos
11007 1.1 christos {
11008 1.1 christos QI tmp_tmpd;
11009 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
11010 1.1 christos {
11011 1.1 christos SI tmp_oldregval;
11012 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11013 1.1 christos {
11014 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11015 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11016 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11017 1.1 christos }
11018 1.1 christos }
11019 1.1 christos {
11020 1.1 christos {
11021 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11022 1.1 christos CPU (h_nbit) = opval;
11023 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11024 1.1 christos }
11025 1.1 christos {
11026 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11027 1.1 christos CPU (h_zbit) = opval;
11028 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11029 1.1 christos }
11030 1.1 christos SET_H_CBIT_MOVE (0);
11031 1.1 christos SET_H_VBIT_MOVE (0);
11032 1.1 christos {
11033 1.1 christos {
11034 1.1 christos BI opval = 0;
11035 1.1 christos CPU (h_xbit) = opval;
11036 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11037 1.1 christos }
11038 1.1 christos {
11039 1.1 christos BI opval = 0;
11040 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11041 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11042 1.1 christos }
11043 1.1 christos }
11044 1.1 christos }
11045 1.1 christos }
11046 1.1 christos
11047 1.1 christos #undef FLD
11048 1.1 christos }
11049 1.1 christos NEXT (vpc);
11050 1.1 christos
11051 1.1 christos CASE (sem, INSN_ORCWR) : /* or.w ${sconst16}],${Rd} */
11052 1.1 christos {
11053 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11054 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11055 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
11056 1.1 christos int UNUSED written = 0;
11057 1.1 christos IADDR UNUSED pc = abuf->addr;
11058 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11059 1.1 christos
11060 1.1 christos {
11061 1.1 christos HI tmp_tmpd;
11062 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
11063 1.1 christos {
11064 1.1 christos SI tmp_oldregval;
11065 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11066 1.1 christos {
11067 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11068 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11069 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11070 1.1 christos }
11071 1.1 christos }
11072 1.1 christos {
11073 1.1 christos {
11074 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11075 1.1 christos CPU (h_nbit) = opval;
11076 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11077 1.1 christos }
11078 1.1 christos {
11079 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11080 1.1 christos CPU (h_zbit) = opval;
11081 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11082 1.1 christos }
11083 1.1 christos SET_H_CBIT_MOVE (0);
11084 1.1 christos SET_H_VBIT_MOVE (0);
11085 1.1 christos {
11086 1.1 christos {
11087 1.1 christos BI opval = 0;
11088 1.1 christos CPU (h_xbit) = opval;
11089 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11090 1.1 christos }
11091 1.1 christos {
11092 1.1 christos BI opval = 0;
11093 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11094 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11095 1.1 christos }
11096 1.1 christos }
11097 1.1 christos }
11098 1.1 christos }
11099 1.1 christos
11100 1.1 christos #undef FLD
11101 1.1 christos }
11102 1.1 christos NEXT (vpc);
11103 1.1 christos
11104 1.1 christos CASE (sem, INSN_ORCDR) : /* or.d ${const32}],${Rd} */
11105 1.1 christos {
11106 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11107 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11108 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
11109 1.1 christos int UNUSED written = 0;
11110 1.1 christos IADDR UNUSED pc = abuf->addr;
11111 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
11112 1.1 christos
11113 1.1 christos {
11114 1.1 christos SI tmp_tmpd;
11115 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
11116 1.1 christos {
11117 1.1 christos SI opval = tmp_tmpd;
11118 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11119 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11120 1.1 christos }
11121 1.1 christos {
11122 1.1 christos {
11123 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11124 1.1 christos CPU (h_nbit) = opval;
11125 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11126 1.1 christos }
11127 1.1 christos {
11128 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11129 1.1 christos CPU (h_zbit) = opval;
11130 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11131 1.1 christos }
11132 1.1 christos SET_H_CBIT_MOVE (0);
11133 1.1 christos SET_H_VBIT_MOVE (0);
11134 1.1 christos {
11135 1.1 christos {
11136 1.1 christos BI opval = 0;
11137 1.1 christos CPU (h_xbit) = opval;
11138 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11139 1.1 christos }
11140 1.1 christos {
11141 1.1 christos BI opval = 0;
11142 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11143 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11144 1.1 christos }
11145 1.1 christos }
11146 1.1 christos }
11147 1.1 christos }
11148 1.1 christos
11149 1.1 christos #undef FLD
11150 1.1 christos }
11151 1.1 christos NEXT (vpc);
11152 1.1 christos
11153 1.1 christos CASE (sem, INSN_ORQ) : /* orq $i,$Rd */
11154 1.1 christos {
11155 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11156 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11157 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
11158 1.1 christos int UNUSED written = 0;
11159 1.1 christos IADDR UNUSED pc = abuf->addr;
11160 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11161 1.1 christos
11162 1.1 christos {
11163 1.1 christos SI tmp_tmpd;
11164 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
11165 1.1 christos {
11166 1.1 christos SI opval = tmp_tmpd;
11167 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11168 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11169 1.1 christos }
11170 1.1 christos {
11171 1.1 christos {
11172 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11173 1.1 christos CPU (h_nbit) = opval;
11174 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11175 1.1 christos }
11176 1.1 christos {
11177 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11178 1.1 christos CPU (h_zbit) = opval;
11179 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11180 1.1 christos }
11181 1.1 christos SET_H_CBIT_MOVE (0);
11182 1.1 christos SET_H_VBIT_MOVE (0);
11183 1.1 christos {
11184 1.1 christos {
11185 1.1 christos BI opval = 0;
11186 1.1 christos CPU (h_xbit) = opval;
11187 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11188 1.1 christos }
11189 1.1 christos {
11190 1.1 christos BI opval = 0;
11191 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11192 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11193 1.1 christos }
11194 1.1 christos }
11195 1.1 christos }
11196 1.1 christos }
11197 1.1 christos
11198 1.1 christos #undef FLD
11199 1.1 christos }
11200 1.1 christos NEXT (vpc);
11201 1.1 christos
11202 1.1 christos CASE (sem, INSN_XOR) : /* xor $Rs,$Rd */
11203 1.1 christos {
11204 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11205 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11206 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
11207 1.1 christos int UNUSED written = 0;
11208 1.1 christos IADDR UNUSED pc = abuf->addr;
11209 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11210 1.1 christos
11211 1.1 christos {
11212 1.1 christos SI tmp_tmpd;
11213 1.1 christos tmp_tmpd = XORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
11214 1.1 christos {
11215 1.1 christos SI opval = tmp_tmpd;
11216 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11217 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11218 1.1 christos }
11219 1.1 christos {
11220 1.1 christos {
11221 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11222 1.1 christos CPU (h_nbit) = opval;
11223 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11224 1.1 christos }
11225 1.1 christos {
11226 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11227 1.1 christos CPU (h_zbit) = opval;
11228 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11229 1.1 christos }
11230 1.1 christos SET_H_CBIT_MOVE (0);
11231 1.1 christos SET_H_VBIT_MOVE (0);
11232 1.1 christos {
11233 1.1 christos {
11234 1.1 christos BI opval = 0;
11235 1.1 christos CPU (h_xbit) = opval;
11236 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11237 1.1 christos }
11238 1.1 christos {
11239 1.1 christos BI opval = 0;
11240 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11241 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11242 1.1 christos }
11243 1.1 christos }
11244 1.1 christos }
11245 1.1 christos }
11246 1.1 christos
11247 1.1 christos #undef FLD
11248 1.1 christos }
11249 1.1 christos NEXT (vpc);
11250 1.1 christos
11251 1.1 christos CASE (sem, INSN_SWAP) : /* swap${swapoption} ${Rs} */
11252 1.1 christos {
11253 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11254 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11255 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
11256 1.1 christos int UNUSED written = 0;
11257 1.1 christos IADDR UNUSED pc = abuf->addr;
11258 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11259 1.1 christos
11260 1.1 christos {
11261 1.1 christos SI tmp_tmps;
11262 1.1 christos SI tmp_tmpd;
11263 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
11264 1.1 christos tmp_tmpd = ({ SI tmp_tmpcode;
11265 1.1 christos SI tmp_tmpval;
11266 1.1 christos SI tmp_tmpres;
11267 1.1 christos tmp_tmpcode = FLD (f_operand2);
11268 1.1 christos ; tmp_tmpval = tmp_tmps;
11269 1.1 christos ; if (EQSI (tmp_tmpcode, 0)) {
11270 1.1 christos tmp_tmpres = (cgen_rtx_error (current_cpu, "SWAP without swap modifier isn't implemented"), 0);
11271 1.1 christos }
11272 1.1 christos else if (EQSI (tmp_tmpcode, 1)) {
11273 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11274 1.1 christos tmp_tmpr = tmp_tmpval;
11275 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)))))))); });
11276 1.1 christos }
11277 1.1 christos else if (EQSI (tmp_tmpcode, 2)) {
11278 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11279 1.1 christos tmp_tmpb = tmp_tmpval;
11280 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11281 1.1 christos }
11282 1.1 christos else if (EQSI (tmp_tmpcode, 3)) {
11283 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11284 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11285 1.1 christos tmp_tmpb = tmp_tmpval;
11286 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11287 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)))))))); });
11288 1.1 christos }
11289 1.1 christos else if (EQSI (tmp_tmpcode, 4)) {
11290 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11291 1.1 christos tmp_tmpb = tmp_tmpval;
11292 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11293 1.1 christos }
11294 1.1 christos else if (EQSI (tmp_tmpcode, 5)) {
11295 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11296 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11297 1.1 christos tmp_tmpb = tmp_tmpval;
11298 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11299 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)))))))); });
11300 1.1 christos }
11301 1.1 christos else if (EQSI (tmp_tmpcode, 6)) {
11302 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11303 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11304 1.1 christos tmp_tmpb = tmp_tmpval;
11305 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11306 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11307 1.1 christos }
11308 1.1 christos else if (EQSI (tmp_tmpcode, 7)) {
11309 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11310 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11311 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11312 1.1 christos tmp_tmpb = tmp_tmpval;
11313 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11314 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11315 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)))))))); });
11316 1.1 christos }
11317 1.1 christos else if (EQSI (tmp_tmpcode, 8)) {
11318 1.1 christos tmp_tmpres = INVSI (tmp_tmpval);
11319 1.1 christos }
11320 1.1 christos else if (EQSI (tmp_tmpcode, 9)) {
11321 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11322 1.1 christos tmp_tmpr = INVSI (tmp_tmpval);
11323 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)))))))); });
11324 1.1 christos }
11325 1.1 christos else if (EQSI (tmp_tmpcode, 10)) {
11326 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11327 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11328 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11329 1.1 christos }
11330 1.1 christos else if (EQSI (tmp_tmpcode, 11)) {
11331 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11332 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11333 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11334 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11335 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)))))))); });
11336 1.1 christos }
11337 1.1 christos else if (EQSI (tmp_tmpcode, 12)) {
11338 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11339 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11340 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11341 1.1 christos }
11342 1.1 christos else if (EQSI (tmp_tmpcode, 13)) {
11343 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11344 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11345 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11346 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11347 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)))))))); });
11348 1.1 christos }
11349 1.1 christos else if (EQSI (tmp_tmpcode, 14)) {
11350 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11351 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11352 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11353 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11354 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11355 1.1 christos }
11356 1.1 christos else if (EQSI (tmp_tmpcode, 15)) {
11357 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11358 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11359 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11360 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11361 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11362 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11363 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)))))))); });
11364 1.1 christos }
11365 1.1 christos ; tmp_tmpres; });
11366 1.1 christos {
11367 1.1 christos SI opval = tmp_tmpd;
11368 1.1 christos SET_H_GR (FLD (f_operand1), opval);
11369 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11370 1.1 christos }
11371 1.1 christos {
11372 1.1 christos {
11373 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11374 1.1 christos CPU (h_nbit) = opval;
11375 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11376 1.1 christos }
11377 1.1 christos {
11378 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11379 1.1 christos CPU (h_zbit) = opval;
11380 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11381 1.1 christos }
11382 1.1 christos SET_H_CBIT_MOVE (0);
11383 1.1 christos SET_H_VBIT_MOVE (0);
11384 1.1 christos {
11385 1.1 christos {
11386 1.1 christos BI opval = 0;
11387 1.1 christos CPU (h_xbit) = opval;
11388 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11389 1.1 christos }
11390 1.1 christos {
11391 1.1 christos BI opval = 0;
11392 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11393 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11394 1.1 christos }
11395 1.1 christos }
11396 1.1 christos }
11397 1.1 christos }
11398 1.1 christos
11399 1.1 christos #undef FLD
11400 1.1 christos }
11401 1.1 christos NEXT (vpc);
11402 1.1 christos
11403 1.1 christos CASE (sem, INSN_ASRR_B_R) : /* asrr.b $Rs,$Rd */
11404 1.1 christos {
11405 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11406 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11407 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11408 1.1 christos int UNUSED written = 0;
11409 1.1 christos IADDR UNUSED pc = abuf->addr;
11410 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11411 1.1 christos
11412 1.1 christos {
11413 1.1 christos QI tmp_tmpd;
11414 1.1 christos SI tmp_cnt1;
11415 1.1 christos SI tmp_cnt2;
11416 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11417 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11418 1.1 christos tmp_tmpd = SRASI (EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11419 1.1 christos {
11420 1.1 christos SI tmp_oldregval;
11421 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11422 1.1 christos {
11423 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11424 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11425 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11426 1.1 christos }
11427 1.1 christos }
11428 1.1 christos {
11429 1.1 christos {
11430 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11431 1.1 christos CPU (h_nbit) = opval;
11432 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11433 1.1 christos }
11434 1.1 christos {
11435 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11436 1.1 christos CPU (h_zbit) = opval;
11437 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11438 1.1 christos }
11439 1.1 christos SET_H_CBIT_MOVE (0);
11440 1.1 christos SET_H_VBIT_MOVE (0);
11441 1.1 christos {
11442 1.1 christos {
11443 1.1 christos BI opval = 0;
11444 1.1 christos CPU (h_xbit) = opval;
11445 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11446 1.1 christos }
11447 1.1 christos {
11448 1.1 christos BI opval = 0;
11449 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11450 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11451 1.1 christos }
11452 1.1 christos }
11453 1.1 christos }
11454 1.1 christos }
11455 1.1 christos
11456 1.1 christos #undef FLD
11457 1.1 christos }
11458 1.1 christos NEXT (vpc);
11459 1.1 christos
11460 1.1 christos CASE (sem, INSN_ASRR_W_R) : /* asrr.w $Rs,$Rd */
11461 1.1 christos {
11462 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11463 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11464 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11465 1.1 christos int UNUSED written = 0;
11466 1.1 christos IADDR UNUSED pc = abuf->addr;
11467 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11468 1.1 christos
11469 1.1 christos {
11470 1.1 christos HI tmp_tmpd;
11471 1.1 christos SI tmp_cnt1;
11472 1.1 christos SI tmp_cnt2;
11473 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11474 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11475 1.1 christos tmp_tmpd = SRASI (EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11476 1.1 christos {
11477 1.1 christos SI tmp_oldregval;
11478 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11479 1.1 christos {
11480 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11481 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11482 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11483 1.1 christos }
11484 1.1 christos }
11485 1.1 christos {
11486 1.1 christos {
11487 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11488 1.1 christos CPU (h_nbit) = opval;
11489 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11490 1.1 christos }
11491 1.1 christos {
11492 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11493 1.1 christos CPU (h_zbit) = opval;
11494 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11495 1.1 christos }
11496 1.1 christos SET_H_CBIT_MOVE (0);
11497 1.1 christos SET_H_VBIT_MOVE (0);
11498 1.1 christos {
11499 1.1 christos {
11500 1.1 christos BI opval = 0;
11501 1.1 christos CPU (h_xbit) = opval;
11502 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11503 1.1 christos }
11504 1.1 christos {
11505 1.1 christos BI opval = 0;
11506 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11507 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11508 1.1 christos }
11509 1.1 christos }
11510 1.1 christos }
11511 1.1 christos }
11512 1.1 christos
11513 1.1 christos #undef FLD
11514 1.1 christos }
11515 1.1 christos NEXT (vpc);
11516 1.1 christos
11517 1.1 christos CASE (sem, INSN_ASRR_D_R) : /* asrr.d $Rs,$Rd */
11518 1.1 christos {
11519 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11520 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11521 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11522 1.1 christos int UNUSED written = 0;
11523 1.1 christos IADDR UNUSED pc = abuf->addr;
11524 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11525 1.1 christos
11526 1.1 christos {
11527 1.1 christos SI tmp_tmpd;
11528 1.1 christos SI tmp_cnt1;
11529 1.1 christos SI tmp_cnt2;
11530 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11531 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11532 1.1 christos tmp_tmpd = SRASI (EXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11533 1.1 christos {
11534 1.1 christos SI opval = tmp_tmpd;
11535 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11536 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11537 1.1 christos }
11538 1.1 christos {
11539 1.1 christos {
11540 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11541 1.1 christos CPU (h_nbit) = opval;
11542 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11543 1.1 christos }
11544 1.1 christos {
11545 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11546 1.1 christos CPU (h_zbit) = opval;
11547 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11548 1.1 christos }
11549 1.1 christos SET_H_CBIT_MOVE (0);
11550 1.1 christos SET_H_VBIT_MOVE (0);
11551 1.1 christos {
11552 1.1 christos {
11553 1.1 christos BI opval = 0;
11554 1.1 christos CPU (h_xbit) = opval;
11555 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11556 1.1 christos }
11557 1.1 christos {
11558 1.1 christos BI opval = 0;
11559 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11560 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11561 1.1 christos }
11562 1.1 christos }
11563 1.1 christos }
11564 1.1 christos }
11565 1.1 christos
11566 1.1 christos #undef FLD
11567 1.1 christos }
11568 1.1 christos NEXT (vpc);
11569 1.1 christos
11570 1.1 christos CASE (sem, INSN_ASRQ) : /* asrq $c,${Rd} */
11571 1.1 christos {
11572 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11573 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11574 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11575 1.1 christos int UNUSED written = 0;
11576 1.1 christos IADDR UNUSED pc = abuf->addr;
11577 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11578 1.1 christos
11579 1.1 christos {
11580 1.1 christos SI tmp_tmpd;
11581 1.1 christos tmp_tmpd = SRASI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11582 1.1 christos {
11583 1.1 christos SI opval = tmp_tmpd;
11584 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11585 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11586 1.1 christos }
11587 1.1 christos {
11588 1.1 christos {
11589 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11590 1.1 christos CPU (h_nbit) = opval;
11591 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11592 1.1 christos }
11593 1.1 christos {
11594 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11595 1.1 christos CPU (h_zbit) = opval;
11596 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11597 1.1 christos }
11598 1.1 christos SET_H_CBIT_MOVE (0);
11599 1.1 christos SET_H_VBIT_MOVE (0);
11600 1.1 christos {
11601 1.1 christos {
11602 1.1 christos BI opval = 0;
11603 1.1 christos CPU (h_xbit) = opval;
11604 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11605 1.1 christos }
11606 1.1 christos {
11607 1.1 christos BI opval = 0;
11608 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11609 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11610 1.1 christos }
11611 1.1 christos }
11612 1.1 christos }
11613 1.1 christos }
11614 1.1 christos
11615 1.1 christos #undef FLD
11616 1.1 christos }
11617 1.1 christos NEXT (vpc);
11618 1.1 christos
11619 1.1 christos CASE (sem, INSN_LSRR_B_R) : /* lsrr.b $Rs,$Rd */
11620 1.1 christos {
11621 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11622 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11623 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11624 1.1 christos int UNUSED written = 0;
11625 1.1 christos IADDR UNUSED pc = abuf->addr;
11626 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11627 1.1 christos
11628 1.1 christos {
11629 1.1 christos SI tmp_tmpd;
11630 1.1 christos SI tmp_cnt;
11631 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11632 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))));
11633 1.1 christos {
11634 1.1 christos SI tmp_oldregval;
11635 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11636 1.1 christos {
11637 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11638 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11639 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11640 1.1 christos }
11641 1.1 christos }
11642 1.1 christos {
11643 1.1 christos {
11644 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11645 1.1 christos CPU (h_nbit) = opval;
11646 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11647 1.1 christos }
11648 1.1 christos {
11649 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11650 1.1 christos CPU (h_zbit) = opval;
11651 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11652 1.1 christos }
11653 1.1 christos SET_H_CBIT_MOVE (0);
11654 1.1 christos SET_H_VBIT_MOVE (0);
11655 1.1 christos {
11656 1.1 christos {
11657 1.1 christos BI opval = 0;
11658 1.1 christos CPU (h_xbit) = opval;
11659 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11660 1.1 christos }
11661 1.1 christos {
11662 1.1 christos BI opval = 0;
11663 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11664 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11665 1.1 christos }
11666 1.1 christos }
11667 1.1 christos }
11668 1.1 christos }
11669 1.1 christos
11670 1.1 christos #undef FLD
11671 1.1 christos }
11672 1.1 christos NEXT (vpc);
11673 1.1 christos
11674 1.1 christos CASE (sem, INSN_LSRR_W_R) : /* lsrr.w $Rs,$Rd */
11675 1.1 christos {
11676 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11677 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11678 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11679 1.1 christos int UNUSED written = 0;
11680 1.1 christos IADDR UNUSED pc = abuf->addr;
11681 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11682 1.1 christos
11683 1.1 christos {
11684 1.1 christos SI tmp_tmpd;
11685 1.1 christos SI tmp_cnt;
11686 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11687 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))));
11688 1.1 christos {
11689 1.1 christos SI tmp_oldregval;
11690 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11691 1.1 christos {
11692 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11693 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11694 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11695 1.1 christos }
11696 1.1 christos }
11697 1.1 christos {
11698 1.1 christos {
11699 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11700 1.1 christos CPU (h_nbit) = opval;
11701 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11702 1.1 christos }
11703 1.1 christos {
11704 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11705 1.1 christos CPU (h_zbit) = opval;
11706 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11707 1.1 christos }
11708 1.1 christos SET_H_CBIT_MOVE (0);
11709 1.1 christos SET_H_VBIT_MOVE (0);
11710 1.1 christos {
11711 1.1 christos {
11712 1.1 christos BI opval = 0;
11713 1.1 christos CPU (h_xbit) = opval;
11714 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11715 1.1 christos }
11716 1.1 christos {
11717 1.1 christos BI opval = 0;
11718 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11719 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11720 1.1 christos }
11721 1.1 christos }
11722 1.1 christos }
11723 1.1 christos }
11724 1.1 christos
11725 1.1 christos #undef FLD
11726 1.1 christos }
11727 1.1 christos NEXT (vpc);
11728 1.1 christos
11729 1.1 christos CASE (sem, INSN_LSRR_D_R) : /* lsrr.d $Rs,$Rd */
11730 1.1 christos {
11731 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11732 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11733 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11734 1.1 christos int UNUSED written = 0;
11735 1.1 christos IADDR UNUSED pc = abuf->addr;
11736 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11737 1.1 christos
11738 1.1 christos {
11739 1.1 christos SI tmp_tmpd;
11740 1.1 christos SI tmp_cnt;
11741 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11742 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))));
11743 1.1 christos {
11744 1.1 christos SI opval = tmp_tmpd;
11745 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11746 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11747 1.1 christos }
11748 1.1 christos {
11749 1.1 christos {
11750 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11751 1.1 christos CPU (h_nbit) = opval;
11752 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11753 1.1 christos }
11754 1.1 christos {
11755 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11756 1.1 christos CPU (h_zbit) = opval;
11757 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11758 1.1 christos }
11759 1.1 christos SET_H_CBIT_MOVE (0);
11760 1.1 christos SET_H_VBIT_MOVE (0);
11761 1.1 christos {
11762 1.1 christos {
11763 1.1 christos BI opval = 0;
11764 1.1 christos CPU (h_xbit) = opval;
11765 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11766 1.1 christos }
11767 1.1 christos {
11768 1.1 christos BI opval = 0;
11769 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11770 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11771 1.1 christos }
11772 1.1 christos }
11773 1.1 christos }
11774 1.1 christos }
11775 1.1 christos
11776 1.1 christos #undef FLD
11777 1.1 christos }
11778 1.1 christos NEXT (vpc);
11779 1.1 christos
11780 1.1 christos CASE (sem, INSN_LSRQ) : /* lsrq $c,${Rd} */
11781 1.1 christos {
11782 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11783 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11784 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11785 1.1 christos int UNUSED written = 0;
11786 1.1 christos IADDR UNUSED pc = abuf->addr;
11787 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11788 1.1 christos
11789 1.1 christos {
11790 1.1 christos SI tmp_tmpd;
11791 1.1 christos tmp_tmpd = SRLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11792 1.1 christos {
11793 1.1 christos SI opval = tmp_tmpd;
11794 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11795 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11796 1.1 christos }
11797 1.1 christos {
11798 1.1 christos {
11799 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11800 1.1 christos CPU (h_nbit) = opval;
11801 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11802 1.1 christos }
11803 1.1 christos {
11804 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11805 1.1 christos CPU (h_zbit) = opval;
11806 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11807 1.1 christos }
11808 1.1 christos SET_H_CBIT_MOVE (0);
11809 1.1 christos SET_H_VBIT_MOVE (0);
11810 1.1 christos {
11811 1.1 christos {
11812 1.1 christos BI opval = 0;
11813 1.1 christos CPU (h_xbit) = opval;
11814 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11815 1.1 christos }
11816 1.1 christos {
11817 1.1 christos BI opval = 0;
11818 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11819 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11820 1.1 christos }
11821 1.1 christos }
11822 1.1 christos }
11823 1.1 christos }
11824 1.1 christos
11825 1.1 christos #undef FLD
11826 1.1 christos }
11827 1.1 christos NEXT (vpc);
11828 1.1 christos
11829 1.1 christos CASE (sem, INSN_LSLR_B_R) : /* lslr.b $Rs,$Rd */
11830 1.1 christos {
11831 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11832 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11833 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11834 1.1 christos int UNUSED written = 0;
11835 1.1 christos IADDR UNUSED pc = abuf->addr;
11836 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11837 1.1 christos
11838 1.1 christos {
11839 1.1 christos SI tmp_tmpd;
11840 1.1 christos SI tmp_cnt;
11841 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11842 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))));
11843 1.1 christos {
11844 1.1 christos SI tmp_oldregval;
11845 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11846 1.1 christos {
11847 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11848 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11849 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11850 1.1 christos }
11851 1.1 christos }
11852 1.1 christos {
11853 1.1 christos {
11854 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11855 1.1 christos CPU (h_nbit) = opval;
11856 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11857 1.1 christos }
11858 1.1 christos {
11859 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11860 1.1 christos CPU (h_zbit) = opval;
11861 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11862 1.1 christos }
11863 1.1 christos SET_H_CBIT_MOVE (0);
11864 1.1 christos SET_H_VBIT_MOVE (0);
11865 1.1 christos {
11866 1.1 christos {
11867 1.1 christos BI opval = 0;
11868 1.1 christos CPU (h_xbit) = opval;
11869 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11870 1.1 christos }
11871 1.1 christos {
11872 1.1 christos BI opval = 0;
11873 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11874 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11875 1.1 christos }
11876 1.1 christos }
11877 1.1 christos }
11878 1.1 christos }
11879 1.1 christos
11880 1.1 christos #undef FLD
11881 1.1 christos }
11882 1.1 christos NEXT (vpc);
11883 1.1 christos
11884 1.1 christos CASE (sem, INSN_LSLR_W_R) : /* lslr.w $Rs,$Rd */
11885 1.1 christos {
11886 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11887 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11888 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11889 1.1 christos int UNUSED written = 0;
11890 1.1 christos IADDR UNUSED pc = abuf->addr;
11891 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11892 1.1 christos
11893 1.1 christos {
11894 1.1 christos SI tmp_tmpd;
11895 1.1 christos SI tmp_cnt;
11896 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11897 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))));
11898 1.1 christos {
11899 1.1 christos SI tmp_oldregval;
11900 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11901 1.1 christos {
11902 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11903 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11904 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11905 1.1 christos }
11906 1.1 christos }
11907 1.1 christos {
11908 1.1 christos {
11909 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11910 1.1 christos CPU (h_nbit) = opval;
11911 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11912 1.1 christos }
11913 1.1 christos {
11914 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11915 1.1 christos CPU (h_zbit) = opval;
11916 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11917 1.1 christos }
11918 1.1 christos SET_H_CBIT_MOVE (0);
11919 1.1 christos SET_H_VBIT_MOVE (0);
11920 1.1 christos {
11921 1.1 christos {
11922 1.1 christos BI opval = 0;
11923 1.1 christos CPU (h_xbit) = opval;
11924 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11925 1.1 christos }
11926 1.1 christos {
11927 1.1 christos BI opval = 0;
11928 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11929 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11930 1.1 christos }
11931 1.1 christos }
11932 1.1 christos }
11933 1.1 christos }
11934 1.1 christos
11935 1.1 christos #undef FLD
11936 1.1 christos }
11937 1.1 christos NEXT (vpc);
11938 1.1 christos
11939 1.1 christos CASE (sem, INSN_LSLR_D_R) : /* lslr.d $Rs,$Rd */
11940 1.1 christos {
11941 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11942 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11943 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11944 1.1 christos int UNUSED written = 0;
11945 1.1 christos IADDR UNUSED pc = abuf->addr;
11946 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11947 1.1 christos
11948 1.1 christos {
11949 1.1 christos SI tmp_tmpd;
11950 1.1 christos SI tmp_cnt;
11951 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11952 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))));
11953 1.1 christos {
11954 1.1 christos SI opval = tmp_tmpd;
11955 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11956 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11957 1.1 christos }
11958 1.1 christos {
11959 1.1 christos {
11960 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11961 1.1 christos CPU (h_nbit) = opval;
11962 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11963 1.1 christos }
11964 1.1 christos {
11965 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11966 1.1 christos CPU (h_zbit) = opval;
11967 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11968 1.1 christos }
11969 1.1 christos SET_H_CBIT_MOVE (0);
11970 1.1 christos SET_H_VBIT_MOVE (0);
11971 1.1 christos {
11972 1.1 christos {
11973 1.1 christos BI opval = 0;
11974 1.1 christos CPU (h_xbit) = opval;
11975 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11976 1.1 christos }
11977 1.1 christos {
11978 1.1 christos BI opval = 0;
11979 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11980 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11981 1.1 christos }
11982 1.1 christos }
11983 1.1 christos }
11984 1.1 christos }
11985 1.1 christos
11986 1.1 christos #undef FLD
11987 1.1 christos }
11988 1.1 christos NEXT (vpc);
11989 1.1 christos
11990 1.1 christos CASE (sem, INSN_LSLQ) : /* lslq $c,${Rd} */
11991 1.1 christos {
11992 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11993 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11994 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11995 1.1 christos int UNUSED written = 0;
11996 1.1 christos IADDR UNUSED pc = abuf->addr;
11997 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11998 1.1 christos
11999 1.1 christos {
12000 1.1 christos SI tmp_tmpd;
12001 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
12002 1.1 christos {
12003 1.1 christos SI opval = tmp_tmpd;
12004 1.1 christos SET_H_GR (FLD (f_operand2), opval);
12005 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
12006 1.1 christos }
12007 1.1 christos {
12008 1.1 christos {
12009 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12010 1.1 christos CPU (h_nbit) = opval;
12011 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12012 1.1 christos }
12013 1.1 christos {
12014 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12015 1.1 christos CPU (h_zbit) = opval;
12016 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12017 1.1 christos }
12018 1.1 christos SET_H_CBIT_MOVE (0);
12019 1.1 christos SET_H_VBIT_MOVE (0);
12020 1.1 christos {
12021 1.1 christos {
12022 1.1 christos BI opval = 0;
12023 1.1 christos CPU (h_xbit) = opval;
12024 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12025 1.1 christos }
12026 1.1 christos {
12027 1.1 christos BI opval = 0;
12028 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12029 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12030 1.1 christos }
12031 1.1 christos }
12032 1.1 christos }
12033 1.1 christos }
12034 1.1 christos
12035 1.1 christos #undef FLD
12036 1.1 christos }
12037 1.1 christos NEXT (vpc);
12038 1.1 christos
12039 1.1 christos CASE (sem, INSN_BTST) : /* $Rs,$Rd */
12040 1.1 christos {
12041 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12042 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12043 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
12044 1.1 christos int UNUSED written = 0;
12045 1.1 christos IADDR UNUSED pc = abuf->addr;
12046 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12047 1.1 christos
12048 1.1 christos {
12049 1.1 christos SI tmp_tmpd;
12050 1.1 christos SI tmp_cnt;
12051 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, ANDSI (GET_H_GR (FLD (f_operand1)), 31)));
12052 1.1 christos {
12053 1.1 christos {
12054 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12055 1.1 christos CPU (h_nbit) = opval;
12056 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12057 1.1 christos }
12058 1.1 christos {
12059 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12060 1.1 christos CPU (h_zbit) = opval;
12061 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12062 1.1 christos }
12063 1.1 christos SET_H_CBIT_MOVE (0);
12064 1.1 christos SET_H_VBIT_MOVE (0);
12065 1.1 christos {
12066 1.1 christos {
12067 1.1 christos BI opval = 0;
12068 1.1 christos CPU (h_xbit) = opval;
12069 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12070 1.1 christos }
12071 1.1 christos {
12072 1.1 christos BI opval = 0;
12073 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12074 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12075 1.1 christos }
12076 1.1 christos }
12077 1.1 christos }
12078 1.1 christos }
12079 1.1 christos
12080 1.1 christos #undef FLD
12081 1.1 christos }
12082 1.1 christos NEXT (vpc);
12083 1.1 christos
12084 1.1 christos CASE (sem, INSN_BTSTQ) : /* btstq $c,${Rd} */
12085 1.1 christos {
12086 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12087 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12088 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
12089 1.1 christos int UNUSED written = 0;
12090 1.1 christos IADDR UNUSED pc = abuf->addr;
12091 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12092 1.1 christos
12093 1.1 christos {
12094 1.1 christos SI tmp_tmpd;
12095 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, FLD (f_u5)));
12096 1.1 christos {
12097 1.1 christos {
12098 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12099 1.1 christos CPU (h_nbit) = opval;
12100 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12101 1.1 christos }
12102 1.1 christos {
12103 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12104 1.1 christos CPU (h_zbit) = opval;
12105 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12106 1.1 christos }
12107 1.1 christos SET_H_CBIT_MOVE (0);
12108 1.1 christos SET_H_VBIT_MOVE (0);
12109 1.1 christos {
12110 1.1 christos {
12111 1.1 christos BI opval = 0;
12112 1.1 christos CPU (h_xbit) = opval;
12113 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12114 1.1 christos }
12115 1.1 christos {
12116 1.1 christos BI opval = 0;
12117 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12118 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12119 1.1 christos }
12120 1.1 christos }
12121 1.1 christos }
12122 1.1 christos }
12123 1.1 christos
12124 1.1 christos #undef FLD
12125 1.1 christos }
12126 1.1 christos NEXT (vpc);
12127 1.1 christos
12128 1.1 christos CASE (sem, INSN_SETF) : /* setf ${list-of-flags} */
12129 1.1 christos {
12130 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12131 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12132 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12133 1.1 christos int UNUSED written = 0;
12134 1.1 christos IADDR UNUSED pc = abuf->addr;
12135 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12136 1.1 christos
12137 1.1 christos {
12138 1.1 christos SI tmp_tmp;
12139 1.1 christos tmp_tmp = FLD (f_dstsrc);
12140 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12141 1.1 christos {
12142 1.1 christos BI opval = 1;
12143 1.1 christos CPU (h_cbit) = opval;
12144 1.1 christos written |= (1 << 1);
12145 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12146 1.1 christos }
12147 1.1 christos }
12148 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12149 1.1 christos {
12150 1.1 christos BI opval = 1;
12151 1.1 christos CPU (h_vbit) = opval;
12152 1.1 christos written |= (1 << 7);
12153 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12154 1.1 christos }
12155 1.1 christos }
12156 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12157 1.1 christos {
12158 1.1 christos BI opval = 1;
12159 1.1 christos CPU (h_zbit) = opval;
12160 1.1 christos written |= (1 << 9);
12161 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12162 1.1 christos }
12163 1.1 christos }
12164 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12165 1.1 christos {
12166 1.1 christos BI opval = 1;
12167 1.1 christos CPU (h_nbit) = opval;
12168 1.1 christos written |= (1 << 3);
12169 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12170 1.1 christos }
12171 1.1 christos }
12172 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12173 1.1 christos {
12174 1.1 christos BI opval = 1;
12175 1.1 christos CPU (h_xbit) = opval;
12176 1.1 christos written |= (1 << 8);
12177 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12178 1.1 christos }
12179 1.1 christos }
12180 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12181 1.1 christos {
12182 1.1 christos BI opval = 1;
12183 1.1 christos SET_H_IBIT (opval);
12184 1.1 christos written |= (1 << 2);
12185 1.1 christos TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12186 1.1 christos }
12187 1.1 christos }
12188 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12189 1.1 christos {
12190 1.1 christos BI opval = 1;
12191 1.1 christos SET_H_UBIT (opval);
12192 1.1 christos written |= (1 << 6);
12193 1.1 christos TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12194 1.1 christos }
12195 1.1 christos }
12196 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12197 1.1 christos {
12198 1.1 christos BI opval = 1;
12199 1.1 christos CPU (h_pbit) = opval;
12200 1.1 christos written |= (1 << 4);
12201 1.1 christos TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12202 1.1 christos }
12203 1.1 christos }
12204 1.1 christos {
12205 1.1 christos BI opval = 0;
12206 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12207 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12208 1.1 christos }
12209 1.1 christos if (EQSI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12210 1.1 christos {
12211 1.1 christos BI opval = 0;
12212 1.1 christos CPU (h_xbit) = opval;
12213 1.1 christos written |= (1 << 8);
12214 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12215 1.1 christos }
12216 1.1 christos }
12217 1.1 christos }
12218 1.1 christos
12219 1.1 christos abuf->written = written;
12220 1.1 christos #undef FLD
12221 1.1 christos }
12222 1.1 christos NEXT (vpc);
12223 1.1 christos
12224 1.1 christos CASE (sem, INSN_CLEARF) : /* clearf ${list-of-flags} */
12225 1.1 christos {
12226 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12227 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12228 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12229 1.1 christos int UNUSED written = 0;
12230 1.1 christos IADDR UNUSED pc = abuf->addr;
12231 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12232 1.1 christos
12233 1.1 christos {
12234 1.1 christos SI tmp_tmp;
12235 1.1 christos tmp_tmp = FLD (f_dstsrc);
12236 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12237 1.1 christos {
12238 1.1 christos BI opval = 0;
12239 1.1 christos CPU (h_cbit) = opval;
12240 1.1 christos written |= (1 << 1);
12241 1.1 christos TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12242 1.1 christos }
12243 1.1 christos }
12244 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12245 1.1 christos {
12246 1.1 christos BI opval = 0;
12247 1.1 christos CPU (h_vbit) = opval;
12248 1.1 christos written |= (1 << 7);
12249 1.1 christos TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12250 1.1 christos }
12251 1.1 christos }
12252 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12253 1.1 christos {
12254 1.1 christos BI opval = 0;
12255 1.1 christos CPU (h_zbit) = opval;
12256 1.1 christos written |= (1 << 9);
12257 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12258 1.1 christos }
12259 1.1 christos }
12260 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12261 1.1 christos {
12262 1.1 christos BI opval = 0;
12263 1.1 christos CPU (h_nbit) = opval;
12264 1.1 christos written |= (1 << 3);
12265 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12266 1.1 christos }
12267 1.1 christos }
12268 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12269 1.1 christos {
12270 1.1 christos BI opval = 0;
12271 1.1 christos CPU (h_xbit) = opval;
12272 1.1 christos written |= (1 << 8);
12273 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12274 1.1 christos }
12275 1.1 christos }
12276 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12277 1.1 christos {
12278 1.1 christos BI opval = 0;
12279 1.1 christos SET_H_IBIT (opval);
12280 1.1 christos written |= (1 << 2);
12281 1.1 christos TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12282 1.1 christos }
12283 1.1 christos }
12284 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12285 1.1 christos {
12286 1.1 christos BI opval = 0;
12287 1.1 christos SET_H_UBIT (opval);
12288 1.1 christos written |= (1 << 6);
12289 1.1 christos TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12290 1.1 christos }
12291 1.1 christos }
12292 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12293 1.1 christos {
12294 1.1 christos BI opval = 0;
12295 1.1 christos CPU (h_pbit) = opval;
12296 1.1 christos written |= (1 << 4);
12297 1.1 christos TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12298 1.1 christos }
12299 1.1 christos }
12300 1.1 christos {
12301 1.1 christos {
12302 1.1 christos BI opval = 0;
12303 1.1 christos CPU (h_xbit) = opval;
12304 1.1 christos written |= (1 << 8);
12305 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12306 1.1 christos }
12307 1.1 christos {
12308 1.1 christos BI opval = 0;
12309 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12310 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12311 1.1 christos }
12312 1.1 christos }
12313 1.1 christos }
12314 1.1 christos
12315 1.1 christos abuf->written = written;
12316 1.1 christos #undef FLD
12317 1.1 christos }
12318 1.1 christos NEXT (vpc);
12319 1.1 christos
12320 1.1 christos CASE (sem, INSN_RFE) : /* rfe */
12321 1.1 christos {
12322 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12323 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12324 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12325 1.1 christos int UNUSED written = 0;
12326 1.1 christos IADDR UNUSED pc = abuf->addr;
12327 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12328 1.1 christos
12329 1.1 christos {
12330 1.1 christos USI tmp_oldccs;
12331 1.1 christos USI tmp_samebits;
12332 1.1 christos USI tmp_shiftbits;
12333 1.1 christos USI tmp_keepmask;
12334 1.1 christos BI tmp_p1;
12335 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12336 1.1 christos tmp_keepmask = 0xc0000000;
12337 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12338 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12339 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12340 1.1 christos {
12341 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12342 1.1 christos SET_H_SR (((UINT) 13), opval);
12343 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12344 1.1 christos }
12345 1.1 christos }
12346 1.1 christos
12347 1.1 christos #undef FLD
12348 1.1 christos }
12349 1.1 christos NEXT (vpc);
12350 1.1 christos
12351 1.1 christos CASE (sem, INSN_SFE) : /* sfe */
12352 1.1 christos {
12353 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12354 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12355 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12356 1.1 christos int UNUSED written = 0;
12357 1.1 christos IADDR UNUSED pc = abuf->addr;
12358 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12359 1.1 christos
12360 1.1 christos {
12361 1.1 christos SI tmp_oldccs;
12362 1.1 christos SI tmp_savemask;
12363 1.1 christos tmp_savemask = 0xc0000000;
12364 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12365 1.1 christos {
12366 1.1 christos SI opval = ORSI (ANDSI (tmp_savemask, tmp_oldccs), ANDSI (INVSI (tmp_savemask), SLLSI (tmp_oldccs, 10)));
12367 1.1 christos SET_H_SR (((UINT) 13), opval);
12368 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12369 1.1 christos }
12370 1.1 christos }
12371 1.1 christos
12372 1.1 christos #undef FLD
12373 1.1 christos }
12374 1.1 christos NEXT (vpc);
12375 1.1 christos
12376 1.1 christos CASE (sem, INSN_RFG) : /* rfg */
12377 1.1 christos {
12378 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12379 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12380 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12381 1.1 christos int UNUSED written = 0;
12382 1.1 christos IADDR UNUSED pc = abuf->addr;
12383 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12384 1.1 christos
12385 1.1 christos crisv32f_rfg_handler (current_cpu, pc);
12386 1.1 christos
12387 1.1 christos #undef FLD
12388 1.1 christos }
12389 1.1 christos NEXT (vpc);
12390 1.1 christos
12391 1.1 christos CASE (sem, INSN_RFN) : /* rfn */
12392 1.1 christos {
12393 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12394 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12395 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12396 1.1 christos int UNUSED written = 0;
12397 1.1 christos IADDR UNUSED pc = abuf->addr;
12398 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12399 1.1 christos
12400 1.1 christos {
12401 1.1 christos {
12402 1.1 christos USI tmp_oldccs;
12403 1.1 christos USI tmp_samebits;
12404 1.1 christos USI tmp_shiftbits;
12405 1.1 christos USI tmp_keepmask;
12406 1.1 christos BI tmp_p1;
12407 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12408 1.1 christos tmp_keepmask = 0xc0000000;
12409 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12410 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12411 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12412 1.1 christos {
12413 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12414 1.1 christos SET_H_SR (((UINT) 13), opval);
12415 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12416 1.1 christos }
12417 1.1 christos }
12418 1.1 christos {
12419 1.1 christos BI opval = 1;
12420 1.1 christos SET_H_MBIT (opval);
12421 1.1 christos TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
12422 1.1 christos }
12423 1.1 christos }
12424 1.1 christos
12425 1.1 christos #undef FLD
12426 1.1 christos }
12427 1.1 christos NEXT (vpc);
12428 1.1 christos
12429 1.1 christos CASE (sem, INSN_HALT) : /* halt */
12430 1.1 christos {
12431 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12432 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12433 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12434 1.1 christos int UNUSED written = 0;
12435 1.1 christos IADDR UNUSED pc = abuf->addr;
12436 1.1 christos SEM_BRANCH_INIT
12437 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12438 1.1 christos
12439 1.1 christos {
12440 1.1 christos USI opval = crisv32f_halt_handler (current_cpu, pc);
12441 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12442 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12443 1.1 christos }
12444 1.1 christos
12445 1.1 christos SEM_BRANCH_FINI (vpc);
12446 1.1 christos #undef FLD
12447 1.1 christos }
12448 1.1 christos NEXT (vpc);
12449 1.1 christos
12450 1.1 christos CASE (sem, INSN_BCC_B) : /* b${cc} ${o-pcrel} */
12451 1.1 christos {
12452 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12453 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12454 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12455 1.1 christos int UNUSED written = 0;
12456 1.1 christos IADDR UNUSED pc = abuf->addr;
12457 1.1 christos SEM_BRANCH_INIT
12458 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12459 1.1 christos
12460 1.1 christos {
12461 1.1 christos BI tmp_truthval;
12462 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12463 1.1 christos BI tmp_condres;
12464 1.1 christos tmp_tmpcond = FLD (f_operand2);
12465 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12466 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12467 1.1 christos }
12468 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12469 1.1 christos tmp_condres = CPU (h_cbit);
12470 1.1 christos }
12471 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12472 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12473 1.1 christos }
12474 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12475 1.1 christos tmp_condres = CPU (h_zbit);
12476 1.1 christos }
12477 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12478 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12479 1.1 christos }
12480 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12481 1.1 christos tmp_condres = CPU (h_vbit);
12482 1.1 christos }
12483 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12484 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12485 1.1 christos }
12486 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12487 1.1 christos tmp_condres = CPU (h_nbit);
12488 1.1 christos }
12489 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12490 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12491 1.1 christos }
12492 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12493 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12494 1.1 christos }
12495 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12496 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12497 1.1 christos }
12498 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12499 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12500 1.1 christos }
12501 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12502 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12503 1.1 christos }
12504 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12505 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12506 1.1 christos }
12507 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12508 1.1 christos tmp_condres = 1;
12509 1.1 christos }
12510 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12511 1.1 christos tmp_condres = CPU (h_pbit);
12512 1.1 christos }
12513 1.1 christos ; tmp_condres; });
12514 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_pcrel), tmp_truthval);
12515 1.1 christos {
12516 1.1 christos {
12517 1.1 christos BI opval = 0;
12518 1.1 christos CPU (h_xbit) = opval;
12519 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12520 1.1 christos }
12521 1.1 christos {
12522 1.1 christos BI opval = 0;
12523 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12524 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12525 1.1 christos }
12526 1.1 christos }
12527 1.1 christos if (tmp_truthval) {
12528 1.1 christos {
12529 1.1 christos {
12530 1.1 christos USI opval = FLD (i_o_pcrel);
12531 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12532 1.1 christos written |= (1 << 8);
12533 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12534 1.1 christos }
12535 1.1 christos }
12536 1.1 christos }
12537 1.1 christos }
12538 1.1 christos
12539 1.1 christos abuf->written = written;
12540 1.1 christos SEM_BRANCH_FINI (vpc);
12541 1.1 christos #undef FLD
12542 1.1 christos }
12543 1.1 christos NEXT (vpc);
12544 1.1 christos
12545 1.1 christos CASE (sem, INSN_BA_B) : /* ba ${o-pcrel} */
12546 1.1 christos {
12547 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12548 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12549 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12550 1.1 christos int UNUSED written = 0;
12551 1.1 christos IADDR UNUSED pc = abuf->addr;
12552 1.1 christos SEM_BRANCH_INIT
12553 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12554 1.1 christos
12555 1.1 christos {
12556 1.1 christos {
12557 1.1 christos {
12558 1.1 christos BI opval = 0;
12559 1.1 christos CPU (h_xbit) = opval;
12560 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12561 1.1 christos }
12562 1.1 christos {
12563 1.1 christos BI opval = 0;
12564 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12565 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12566 1.1 christos }
12567 1.1 christos }
12568 1.1 christos {
12569 1.1 christos {
12570 1.1 christos USI opval = FLD (i_o_pcrel);
12571 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12572 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12573 1.1 christos }
12574 1.1 christos }
12575 1.1 christos }
12576 1.1 christos
12577 1.1 christos SEM_BRANCH_FINI (vpc);
12578 1.1 christos #undef FLD
12579 1.1 christos }
12580 1.1 christos NEXT (vpc);
12581 1.1 christos
12582 1.1 christos CASE (sem, INSN_BCC_W) : /* b${cc} ${o-word-pcrel} */
12583 1.1 christos {
12584 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12585 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12586 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12587 1.1 christos int UNUSED written = 0;
12588 1.1 christos IADDR UNUSED pc = abuf->addr;
12589 1.1 christos SEM_BRANCH_INIT
12590 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12591 1.1 christos
12592 1.1 christos {
12593 1.1 christos BI tmp_truthval;
12594 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12595 1.1 christos BI tmp_condres;
12596 1.1 christos tmp_tmpcond = FLD (f_operand2);
12597 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12598 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12599 1.1 christos }
12600 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12601 1.1 christos tmp_condres = CPU (h_cbit);
12602 1.1 christos }
12603 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12604 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12605 1.1 christos }
12606 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12607 1.1 christos tmp_condres = CPU (h_zbit);
12608 1.1 christos }
12609 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12610 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12611 1.1 christos }
12612 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12613 1.1 christos tmp_condres = CPU (h_vbit);
12614 1.1 christos }
12615 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12616 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12617 1.1 christos }
12618 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12619 1.1 christos tmp_condres = CPU (h_nbit);
12620 1.1 christos }
12621 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12622 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12623 1.1 christos }
12624 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12625 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12626 1.1 christos }
12627 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12628 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12629 1.1 christos }
12630 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12631 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12632 1.1 christos }
12633 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12634 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12635 1.1 christos }
12636 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12637 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12638 1.1 christos }
12639 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12640 1.1 christos tmp_condres = 1;
12641 1.1 christos }
12642 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12643 1.1 christos tmp_condres = CPU (h_pbit);
12644 1.1 christos }
12645 1.1 christos ; tmp_condres; });
12646 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_word_pcrel), tmp_truthval);
12647 1.1 christos {
12648 1.1 christos {
12649 1.1 christos BI opval = 0;
12650 1.1 christos CPU (h_xbit) = opval;
12651 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12652 1.1 christos }
12653 1.1 christos {
12654 1.1 christos BI opval = 0;
12655 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12656 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12657 1.1 christos }
12658 1.1 christos }
12659 1.1 christos if (tmp_truthval) {
12660 1.1 christos {
12661 1.1 christos {
12662 1.1 christos USI opval = FLD (i_o_word_pcrel);
12663 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12664 1.1 christos written |= (1 << 8);
12665 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12666 1.1 christos }
12667 1.1 christos }
12668 1.1 christos }
12669 1.1 christos }
12670 1.1 christos
12671 1.1 christos abuf->written = written;
12672 1.1 christos SEM_BRANCH_FINI (vpc);
12673 1.1 christos #undef FLD
12674 1.1 christos }
12675 1.1 christos NEXT (vpc);
12676 1.1 christos
12677 1.1 christos CASE (sem, INSN_BA_W) : /* ba ${o-word-pcrel} */
12678 1.1 christos {
12679 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12680 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12681 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12682 1.1 christos int UNUSED written = 0;
12683 1.1 christos IADDR UNUSED pc = abuf->addr;
12684 1.1 christos SEM_BRANCH_INIT
12685 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12686 1.1 christos
12687 1.1 christos {
12688 1.1 christos {
12689 1.1 christos {
12690 1.1 christos BI opval = 0;
12691 1.1 christos CPU (h_xbit) = opval;
12692 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12693 1.1 christos }
12694 1.1 christos {
12695 1.1 christos BI opval = 0;
12696 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12697 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12698 1.1 christos }
12699 1.1 christos }
12700 1.1 christos {
12701 1.1 christos {
12702 1.1 christos USI opval = FLD (i_o_word_pcrel);
12703 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12704 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12705 1.1 christos }
12706 1.1 christos }
12707 1.1 christos }
12708 1.1 christos
12709 1.1 christos SEM_BRANCH_FINI (vpc);
12710 1.1 christos #undef FLD
12711 1.1 christos }
12712 1.1 christos NEXT (vpc);
12713 1.1 christos
12714 1.1 christos CASE (sem, INSN_JAS_R) : /* jas ${Rs},${Pd} */
12715 1.1 christos {
12716 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12717 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12718 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12719 1.1 christos int UNUSED written = 0;
12720 1.1 christos IADDR UNUSED pc = abuf->addr;
12721 1.1 christos SEM_BRANCH_INIT
12722 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12723 1.1 christos
12724 1.1 christos {
12725 1.1 christos {
12726 1.1 christos {
12727 1.1 christos BI opval = 0;
12728 1.1 christos CPU (h_xbit) = opval;
12729 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12730 1.1 christos }
12731 1.1 christos {
12732 1.1 christos BI opval = 0;
12733 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12734 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12735 1.1 christos }
12736 1.1 christos }
12737 1.1 christos if (ANDIF (EQSI (FLD (f_operand1), 1), EQSI (FLD (f_operand2), 11))) {
12738 1.1 christos cris_flush_simulator_decode_cache (current_cpu, pc);
12739 1.1 christos }
12740 1.1 christos {
12741 1.1 christos {
12742 1.1 christos {
12743 1.1 christos SI opval = ADDSI (pc, 4);
12744 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12745 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12746 1.1 christos }
12747 1.1 christos {
12748 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12749 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12750 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12751 1.1 christos }
12752 1.1 christos }
12753 1.1 christos }
12754 1.1 christos }
12755 1.1 christos
12756 1.1 christos SEM_BRANCH_FINI (vpc);
12757 1.1 christos #undef FLD
12758 1.1 christos }
12759 1.1 christos NEXT (vpc);
12760 1.1 christos
12761 1.1 christos CASE (sem, INSN_JAS_C) : /* jas ${const32},${Pd} */
12762 1.1 christos {
12763 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12764 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12765 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12766 1.1 christos int UNUSED written = 0;
12767 1.1 christos IADDR UNUSED pc = abuf->addr;
12768 1.1 christos SEM_BRANCH_INIT
12769 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12770 1.1 christos
12771 1.1 christos {
12772 1.1 christos {
12773 1.1 christos {
12774 1.1 christos BI opval = 0;
12775 1.1 christos CPU (h_xbit) = opval;
12776 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12777 1.1 christos }
12778 1.1 christos {
12779 1.1 christos BI opval = 0;
12780 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12781 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12782 1.1 christos }
12783 1.1 christos }
12784 1.1 christos {
12785 1.1 christos {
12786 1.1 christos {
12787 1.1 christos SI opval = ADDSI (pc, 8);
12788 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12789 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12790 1.1 christos }
12791 1.1 christos {
12792 1.1 christos USI opval = FLD (f_indir_pc__dword);
12793 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12794 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12795 1.1 christos }
12796 1.1 christos }
12797 1.1 christos }
12798 1.1 christos }
12799 1.1 christos
12800 1.1 christos SEM_BRANCH_FINI (vpc);
12801 1.1 christos #undef FLD
12802 1.1 christos }
12803 1.1 christos NEXT (vpc);
12804 1.1 christos
12805 1.1 christos CASE (sem, INSN_JUMP_P) : /* jump ${Ps} */
12806 1.1 christos {
12807 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12808 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12809 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
12810 1.1 christos int UNUSED written = 0;
12811 1.1 christos IADDR UNUSED pc = abuf->addr;
12812 1.1 christos SEM_BRANCH_INIT
12813 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12814 1.1 christos
12815 1.1 christos {
12816 1.1 christos {
12817 1.1 christos {
12818 1.1 christos BI opval = 0;
12819 1.1 christos CPU (h_xbit) = opval;
12820 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12821 1.1 christos }
12822 1.1 christos {
12823 1.1 christos BI opval = 0;
12824 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12825 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12826 1.1 christos }
12827 1.1 christos }
12828 1.1 christos {
12829 1.1 christos {
12830 1.1 christos USI opval = GET_H_SR (FLD (f_operand2));
12831 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12832 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12833 1.1 christos }
12834 1.1 christos }
12835 1.1 christos }
12836 1.1 christos
12837 1.1 christos SEM_BRANCH_FINI (vpc);
12838 1.1 christos #undef FLD
12839 1.1 christos }
12840 1.1 christos NEXT (vpc);
12841 1.1 christos
12842 1.1 christos CASE (sem, INSN_BAS_C) : /* bas ${const32},${Pd} */
12843 1.1 christos {
12844 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12845 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12846 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12847 1.1 christos int UNUSED written = 0;
12848 1.1 christos IADDR UNUSED pc = abuf->addr;
12849 1.1 christos SEM_BRANCH_INIT
12850 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12851 1.1 christos
12852 1.1 christos {
12853 1.1 christos {
12854 1.1 christos {
12855 1.1 christos BI opval = 0;
12856 1.1 christos CPU (h_xbit) = opval;
12857 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12858 1.1 christos }
12859 1.1 christos {
12860 1.1 christos BI opval = 0;
12861 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12862 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12863 1.1 christos }
12864 1.1 christos }
12865 1.1 christos {
12866 1.1 christos {
12867 1.1 christos {
12868 1.1 christos SI opval = ADDSI (pc, 8);
12869 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12870 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12871 1.1 christos }
12872 1.1 christos {
12873 1.1 christos USI opval = FLD (i_const32_pcrel);
12874 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12875 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12876 1.1 christos }
12877 1.1 christos }
12878 1.1 christos }
12879 1.1 christos }
12880 1.1 christos
12881 1.1 christos SEM_BRANCH_FINI (vpc);
12882 1.1 christos #undef FLD
12883 1.1 christos }
12884 1.1 christos NEXT (vpc);
12885 1.1 christos
12886 1.1 christos CASE (sem, INSN_JASC_R) : /* jasc ${Rs},${Pd} */
12887 1.1 christos {
12888 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12889 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12890 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12891 1.1 christos int UNUSED written = 0;
12892 1.1 christos IADDR UNUSED pc = abuf->addr;
12893 1.1 christos SEM_BRANCH_INIT
12894 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12895 1.1 christos
12896 1.1 christos {
12897 1.1 christos {
12898 1.1 christos {
12899 1.1 christos BI opval = 0;
12900 1.1 christos CPU (h_xbit) = opval;
12901 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12902 1.1 christos }
12903 1.1 christos {
12904 1.1 christos BI opval = 0;
12905 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12906 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12907 1.1 christos }
12908 1.1 christos }
12909 1.1 christos {
12910 1.1 christos {
12911 1.1 christos {
12912 1.1 christos SI opval = ADDSI (pc, 8);
12913 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12914 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12915 1.1 christos }
12916 1.1 christos {
12917 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12918 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12919 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12920 1.1 christos }
12921 1.1 christos }
12922 1.1 christos }
12923 1.1 christos }
12924 1.1 christos
12925 1.1 christos SEM_BRANCH_FINI (vpc);
12926 1.1 christos #undef FLD
12927 1.1 christos }
12928 1.1 christos NEXT (vpc);
12929 1.1 christos
12930 1.1 christos CASE (sem, INSN_JASC_C) : /* jasc ${const32},${Pd} */
12931 1.1 christos {
12932 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12933 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12934 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12935 1.1 christos int UNUSED written = 0;
12936 1.1 christos IADDR UNUSED pc = abuf->addr;
12937 1.1 christos SEM_BRANCH_INIT
12938 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12939 1.1 christos
12940 1.1 christos {
12941 1.1 christos {
12942 1.1 christos {
12943 1.1 christos BI opval = 0;
12944 1.1 christos CPU (h_xbit) = opval;
12945 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12946 1.1 christos }
12947 1.1 christos {
12948 1.1 christos BI opval = 0;
12949 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12950 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12951 1.1 christos }
12952 1.1 christos }
12953 1.1 christos {
12954 1.1 christos {
12955 1.1 christos {
12956 1.1 christos SI opval = ADDSI (pc, 12);
12957 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12958 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12959 1.1 christos }
12960 1.1 christos {
12961 1.1 christos USI opval = FLD (f_indir_pc__dword);
12962 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12963 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12964 1.1 christos }
12965 1.1 christos }
12966 1.1 christos }
12967 1.1 christos }
12968 1.1 christos
12969 1.1 christos SEM_BRANCH_FINI (vpc);
12970 1.1 christos #undef FLD
12971 1.1 christos }
12972 1.1 christos NEXT (vpc);
12973 1.1 christos
12974 1.1 christos CASE (sem, INSN_BASC_C) : /* basc ${const32},${Pd} */
12975 1.1 christos {
12976 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12977 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12978 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12979 1.1 christos int UNUSED written = 0;
12980 1.1 christos IADDR UNUSED pc = abuf->addr;
12981 1.1 christos SEM_BRANCH_INIT
12982 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12983 1.1 christos
12984 1.1 christos {
12985 1.1 christos {
12986 1.1 christos {
12987 1.1 christos BI opval = 0;
12988 1.1 christos CPU (h_xbit) = opval;
12989 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12990 1.1 christos }
12991 1.1 christos {
12992 1.1 christos BI opval = 0;
12993 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12994 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12995 1.1 christos }
12996 1.1 christos }
12997 1.1 christos {
12998 1.1 christos {
12999 1.1 christos {
13000 1.1 christos SI opval = ADDSI (pc, 12);
13001 1.1 christos SET_H_SR (FLD (f_operand2), opval);
13002 1.1 christos TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
13003 1.1 christos }
13004 1.1 christos {
13005 1.1 christos USI opval = FLD (i_const32_pcrel);
13006 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13007 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13008 1.1 christos }
13009 1.1 christos }
13010 1.1 christos }
13011 1.1 christos }
13012 1.1 christos
13013 1.1 christos SEM_BRANCH_FINI (vpc);
13014 1.1 christos #undef FLD
13015 1.1 christos }
13016 1.1 christos NEXT (vpc);
13017 1.1 christos
13018 1.1 christos CASE (sem, INSN_BREAK) : /* break $n */
13019 1.1 christos {
13020 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13021 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13022 1.1 christos #define FLD(f) abuf->fields.sfmt_break.f
13023 1.1 christos int UNUSED written = 0;
13024 1.1 christos IADDR UNUSED pc = abuf->addr;
13025 1.1 christos SEM_BRANCH_INIT
13026 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13027 1.1 christos
13028 1.1 christos {
13029 1.1 christos {
13030 1.1 christos {
13031 1.1 christos BI opval = 0;
13032 1.1 christos CPU (h_xbit) = opval;
13033 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13034 1.1 christos }
13035 1.1 christos {
13036 1.1 christos BI opval = 0;
13037 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13038 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13039 1.1 christos }
13040 1.1 christos }
13041 1.1 christos {
13042 1.1 christos USI opval = crisv32f_break_handler (current_cpu, FLD (f_u4), pc);
13043 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13044 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13045 1.1 christos }
13046 1.1 christos }
13047 1.1 christos
13048 1.1 christos SEM_BRANCH_FINI (vpc);
13049 1.1 christos #undef FLD
13050 1.1 christos }
13051 1.1 christos NEXT (vpc);
13052 1.1 christos
13053 1.1 christos CASE (sem, INSN_BOUND_R_B_R) : /* bound-r.b ${Rs},${Rd} */
13054 1.1 christos {
13055 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13056 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13057 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13058 1.1 christos int UNUSED written = 0;
13059 1.1 christos IADDR UNUSED pc = abuf->addr;
13060 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13061 1.1 christos
13062 1.1 christos {
13063 1.1 christos SI tmp_tmpopd;
13064 1.1 christos SI tmp_tmpops;
13065 1.1 christos SI tmp_newval;
13066 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
13067 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13068 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13069 1.1 christos {
13070 1.1 christos SI opval = tmp_newval;
13071 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13072 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13073 1.1 christos }
13074 1.1 christos {
13075 1.1 christos {
13076 1.1 christos BI opval = LTSI (tmp_newval, 0);
13077 1.1 christos CPU (h_nbit) = opval;
13078 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13079 1.1 christos }
13080 1.1 christos {
13081 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13082 1.1 christos CPU (h_zbit) = opval;
13083 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13084 1.1 christos }
13085 1.1 christos SET_H_CBIT_MOVE (0);
13086 1.1 christos SET_H_VBIT_MOVE (0);
13087 1.1 christos {
13088 1.1 christos {
13089 1.1 christos BI opval = 0;
13090 1.1 christos CPU (h_xbit) = opval;
13091 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13092 1.1 christos }
13093 1.1 christos {
13094 1.1 christos BI opval = 0;
13095 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13096 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13097 1.1 christos }
13098 1.1 christos }
13099 1.1 christos }
13100 1.1 christos }
13101 1.1 christos
13102 1.1 christos #undef FLD
13103 1.1 christos }
13104 1.1 christos NEXT (vpc);
13105 1.1 christos
13106 1.1 christos CASE (sem, INSN_BOUND_R_W_R) : /* bound-r.w ${Rs},${Rd} */
13107 1.1 christos {
13108 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13109 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13110 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13111 1.1 christos int UNUSED written = 0;
13112 1.1 christos IADDR UNUSED pc = abuf->addr;
13113 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13114 1.1 christos
13115 1.1 christos {
13116 1.1 christos SI tmp_tmpopd;
13117 1.1 christos SI tmp_tmpops;
13118 1.1 christos SI tmp_newval;
13119 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
13120 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13121 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13122 1.1 christos {
13123 1.1 christos SI opval = tmp_newval;
13124 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13125 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13126 1.1 christos }
13127 1.1 christos {
13128 1.1 christos {
13129 1.1 christos BI opval = LTSI (tmp_newval, 0);
13130 1.1 christos CPU (h_nbit) = opval;
13131 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13132 1.1 christos }
13133 1.1 christos {
13134 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13135 1.1 christos CPU (h_zbit) = opval;
13136 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13137 1.1 christos }
13138 1.1 christos SET_H_CBIT_MOVE (0);
13139 1.1 christos SET_H_VBIT_MOVE (0);
13140 1.1 christos {
13141 1.1 christos {
13142 1.1 christos BI opval = 0;
13143 1.1 christos CPU (h_xbit) = opval;
13144 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13145 1.1 christos }
13146 1.1 christos {
13147 1.1 christos BI opval = 0;
13148 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13149 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13150 1.1 christos }
13151 1.1 christos }
13152 1.1 christos }
13153 1.1 christos }
13154 1.1 christos
13155 1.1 christos #undef FLD
13156 1.1 christos }
13157 1.1 christos NEXT (vpc);
13158 1.1 christos
13159 1.1 christos CASE (sem, INSN_BOUND_R_D_R) : /* bound-r.d ${Rs},${Rd} */
13160 1.1 christos {
13161 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13162 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13163 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13164 1.1 christos int UNUSED written = 0;
13165 1.1 christos IADDR UNUSED pc = abuf->addr;
13166 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13167 1.1 christos
13168 1.1 christos {
13169 1.1 christos SI tmp_tmpopd;
13170 1.1 christos SI tmp_tmpops;
13171 1.1 christos SI tmp_newval;
13172 1.1 christos tmp_tmpops = TRUNCSISI (GET_H_GR (FLD (f_operand1)));
13173 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13174 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13175 1.1 christos {
13176 1.1 christos SI opval = tmp_newval;
13177 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13178 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13179 1.1 christos }
13180 1.1 christos {
13181 1.1 christos {
13182 1.1 christos BI opval = LTSI (tmp_newval, 0);
13183 1.1 christos CPU (h_nbit) = opval;
13184 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13185 1.1 christos }
13186 1.1 christos {
13187 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13188 1.1 christos CPU (h_zbit) = opval;
13189 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13190 1.1 christos }
13191 1.1 christos SET_H_CBIT_MOVE (0);
13192 1.1 christos SET_H_VBIT_MOVE (0);
13193 1.1 christos {
13194 1.1 christos {
13195 1.1 christos BI opval = 0;
13196 1.1 christos CPU (h_xbit) = opval;
13197 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13198 1.1 christos }
13199 1.1 christos {
13200 1.1 christos BI opval = 0;
13201 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13202 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13203 1.1 christos }
13204 1.1 christos }
13205 1.1 christos }
13206 1.1 christos }
13207 1.1 christos
13208 1.1 christos #undef FLD
13209 1.1 christos }
13210 1.1 christos NEXT (vpc);
13211 1.1 christos
13212 1.1 christos CASE (sem, INSN_BOUND_CB) : /* bound.b [PC+],${Rd} */
13213 1.1 christos {
13214 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13215 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13216 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13217 1.1 christos int UNUSED written = 0;
13218 1.1 christos IADDR UNUSED pc = abuf->addr;
13219 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13220 1.1 christos
13221 1.1 christos {
13222 1.1 christos SI tmp_tmpopd;
13223 1.1 christos SI tmp_tmpops;
13224 1.1 christos SI tmp_newval;
13225 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
13226 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13227 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13228 1.1 christos {
13229 1.1 christos SI opval = tmp_newval;
13230 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13231 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13232 1.1 christos }
13233 1.1 christos {
13234 1.1 christos {
13235 1.1 christos BI opval = LTSI (tmp_newval, 0);
13236 1.1 christos CPU (h_nbit) = opval;
13237 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13238 1.1 christos }
13239 1.1 christos {
13240 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13241 1.1 christos CPU (h_zbit) = opval;
13242 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13243 1.1 christos }
13244 1.1 christos SET_H_CBIT_MOVE (0);
13245 1.1 christos SET_H_VBIT_MOVE (0);
13246 1.1 christos {
13247 1.1 christos {
13248 1.1 christos BI opval = 0;
13249 1.1 christos CPU (h_xbit) = opval;
13250 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13251 1.1 christos }
13252 1.1 christos {
13253 1.1 christos BI opval = 0;
13254 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13255 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13256 1.1 christos }
13257 1.1 christos }
13258 1.1 christos }
13259 1.1 christos }
13260 1.1 christos
13261 1.1 christos #undef FLD
13262 1.1 christos }
13263 1.1 christos NEXT (vpc);
13264 1.1 christos
13265 1.1 christos CASE (sem, INSN_BOUND_CW) : /* bound.w [PC+],${Rd} */
13266 1.1 christos {
13267 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13268 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13269 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13270 1.1 christos int UNUSED written = 0;
13271 1.1 christos IADDR UNUSED pc = abuf->addr;
13272 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13273 1.1 christos
13274 1.1 christos {
13275 1.1 christos SI tmp_tmpopd;
13276 1.1 christos SI tmp_tmpops;
13277 1.1 christos SI tmp_newval;
13278 1.1 christos tmp_tmpops = ZEXTSISI (FLD (f_indir_pc__word));
13279 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13280 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13281 1.1 christos {
13282 1.1 christos SI opval = tmp_newval;
13283 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13284 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13285 1.1 christos }
13286 1.1 christos {
13287 1.1 christos {
13288 1.1 christos BI opval = LTSI (tmp_newval, 0);
13289 1.1 christos CPU (h_nbit) = opval;
13290 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13291 1.1 christos }
13292 1.1 christos {
13293 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13294 1.1 christos CPU (h_zbit) = opval;
13295 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13296 1.1 christos }
13297 1.1 christos SET_H_CBIT_MOVE (0);
13298 1.1 christos SET_H_VBIT_MOVE (0);
13299 1.1 christos {
13300 1.1 christos {
13301 1.1 christos BI opval = 0;
13302 1.1 christos CPU (h_xbit) = opval;
13303 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13304 1.1 christos }
13305 1.1 christos {
13306 1.1 christos BI opval = 0;
13307 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13308 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13309 1.1 christos }
13310 1.1 christos }
13311 1.1 christos }
13312 1.1 christos }
13313 1.1 christos
13314 1.1 christos #undef FLD
13315 1.1 christos }
13316 1.1 christos NEXT (vpc);
13317 1.1 christos
13318 1.1 christos CASE (sem, INSN_BOUND_CD) : /* bound.d [PC+],${Rd} */
13319 1.1 christos {
13320 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13321 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13322 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13323 1.1 christos int UNUSED written = 0;
13324 1.1 christos IADDR UNUSED pc = abuf->addr;
13325 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13326 1.1 christos
13327 1.1 christos {
13328 1.1 christos SI tmp_tmpopd;
13329 1.1 christos SI tmp_tmpops;
13330 1.1 christos SI tmp_newval;
13331 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
13332 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13333 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13334 1.1 christos {
13335 1.1 christos SI opval = tmp_newval;
13336 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13337 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13338 1.1 christos }
13339 1.1 christos {
13340 1.1 christos {
13341 1.1 christos BI opval = LTSI (tmp_newval, 0);
13342 1.1 christos CPU (h_nbit) = opval;
13343 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13344 1.1 christos }
13345 1.1 christos {
13346 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13347 1.1 christos CPU (h_zbit) = opval;
13348 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13349 1.1 christos }
13350 1.1 christos SET_H_CBIT_MOVE (0);
13351 1.1 christos SET_H_VBIT_MOVE (0);
13352 1.1 christos {
13353 1.1 christos {
13354 1.1 christos BI opval = 0;
13355 1.1 christos CPU (h_xbit) = opval;
13356 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13357 1.1 christos }
13358 1.1 christos {
13359 1.1 christos BI opval = 0;
13360 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13361 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13362 1.1 christos }
13363 1.1 christos }
13364 1.1 christos }
13365 1.1 christos }
13366 1.1 christos
13367 1.1 christos #undef FLD
13368 1.1 christos }
13369 1.1 christos NEXT (vpc);
13370 1.1 christos
13371 1.1 christos CASE (sem, INSN_SCC) : /* s${cc} ${Rd-sfield} */
13372 1.1 christos {
13373 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13374 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13375 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
13376 1.1 christos int UNUSED written = 0;
13377 1.1 christos IADDR UNUSED pc = abuf->addr;
13378 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13379 1.1 christos
13380 1.1 christos {
13381 1.1 christos BI tmp_truthval;
13382 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
13383 1.1 christos BI tmp_condres;
13384 1.1 christos tmp_tmpcond = FLD (f_operand2);
13385 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
13386 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
13387 1.1 christos }
13388 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
13389 1.1 christos tmp_condres = CPU (h_cbit);
13390 1.1 christos }
13391 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
13392 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
13393 1.1 christos }
13394 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
13395 1.1 christos tmp_condres = CPU (h_zbit);
13396 1.1 christos }
13397 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
13398 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
13399 1.1 christos }
13400 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
13401 1.1 christos tmp_condres = CPU (h_vbit);
13402 1.1 christos }
13403 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
13404 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
13405 1.1 christos }
13406 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
13407 1.1 christos tmp_condres = CPU (h_nbit);
13408 1.1 christos }
13409 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
13410 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
13411 1.1 christos }
13412 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
13413 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
13414 1.1 christos }
13415 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
13416 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
13417 1.1 christos }
13418 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
13419 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
13420 1.1 christos }
13421 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
13422 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
13423 1.1 christos }
13424 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
13425 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
13426 1.1 christos }
13427 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
13428 1.1 christos tmp_condres = 1;
13429 1.1 christos }
13430 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
13431 1.1 christos tmp_condres = CPU (h_pbit);
13432 1.1 christos }
13433 1.1 christos ; tmp_condres; });
13434 1.1 christos {
13435 1.1 christos SI opval = ZEXTBISI (tmp_truthval);
13436 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13437 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13438 1.1 christos }
13439 1.1 christos {
13440 1.1 christos {
13441 1.1 christos BI opval = 0;
13442 1.1 christos CPU (h_xbit) = opval;
13443 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13444 1.1 christos }
13445 1.1 christos {
13446 1.1 christos BI opval = 0;
13447 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13448 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13449 1.1 christos }
13450 1.1 christos }
13451 1.1 christos }
13452 1.1 christos
13453 1.1 christos #undef FLD
13454 1.1 christos }
13455 1.1 christos NEXT (vpc);
13456 1.1 christos
13457 1.1 christos CASE (sem, INSN_LZ) : /* lz ${Rs},${Rd} */
13458 1.1 christos {
13459 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13460 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13461 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13462 1.1 christos int UNUSED written = 0;
13463 1.1 christos IADDR UNUSED pc = abuf->addr;
13464 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13465 1.1 christos
13466 1.1 christos {
13467 1.1 christos SI tmp_tmpd;
13468 1.1 christos SI tmp_tmp;
13469 1.1 christos tmp_tmp = GET_H_GR (FLD (f_operand1));
13470 1.1 christos tmp_tmpd = 0;
13471 1.1 christos {
13472 1.1 christos if (GESI (tmp_tmp, 0)) {
13473 1.1 christos {
13474 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13475 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13476 1.1 christos }
13477 1.1 christos }
13478 1.1 christos if (GESI (tmp_tmp, 0)) {
13479 1.1 christos {
13480 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13481 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13482 1.1 christos }
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 }
13665 1.1 christos {
13666 1.1 christos SI opval = tmp_tmpd;
13667 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13668 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13669 1.1 christos }
13670 1.1 christos {
13671 1.1 christos {
13672 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
13673 1.1 christos CPU (h_nbit) = opval;
13674 1.1 christos TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13675 1.1 christos }
13676 1.1 christos {
13677 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13678 1.1 christos CPU (h_zbit) = opval;
13679 1.1 christos TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13680 1.1 christos }
13681 1.1 christos SET_H_CBIT_MOVE (0);
13682 1.1 christos SET_H_VBIT_MOVE (0);
13683 1.1 christos {
13684 1.1 christos {
13685 1.1 christos BI opval = 0;
13686 1.1 christos CPU (h_xbit) = opval;
13687 1.1 christos TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13688 1.1 christos }
13689 1.1 christos {
13690 1.1 christos BI opval = 0;
13691 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13692 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13693 1.1 christos }
13694 1.1 christos }
13695 1.1 christos }
13696 1.1 christos }
13697 1.1 christos
13698 1.1 christos #undef FLD
13699 1.1 christos }
13700 1.1 christos NEXT (vpc);
13701 1.1 christos
13702 1.1 christos CASE (sem, INSN_ADDOQ) : /* addoq $o,$Rs,ACR */
13703 1.1 christos {
13704 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13705 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13706 1.1 christos #define FLD(f) abuf->fields.sfmt_addoq.f
13707 1.1 christos int UNUSED written = 0;
13708 1.1 christos IADDR UNUSED pc = abuf->addr;
13709 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13710 1.1 christos
13711 1.1 christos {
13712 1.1 christos {
13713 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s8));
13714 1.1 christos SET_H_PREFIXREG_V32 (opval);
13715 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13716 1.1 christos }
13717 1.1 christos {
13718 1.1 christos BI opval = 1;
13719 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13720 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13721 1.1 christos }
13722 1.1 christos }
13723 1.1 christos
13724 1.1 christos #undef FLD
13725 1.1 christos }
13726 1.1 christos NEXT (vpc);
13727 1.1 christos
13728 1.1 christos CASE (sem, INSN_ADDO_M_B_M) : /* addo-m.b [${Rs}${inc}],$Rd,ACR */
13729 1.1 christos {
13730 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13731 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13732 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13733 1.1 christos int UNUSED written = 0;
13734 1.1 christos IADDR UNUSED pc = abuf->addr;
13735 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13736 1.1 christos
13737 1.1 christos {
13738 1.1 christos QI tmp_tmps;
13739 1.1 christos tmp_tmps = ({ SI tmp_addr;
13740 1.1 christos QI tmp_tmp_mem;
13741 1.1 christos BI tmp_postinc;
13742 1.1 christos tmp_postinc = FLD (f_memmode);
13743 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13744 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
13745 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13746 1.1 christos {
13747 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13748 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
13749 1.1 christos }
13750 1.1 christos {
13751 1.1 christos SI opval = tmp_addr;
13752 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13753 1.1 christos written |= (1 << 6);
13754 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13755 1.1 christos }
13756 1.1 christos }
13757 1.1 christos }
13758 1.1 christos ; tmp_tmp_mem; });
13759 1.1 christos {
13760 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (tmp_tmps));
13761 1.1 christos SET_H_PREFIXREG_V32 (opval);
13762 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13763 1.1 christos }
13764 1.1 christos {
13765 1.1 christos BI opval = 1;
13766 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13767 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13768 1.1 christos }
13769 1.1 christos }
13770 1.1 christos
13771 1.1 christos abuf->written = written;
13772 1.1 christos #undef FLD
13773 1.1 christos }
13774 1.1 christos NEXT (vpc);
13775 1.1 christos
13776 1.1 christos CASE (sem, INSN_ADDO_M_W_M) : /* addo-m.w [${Rs}${inc}],$Rd,ACR */
13777 1.1 christos {
13778 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13779 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13780 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13781 1.1 christos int UNUSED written = 0;
13782 1.1 christos IADDR UNUSED pc = abuf->addr;
13783 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13784 1.1 christos
13785 1.1 christos {
13786 1.1 christos HI tmp_tmps;
13787 1.1 christos tmp_tmps = ({ SI tmp_addr;
13788 1.1 christos HI tmp_tmp_mem;
13789 1.1 christos BI tmp_postinc;
13790 1.1 christos tmp_postinc = FLD (f_memmode);
13791 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13792 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
13793 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13794 1.1 christos {
13795 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13796 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
13797 1.1 christos }
13798 1.1 christos {
13799 1.1 christos SI opval = tmp_addr;
13800 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13801 1.1 christos written |= (1 << 6);
13802 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13803 1.1 christos }
13804 1.1 christos }
13805 1.1 christos }
13806 1.1 christos ; tmp_tmp_mem; });
13807 1.1 christos {
13808 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (tmp_tmps));
13809 1.1 christos SET_H_PREFIXREG_V32 (opval);
13810 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13811 1.1 christos }
13812 1.1 christos {
13813 1.1 christos BI opval = 1;
13814 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13815 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13816 1.1 christos }
13817 1.1 christos }
13818 1.1 christos
13819 1.1 christos abuf->written = written;
13820 1.1 christos #undef FLD
13821 1.1 christos }
13822 1.1 christos NEXT (vpc);
13823 1.1 christos
13824 1.1 christos CASE (sem, INSN_ADDO_M_D_M) : /* addo-m.d [${Rs}${inc}],$Rd,ACR */
13825 1.1 christos {
13826 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13827 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13828 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13829 1.1 christos int UNUSED written = 0;
13830 1.1 christos IADDR UNUSED pc = abuf->addr;
13831 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13832 1.1 christos
13833 1.1 christos {
13834 1.1 christos SI tmp_tmps;
13835 1.1 christos tmp_tmps = ({ SI tmp_addr;
13836 1.1 christos SI tmp_tmp_mem;
13837 1.1 christos BI tmp_postinc;
13838 1.1 christos tmp_postinc = FLD (f_memmode);
13839 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13840 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
13841 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13842 1.1 christos {
13843 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13844 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
13845 1.1 christos }
13846 1.1 christos {
13847 1.1 christos SI opval = tmp_addr;
13848 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13849 1.1 christos written |= (1 << 6);
13850 1.1 christos TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13851 1.1 christos }
13852 1.1 christos }
13853 1.1 christos }
13854 1.1 christos ; tmp_tmp_mem; });
13855 1.1 christos {
13856 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), tmp_tmps);
13857 1.1 christos SET_H_PREFIXREG_V32 (opval);
13858 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13859 1.1 christos }
13860 1.1 christos {
13861 1.1 christos BI opval = 1;
13862 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13863 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13864 1.1 christos }
13865 1.1 christos }
13866 1.1 christos
13867 1.1 christos abuf->written = written;
13868 1.1 christos #undef FLD
13869 1.1 christos }
13870 1.1 christos NEXT (vpc);
13871 1.1 christos
13872 1.1 christos CASE (sem, INSN_ADDO_CB) : /* addo.b [PC+],$Rd,ACR */
13873 1.1 christos {
13874 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13875 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13876 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13877 1.1 christos int UNUSED written = 0;
13878 1.1 christos IADDR UNUSED pc = abuf->addr;
13879 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13880 1.1 christos
13881 1.1 christos {
13882 1.1 christos {
13883 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))));
13884 1.1 christos SET_H_PREFIXREG_V32 (opval);
13885 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13886 1.1 christos }
13887 1.1 christos {
13888 1.1 christos BI opval = 1;
13889 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13890 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13891 1.1 christos }
13892 1.1 christos }
13893 1.1 christos
13894 1.1 christos #undef FLD
13895 1.1 christos }
13896 1.1 christos NEXT (vpc);
13897 1.1 christos
13898 1.1 christos CASE (sem, INSN_ADDO_CW) : /* addo.w [PC+],$Rd,ACR */
13899 1.1 christos {
13900 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13901 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13902 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13903 1.1 christos int UNUSED written = 0;
13904 1.1 christos IADDR UNUSED pc = abuf->addr;
13905 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13906 1.1 christos
13907 1.1 christos {
13908 1.1 christos {
13909 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))));
13910 1.1 christos SET_H_PREFIXREG_V32 (opval);
13911 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13912 1.1 christos }
13913 1.1 christos {
13914 1.1 christos BI opval = 1;
13915 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13916 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13917 1.1 christos }
13918 1.1 christos }
13919 1.1 christos
13920 1.1 christos #undef FLD
13921 1.1 christos }
13922 1.1 christos NEXT (vpc);
13923 1.1 christos
13924 1.1 christos CASE (sem, INSN_ADDO_CD) : /* addo.d [PC+],$Rd,ACR */
13925 1.1 christos {
13926 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13927 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13928 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13929 1.1 christos int UNUSED written = 0;
13930 1.1 christos IADDR UNUSED pc = abuf->addr;
13931 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13932 1.1 christos
13933 1.1 christos {
13934 1.1 christos {
13935 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
13936 1.1 christos SET_H_PREFIXREG_V32 (opval);
13937 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13938 1.1 christos }
13939 1.1 christos {
13940 1.1 christos BI opval = 1;
13941 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13942 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13943 1.1 christos }
13944 1.1 christos }
13945 1.1 christos
13946 1.1 christos #undef FLD
13947 1.1 christos }
13948 1.1 christos NEXT (vpc);
13949 1.1 christos
13950 1.1 christos CASE (sem, INSN_ADDI_ACR_B_R) : /* addi-acr.b ${Rs-dfield}.m,${Rd-sfield},ACR */
13951 1.1 christos {
13952 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13953 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13954 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13955 1.1 christos int UNUSED written = 0;
13956 1.1 christos IADDR UNUSED pc = abuf->addr;
13957 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13958 1.1 christos
13959 1.1 christos {
13960 1.1 christos {
13961 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
13962 1.1 christos SET_H_PREFIXREG_V32 (opval);
13963 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13964 1.1 christos }
13965 1.1 christos {
13966 1.1 christos BI opval = 1;
13967 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13968 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13969 1.1 christos }
13970 1.1 christos }
13971 1.1 christos
13972 1.1 christos #undef FLD
13973 1.1 christos }
13974 1.1 christos NEXT (vpc);
13975 1.1 christos
13976 1.1 christos CASE (sem, INSN_ADDI_ACR_W_R) : /* addi-acr.w ${Rs-dfield}.m,${Rd-sfield},ACR */
13977 1.1 christos {
13978 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13979 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13980 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13981 1.1 christos int UNUSED written = 0;
13982 1.1 christos IADDR UNUSED pc = abuf->addr;
13983 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13984 1.1 christos
13985 1.1 christos {
13986 1.1 christos {
13987 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
13988 1.1 christos SET_H_PREFIXREG_V32 (opval);
13989 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13990 1.1 christos }
13991 1.1 christos {
13992 1.1 christos BI opval = 1;
13993 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13994 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13995 1.1 christos }
13996 1.1 christos }
13997 1.1 christos
13998 1.1 christos #undef FLD
13999 1.1 christos }
14000 1.1 christos NEXT (vpc);
14001 1.1 christos
14002 1.1 christos CASE (sem, INSN_ADDI_ACR_D_R) : /* addi-acr.d ${Rs-dfield}.m,${Rd-sfield},ACR */
14003 1.1 christos {
14004 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14005 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14006 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
14007 1.1 christos int UNUSED written = 0;
14008 1.1 christos IADDR UNUSED pc = abuf->addr;
14009 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14010 1.1 christos
14011 1.1 christos {
14012 1.1 christos {
14013 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
14014 1.1 christos SET_H_PREFIXREG_V32 (opval);
14015 1.1 christos TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
14016 1.1 christos }
14017 1.1 christos {
14018 1.1 christos BI opval = 1;
14019 1.1 christos SET_H_INSN_PREFIXED_P (opval);
14020 1.1 christos TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
14021 1.1 christos }
14022 1.1 christos }
14023 1.1 christos
14024 1.1 christos #undef FLD
14025 1.1 christos }
14026 1.1 christos NEXT (vpc);
14027 1.1 christos
14028 1.1 christos CASE (sem, INSN_FIDXI) : /* fidxi [$Rs] */
14029 1.1 christos {
14030 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14031 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14032 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14033 1.1 christos int UNUSED written = 0;
14034 1.1 christos IADDR UNUSED pc = abuf->addr;
14035 1.1 christos SEM_BRANCH_INIT
14036 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14037 1.1 christos
14038 1.1 christos {
14039 1.1 christos USI opval = crisv32f_fidxi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14040 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14041 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14042 1.1 christos }
14043 1.1 christos
14044 1.1 christos SEM_BRANCH_FINI (vpc);
14045 1.1 christos #undef FLD
14046 1.1 christos }
14047 1.1 christos NEXT (vpc);
14048 1.1 christos
14049 1.1 christos CASE (sem, INSN_FTAGI) : /* fidxi [$Rs] */
14050 1.1 christos {
14051 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14052 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14053 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14054 1.1 christos int UNUSED written = 0;
14055 1.1 christos IADDR UNUSED pc = abuf->addr;
14056 1.1 christos SEM_BRANCH_INIT
14057 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14058 1.1 christos
14059 1.1 christos {
14060 1.1 christos USI opval = crisv32f_ftagi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14061 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14062 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14063 1.1 christos }
14064 1.1 christos
14065 1.1 christos SEM_BRANCH_FINI (vpc);
14066 1.1 christos #undef FLD
14067 1.1 christos }
14068 1.1 christos NEXT (vpc);
14069 1.1 christos
14070 1.1 christos CASE (sem, INSN_FIDXD) : /* fidxd [$Rs] */
14071 1.1 christos {
14072 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14073 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14074 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14075 1.1 christos int UNUSED written = 0;
14076 1.1 christos IADDR UNUSED pc = abuf->addr;
14077 1.1 christos SEM_BRANCH_INIT
14078 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14079 1.1 christos
14080 1.1 christos {
14081 1.1 christos USI opval = crisv32f_fidxd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14082 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14083 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14084 1.1 christos }
14085 1.1 christos
14086 1.1 christos SEM_BRANCH_FINI (vpc);
14087 1.1 christos #undef FLD
14088 1.1 christos }
14089 1.1 christos NEXT (vpc);
14090 1.1 christos
14091 1.1 christos CASE (sem, INSN_FTAGD) : /* ftagd [$Rs] */
14092 1.1 christos {
14093 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14094 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14095 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14096 1.1 christos int UNUSED written = 0;
14097 1.1 christos IADDR UNUSED pc = abuf->addr;
14098 1.1 christos SEM_BRANCH_INIT
14099 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14100 1.1 christos
14101 1.1 christos {
14102 1.1 christos USI opval = crisv32f_ftagd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14103 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14104 1.1 christos TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14105 1.1 christos }
14106 1.1 christos
14107 1.1 christos SEM_BRANCH_FINI (vpc);
14108 1.1 christos #undef FLD
14109 1.1 christos }
14110 1.1 christos NEXT (vpc);
14111 1.1 christos
14112 1.1 christos
14113 1.1 christos }
14114 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */
14115 1.1 christos
14116 1.1 christos /* At this point `vpc' contains the next insn to execute. */
14117 1.1 christos }
14118 1.1 christos
14119 1.1 christos #undef DEFINE_SWITCH
14120 1.1 christos #endif /* DEFINE_SWITCH */
14121