semcrisv32f-switch.c revision 1.1.1.8 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.1.8 christos Copyright 1996-2019 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.1.2 christos with this program; if not, see <http://www.gnu.org/licenses/>.
21 1.1 christos
22 1.1 christos */
23 1.1 christos
24 1.1 christos #ifdef DEFINE_LABELS
25 1.1 christos
26 1.1 christos /* The labels have the case they have because the enum of insn types
27 1.1 christos is all uppercase and in the non-stdc case the insn symbol is built
28 1.1 christos into the enum name. */
29 1.1 christos
30 1.1 christos static struct {
31 1.1 christos int index;
32 1.1 christos void *label;
33 1.1 christos } labels[] = {
34 1.1 christos { CRISV32F_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
35 1.1 christos { CRISV32F_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
36 1.1 christos { CRISV32F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
37 1.1 christos { CRISV32F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
38 1.1 christos { CRISV32F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
39 1.1 christos { CRISV32F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
40 1.1 christos { CRISV32F_INSN_MOVE_B_R, && case_sem_INSN_MOVE_B_R },
41 1.1 christos { CRISV32F_INSN_MOVE_W_R, && case_sem_INSN_MOVE_W_R },
42 1.1 christos { CRISV32F_INSN_MOVE_D_R, && case_sem_INSN_MOVE_D_R },
43 1.1 christos { CRISV32F_INSN_MOVEQ, && case_sem_INSN_MOVEQ },
44 1.1 christos { CRISV32F_INSN_MOVS_B_R, && case_sem_INSN_MOVS_B_R },
45 1.1 christos { CRISV32F_INSN_MOVS_W_R, && case_sem_INSN_MOVS_W_R },
46 1.1 christos { CRISV32F_INSN_MOVU_B_R, && case_sem_INSN_MOVU_B_R },
47 1.1 christos { CRISV32F_INSN_MOVU_W_R, && case_sem_INSN_MOVU_W_R },
48 1.1 christos { CRISV32F_INSN_MOVECBR, && case_sem_INSN_MOVECBR },
49 1.1 christos { CRISV32F_INSN_MOVECWR, && case_sem_INSN_MOVECWR },
50 1.1 christos { CRISV32F_INSN_MOVECDR, && case_sem_INSN_MOVECDR },
51 1.1 christos { CRISV32F_INSN_MOVSCBR, && case_sem_INSN_MOVSCBR },
52 1.1 christos { CRISV32F_INSN_MOVSCWR, && case_sem_INSN_MOVSCWR },
53 1.1 christos { CRISV32F_INSN_MOVUCBR, && case_sem_INSN_MOVUCBR },
54 1.1 christos { CRISV32F_INSN_MOVUCWR, && case_sem_INSN_MOVUCWR },
55 1.1 christos { CRISV32F_INSN_ADDQ, && case_sem_INSN_ADDQ },
56 1.1 christos { CRISV32F_INSN_SUBQ, && case_sem_INSN_SUBQ },
57 1.1 christos { CRISV32F_INSN_CMP_R_B_R, && case_sem_INSN_CMP_R_B_R },
58 1.1 christos { CRISV32F_INSN_CMP_R_W_R, && case_sem_INSN_CMP_R_W_R },
59 1.1 christos { CRISV32F_INSN_CMP_R_D_R, && case_sem_INSN_CMP_R_D_R },
60 1.1 christos { CRISV32F_INSN_CMP_M_B_M, && case_sem_INSN_CMP_M_B_M },
61 1.1 christos { CRISV32F_INSN_CMP_M_W_M, && case_sem_INSN_CMP_M_W_M },
62 1.1 christos { CRISV32F_INSN_CMP_M_D_M, && case_sem_INSN_CMP_M_D_M },
63 1.1 christos { CRISV32F_INSN_CMPCBR, && case_sem_INSN_CMPCBR },
64 1.1 christos { CRISV32F_INSN_CMPCWR, && case_sem_INSN_CMPCWR },
65 1.1 christos { CRISV32F_INSN_CMPCDR, && case_sem_INSN_CMPCDR },
66 1.1 christos { CRISV32F_INSN_CMPQ, && case_sem_INSN_CMPQ },
67 1.1 christos { CRISV32F_INSN_CMPS_M_B_M, && case_sem_INSN_CMPS_M_B_M },
68 1.1 christos { CRISV32F_INSN_CMPS_M_W_M, && case_sem_INSN_CMPS_M_W_M },
69 1.1 christos { CRISV32F_INSN_CMPSCBR, && case_sem_INSN_CMPSCBR },
70 1.1 christos { CRISV32F_INSN_CMPSCWR, && case_sem_INSN_CMPSCWR },
71 1.1 christos { CRISV32F_INSN_CMPU_M_B_M, && case_sem_INSN_CMPU_M_B_M },
72 1.1 christos { CRISV32F_INSN_CMPU_M_W_M, && case_sem_INSN_CMPU_M_W_M },
73 1.1 christos { CRISV32F_INSN_CMPUCBR, && case_sem_INSN_CMPUCBR },
74 1.1 christos { CRISV32F_INSN_CMPUCWR, && case_sem_INSN_CMPUCWR },
75 1.1 christos { CRISV32F_INSN_MOVE_M_B_M, && case_sem_INSN_MOVE_M_B_M },
76 1.1 christos { CRISV32F_INSN_MOVE_M_W_M, && case_sem_INSN_MOVE_M_W_M },
77 1.1 christos { CRISV32F_INSN_MOVE_M_D_M, && case_sem_INSN_MOVE_M_D_M },
78 1.1 christos { CRISV32F_INSN_MOVS_M_B_M, && case_sem_INSN_MOVS_M_B_M },
79 1.1 christos { CRISV32F_INSN_MOVS_M_W_M, && case_sem_INSN_MOVS_M_W_M },
80 1.1 christos { CRISV32F_INSN_MOVU_M_B_M, && case_sem_INSN_MOVU_M_B_M },
81 1.1 christos { CRISV32F_INSN_MOVU_M_W_M, && case_sem_INSN_MOVU_M_W_M },
82 1.1 christos { CRISV32F_INSN_MOVE_R_SPRV32, && case_sem_INSN_MOVE_R_SPRV32 },
83 1.1 christos { CRISV32F_INSN_MOVE_SPR_RV32, && case_sem_INSN_MOVE_SPR_RV32 },
84 1.1 christos { CRISV32F_INSN_MOVE_M_SPRV32, && case_sem_INSN_MOVE_M_SPRV32 },
85 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P2, && case_sem_INSN_MOVE_C_SPRV32_P2 },
86 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P3, && case_sem_INSN_MOVE_C_SPRV32_P3 },
87 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P5, && case_sem_INSN_MOVE_C_SPRV32_P5 },
88 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P6, && case_sem_INSN_MOVE_C_SPRV32_P6 },
89 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P7, && case_sem_INSN_MOVE_C_SPRV32_P7 },
90 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P9, && case_sem_INSN_MOVE_C_SPRV32_P9 },
91 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P10, && case_sem_INSN_MOVE_C_SPRV32_P10 },
92 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P11, && case_sem_INSN_MOVE_C_SPRV32_P11 },
93 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P12, && case_sem_INSN_MOVE_C_SPRV32_P12 },
94 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P13, && case_sem_INSN_MOVE_C_SPRV32_P13 },
95 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P14, && case_sem_INSN_MOVE_C_SPRV32_P14 },
96 1.1 christos { CRISV32F_INSN_MOVE_C_SPRV32_P15, && case_sem_INSN_MOVE_C_SPRV32_P15 },
97 1.1 christos { CRISV32F_INSN_MOVE_SPR_MV32, && case_sem_INSN_MOVE_SPR_MV32 },
98 1.1 christos { CRISV32F_INSN_MOVE_SS_R, && case_sem_INSN_MOVE_SS_R },
99 1.1 christos { CRISV32F_INSN_MOVE_R_SS, && case_sem_INSN_MOVE_R_SS },
100 1.1 christos { CRISV32F_INSN_MOVEM_R_M_V32, && case_sem_INSN_MOVEM_R_M_V32 },
101 1.1 christos { CRISV32F_INSN_MOVEM_M_R_V32, && case_sem_INSN_MOVEM_M_R_V32 },
102 1.1 christos { CRISV32F_INSN_ADD_B_R, && case_sem_INSN_ADD_B_R },
103 1.1 christos { CRISV32F_INSN_ADD_W_R, && case_sem_INSN_ADD_W_R },
104 1.1 christos { CRISV32F_INSN_ADD_D_R, && case_sem_INSN_ADD_D_R },
105 1.1 christos { CRISV32F_INSN_ADD_M_B_M, && case_sem_INSN_ADD_M_B_M },
106 1.1 christos { CRISV32F_INSN_ADD_M_W_M, && case_sem_INSN_ADD_M_W_M },
107 1.1 christos { CRISV32F_INSN_ADD_M_D_M, && case_sem_INSN_ADD_M_D_M },
108 1.1 christos { CRISV32F_INSN_ADDCBR, && case_sem_INSN_ADDCBR },
109 1.1 christos { CRISV32F_INSN_ADDCWR, && case_sem_INSN_ADDCWR },
110 1.1 christos { CRISV32F_INSN_ADDCDR, && case_sem_INSN_ADDCDR },
111 1.1 christos { CRISV32F_INSN_ADDS_B_R, && case_sem_INSN_ADDS_B_R },
112 1.1 christos { CRISV32F_INSN_ADDS_W_R, && case_sem_INSN_ADDS_W_R },
113 1.1 christos { CRISV32F_INSN_ADDS_M_B_M, && case_sem_INSN_ADDS_M_B_M },
114 1.1 christos { CRISV32F_INSN_ADDS_M_W_M, && case_sem_INSN_ADDS_M_W_M },
115 1.1 christos { CRISV32F_INSN_ADDSCBR, && case_sem_INSN_ADDSCBR },
116 1.1 christos { CRISV32F_INSN_ADDSCWR, && case_sem_INSN_ADDSCWR },
117 1.1 christos { CRISV32F_INSN_ADDU_B_R, && case_sem_INSN_ADDU_B_R },
118 1.1 christos { CRISV32F_INSN_ADDU_W_R, && case_sem_INSN_ADDU_W_R },
119 1.1 christos { CRISV32F_INSN_ADDU_M_B_M, && case_sem_INSN_ADDU_M_B_M },
120 1.1 christos { CRISV32F_INSN_ADDU_M_W_M, && case_sem_INSN_ADDU_M_W_M },
121 1.1 christos { CRISV32F_INSN_ADDUCBR, && case_sem_INSN_ADDUCBR },
122 1.1 christos { CRISV32F_INSN_ADDUCWR, && case_sem_INSN_ADDUCWR },
123 1.1 christos { CRISV32F_INSN_SUB_B_R, && case_sem_INSN_SUB_B_R },
124 1.1 christos { CRISV32F_INSN_SUB_W_R, && case_sem_INSN_SUB_W_R },
125 1.1 christos { CRISV32F_INSN_SUB_D_R, && case_sem_INSN_SUB_D_R },
126 1.1 christos { CRISV32F_INSN_SUB_M_B_M, && case_sem_INSN_SUB_M_B_M },
127 1.1 christos { CRISV32F_INSN_SUB_M_W_M, && case_sem_INSN_SUB_M_W_M },
128 1.1 christos { CRISV32F_INSN_SUB_M_D_M, && case_sem_INSN_SUB_M_D_M },
129 1.1 christos { CRISV32F_INSN_SUBCBR, && case_sem_INSN_SUBCBR },
130 1.1 christos { CRISV32F_INSN_SUBCWR, && case_sem_INSN_SUBCWR },
131 1.1 christos { CRISV32F_INSN_SUBCDR, && case_sem_INSN_SUBCDR },
132 1.1 christos { CRISV32F_INSN_SUBS_B_R, && case_sem_INSN_SUBS_B_R },
133 1.1 christos { CRISV32F_INSN_SUBS_W_R, && case_sem_INSN_SUBS_W_R },
134 1.1 christos { CRISV32F_INSN_SUBS_M_B_M, && case_sem_INSN_SUBS_M_B_M },
135 1.1 christos { CRISV32F_INSN_SUBS_M_W_M, && case_sem_INSN_SUBS_M_W_M },
136 1.1 christos { CRISV32F_INSN_SUBSCBR, && case_sem_INSN_SUBSCBR },
137 1.1 christos { CRISV32F_INSN_SUBSCWR, && case_sem_INSN_SUBSCWR },
138 1.1 christos { CRISV32F_INSN_SUBU_B_R, && case_sem_INSN_SUBU_B_R },
139 1.1 christos { CRISV32F_INSN_SUBU_W_R, && case_sem_INSN_SUBU_W_R },
140 1.1 christos { CRISV32F_INSN_SUBU_M_B_M, && case_sem_INSN_SUBU_M_B_M },
141 1.1 christos { CRISV32F_INSN_SUBU_M_W_M, && case_sem_INSN_SUBU_M_W_M },
142 1.1 christos { CRISV32F_INSN_SUBUCBR, && case_sem_INSN_SUBUCBR },
143 1.1 christos { CRISV32F_INSN_SUBUCWR, && case_sem_INSN_SUBUCWR },
144 1.1 christos { CRISV32F_INSN_ADDC_R, && case_sem_INSN_ADDC_R },
145 1.1 christos { CRISV32F_INSN_ADDC_M, && case_sem_INSN_ADDC_M },
146 1.1 christos { CRISV32F_INSN_ADDC_C, && case_sem_INSN_ADDC_C },
147 1.1 christos { CRISV32F_INSN_LAPC_D, && case_sem_INSN_LAPC_D },
148 1.1 christos { CRISV32F_INSN_LAPCQ, && case_sem_INSN_LAPCQ },
149 1.1 christos { CRISV32F_INSN_ADDI_B_R, && case_sem_INSN_ADDI_B_R },
150 1.1 christos { CRISV32F_INSN_ADDI_W_R, && case_sem_INSN_ADDI_W_R },
151 1.1 christos { CRISV32F_INSN_ADDI_D_R, && case_sem_INSN_ADDI_D_R },
152 1.1 christos { CRISV32F_INSN_NEG_B_R, && case_sem_INSN_NEG_B_R },
153 1.1 christos { CRISV32F_INSN_NEG_W_R, && case_sem_INSN_NEG_W_R },
154 1.1 christos { CRISV32F_INSN_NEG_D_R, && case_sem_INSN_NEG_D_R },
155 1.1 christos { CRISV32F_INSN_TEST_M_B_M, && case_sem_INSN_TEST_M_B_M },
156 1.1 christos { CRISV32F_INSN_TEST_M_W_M, && case_sem_INSN_TEST_M_W_M },
157 1.1 christos { CRISV32F_INSN_TEST_M_D_M, && case_sem_INSN_TEST_M_D_M },
158 1.1 christos { CRISV32F_INSN_MOVE_R_M_B_M, && case_sem_INSN_MOVE_R_M_B_M },
159 1.1 christos { CRISV32F_INSN_MOVE_R_M_W_M, && case_sem_INSN_MOVE_R_M_W_M },
160 1.1 christos { CRISV32F_INSN_MOVE_R_M_D_M, && case_sem_INSN_MOVE_R_M_D_M },
161 1.1 christos { CRISV32F_INSN_MULS_B, && case_sem_INSN_MULS_B },
162 1.1 christos { CRISV32F_INSN_MULS_W, && case_sem_INSN_MULS_W },
163 1.1 christos { CRISV32F_INSN_MULS_D, && case_sem_INSN_MULS_D },
164 1.1 christos { CRISV32F_INSN_MULU_B, && case_sem_INSN_MULU_B },
165 1.1 christos { CRISV32F_INSN_MULU_W, && case_sem_INSN_MULU_W },
166 1.1 christos { CRISV32F_INSN_MULU_D, && case_sem_INSN_MULU_D },
167 1.1 christos { CRISV32F_INSN_MCP, && case_sem_INSN_MCP },
168 1.1 christos { CRISV32F_INSN_DSTEP, && case_sem_INSN_DSTEP },
169 1.1 christos { CRISV32F_INSN_ABS, && case_sem_INSN_ABS },
170 1.1 christos { CRISV32F_INSN_AND_B_R, && case_sem_INSN_AND_B_R },
171 1.1 christos { CRISV32F_INSN_AND_W_R, && case_sem_INSN_AND_W_R },
172 1.1 christos { CRISV32F_INSN_AND_D_R, && case_sem_INSN_AND_D_R },
173 1.1 christos { CRISV32F_INSN_AND_M_B_M, && case_sem_INSN_AND_M_B_M },
174 1.1 christos { CRISV32F_INSN_AND_M_W_M, && case_sem_INSN_AND_M_W_M },
175 1.1 christos { CRISV32F_INSN_AND_M_D_M, && case_sem_INSN_AND_M_D_M },
176 1.1 christos { CRISV32F_INSN_ANDCBR, && case_sem_INSN_ANDCBR },
177 1.1 christos { CRISV32F_INSN_ANDCWR, && case_sem_INSN_ANDCWR },
178 1.1 christos { CRISV32F_INSN_ANDCDR, && case_sem_INSN_ANDCDR },
179 1.1 christos { CRISV32F_INSN_ANDQ, && case_sem_INSN_ANDQ },
180 1.1 christos { CRISV32F_INSN_ORR_B_R, && case_sem_INSN_ORR_B_R },
181 1.1 christos { CRISV32F_INSN_ORR_W_R, && case_sem_INSN_ORR_W_R },
182 1.1 christos { CRISV32F_INSN_ORR_D_R, && case_sem_INSN_ORR_D_R },
183 1.1 christos { CRISV32F_INSN_OR_M_B_M, && case_sem_INSN_OR_M_B_M },
184 1.1 christos { CRISV32F_INSN_OR_M_W_M, && case_sem_INSN_OR_M_W_M },
185 1.1 christos { CRISV32F_INSN_OR_M_D_M, && case_sem_INSN_OR_M_D_M },
186 1.1 christos { CRISV32F_INSN_ORCBR, && case_sem_INSN_ORCBR },
187 1.1 christos { CRISV32F_INSN_ORCWR, && case_sem_INSN_ORCWR },
188 1.1 christos { CRISV32F_INSN_ORCDR, && case_sem_INSN_ORCDR },
189 1.1 christos { CRISV32F_INSN_ORQ, && case_sem_INSN_ORQ },
190 1.1 christos { CRISV32F_INSN_XOR, && case_sem_INSN_XOR },
191 1.1 christos { CRISV32F_INSN_SWAP, && case_sem_INSN_SWAP },
192 1.1 christos { CRISV32F_INSN_ASRR_B_R, && case_sem_INSN_ASRR_B_R },
193 1.1 christos { CRISV32F_INSN_ASRR_W_R, && case_sem_INSN_ASRR_W_R },
194 1.1 christos { CRISV32F_INSN_ASRR_D_R, && case_sem_INSN_ASRR_D_R },
195 1.1 christos { CRISV32F_INSN_ASRQ, && case_sem_INSN_ASRQ },
196 1.1 christos { CRISV32F_INSN_LSRR_B_R, && case_sem_INSN_LSRR_B_R },
197 1.1 christos { CRISV32F_INSN_LSRR_W_R, && case_sem_INSN_LSRR_W_R },
198 1.1 christos { CRISV32F_INSN_LSRR_D_R, && case_sem_INSN_LSRR_D_R },
199 1.1 christos { CRISV32F_INSN_LSRQ, && case_sem_INSN_LSRQ },
200 1.1 christos { CRISV32F_INSN_LSLR_B_R, && case_sem_INSN_LSLR_B_R },
201 1.1 christos { CRISV32F_INSN_LSLR_W_R, && case_sem_INSN_LSLR_W_R },
202 1.1 christos { CRISV32F_INSN_LSLR_D_R, && case_sem_INSN_LSLR_D_R },
203 1.1 christos { CRISV32F_INSN_LSLQ, && case_sem_INSN_LSLQ },
204 1.1 christos { CRISV32F_INSN_BTST, && case_sem_INSN_BTST },
205 1.1 christos { CRISV32F_INSN_BTSTQ, && case_sem_INSN_BTSTQ },
206 1.1 christos { CRISV32F_INSN_SETF, && case_sem_INSN_SETF },
207 1.1 christos { CRISV32F_INSN_CLEARF, && case_sem_INSN_CLEARF },
208 1.1 christos { CRISV32F_INSN_RFE, && case_sem_INSN_RFE },
209 1.1 christos { CRISV32F_INSN_SFE, && case_sem_INSN_SFE },
210 1.1 christos { CRISV32F_INSN_RFG, && case_sem_INSN_RFG },
211 1.1 christos { CRISV32F_INSN_RFN, && case_sem_INSN_RFN },
212 1.1 christos { CRISV32F_INSN_HALT, && case_sem_INSN_HALT },
213 1.1 christos { CRISV32F_INSN_BCC_B, && case_sem_INSN_BCC_B },
214 1.1 christos { CRISV32F_INSN_BA_B, && case_sem_INSN_BA_B },
215 1.1 christos { CRISV32F_INSN_BCC_W, && case_sem_INSN_BCC_W },
216 1.1 christos { CRISV32F_INSN_BA_W, && case_sem_INSN_BA_W },
217 1.1 christos { CRISV32F_INSN_JAS_R, && case_sem_INSN_JAS_R },
218 1.1 christos { CRISV32F_INSN_JAS_C, && case_sem_INSN_JAS_C },
219 1.1 christos { CRISV32F_INSN_JUMP_P, && case_sem_INSN_JUMP_P },
220 1.1 christos { CRISV32F_INSN_BAS_C, && case_sem_INSN_BAS_C },
221 1.1 christos { CRISV32F_INSN_JASC_R, && case_sem_INSN_JASC_R },
222 1.1 christos { CRISV32F_INSN_JASC_C, && case_sem_INSN_JASC_C },
223 1.1 christos { CRISV32F_INSN_BASC_C, && case_sem_INSN_BASC_C },
224 1.1 christos { CRISV32F_INSN_BREAK, && case_sem_INSN_BREAK },
225 1.1 christos { CRISV32F_INSN_BOUND_R_B_R, && case_sem_INSN_BOUND_R_B_R },
226 1.1 christos { CRISV32F_INSN_BOUND_R_W_R, && case_sem_INSN_BOUND_R_W_R },
227 1.1 christos { CRISV32F_INSN_BOUND_R_D_R, && case_sem_INSN_BOUND_R_D_R },
228 1.1 christos { CRISV32F_INSN_BOUND_CB, && case_sem_INSN_BOUND_CB },
229 1.1 christos { CRISV32F_INSN_BOUND_CW, && case_sem_INSN_BOUND_CW },
230 1.1 christos { CRISV32F_INSN_BOUND_CD, && case_sem_INSN_BOUND_CD },
231 1.1 christos { CRISV32F_INSN_SCC, && case_sem_INSN_SCC },
232 1.1 christos { CRISV32F_INSN_LZ, && case_sem_INSN_LZ },
233 1.1 christos { CRISV32F_INSN_ADDOQ, && case_sem_INSN_ADDOQ },
234 1.1 christos { CRISV32F_INSN_ADDO_M_B_M, && case_sem_INSN_ADDO_M_B_M },
235 1.1 christos { CRISV32F_INSN_ADDO_M_W_M, && case_sem_INSN_ADDO_M_W_M },
236 1.1 christos { CRISV32F_INSN_ADDO_M_D_M, && case_sem_INSN_ADDO_M_D_M },
237 1.1 christos { CRISV32F_INSN_ADDO_CB, && case_sem_INSN_ADDO_CB },
238 1.1 christos { CRISV32F_INSN_ADDO_CW, && case_sem_INSN_ADDO_CW },
239 1.1 christos { CRISV32F_INSN_ADDO_CD, && case_sem_INSN_ADDO_CD },
240 1.1 christos { CRISV32F_INSN_ADDI_ACR_B_R, && case_sem_INSN_ADDI_ACR_B_R },
241 1.1 christos { CRISV32F_INSN_ADDI_ACR_W_R, && case_sem_INSN_ADDI_ACR_W_R },
242 1.1 christos { CRISV32F_INSN_ADDI_ACR_D_R, && case_sem_INSN_ADDI_ACR_D_R },
243 1.1 christos { CRISV32F_INSN_FIDXI, && case_sem_INSN_FIDXI },
244 1.1 christos { CRISV32F_INSN_FTAGI, && case_sem_INSN_FTAGI },
245 1.1 christos { CRISV32F_INSN_FIDXD, && case_sem_INSN_FIDXD },
246 1.1 christos { CRISV32F_INSN_FTAGD, && case_sem_INSN_FTAGD },
247 1.1 christos { 0, 0 }
248 1.1 christos };
249 1.1 christos int i;
250 1.1 christos
251 1.1 christos for (i = 0; labels[i].label != 0; ++i)
252 1.1 christos {
253 1.1 christos #if FAST_P
254 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
255 1.1 christos #else
256 1.1 christos CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
257 1.1 christos #endif
258 1.1 christos }
259 1.1 christos
260 1.1 christos #undef DEFINE_LABELS
261 1.1 christos #endif /* DEFINE_LABELS */
262 1.1 christos
263 1.1 christos #ifdef DEFINE_SWITCH
264 1.1 christos
265 1.1 christos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
266 1.1 christos off frills like tracing and profiling. */
267 1.1.1.5 christos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
268 1.1 christos that can cause it to be optimized out. Another way would be to emit
269 1.1 christos special handlers into the instruction "stream". */
270 1.1 christos
271 1.1 christos #if FAST_P
272 1.1.1.5 christos #undef CGEN_TRACE_RESULT
273 1.1.1.5 christos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
274 1.1 christos #endif
275 1.1 christos
276 1.1 christos #undef GET_ATTR
277 1.1 christos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
278 1.1 christos
279 1.1 christos {
280 1.1 christos
281 1.1 christos #if WITH_SCACHE_PBB
282 1.1 christos
283 1.1 christos /* Branch to next handler without going around main loop. */
284 1.1 christos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
285 1.1 christos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
286 1.1 christos
287 1.1 christos #else /* ! WITH_SCACHE_PBB */
288 1.1 christos
289 1.1 christos #define NEXT(vpc) BREAK (sem)
290 1.1 christos #ifdef __GNUC__
291 1.1 christos #if FAST_P
292 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
293 1.1 christos #else
294 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
295 1.1 christos #endif
296 1.1 christos #else
297 1.1 christos SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
298 1.1 christos #endif
299 1.1 christos
300 1.1 christos #endif /* ! WITH_SCACHE_PBB */
301 1.1 christos
302 1.1 christos {
303 1.1 christos
304 1.1 christos CASE (sem, INSN_X_INVALID) : /* --invalid-- */
305 1.1 christos {
306 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
307 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
308 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
309 1.1 christos int UNUSED written = 0;
310 1.1 christos IADDR UNUSED pc = abuf->addr;
311 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
312 1.1 christos
313 1.1 christos {
314 1.1 christos /* Update the recorded pc in the cpu state struct.
315 1.1 christos Only necessary for WITH_SCACHE case, but to avoid the
316 1.1 christos conditional compilation .... */
317 1.1 christos SET_H_PC (pc);
318 1.1 christos /* Virtual insns have zero size. Overwrite vpc with address of next insn
319 1.1 christos using the default-insn-bitsize spec. When executing insns in parallel
320 1.1 christos we may want to queue the fault and continue execution. */
321 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
322 1.1 christos vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
323 1.1 christos }
324 1.1 christos
325 1.1 christos #undef FLD
326 1.1 christos }
327 1.1 christos NEXT (vpc);
328 1.1 christos
329 1.1 christos CASE (sem, INSN_X_AFTER) : /* --after-- */
330 1.1 christos {
331 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
332 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
333 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
334 1.1 christos int UNUSED written = 0;
335 1.1 christos IADDR UNUSED pc = abuf->addr;
336 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
337 1.1 christos
338 1.1 christos {
339 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
340 1.1 christos crisv32f_pbb_after (current_cpu, sem_arg);
341 1.1 christos #endif
342 1.1 christos }
343 1.1 christos
344 1.1 christos #undef FLD
345 1.1 christos }
346 1.1 christos NEXT (vpc);
347 1.1 christos
348 1.1 christos CASE (sem, INSN_X_BEFORE) : /* --before-- */
349 1.1 christos {
350 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
351 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
352 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
353 1.1 christos int UNUSED written = 0;
354 1.1 christos IADDR UNUSED pc = abuf->addr;
355 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
356 1.1 christos
357 1.1 christos {
358 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
359 1.1 christos crisv32f_pbb_before (current_cpu, sem_arg);
360 1.1 christos #endif
361 1.1 christos }
362 1.1 christos
363 1.1 christos #undef FLD
364 1.1 christos }
365 1.1 christos NEXT (vpc);
366 1.1 christos
367 1.1 christos CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
368 1.1 christos {
369 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
370 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
371 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
372 1.1 christos int UNUSED written = 0;
373 1.1 christos IADDR UNUSED pc = abuf->addr;
374 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
375 1.1 christos
376 1.1 christos {
377 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
378 1.1 christos #ifdef DEFINE_SWITCH
379 1.1 christos vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg,
380 1.1 christos pbb_br_type, pbb_br_npc);
381 1.1 christos BREAK (sem);
382 1.1 christos #else
383 1.1 christos /* FIXME: Allow provision of explicit ifmt spec in insn spec. */
384 1.1 christos vpc = crisv32f_pbb_cti_chain (current_cpu, sem_arg,
385 1.1 christos CPU_PBB_BR_TYPE (current_cpu),
386 1.1 christos CPU_PBB_BR_NPC (current_cpu));
387 1.1 christos #endif
388 1.1 christos #endif
389 1.1 christos }
390 1.1 christos
391 1.1 christos #undef FLD
392 1.1 christos }
393 1.1 christos NEXT (vpc);
394 1.1 christos
395 1.1 christos CASE (sem, INSN_X_CHAIN) : /* --chain-- */
396 1.1 christos {
397 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
398 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
399 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
400 1.1 christos int UNUSED written = 0;
401 1.1 christos IADDR UNUSED pc = abuf->addr;
402 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
403 1.1 christos
404 1.1 christos {
405 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
406 1.1 christos vpc = crisv32f_pbb_chain (current_cpu, sem_arg);
407 1.1 christos #ifdef DEFINE_SWITCH
408 1.1 christos BREAK (sem);
409 1.1 christos #endif
410 1.1 christos #endif
411 1.1 christos }
412 1.1 christos
413 1.1 christos #undef FLD
414 1.1 christos }
415 1.1 christos NEXT (vpc);
416 1.1 christos
417 1.1 christos CASE (sem, INSN_X_BEGIN) : /* --begin-- */
418 1.1 christos {
419 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
420 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
421 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
422 1.1 christos int UNUSED written = 0;
423 1.1 christos IADDR UNUSED pc = abuf->addr;
424 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
425 1.1 christos
426 1.1 christos {
427 1.1 christos #if WITH_SCACHE_PBB_CRISV32F
428 1.1 christos #if defined DEFINE_SWITCH || defined FAST_P
429 1.1 christos /* In the switch case FAST_P is a constant, allowing several optimizations
430 1.1 christos in any called inline functions. */
431 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, FAST_P);
432 1.1 christos #else
433 1.1 christos #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */
434 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
435 1.1 christos #else
436 1.1 christos vpc = crisv32f_pbb_begin (current_cpu, 0);
437 1.1 christos #endif
438 1.1 christos #endif
439 1.1 christos #endif
440 1.1 christos }
441 1.1 christos
442 1.1 christos #undef FLD
443 1.1 christos }
444 1.1 christos NEXT (vpc);
445 1.1 christos
446 1.1 christos CASE (sem, INSN_MOVE_B_R) : /* move.b move.m ${Rs},${Rd} */
447 1.1 christos {
448 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
449 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
450 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
451 1.1 christos int UNUSED written = 0;
452 1.1 christos IADDR UNUSED pc = abuf->addr;
453 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
454 1.1 christos
455 1.1 christos {
456 1.1 christos QI tmp_newval;
457 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
458 1.1 christos {
459 1.1 christos SI tmp_oldregval;
460 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
461 1.1 christos {
462 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
463 1.1 christos SET_H_GR (FLD (f_operand2), opval);
464 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
465 1.1 christos }
466 1.1 christos }
467 1.1 christos {
468 1.1 christos {
469 1.1 christos BI opval = LTQI (tmp_newval, 0);
470 1.1 christos CPU (h_nbit) = opval;
471 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
472 1.1 christos }
473 1.1 christos {
474 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
475 1.1 christos CPU (h_zbit) = opval;
476 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
477 1.1 christos }
478 1.1 christos SET_H_CBIT_MOVE (0);
479 1.1 christos SET_H_VBIT_MOVE (0);
480 1.1 christos {
481 1.1 christos {
482 1.1 christos BI opval = 0;
483 1.1 christos CPU (h_xbit) = opval;
484 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
485 1.1 christos }
486 1.1 christos {
487 1.1 christos BI opval = 0;
488 1.1 christos SET_H_INSN_PREFIXED_P (opval);
489 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
490 1.1 christos }
491 1.1 christos }
492 1.1 christos }
493 1.1 christos }
494 1.1 christos
495 1.1 christos #undef FLD
496 1.1 christos }
497 1.1 christos NEXT (vpc);
498 1.1 christos
499 1.1 christos CASE (sem, INSN_MOVE_W_R) : /* move.w move.m ${Rs},${Rd} */
500 1.1 christos {
501 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
502 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
503 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
504 1.1 christos int UNUSED written = 0;
505 1.1 christos IADDR UNUSED pc = abuf->addr;
506 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
507 1.1 christos
508 1.1 christos {
509 1.1 christos HI tmp_newval;
510 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
511 1.1 christos {
512 1.1 christos SI tmp_oldregval;
513 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
514 1.1 christos {
515 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
516 1.1 christos SET_H_GR (FLD (f_operand2), opval);
517 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
518 1.1 christos }
519 1.1 christos }
520 1.1 christos {
521 1.1 christos {
522 1.1 christos BI opval = LTHI (tmp_newval, 0);
523 1.1 christos CPU (h_nbit) = opval;
524 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
525 1.1 christos }
526 1.1 christos {
527 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
528 1.1 christos CPU (h_zbit) = opval;
529 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
530 1.1 christos }
531 1.1 christos SET_H_CBIT_MOVE (0);
532 1.1 christos SET_H_VBIT_MOVE (0);
533 1.1 christos {
534 1.1 christos {
535 1.1 christos BI opval = 0;
536 1.1 christos CPU (h_xbit) = opval;
537 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
538 1.1 christos }
539 1.1 christos {
540 1.1 christos BI opval = 0;
541 1.1 christos SET_H_INSN_PREFIXED_P (opval);
542 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
543 1.1 christos }
544 1.1 christos }
545 1.1 christos }
546 1.1 christos }
547 1.1 christos
548 1.1 christos #undef FLD
549 1.1 christos }
550 1.1 christos NEXT (vpc);
551 1.1 christos
552 1.1 christos CASE (sem, INSN_MOVE_D_R) : /* move.d move.m ${Rs},${Rd} */
553 1.1 christos {
554 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
555 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
556 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
557 1.1 christos int UNUSED written = 0;
558 1.1 christos IADDR UNUSED pc = abuf->addr;
559 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
560 1.1 christos
561 1.1 christos {
562 1.1 christos SI tmp_newval;
563 1.1 christos tmp_newval = GET_H_GR (FLD (f_operand1));
564 1.1 christos {
565 1.1 christos SI opval = tmp_newval;
566 1.1 christos SET_H_GR (FLD (f_operand2), opval);
567 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
568 1.1 christos }
569 1.1 christos {
570 1.1 christos {
571 1.1 christos BI opval = LTSI (tmp_newval, 0);
572 1.1 christos CPU (h_nbit) = opval;
573 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
574 1.1 christos }
575 1.1 christos {
576 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
577 1.1 christos CPU (h_zbit) = opval;
578 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
579 1.1 christos }
580 1.1 christos SET_H_CBIT_MOVE (0);
581 1.1 christos SET_H_VBIT_MOVE (0);
582 1.1 christos {
583 1.1 christos {
584 1.1 christos BI opval = 0;
585 1.1 christos CPU (h_xbit) = opval;
586 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
587 1.1 christos }
588 1.1 christos {
589 1.1 christos BI opval = 0;
590 1.1 christos SET_H_INSN_PREFIXED_P (opval);
591 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
592 1.1 christos }
593 1.1 christos }
594 1.1 christos }
595 1.1 christos }
596 1.1 christos
597 1.1 christos #undef FLD
598 1.1 christos }
599 1.1 christos NEXT (vpc);
600 1.1 christos
601 1.1 christos CASE (sem, INSN_MOVEQ) : /* moveq $i,$Rd */
602 1.1 christos {
603 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
604 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
605 1.1 christos #define FLD(f) abuf->fields.sfmt_moveq.f
606 1.1 christos int UNUSED written = 0;
607 1.1 christos IADDR UNUSED pc = abuf->addr;
608 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
609 1.1 christos
610 1.1 christos {
611 1.1 christos SI tmp_newval;
612 1.1 christos tmp_newval = FLD (f_s6);
613 1.1 christos {
614 1.1 christos SI opval = tmp_newval;
615 1.1 christos SET_H_GR (FLD (f_operand2), opval);
616 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
617 1.1 christos }
618 1.1 christos {
619 1.1 christos SET_H_NBIT_MOVE (LTSI (tmp_newval, 0));
620 1.1 christos SET_H_ZBIT_MOVE (ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1))));
621 1.1 christos SET_H_CBIT_MOVE (0);
622 1.1 christos SET_H_VBIT_MOVE (0);
623 1.1 christos {
624 1.1 christos {
625 1.1 christos BI opval = 0;
626 1.1 christos CPU (h_xbit) = opval;
627 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
628 1.1 christos }
629 1.1 christos {
630 1.1 christos BI opval = 0;
631 1.1 christos SET_H_INSN_PREFIXED_P (opval);
632 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
633 1.1 christos }
634 1.1 christos }
635 1.1 christos }
636 1.1 christos }
637 1.1 christos
638 1.1 christos #undef FLD
639 1.1 christos }
640 1.1 christos NEXT (vpc);
641 1.1 christos
642 1.1 christos CASE (sem, INSN_MOVS_B_R) : /* movs.b movs.m ${Rs},${Rd} */
643 1.1 christos {
644 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
645 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
646 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
647 1.1 christos int UNUSED written = 0;
648 1.1 christos IADDR UNUSED pc = abuf->addr;
649 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
650 1.1 christos
651 1.1 christos {
652 1.1 christos QI tmp_tmpops;
653 1.1 christos SI tmp_newval;
654 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
655 1.1 christos tmp_newval = EXTQISI (tmp_tmpops);
656 1.1 christos {
657 1.1 christos SI opval = tmp_newval;
658 1.1 christos SET_H_GR (FLD (f_operand2), opval);
659 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
660 1.1 christos }
661 1.1 christos {
662 1.1 christos {
663 1.1 christos BI opval = LTSI (tmp_newval, 0);
664 1.1 christos CPU (h_nbit) = opval;
665 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
666 1.1 christos }
667 1.1 christos {
668 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
669 1.1 christos CPU (h_zbit) = opval;
670 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
671 1.1 christos }
672 1.1 christos SET_H_CBIT_MOVE (0);
673 1.1 christos SET_H_VBIT_MOVE (0);
674 1.1 christos {
675 1.1 christos {
676 1.1 christos BI opval = 0;
677 1.1 christos CPU (h_xbit) = opval;
678 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
679 1.1 christos }
680 1.1 christos {
681 1.1 christos BI opval = 0;
682 1.1 christos SET_H_INSN_PREFIXED_P (opval);
683 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
684 1.1 christos }
685 1.1 christos }
686 1.1 christos }
687 1.1 christos }
688 1.1 christos
689 1.1 christos #undef FLD
690 1.1 christos }
691 1.1 christos NEXT (vpc);
692 1.1 christos
693 1.1 christos CASE (sem, INSN_MOVS_W_R) : /* movs.w movs.m ${Rs},${Rd} */
694 1.1 christos {
695 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
696 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
697 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
698 1.1 christos int UNUSED written = 0;
699 1.1 christos IADDR UNUSED pc = abuf->addr;
700 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
701 1.1 christos
702 1.1 christos {
703 1.1 christos HI tmp_tmpops;
704 1.1 christos SI tmp_newval;
705 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
706 1.1 christos tmp_newval = EXTHISI (tmp_tmpops);
707 1.1 christos {
708 1.1 christos SI opval = tmp_newval;
709 1.1 christos SET_H_GR (FLD (f_operand2), opval);
710 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
711 1.1 christos }
712 1.1 christos {
713 1.1 christos {
714 1.1 christos BI opval = LTSI (tmp_newval, 0);
715 1.1 christos CPU (h_nbit) = opval;
716 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
717 1.1 christos }
718 1.1 christos {
719 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
720 1.1 christos CPU (h_zbit) = opval;
721 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
722 1.1 christos }
723 1.1 christos SET_H_CBIT_MOVE (0);
724 1.1 christos SET_H_VBIT_MOVE (0);
725 1.1 christos {
726 1.1 christos {
727 1.1 christos BI opval = 0;
728 1.1 christos CPU (h_xbit) = opval;
729 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
730 1.1 christos }
731 1.1 christos {
732 1.1 christos BI opval = 0;
733 1.1 christos SET_H_INSN_PREFIXED_P (opval);
734 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
735 1.1 christos }
736 1.1 christos }
737 1.1 christos }
738 1.1 christos }
739 1.1 christos
740 1.1 christos #undef FLD
741 1.1 christos }
742 1.1 christos NEXT (vpc);
743 1.1 christos
744 1.1 christos CASE (sem, INSN_MOVU_B_R) : /* movu.b movu.m ${Rs},${Rd} */
745 1.1 christos {
746 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
747 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
748 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
749 1.1 christos int UNUSED written = 0;
750 1.1 christos IADDR UNUSED pc = abuf->addr;
751 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
752 1.1 christos
753 1.1 christos {
754 1.1 christos QI tmp_tmpops;
755 1.1 christos SI tmp_newval;
756 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
757 1.1 christos tmp_newval = ZEXTQISI (tmp_tmpops);
758 1.1 christos {
759 1.1 christos SI opval = tmp_newval;
760 1.1 christos SET_H_GR (FLD (f_operand2), opval);
761 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
762 1.1 christos }
763 1.1 christos {
764 1.1 christos {
765 1.1 christos BI opval = LTSI (tmp_newval, 0);
766 1.1 christos CPU (h_nbit) = opval;
767 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
768 1.1 christos }
769 1.1 christos {
770 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
771 1.1 christos CPU (h_zbit) = opval;
772 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
773 1.1 christos }
774 1.1 christos SET_H_CBIT_MOVE (0);
775 1.1 christos SET_H_VBIT_MOVE (0);
776 1.1 christos {
777 1.1 christos {
778 1.1 christos BI opval = 0;
779 1.1 christos CPU (h_xbit) = opval;
780 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
781 1.1 christos }
782 1.1 christos {
783 1.1 christos BI opval = 0;
784 1.1 christos SET_H_INSN_PREFIXED_P (opval);
785 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
786 1.1 christos }
787 1.1 christos }
788 1.1 christos }
789 1.1 christos }
790 1.1 christos
791 1.1 christos #undef FLD
792 1.1 christos }
793 1.1 christos NEXT (vpc);
794 1.1 christos
795 1.1 christos CASE (sem, INSN_MOVU_W_R) : /* movu.w movu.m ${Rs},${Rd} */
796 1.1 christos {
797 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
798 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
799 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
800 1.1 christos int UNUSED written = 0;
801 1.1 christos IADDR UNUSED pc = abuf->addr;
802 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
803 1.1 christos
804 1.1 christos {
805 1.1 christos HI tmp_tmpops;
806 1.1 christos SI tmp_newval;
807 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
808 1.1 christos tmp_newval = ZEXTHISI (tmp_tmpops);
809 1.1 christos {
810 1.1 christos SI opval = tmp_newval;
811 1.1 christos SET_H_GR (FLD (f_operand2), opval);
812 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
813 1.1 christos }
814 1.1 christos {
815 1.1 christos {
816 1.1 christos BI opval = LTSI (tmp_newval, 0);
817 1.1 christos CPU (h_nbit) = opval;
818 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
819 1.1 christos }
820 1.1 christos {
821 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
822 1.1 christos CPU (h_zbit) = opval;
823 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
824 1.1 christos }
825 1.1 christos SET_H_CBIT_MOVE (0);
826 1.1 christos SET_H_VBIT_MOVE (0);
827 1.1 christos {
828 1.1 christos {
829 1.1 christos BI opval = 0;
830 1.1 christos CPU (h_xbit) = opval;
831 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
832 1.1 christos }
833 1.1 christos {
834 1.1 christos BI opval = 0;
835 1.1 christos SET_H_INSN_PREFIXED_P (opval);
836 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
837 1.1 christos }
838 1.1 christos }
839 1.1 christos }
840 1.1 christos }
841 1.1 christos
842 1.1 christos #undef FLD
843 1.1 christos }
844 1.1 christos NEXT (vpc);
845 1.1 christos
846 1.1 christos CASE (sem, INSN_MOVECBR) : /* move.b ${sconst8},${Rd} */
847 1.1 christos {
848 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
849 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
850 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
851 1.1 christos int UNUSED written = 0;
852 1.1 christos IADDR UNUSED pc = abuf->addr;
853 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
854 1.1 christos
855 1.1 christos {
856 1.1 christos QI tmp_newval;
857 1.1 christos tmp_newval = FLD (f_indir_pc__byte);
858 1.1 christos {
859 1.1 christos SI tmp_oldregval;
860 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
861 1.1 christos {
862 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
863 1.1 christos SET_H_GR (FLD (f_operand2), opval);
864 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
865 1.1 christos }
866 1.1 christos }
867 1.1 christos {
868 1.1 christos {
869 1.1 christos BI opval = LTQI (tmp_newval, 0);
870 1.1 christos CPU (h_nbit) = opval;
871 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
872 1.1 christos }
873 1.1 christos {
874 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
875 1.1 christos CPU (h_zbit) = opval;
876 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
877 1.1 christos }
878 1.1 christos SET_H_CBIT_MOVE (0);
879 1.1 christos SET_H_VBIT_MOVE (0);
880 1.1 christos {
881 1.1 christos {
882 1.1 christos BI opval = 0;
883 1.1 christos CPU (h_xbit) = opval;
884 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
885 1.1 christos }
886 1.1 christos {
887 1.1 christos BI opval = 0;
888 1.1 christos SET_H_INSN_PREFIXED_P (opval);
889 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
890 1.1 christos }
891 1.1 christos }
892 1.1 christos }
893 1.1 christos }
894 1.1 christos
895 1.1 christos #undef FLD
896 1.1 christos }
897 1.1 christos NEXT (vpc);
898 1.1 christos
899 1.1 christos CASE (sem, INSN_MOVECWR) : /* move.w ${sconst16},${Rd} */
900 1.1 christos {
901 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
902 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
903 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
904 1.1 christos int UNUSED written = 0;
905 1.1 christos IADDR UNUSED pc = abuf->addr;
906 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
907 1.1 christos
908 1.1 christos {
909 1.1 christos HI tmp_newval;
910 1.1 christos tmp_newval = FLD (f_indir_pc__word);
911 1.1 christos {
912 1.1 christos SI tmp_oldregval;
913 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
914 1.1 christos {
915 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
916 1.1 christos SET_H_GR (FLD (f_operand2), opval);
917 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
918 1.1 christos }
919 1.1 christos }
920 1.1 christos {
921 1.1 christos {
922 1.1 christos BI opval = LTHI (tmp_newval, 0);
923 1.1 christos CPU (h_nbit) = opval;
924 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
925 1.1 christos }
926 1.1 christos {
927 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
928 1.1 christos CPU (h_zbit) = opval;
929 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
930 1.1 christos }
931 1.1 christos SET_H_CBIT_MOVE (0);
932 1.1 christos SET_H_VBIT_MOVE (0);
933 1.1 christos {
934 1.1 christos {
935 1.1 christos BI opval = 0;
936 1.1 christos CPU (h_xbit) = opval;
937 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
938 1.1 christos }
939 1.1 christos {
940 1.1 christos BI opval = 0;
941 1.1 christos SET_H_INSN_PREFIXED_P (opval);
942 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
943 1.1 christos }
944 1.1 christos }
945 1.1 christos }
946 1.1 christos }
947 1.1 christos
948 1.1 christos #undef FLD
949 1.1 christos }
950 1.1 christos NEXT (vpc);
951 1.1 christos
952 1.1 christos CASE (sem, INSN_MOVECDR) : /* move.d ${const32},${Rd} */
953 1.1 christos {
954 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
955 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
956 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
957 1.1 christos int UNUSED written = 0;
958 1.1 christos IADDR UNUSED pc = abuf->addr;
959 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
960 1.1 christos
961 1.1 christos {
962 1.1 christos SI tmp_newval;
963 1.1 christos tmp_newval = FLD (f_indir_pc__dword);
964 1.1 christos {
965 1.1 christos SI opval = tmp_newval;
966 1.1 christos SET_H_GR (FLD (f_operand2), opval);
967 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
968 1.1 christos }
969 1.1 christos {
970 1.1 christos {
971 1.1 christos BI opval = LTSI (tmp_newval, 0);
972 1.1 christos CPU (h_nbit) = opval;
973 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
974 1.1 christos }
975 1.1 christos {
976 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
977 1.1 christos CPU (h_zbit) = opval;
978 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
979 1.1 christos }
980 1.1 christos SET_H_CBIT_MOVE (0);
981 1.1 christos SET_H_VBIT_MOVE (0);
982 1.1 christos {
983 1.1 christos {
984 1.1 christos BI opval = 0;
985 1.1 christos CPU (h_xbit) = opval;
986 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
987 1.1 christos }
988 1.1 christos {
989 1.1 christos BI opval = 0;
990 1.1 christos SET_H_INSN_PREFIXED_P (opval);
991 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
992 1.1 christos }
993 1.1 christos }
994 1.1 christos }
995 1.1 christos }
996 1.1 christos
997 1.1 christos #undef FLD
998 1.1 christos }
999 1.1 christos NEXT (vpc);
1000 1.1 christos
1001 1.1 christos CASE (sem, INSN_MOVSCBR) : /* movs.b ${sconst8},${Rd} */
1002 1.1 christos {
1003 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1004 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1005 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1006 1.1 christos int UNUSED written = 0;
1007 1.1 christos IADDR UNUSED pc = abuf->addr;
1008 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1009 1.1 christos
1010 1.1 christos {
1011 1.1 christos SI tmp_newval;
1012 1.1 christos tmp_newval = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
1013 1.1 christos {
1014 1.1 christos SI opval = tmp_newval;
1015 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1016 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1017 1.1 christos }
1018 1.1 christos {
1019 1.1 christos {
1020 1.1 christos BI opval = LTSI (tmp_newval, 0);
1021 1.1 christos CPU (h_nbit) = opval;
1022 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1023 1.1 christos }
1024 1.1 christos {
1025 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1026 1.1 christos CPU (h_zbit) = opval;
1027 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1028 1.1 christos }
1029 1.1 christos SET_H_CBIT_MOVE (0);
1030 1.1 christos SET_H_VBIT_MOVE (0);
1031 1.1 christos {
1032 1.1 christos {
1033 1.1 christos BI opval = 0;
1034 1.1 christos CPU (h_xbit) = opval;
1035 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1036 1.1 christos }
1037 1.1 christos {
1038 1.1 christos BI opval = 0;
1039 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1040 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1041 1.1 christos }
1042 1.1 christos }
1043 1.1 christos }
1044 1.1 christos }
1045 1.1 christos
1046 1.1 christos #undef FLD
1047 1.1 christos }
1048 1.1 christos NEXT (vpc);
1049 1.1 christos
1050 1.1 christos CASE (sem, INSN_MOVSCWR) : /* movs.w ${sconst16},${Rd} */
1051 1.1 christos {
1052 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1053 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1054 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1055 1.1 christos int UNUSED written = 0;
1056 1.1 christos IADDR UNUSED pc = abuf->addr;
1057 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1058 1.1 christos
1059 1.1 christos {
1060 1.1 christos SI tmp_newval;
1061 1.1 christos tmp_newval = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
1062 1.1 christos {
1063 1.1 christos SI opval = tmp_newval;
1064 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1065 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1066 1.1 christos }
1067 1.1 christos {
1068 1.1 christos {
1069 1.1 christos BI opval = LTSI (tmp_newval, 0);
1070 1.1 christos CPU (h_nbit) = opval;
1071 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1072 1.1 christos }
1073 1.1 christos {
1074 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1075 1.1 christos CPU (h_zbit) = opval;
1076 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1077 1.1 christos }
1078 1.1 christos SET_H_CBIT_MOVE (0);
1079 1.1 christos SET_H_VBIT_MOVE (0);
1080 1.1 christos {
1081 1.1 christos {
1082 1.1 christos BI opval = 0;
1083 1.1 christos CPU (h_xbit) = opval;
1084 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1085 1.1 christos }
1086 1.1 christos {
1087 1.1 christos BI opval = 0;
1088 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1089 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1090 1.1 christos }
1091 1.1 christos }
1092 1.1 christos }
1093 1.1 christos }
1094 1.1 christos
1095 1.1 christos #undef FLD
1096 1.1 christos }
1097 1.1 christos NEXT (vpc);
1098 1.1 christos
1099 1.1 christos CASE (sem, INSN_MOVUCBR) : /* movu.b ${uconst8},${Rd} */
1100 1.1 christos {
1101 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1102 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1103 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1104 1.1 christos int UNUSED written = 0;
1105 1.1 christos IADDR UNUSED pc = abuf->addr;
1106 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1107 1.1 christos
1108 1.1 christos {
1109 1.1 christos SI tmp_newval;
1110 1.1 christos tmp_newval = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
1111 1.1 christos {
1112 1.1 christos SI opval = tmp_newval;
1113 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1114 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1115 1.1 christos }
1116 1.1 christos {
1117 1.1 christos {
1118 1.1 christos BI opval = LTSI (tmp_newval, 0);
1119 1.1 christos CPU (h_nbit) = opval;
1120 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1121 1.1 christos }
1122 1.1 christos {
1123 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1124 1.1 christos CPU (h_zbit) = opval;
1125 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1126 1.1 christos }
1127 1.1 christos SET_H_CBIT_MOVE (0);
1128 1.1 christos SET_H_VBIT_MOVE (0);
1129 1.1 christos {
1130 1.1 christos {
1131 1.1 christos BI opval = 0;
1132 1.1 christos CPU (h_xbit) = opval;
1133 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1134 1.1 christos }
1135 1.1 christos {
1136 1.1 christos BI opval = 0;
1137 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1138 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1139 1.1 christos }
1140 1.1 christos }
1141 1.1 christos }
1142 1.1 christos }
1143 1.1 christos
1144 1.1 christos #undef FLD
1145 1.1 christos }
1146 1.1 christos NEXT (vpc);
1147 1.1 christos
1148 1.1 christos CASE (sem, INSN_MOVUCWR) : /* movu.w ${uconst16},${Rd} */
1149 1.1 christos {
1150 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1151 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1152 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1153 1.1 christos int UNUSED written = 0;
1154 1.1 christos IADDR UNUSED pc = abuf->addr;
1155 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1156 1.1 christos
1157 1.1 christos {
1158 1.1 christos SI tmp_newval;
1159 1.1 christos tmp_newval = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
1160 1.1 christos {
1161 1.1 christos SI opval = tmp_newval;
1162 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1163 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1164 1.1 christos }
1165 1.1 christos {
1166 1.1 christos {
1167 1.1 christos BI opval = LTSI (tmp_newval, 0);
1168 1.1 christos CPU (h_nbit) = opval;
1169 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1170 1.1 christos }
1171 1.1 christos {
1172 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
1173 1.1 christos CPU (h_zbit) = opval;
1174 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1175 1.1 christos }
1176 1.1 christos SET_H_CBIT_MOVE (0);
1177 1.1 christos SET_H_VBIT_MOVE (0);
1178 1.1 christos {
1179 1.1 christos {
1180 1.1 christos BI opval = 0;
1181 1.1 christos CPU (h_xbit) = opval;
1182 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1183 1.1 christos }
1184 1.1 christos {
1185 1.1 christos BI opval = 0;
1186 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1187 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1188 1.1 christos }
1189 1.1 christos }
1190 1.1 christos }
1191 1.1 christos }
1192 1.1 christos
1193 1.1 christos #undef FLD
1194 1.1 christos }
1195 1.1 christos NEXT (vpc);
1196 1.1 christos
1197 1.1 christos CASE (sem, INSN_ADDQ) : /* addq $j,$Rd */
1198 1.1 christos {
1199 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1200 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1201 1.1 christos #define FLD(f) abuf->fields.sfmt_addq.f
1202 1.1 christos int UNUSED written = 0;
1203 1.1 christos IADDR UNUSED pc = abuf->addr;
1204 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1205 1.1 christos
1206 1.1 christos {
1207 1.1 christos SI tmp_tmpopd;
1208 1.1 christos SI tmp_tmpops;
1209 1.1 christos BI tmp_carry;
1210 1.1 christos SI tmp_newval;
1211 1.1 christos tmp_tmpops = FLD (f_u6);
1212 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1213 1.1 christos tmp_carry = CPU (h_cbit);
1214 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1215 1.1 christos {
1216 1.1 christos SI opval = tmp_newval;
1217 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1218 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1219 1.1 christos }
1220 1.1 christos {
1221 1.1 christos {
1222 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))));
1223 1.1 christos CPU (h_cbit) = opval;
1224 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1225 1.1 christos }
1226 1.1 christos {
1227 1.1 christos BI opval = LTSI (tmp_newval, 0);
1228 1.1 christos CPU (h_nbit) = opval;
1229 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1230 1.1 christos }
1231 1.1 christos {
1232 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1233 1.1 christos CPU (h_zbit) = opval;
1234 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1235 1.1 christos }
1236 1.1 christos {
1237 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)));
1238 1.1 christos CPU (h_vbit) = opval;
1239 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1240 1.1 christos }
1241 1.1 christos {
1242 1.1 christos {
1243 1.1 christos BI opval = 0;
1244 1.1 christos CPU (h_xbit) = opval;
1245 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1246 1.1 christos }
1247 1.1 christos {
1248 1.1 christos BI opval = 0;
1249 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1250 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1251 1.1 christos }
1252 1.1 christos }
1253 1.1 christos }
1254 1.1 christos }
1255 1.1 christos
1256 1.1 christos #undef FLD
1257 1.1 christos }
1258 1.1 christos NEXT (vpc);
1259 1.1 christos
1260 1.1 christos CASE (sem, INSN_SUBQ) : /* subq $j,$Rd */
1261 1.1 christos {
1262 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1263 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1264 1.1 christos #define FLD(f) abuf->fields.sfmt_addq.f
1265 1.1 christos int UNUSED written = 0;
1266 1.1 christos IADDR UNUSED pc = abuf->addr;
1267 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1268 1.1 christos
1269 1.1 christos {
1270 1.1 christos SI tmp_tmpopd;
1271 1.1 christos SI tmp_tmpops;
1272 1.1 christos BI tmp_carry;
1273 1.1 christos SI tmp_newval;
1274 1.1 christos tmp_tmpops = FLD (f_u6);
1275 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1276 1.1 christos tmp_carry = CPU (h_cbit);
1277 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1278 1.1 christos {
1279 1.1 christos SI opval = tmp_newval;
1280 1.1 christos SET_H_GR (FLD (f_operand2), opval);
1281 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1282 1.1 christos }
1283 1.1 christos {
1284 1.1 christos {
1285 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))));
1286 1.1 christos CPU (h_cbit) = opval;
1287 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1288 1.1 christos }
1289 1.1 christos {
1290 1.1 christos BI opval = LTSI (tmp_newval, 0);
1291 1.1 christos CPU (h_nbit) = opval;
1292 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1293 1.1 christos }
1294 1.1 christos {
1295 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1296 1.1 christos CPU (h_zbit) = opval;
1297 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1298 1.1 christos }
1299 1.1 christos {
1300 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)));
1301 1.1 christos CPU (h_vbit) = opval;
1302 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1303 1.1 christos }
1304 1.1 christos {
1305 1.1 christos {
1306 1.1 christos BI opval = 0;
1307 1.1 christos CPU (h_xbit) = opval;
1308 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1309 1.1 christos }
1310 1.1 christos {
1311 1.1 christos BI opval = 0;
1312 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1313 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1314 1.1 christos }
1315 1.1 christos }
1316 1.1 christos }
1317 1.1 christos }
1318 1.1 christos
1319 1.1 christos #undef FLD
1320 1.1 christos }
1321 1.1 christos NEXT (vpc);
1322 1.1 christos
1323 1.1 christos CASE (sem, INSN_CMP_R_B_R) : /* cmp-r.b $Rs,$Rd */
1324 1.1 christos {
1325 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1326 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1327 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1328 1.1 christos int UNUSED written = 0;
1329 1.1 christos IADDR UNUSED pc = abuf->addr;
1330 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1331 1.1 christos
1332 1.1 christos {
1333 1.1 christos QI tmp_tmpopd;
1334 1.1 christos QI tmp_tmpops;
1335 1.1 christos BI tmp_carry;
1336 1.1 christos QI tmp_newval;
1337 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1338 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1339 1.1 christos tmp_carry = CPU (h_cbit);
1340 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1341 1.1 christos ((void) 0); /*nop*/
1342 1.1 christos {
1343 1.1 christos {
1344 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))));
1345 1.1 christos CPU (h_cbit) = opval;
1346 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1347 1.1 christos }
1348 1.1 christos {
1349 1.1 christos BI opval = LTQI (tmp_newval, 0);
1350 1.1 christos CPU (h_nbit) = opval;
1351 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1352 1.1 christos }
1353 1.1 christos {
1354 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1355 1.1 christos CPU (h_zbit) = opval;
1356 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1357 1.1 christos }
1358 1.1 christos {
1359 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)));
1360 1.1 christos CPU (h_vbit) = opval;
1361 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1362 1.1 christos }
1363 1.1 christos {
1364 1.1 christos {
1365 1.1 christos BI opval = 0;
1366 1.1 christos CPU (h_xbit) = opval;
1367 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1368 1.1 christos }
1369 1.1 christos {
1370 1.1 christos BI opval = 0;
1371 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1372 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1373 1.1 christos }
1374 1.1 christos }
1375 1.1 christos }
1376 1.1 christos }
1377 1.1 christos
1378 1.1 christos #undef FLD
1379 1.1 christos }
1380 1.1 christos NEXT (vpc);
1381 1.1 christos
1382 1.1 christos CASE (sem, INSN_CMP_R_W_R) : /* cmp-r.w $Rs,$Rd */
1383 1.1 christos {
1384 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1385 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1386 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1387 1.1 christos int UNUSED written = 0;
1388 1.1 christos IADDR UNUSED pc = abuf->addr;
1389 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1390 1.1 christos
1391 1.1 christos {
1392 1.1 christos HI tmp_tmpopd;
1393 1.1 christos HI tmp_tmpops;
1394 1.1 christos BI tmp_carry;
1395 1.1 christos HI tmp_newval;
1396 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1397 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1398 1.1 christos tmp_carry = CPU (h_cbit);
1399 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1400 1.1 christos ((void) 0); /*nop*/
1401 1.1 christos {
1402 1.1 christos {
1403 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))));
1404 1.1 christos CPU (h_cbit) = opval;
1405 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1406 1.1 christos }
1407 1.1 christos {
1408 1.1 christos BI opval = LTHI (tmp_newval, 0);
1409 1.1 christos CPU (h_nbit) = opval;
1410 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1411 1.1 christos }
1412 1.1 christos {
1413 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1414 1.1 christos CPU (h_zbit) = opval;
1415 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1416 1.1 christos }
1417 1.1 christos {
1418 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)));
1419 1.1 christos CPU (h_vbit) = opval;
1420 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1421 1.1 christos }
1422 1.1 christos {
1423 1.1 christos {
1424 1.1 christos BI opval = 0;
1425 1.1 christos CPU (h_xbit) = opval;
1426 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1427 1.1 christos }
1428 1.1 christos {
1429 1.1 christos BI opval = 0;
1430 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1431 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1432 1.1 christos }
1433 1.1 christos }
1434 1.1 christos }
1435 1.1 christos }
1436 1.1 christos
1437 1.1 christos #undef FLD
1438 1.1 christos }
1439 1.1 christos NEXT (vpc);
1440 1.1 christos
1441 1.1 christos CASE (sem, INSN_CMP_R_D_R) : /* cmp-r.d $Rs,$Rd */
1442 1.1 christos {
1443 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1444 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1445 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
1446 1.1 christos int UNUSED written = 0;
1447 1.1 christos IADDR UNUSED pc = abuf->addr;
1448 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1449 1.1 christos
1450 1.1 christos {
1451 1.1 christos SI tmp_tmpopd;
1452 1.1 christos SI tmp_tmpops;
1453 1.1 christos BI tmp_carry;
1454 1.1 christos SI tmp_newval;
1455 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
1456 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1457 1.1 christos tmp_carry = CPU (h_cbit);
1458 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1459 1.1 christos ((void) 0); /*nop*/
1460 1.1 christos {
1461 1.1 christos {
1462 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))));
1463 1.1 christos CPU (h_cbit) = opval;
1464 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1465 1.1 christos }
1466 1.1 christos {
1467 1.1 christos BI opval = LTSI (tmp_newval, 0);
1468 1.1 christos CPU (h_nbit) = opval;
1469 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1470 1.1 christos }
1471 1.1 christos {
1472 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1473 1.1 christos CPU (h_zbit) = opval;
1474 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1475 1.1 christos }
1476 1.1 christos {
1477 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)));
1478 1.1 christos CPU (h_vbit) = opval;
1479 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1480 1.1 christos }
1481 1.1 christos {
1482 1.1 christos {
1483 1.1 christos BI opval = 0;
1484 1.1 christos CPU (h_xbit) = opval;
1485 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1486 1.1 christos }
1487 1.1 christos {
1488 1.1 christos BI opval = 0;
1489 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1490 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1491 1.1 christos }
1492 1.1 christos }
1493 1.1 christos }
1494 1.1 christos }
1495 1.1 christos
1496 1.1 christos #undef FLD
1497 1.1 christos }
1498 1.1 christos NEXT (vpc);
1499 1.1 christos
1500 1.1 christos CASE (sem, INSN_CMP_M_B_M) : /* cmp-m.b [${Rs}${inc}],${Rd} */
1501 1.1 christos {
1502 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1503 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1504 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1505 1.1 christos int UNUSED written = 0;
1506 1.1 christos IADDR UNUSED pc = abuf->addr;
1507 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1508 1.1 christos
1509 1.1 christos {
1510 1.1 christos QI tmp_tmpopd;
1511 1.1 christos QI tmp_tmpops;
1512 1.1 christos BI tmp_carry;
1513 1.1 christos QI tmp_newval;
1514 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1515 1.1 christos QI tmp_tmp_mem;
1516 1.1 christos BI tmp_postinc;
1517 1.1 christos tmp_postinc = FLD (f_memmode);
1518 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1519 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
1520 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1521 1.1 christos {
1522 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1523 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
1524 1.1 christos }
1525 1.1 christos {
1526 1.1 christos SI opval = tmp_addr;
1527 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1528 1.1 christos written |= (1 << 9);
1529 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1530 1.1 christos }
1531 1.1 christos }
1532 1.1 christos }
1533 1.1 christos ; tmp_tmp_mem; });
1534 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1535 1.1 christos tmp_carry = CPU (h_cbit);
1536 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1537 1.1 christos ((void) 0); /*nop*/
1538 1.1 christos {
1539 1.1 christos {
1540 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))));
1541 1.1 christos CPU (h_cbit) = opval;
1542 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1543 1.1 christos }
1544 1.1 christos {
1545 1.1 christos BI opval = LTQI (tmp_newval, 0);
1546 1.1 christos CPU (h_nbit) = opval;
1547 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1548 1.1 christos }
1549 1.1 christos {
1550 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1551 1.1 christos CPU (h_zbit) = opval;
1552 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1553 1.1 christos }
1554 1.1 christos {
1555 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)));
1556 1.1 christos CPU (h_vbit) = opval;
1557 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1558 1.1 christos }
1559 1.1 christos {
1560 1.1 christos {
1561 1.1 christos BI opval = 0;
1562 1.1 christos CPU (h_xbit) = opval;
1563 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1564 1.1 christos }
1565 1.1 christos {
1566 1.1 christos BI opval = 0;
1567 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1568 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1569 1.1 christos }
1570 1.1 christos }
1571 1.1 christos }
1572 1.1 christos }
1573 1.1 christos
1574 1.1 christos abuf->written = written;
1575 1.1 christos #undef FLD
1576 1.1 christos }
1577 1.1 christos NEXT (vpc);
1578 1.1 christos
1579 1.1 christos CASE (sem, INSN_CMP_M_W_M) : /* cmp-m.w [${Rs}${inc}],${Rd} */
1580 1.1 christos {
1581 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1582 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1583 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1584 1.1 christos int UNUSED written = 0;
1585 1.1 christos IADDR UNUSED pc = abuf->addr;
1586 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1587 1.1 christos
1588 1.1 christos {
1589 1.1 christos HI tmp_tmpopd;
1590 1.1 christos HI tmp_tmpops;
1591 1.1 christos BI tmp_carry;
1592 1.1 christos HI tmp_newval;
1593 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1594 1.1 christos HI tmp_tmp_mem;
1595 1.1 christos BI tmp_postinc;
1596 1.1 christos tmp_postinc = FLD (f_memmode);
1597 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1598 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
1599 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1600 1.1 christos {
1601 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1602 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
1603 1.1 christos }
1604 1.1 christos {
1605 1.1 christos SI opval = tmp_addr;
1606 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1607 1.1 christos written |= (1 << 9);
1608 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1609 1.1 christos }
1610 1.1 christos }
1611 1.1 christos }
1612 1.1 christos ; tmp_tmp_mem; });
1613 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1614 1.1 christos tmp_carry = CPU (h_cbit);
1615 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1616 1.1 christos ((void) 0); /*nop*/
1617 1.1 christos {
1618 1.1 christos {
1619 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))));
1620 1.1 christos CPU (h_cbit) = opval;
1621 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1622 1.1 christos }
1623 1.1 christos {
1624 1.1 christos BI opval = LTHI (tmp_newval, 0);
1625 1.1 christos CPU (h_nbit) = opval;
1626 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1627 1.1 christos }
1628 1.1 christos {
1629 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1630 1.1 christos CPU (h_zbit) = opval;
1631 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1632 1.1 christos }
1633 1.1 christos {
1634 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)));
1635 1.1 christos CPU (h_vbit) = opval;
1636 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1637 1.1 christos }
1638 1.1 christos {
1639 1.1 christos {
1640 1.1 christos BI opval = 0;
1641 1.1 christos CPU (h_xbit) = opval;
1642 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1643 1.1 christos }
1644 1.1 christos {
1645 1.1 christos BI opval = 0;
1646 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1647 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1648 1.1 christos }
1649 1.1 christos }
1650 1.1 christos }
1651 1.1 christos }
1652 1.1 christos
1653 1.1 christos abuf->written = written;
1654 1.1 christos #undef FLD
1655 1.1 christos }
1656 1.1 christos NEXT (vpc);
1657 1.1 christos
1658 1.1 christos CASE (sem, INSN_CMP_M_D_M) : /* cmp-m.d [${Rs}${inc}],${Rd} */
1659 1.1 christos {
1660 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1661 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1662 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1663 1.1 christos int UNUSED written = 0;
1664 1.1 christos IADDR UNUSED pc = abuf->addr;
1665 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1666 1.1 christos
1667 1.1 christos {
1668 1.1 christos SI tmp_tmpopd;
1669 1.1 christos SI tmp_tmpops;
1670 1.1 christos BI tmp_carry;
1671 1.1 christos SI tmp_newval;
1672 1.1 christos tmp_tmpops = ({ SI tmp_addr;
1673 1.1 christos SI tmp_tmp_mem;
1674 1.1 christos BI tmp_postinc;
1675 1.1 christos tmp_postinc = FLD (f_memmode);
1676 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1677 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
1678 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1679 1.1 christos {
1680 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1681 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
1682 1.1 christos }
1683 1.1 christos {
1684 1.1 christos SI opval = tmp_addr;
1685 1.1 christos SET_H_GR (FLD (f_operand1), opval);
1686 1.1 christos written |= (1 << 9);
1687 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1688 1.1 christos }
1689 1.1 christos }
1690 1.1 christos }
1691 1.1 christos ; tmp_tmp_mem; });
1692 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1693 1.1 christos tmp_carry = CPU (h_cbit);
1694 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1695 1.1 christos ((void) 0); /*nop*/
1696 1.1 christos {
1697 1.1 christos {
1698 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))));
1699 1.1 christos CPU (h_cbit) = opval;
1700 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1701 1.1 christos }
1702 1.1 christos {
1703 1.1 christos BI opval = LTSI (tmp_newval, 0);
1704 1.1 christos CPU (h_nbit) = opval;
1705 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1706 1.1 christos }
1707 1.1 christos {
1708 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1709 1.1 christos CPU (h_zbit) = opval;
1710 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1711 1.1 christos }
1712 1.1 christos {
1713 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)));
1714 1.1 christos CPU (h_vbit) = opval;
1715 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1716 1.1 christos }
1717 1.1 christos {
1718 1.1 christos {
1719 1.1 christos BI opval = 0;
1720 1.1 christos CPU (h_xbit) = opval;
1721 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1722 1.1 christos }
1723 1.1 christos {
1724 1.1 christos BI opval = 0;
1725 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1726 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1727 1.1 christos }
1728 1.1 christos }
1729 1.1 christos }
1730 1.1 christos }
1731 1.1 christos
1732 1.1 christos abuf->written = written;
1733 1.1 christos #undef FLD
1734 1.1 christos }
1735 1.1 christos NEXT (vpc);
1736 1.1 christos
1737 1.1 christos CASE (sem, INSN_CMPCBR) : /* cmp.b $sconst8,$Rd */
1738 1.1 christos {
1739 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1740 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1741 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
1742 1.1 christos int UNUSED written = 0;
1743 1.1 christos IADDR UNUSED pc = abuf->addr;
1744 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1745 1.1 christos
1746 1.1 christos {
1747 1.1 christos QI tmp_tmpopd;
1748 1.1 christos QI tmp_tmpops;
1749 1.1 christos BI tmp_carry;
1750 1.1 christos QI tmp_newval;
1751 1.1 christos tmp_tmpops = TRUNCSIQI (FLD (f_indir_pc__byte));
1752 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1753 1.1 christos tmp_carry = CPU (h_cbit);
1754 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1755 1.1 christos ((void) 0); /*nop*/
1756 1.1 christos {
1757 1.1 christos {
1758 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))));
1759 1.1 christos CPU (h_cbit) = opval;
1760 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1761 1.1 christos }
1762 1.1 christos {
1763 1.1 christos BI opval = LTQI (tmp_newval, 0);
1764 1.1 christos CPU (h_nbit) = opval;
1765 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1766 1.1 christos }
1767 1.1 christos {
1768 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1769 1.1 christos CPU (h_zbit) = opval;
1770 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1771 1.1 christos }
1772 1.1 christos {
1773 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)));
1774 1.1 christos CPU (h_vbit) = opval;
1775 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1776 1.1 christos }
1777 1.1 christos {
1778 1.1 christos {
1779 1.1 christos BI opval = 0;
1780 1.1 christos CPU (h_xbit) = opval;
1781 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1782 1.1 christos }
1783 1.1 christos {
1784 1.1 christos BI opval = 0;
1785 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1786 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1787 1.1 christos }
1788 1.1 christos }
1789 1.1 christos }
1790 1.1 christos }
1791 1.1 christos
1792 1.1 christos #undef FLD
1793 1.1 christos }
1794 1.1 christos NEXT (vpc);
1795 1.1 christos
1796 1.1 christos CASE (sem, INSN_CMPCWR) : /* cmp.w $sconst16,$Rd */
1797 1.1 christos {
1798 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1799 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1800 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
1801 1.1 christos int UNUSED written = 0;
1802 1.1 christos IADDR UNUSED pc = abuf->addr;
1803 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1804 1.1 christos
1805 1.1 christos {
1806 1.1 christos HI tmp_tmpopd;
1807 1.1 christos HI tmp_tmpops;
1808 1.1 christos BI tmp_carry;
1809 1.1 christos HI tmp_newval;
1810 1.1 christos tmp_tmpops = TRUNCSIHI (FLD (f_indir_pc__word));
1811 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1812 1.1 christos tmp_carry = CPU (h_cbit);
1813 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1814 1.1 christos ((void) 0); /*nop*/
1815 1.1 christos {
1816 1.1 christos {
1817 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))));
1818 1.1 christos CPU (h_cbit) = opval;
1819 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1820 1.1 christos }
1821 1.1 christos {
1822 1.1 christos BI opval = LTHI (tmp_newval, 0);
1823 1.1 christos CPU (h_nbit) = opval;
1824 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1825 1.1 christos }
1826 1.1 christos {
1827 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1828 1.1 christos CPU (h_zbit) = opval;
1829 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1830 1.1 christos }
1831 1.1 christos {
1832 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)));
1833 1.1 christos CPU (h_vbit) = opval;
1834 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1835 1.1 christos }
1836 1.1 christos {
1837 1.1 christos {
1838 1.1 christos BI opval = 0;
1839 1.1 christos CPU (h_xbit) = opval;
1840 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1841 1.1 christos }
1842 1.1 christos {
1843 1.1 christos BI opval = 0;
1844 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1845 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1846 1.1 christos }
1847 1.1 christos }
1848 1.1 christos }
1849 1.1 christos }
1850 1.1 christos
1851 1.1 christos #undef FLD
1852 1.1 christos }
1853 1.1 christos NEXT (vpc);
1854 1.1 christos
1855 1.1 christos CASE (sem, INSN_CMPCDR) : /* cmp.d $const32,$Rd */
1856 1.1 christos {
1857 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1858 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1859 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
1860 1.1 christos int UNUSED written = 0;
1861 1.1 christos IADDR UNUSED pc = abuf->addr;
1862 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
1863 1.1 christos
1864 1.1 christos {
1865 1.1 christos SI tmp_tmpopd;
1866 1.1 christos SI tmp_tmpops;
1867 1.1 christos BI tmp_carry;
1868 1.1 christos SI tmp_newval;
1869 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
1870 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1871 1.1 christos tmp_carry = CPU (h_cbit);
1872 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1873 1.1 christos ((void) 0); /*nop*/
1874 1.1 christos {
1875 1.1 christos {
1876 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))));
1877 1.1 christos CPU (h_cbit) = opval;
1878 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1879 1.1 christos }
1880 1.1 christos {
1881 1.1 christos BI opval = LTSI (tmp_newval, 0);
1882 1.1 christos CPU (h_nbit) = opval;
1883 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1884 1.1 christos }
1885 1.1 christos {
1886 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1887 1.1 christos CPU (h_zbit) = opval;
1888 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1889 1.1 christos }
1890 1.1 christos {
1891 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)));
1892 1.1 christos CPU (h_vbit) = opval;
1893 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1894 1.1 christos }
1895 1.1 christos {
1896 1.1 christos {
1897 1.1 christos BI opval = 0;
1898 1.1 christos CPU (h_xbit) = opval;
1899 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1900 1.1 christos }
1901 1.1 christos {
1902 1.1 christos BI opval = 0;
1903 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1904 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1905 1.1 christos }
1906 1.1 christos }
1907 1.1 christos }
1908 1.1 christos }
1909 1.1 christos
1910 1.1 christos #undef FLD
1911 1.1 christos }
1912 1.1 christos NEXT (vpc);
1913 1.1 christos
1914 1.1 christos CASE (sem, INSN_CMPQ) : /* cmpq $i,$Rd */
1915 1.1 christos {
1916 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1917 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1918 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
1919 1.1 christos int UNUSED written = 0;
1920 1.1 christos IADDR UNUSED pc = abuf->addr;
1921 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1922 1.1 christos
1923 1.1 christos {
1924 1.1 christos SI tmp_tmpopd;
1925 1.1 christos SI tmp_tmpops;
1926 1.1 christos BI tmp_carry;
1927 1.1 christos SI tmp_newval;
1928 1.1 christos tmp_tmpops = FLD (f_s6);
1929 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
1930 1.1 christos tmp_carry = CPU (h_cbit);
1931 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
1932 1.1 christos ((void) 0); /*nop*/
1933 1.1 christos {
1934 1.1 christos {
1935 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))));
1936 1.1 christos CPU (h_cbit) = opval;
1937 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
1938 1.1 christos }
1939 1.1 christos {
1940 1.1 christos BI opval = LTSI (tmp_newval, 0);
1941 1.1 christos CPU (h_nbit) = opval;
1942 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
1943 1.1 christos }
1944 1.1 christos {
1945 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
1946 1.1 christos CPU (h_zbit) = opval;
1947 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
1948 1.1 christos }
1949 1.1 christos {
1950 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)));
1951 1.1 christos CPU (h_vbit) = opval;
1952 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
1953 1.1 christos }
1954 1.1 christos {
1955 1.1 christos {
1956 1.1 christos BI opval = 0;
1957 1.1 christos CPU (h_xbit) = opval;
1958 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
1959 1.1 christos }
1960 1.1 christos {
1961 1.1 christos BI opval = 0;
1962 1.1 christos SET_H_INSN_PREFIXED_P (opval);
1963 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
1964 1.1 christos }
1965 1.1 christos }
1966 1.1 christos }
1967 1.1 christos }
1968 1.1 christos
1969 1.1 christos #undef FLD
1970 1.1 christos }
1971 1.1 christos NEXT (vpc);
1972 1.1 christos
1973 1.1 christos CASE (sem, INSN_CMPS_M_B_M) : /* cmps-m.b [${Rs}${inc}],$Rd */
1974 1.1 christos {
1975 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1976 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1977 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
1978 1.1 christos int UNUSED written = 0;
1979 1.1 christos IADDR UNUSED pc = abuf->addr;
1980 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1981 1.1 christos
1982 1.1 christos {
1983 1.1 christos SI tmp_tmpopd;
1984 1.1 christos SI tmp_tmpops;
1985 1.1 christos BI tmp_carry;
1986 1.1 christos SI tmp_newval;
1987 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
1988 1.1 christos QI tmp_tmp_mem;
1989 1.1 christos BI tmp_postinc;
1990 1.1 christos tmp_postinc = FLD (f_memmode);
1991 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
1992 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
1993 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
1994 1.1 christos {
1995 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
1996 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
1997 1.1 christos }
1998 1.1 christos {
1999 1.1 christos SI opval = tmp_addr;
2000 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2001 1.1 christos written |= (1 << 9);
2002 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2003 1.1 christos }
2004 1.1 christos }
2005 1.1 christos }
2006 1.1 christos ; tmp_tmp_mem; }));
2007 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2008 1.1 christos tmp_carry = CPU (h_cbit);
2009 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2010 1.1 christos ((void) 0); /*nop*/
2011 1.1 christos {
2012 1.1 christos {
2013 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))));
2014 1.1 christos CPU (h_cbit) = opval;
2015 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2016 1.1 christos }
2017 1.1 christos {
2018 1.1 christos BI opval = LTSI (tmp_newval, 0);
2019 1.1 christos CPU (h_nbit) = opval;
2020 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2021 1.1 christos }
2022 1.1 christos {
2023 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2024 1.1 christos CPU (h_zbit) = opval;
2025 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2026 1.1 christos }
2027 1.1 christos {
2028 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)));
2029 1.1 christos CPU (h_vbit) = opval;
2030 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2031 1.1 christos }
2032 1.1 christos {
2033 1.1 christos {
2034 1.1 christos BI opval = 0;
2035 1.1 christos CPU (h_xbit) = opval;
2036 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2037 1.1 christos }
2038 1.1 christos {
2039 1.1 christos BI opval = 0;
2040 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2041 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2042 1.1 christos }
2043 1.1 christos }
2044 1.1 christos }
2045 1.1 christos }
2046 1.1 christos
2047 1.1 christos abuf->written = written;
2048 1.1 christos #undef FLD
2049 1.1 christos }
2050 1.1 christos NEXT (vpc);
2051 1.1 christos
2052 1.1 christos CASE (sem, INSN_CMPS_M_W_M) : /* cmps-m.w [${Rs}${inc}],$Rd */
2053 1.1 christos {
2054 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2055 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2056 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2057 1.1 christos int UNUSED written = 0;
2058 1.1 christos IADDR UNUSED pc = abuf->addr;
2059 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2060 1.1 christos
2061 1.1 christos {
2062 1.1 christos SI tmp_tmpopd;
2063 1.1 christos SI tmp_tmpops;
2064 1.1 christos BI tmp_carry;
2065 1.1 christos SI tmp_newval;
2066 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
2067 1.1 christos HI tmp_tmp_mem;
2068 1.1 christos BI tmp_postinc;
2069 1.1 christos tmp_postinc = FLD (f_memmode);
2070 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2071 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2072 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2073 1.1 christos {
2074 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2075 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2076 1.1 christos }
2077 1.1 christos {
2078 1.1 christos SI opval = tmp_addr;
2079 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2080 1.1 christos written |= (1 << 9);
2081 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2082 1.1 christos }
2083 1.1 christos }
2084 1.1 christos }
2085 1.1 christos ; tmp_tmp_mem; }));
2086 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2087 1.1 christos tmp_carry = CPU (h_cbit);
2088 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2089 1.1 christos ((void) 0); /*nop*/
2090 1.1 christos {
2091 1.1 christos {
2092 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))));
2093 1.1 christos CPU (h_cbit) = opval;
2094 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2095 1.1 christos }
2096 1.1 christos {
2097 1.1 christos BI opval = LTSI (tmp_newval, 0);
2098 1.1 christos CPU (h_nbit) = opval;
2099 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2100 1.1 christos }
2101 1.1 christos {
2102 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2103 1.1 christos CPU (h_zbit) = opval;
2104 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2105 1.1 christos }
2106 1.1 christos {
2107 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)));
2108 1.1 christos CPU (h_vbit) = opval;
2109 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2110 1.1 christos }
2111 1.1 christos {
2112 1.1 christos {
2113 1.1 christos BI opval = 0;
2114 1.1 christos CPU (h_xbit) = opval;
2115 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2116 1.1 christos }
2117 1.1 christos {
2118 1.1 christos BI opval = 0;
2119 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2120 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2121 1.1 christos }
2122 1.1 christos }
2123 1.1 christos }
2124 1.1 christos }
2125 1.1 christos
2126 1.1 christos abuf->written = written;
2127 1.1 christos #undef FLD
2128 1.1 christos }
2129 1.1 christos NEXT (vpc);
2130 1.1 christos
2131 1.1 christos CASE (sem, INSN_CMPSCBR) : /* [${Rs}${inc}],$Rd */
2132 1.1 christos {
2133 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2134 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2135 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2136 1.1 christos int UNUSED written = 0;
2137 1.1 christos IADDR UNUSED pc = abuf->addr;
2138 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2139 1.1 christos
2140 1.1 christos {
2141 1.1 christos SI tmp_tmpopd;
2142 1.1 christos SI tmp_tmpops;
2143 1.1 christos BI tmp_carry;
2144 1.1 christos SI tmp_newval;
2145 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
2146 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2147 1.1 christos tmp_carry = CPU (h_cbit);
2148 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2149 1.1 christos ((void) 0); /*nop*/
2150 1.1 christos {
2151 1.1 christos {
2152 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))));
2153 1.1 christos CPU (h_cbit) = opval;
2154 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2155 1.1 christos }
2156 1.1 christos {
2157 1.1 christos BI opval = LTSI (tmp_newval, 0);
2158 1.1 christos CPU (h_nbit) = opval;
2159 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2160 1.1 christos }
2161 1.1 christos {
2162 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2163 1.1 christos CPU (h_zbit) = opval;
2164 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2165 1.1 christos }
2166 1.1 christos {
2167 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)));
2168 1.1 christos CPU (h_vbit) = opval;
2169 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2170 1.1 christos }
2171 1.1 christos {
2172 1.1 christos {
2173 1.1 christos BI opval = 0;
2174 1.1 christos CPU (h_xbit) = opval;
2175 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2176 1.1 christos }
2177 1.1 christos {
2178 1.1 christos BI opval = 0;
2179 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2180 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2181 1.1 christos }
2182 1.1 christos }
2183 1.1 christos }
2184 1.1 christos }
2185 1.1 christos
2186 1.1 christos #undef FLD
2187 1.1 christos }
2188 1.1 christos NEXT (vpc);
2189 1.1 christos
2190 1.1 christos CASE (sem, INSN_CMPSCWR) : /* [${Rs}${inc}],$Rd */
2191 1.1 christos {
2192 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2193 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2194 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2195 1.1 christos int UNUSED written = 0;
2196 1.1 christos IADDR UNUSED pc = abuf->addr;
2197 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2198 1.1 christos
2199 1.1 christos {
2200 1.1 christos SI tmp_tmpopd;
2201 1.1 christos SI tmp_tmpops;
2202 1.1 christos BI tmp_carry;
2203 1.1 christos SI tmp_newval;
2204 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
2205 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2206 1.1 christos tmp_carry = CPU (h_cbit);
2207 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2208 1.1 christos ((void) 0); /*nop*/
2209 1.1 christos {
2210 1.1 christos {
2211 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))));
2212 1.1 christos CPU (h_cbit) = opval;
2213 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2214 1.1 christos }
2215 1.1 christos {
2216 1.1 christos BI opval = LTSI (tmp_newval, 0);
2217 1.1 christos CPU (h_nbit) = opval;
2218 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2219 1.1 christos }
2220 1.1 christos {
2221 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2222 1.1 christos CPU (h_zbit) = opval;
2223 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2224 1.1 christos }
2225 1.1 christos {
2226 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)));
2227 1.1 christos CPU (h_vbit) = opval;
2228 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2229 1.1 christos }
2230 1.1 christos {
2231 1.1 christos {
2232 1.1 christos BI opval = 0;
2233 1.1 christos CPU (h_xbit) = opval;
2234 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2235 1.1 christos }
2236 1.1 christos {
2237 1.1 christos BI opval = 0;
2238 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2239 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2240 1.1 christos }
2241 1.1 christos }
2242 1.1 christos }
2243 1.1 christos }
2244 1.1 christos
2245 1.1 christos #undef FLD
2246 1.1 christos }
2247 1.1 christos NEXT (vpc);
2248 1.1 christos
2249 1.1 christos CASE (sem, INSN_CMPU_M_B_M) : /* cmpu-m.b [${Rs}${inc}],$Rd */
2250 1.1 christos {
2251 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2252 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2253 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2254 1.1 christos int UNUSED written = 0;
2255 1.1 christos IADDR UNUSED pc = abuf->addr;
2256 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2257 1.1 christos
2258 1.1 christos {
2259 1.1 christos SI tmp_tmpopd;
2260 1.1 christos SI tmp_tmpops;
2261 1.1 christos BI tmp_carry;
2262 1.1 christos SI tmp_newval;
2263 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
2264 1.1 christos QI tmp_tmp_mem;
2265 1.1 christos BI tmp_postinc;
2266 1.1 christos tmp_postinc = FLD (f_memmode);
2267 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2268 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2269 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2270 1.1 christos {
2271 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2272 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2273 1.1 christos }
2274 1.1 christos {
2275 1.1 christos SI opval = tmp_addr;
2276 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2277 1.1 christos written |= (1 << 9);
2278 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2279 1.1 christos }
2280 1.1 christos }
2281 1.1 christos }
2282 1.1 christos ; tmp_tmp_mem; }));
2283 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2284 1.1 christos tmp_carry = CPU (h_cbit);
2285 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2286 1.1 christos ((void) 0); /*nop*/
2287 1.1 christos {
2288 1.1 christos {
2289 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))));
2290 1.1 christos CPU (h_cbit) = opval;
2291 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2292 1.1 christos }
2293 1.1 christos {
2294 1.1 christos BI opval = LTSI (tmp_newval, 0);
2295 1.1 christos CPU (h_nbit) = opval;
2296 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2297 1.1 christos }
2298 1.1 christos {
2299 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2300 1.1 christos CPU (h_zbit) = opval;
2301 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2302 1.1 christos }
2303 1.1 christos {
2304 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)));
2305 1.1 christos CPU (h_vbit) = opval;
2306 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2307 1.1 christos }
2308 1.1 christos {
2309 1.1 christos {
2310 1.1 christos BI opval = 0;
2311 1.1 christos CPU (h_xbit) = opval;
2312 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2313 1.1 christos }
2314 1.1 christos {
2315 1.1 christos BI opval = 0;
2316 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2317 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2318 1.1 christos }
2319 1.1 christos }
2320 1.1 christos }
2321 1.1 christos }
2322 1.1 christos
2323 1.1 christos abuf->written = written;
2324 1.1 christos #undef FLD
2325 1.1 christos }
2326 1.1 christos NEXT (vpc);
2327 1.1 christos
2328 1.1 christos CASE (sem, INSN_CMPU_M_W_M) : /* cmpu-m.w [${Rs}${inc}],$Rd */
2329 1.1 christos {
2330 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2331 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2332 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
2333 1.1 christos int UNUSED written = 0;
2334 1.1 christos IADDR UNUSED pc = abuf->addr;
2335 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2336 1.1 christos
2337 1.1 christos {
2338 1.1 christos SI tmp_tmpopd;
2339 1.1 christos SI tmp_tmpops;
2340 1.1 christos BI tmp_carry;
2341 1.1 christos SI tmp_newval;
2342 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
2343 1.1 christos HI tmp_tmp_mem;
2344 1.1 christos BI tmp_postinc;
2345 1.1 christos tmp_postinc = FLD (f_memmode);
2346 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2347 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2348 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2349 1.1 christos {
2350 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2351 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2352 1.1 christos }
2353 1.1 christos {
2354 1.1 christos SI opval = tmp_addr;
2355 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2356 1.1 christos written |= (1 << 9);
2357 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2358 1.1 christos }
2359 1.1 christos }
2360 1.1 christos }
2361 1.1 christos ; tmp_tmp_mem; }));
2362 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2363 1.1 christos tmp_carry = CPU (h_cbit);
2364 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2365 1.1 christos ((void) 0); /*nop*/
2366 1.1 christos {
2367 1.1 christos {
2368 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))));
2369 1.1 christos CPU (h_cbit) = opval;
2370 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2371 1.1 christos }
2372 1.1 christos {
2373 1.1 christos BI opval = LTSI (tmp_newval, 0);
2374 1.1 christos CPU (h_nbit) = opval;
2375 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2376 1.1 christos }
2377 1.1 christos {
2378 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2379 1.1 christos CPU (h_zbit) = opval;
2380 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2381 1.1 christos }
2382 1.1 christos {
2383 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)));
2384 1.1 christos CPU (h_vbit) = opval;
2385 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2386 1.1 christos }
2387 1.1 christos {
2388 1.1 christos {
2389 1.1 christos BI opval = 0;
2390 1.1 christos CPU (h_xbit) = opval;
2391 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2392 1.1 christos }
2393 1.1 christos {
2394 1.1 christos BI opval = 0;
2395 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2396 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2397 1.1 christos }
2398 1.1 christos }
2399 1.1 christos }
2400 1.1 christos }
2401 1.1 christos
2402 1.1 christos abuf->written = written;
2403 1.1 christos #undef FLD
2404 1.1 christos }
2405 1.1 christos NEXT (vpc);
2406 1.1 christos
2407 1.1 christos CASE (sem, INSN_CMPUCBR) : /* [${Rs}${inc}],$Rd */
2408 1.1 christos {
2409 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2410 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2411 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
2412 1.1 christos int UNUSED written = 0;
2413 1.1 christos IADDR UNUSED pc = abuf->addr;
2414 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2415 1.1 christos
2416 1.1 christos {
2417 1.1 christos SI tmp_tmpopd;
2418 1.1 christos SI tmp_tmpops;
2419 1.1 christos BI tmp_carry;
2420 1.1 christos SI tmp_newval;
2421 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
2422 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2423 1.1 christos tmp_carry = CPU (h_cbit);
2424 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2425 1.1 christos ((void) 0); /*nop*/
2426 1.1 christos {
2427 1.1 christos {
2428 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))));
2429 1.1 christos CPU (h_cbit) = opval;
2430 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2431 1.1 christos }
2432 1.1 christos {
2433 1.1 christos BI opval = LTSI (tmp_newval, 0);
2434 1.1 christos CPU (h_nbit) = opval;
2435 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2436 1.1 christos }
2437 1.1 christos {
2438 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2439 1.1 christos CPU (h_zbit) = opval;
2440 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2441 1.1 christos }
2442 1.1 christos {
2443 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)));
2444 1.1 christos CPU (h_vbit) = opval;
2445 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2446 1.1 christos }
2447 1.1 christos {
2448 1.1 christos {
2449 1.1 christos BI opval = 0;
2450 1.1 christos CPU (h_xbit) = opval;
2451 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2452 1.1 christos }
2453 1.1 christos {
2454 1.1 christos BI opval = 0;
2455 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2456 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2457 1.1 christos }
2458 1.1 christos }
2459 1.1 christos }
2460 1.1 christos }
2461 1.1 christos
2462 1.1 christos #undef FLD
2463 1.1 christos }
2464 1.1 christos NEXT (vpc);
2465 1.1 christos
2466 1.1 christos CASE (sem, INSN_CMPUCWR) : /* [${Rs}${inc}],$Rd */
2467 1.1 christos {
2468 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2469 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2470 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
2471 1.1 christos int UNUSED written = 0;
2472 1.1 christos IADDR UNUSED pc = abuf->addr;
2473 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2474 1.1 christos
2475 1.1 christos {
2476 1.1 christos SI tmp_tmpopd;
2477 1.1 christos SI tmp_tmpops;
2478 1.1 christos BI tmp_carry;
2479 1.1 christos SI tmp_newval;
2480 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
2481 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
2482 1.1 christos tmp_carry = CPU (h_cbit);
2483 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
2484 1.1 christos ((void) 0); /*nop*/
2485 1.1 christos {
2486 1.1 christos {
2487 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))));
2488 1.1 christos CPU (h_cbit) = opval;
2489 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
2490 1.1 christos }
2491 1.1 christos {
2492 1.1 christos BI opval = LTSI (tmp_newval, 0);
2493 1.1 christos CPU (h_nbit) = opval;
2494 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2495 1.1 christos }
2496 1.1 christos {
2497 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
2498 1.1 christos CPU (h_zbit) = opval;
2499 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2500 1.1 christos }
2501 1.1 christos {
2502 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)));
2503 1.1 christos CPU (h_vbit) = opval;
2504 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
2505 1.1 christos }
2506 1.1 christos {
2507 1.1 christos {
2508 1.1 christos BI opval = 0;
2509 1.1 christos CPU (h_xbit) = opval;
2510 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2511 1.1 christos }
2512 1.1 christos {
2513 1.1 christos BI opval = 0;
2514 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2515 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2516 1.1 christos }
2517 1.1 christos }
2518 1.1 christos }
2519 1.1 christos }
2520 1.1 christos
2521 1.1 christos #undef FLD
2522 1.1 christos }
2523 1.1 christos NEXT (vpc);
2524 1.1 christos
2525 1.1 christos CASE (sem, INSN_MOVE_M_B_M) : /* move-m.b [${Rs}${inc}],${Rd} */
2526 1.1 christos {
2527 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2528 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2529 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2530 1.1 christos int UNUSED written = 0;
2531 1.1 christos IADDR UNUSED pc = abuf->addr;
2532 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2533 1.1 christos
2534 1.1 christos {
2535 1.1 christos SI tmp_tmp;
2536 1.1 christos tmp_tmp = ({ SI tmp_addr;
2537 1.1 christos QI tmp_tmp_mem;
2538 1.1 christos BI tmp_postinc;
2539 1.1 christos tmp_postinc = FLD (f_memmode);
2540 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2541 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2542 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2543 1.1 christos {
2544 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2545 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2546 1.1 christos }
2547 1.1 christos {
2548 1.1 christos SI opval = tmp_addr;
2549 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2550 1.1 christos written |= (1 << 10);
2551 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2552 1.1 christos }
2553 1.1 christos }
2554 1.1 christos }
2555 1.1 christos ; tmp_tmp_mem; });
2556 1.1 christos {
2557 1.1 christos SI tmp_oldregval;
2558 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))));
2559 1.1 christos {
2560 1.1 christos SI opval = ORSI (ANDSI (tmp_tmp, 255), ANDSI (tmp_oldregval, 0xffffff00));
2561 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2562 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2563 1.1 christos }
2564 1.1 christos }
2565 1.1 christos {
2566 1.1 christos {
2567 1.1 christos BI opval = LTQI (tmp_tmp, 0);
2568 1.1 christos CPU (h_nbit) = opval;
2569 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2570 1.1 christos }
2571 1.1 christos {
2572 1.1 christos BI opval = ANDIF (EQQI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2573 1.1 christos CPU (h_zbit) = opval;
2574 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2575 1.1 christos }
2576 1.1 christos SET_H_CBIT_MOVE (0);
2577 1.1 christos SET_H_VBIT_MOVE (0);
2578 1.1 christos {
2579 1.1 christos {
2580 1.1 christos BI opval = 0;
2581 1.1 christos CPU (h_xbit) = opval;
2582 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2583 1.1 christos }
2584 1.1 christos {
2585 1.1 christos BI opval = 0;
2586 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2587 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2588 1.1 christos }
2589 1.1 christos }
2590 1.1 christos }
2591 1.1 christos }
2592 1.1 christos
2593 1.1 christos abuf->written = written;
2594 1.1 christos #undef FLD
2595 1.1 christos }
2596 1.1 christos NEXT (vpc);
2597 1.1 christos
2598 1.1 christos CASE (sem, INSN_MOVE_M_W_M) : /* move-m.w [${Rs}${inc}],${Rd} */
2599 1.1 christos {
2600 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2601 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2602 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2603 1.1 christos int UNUSED written = 0;
2604 1.1 christos IADDR UNUSED pc = abuf->addr;
2605 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2606 1.1 christos
2607 1.1 christos {
2608 1.1 christos SI tmp_tmp;
2609 1.1 christos tmp_tmp = ({ SI tmp_addr;
2610 1.1 christos HI tmp_tmp_mem;
2611 1.1 christos BI tmp_postinc;
2612 1.1 christos tmp_postinc = FLD (f_memmode);
2613 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2614 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2615 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2616 1.1 christos {
2617 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2618 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2619 1.1 christos }
2620 1.1 christos {
2621 1.1 christos SI opval = tmp_addr;
2622 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2623 1.1 christos written |= (1 << 10);
2624 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2625 1.1 christos }
2626 1.1 christos }
2627 1.1 christos }
2628 1.1 christos ; tmp_tmp_mem; });
2629 1.1 christos {
2630 1.1 christos SI tmp_oldregval;
2631 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))));
2632 1.1 christos {
2633 1.1 christos SI opval = ORSI (ANDSI (tmp_tmp, 65535), ANDSI (tmp_oldregval, 0xffff0000));
2634 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2635 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2636 1.1 christos }
2637 1.1 christos }
2638 1.1 christos {
2639 1.1 christos {
2640 1.1 christos BI opval = LTHI (tmp_tmp, 0);
2641 1.1 christos CPU (h_nbit) = opval;
2642 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2643 1.1 christos }
2644 1.1 christos {
2645 1.1 christos BI opval = ANDIF (EQHI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2646 1.1 christos CPU (h_zbit) = opval;
2647 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2648 1.1 christos }
2649 1.1 christos SET_H_CBIT_MOVE (0);
2650 1.1 christos SET_H_VBIT_MOVE (0);
2651 1.1 christos {
2652 1.1 christos {
2653 1.1 christos BI opval = 0;
2654 1.1 christos CPU (h_xbit) = opval;
2655 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2656 1.1 christos }
2657 1.1 christos {
2658 1.1 christos BI opval = 0;
2659 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2660 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2661 1.1 christos }
2662 1.1 christos }
2663 1.1 christos }
2664 1.1 christos }
2665 1.1 christos
2666 1.1 christos abuf->written = written;
2667 1.1 christos #undef FLD
2668 1.1 christos }
2669 1.1 christos NEXT (vpc);
2670 1.1 christos
2671 1.1 christos CASE (sem, INSN_MOVE_M_D_M) : /* move-m.d [${Rs}${inc}],${Rd} */
2672 1.1 christos {
2673 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2674 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2675 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
2676 1.1 christos int UNUSED written = 0;
2677 1.1 christos IADDR UNUSED pc = abuf->addr;
2678 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2679 1.1 christos
2680 1.1 christos {
2681 1.1 christos SI tmp_tmp;
2682 1.1 christos tmp_tmp = ({ SI tmp_addr;
2683 1.1 christos SI tmp_tmp_mem;
2684 1.1 christos BI tmp_postinc;
2685 1.1 christos tmp_postinc = FLD (f_memmode);
2686 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2687 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
2688 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2689 1.1 christos {
2690 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2691 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
2692 1.1 christos }
2693 1.1 christos {
2694 1.1 christos SI opval = tmp_addr;
2695 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2696 1.1 christos written |= (1 << 9);
2697 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2698 1.1 christos }
2699 1.1 christos }
2700 1.1 christos }
2701 1.1 christos ; tmp_tmp_mem; });
2702 1.1 christos {
2703 1.1 christos SI opval = tmp_tmp;
2704 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
2705 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2706 1.1 christos }
2707 1.1 christos {
2708 1.1 christos {
2709 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2710 1.1 christos CPU (h_nbit) = opval;
2711 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2712 1.1 christos }
2713 1.1 christos {
2714 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2715 1.1 christos CPU (h_zbit) = opval;
2716 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2717 1.1 christos }
2718 1.1 christos SET_H_CBIT_MOVE (0);
2719 1.1 christos SET_H_VBIT_MOVE (0);
2720 1.1 christos {
2721 1.1 christos {
2722 1.1 christos BI opval = 0;
2723 1.1 christos CPU (h_xbit) = opval;
2724 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2725 1.1 christos }
2726 1.1 christos {
2727 1.1 christos BI opval = 0;
2728 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2729 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2730 1.1 christos }
2731 1.1 christos }
2732 1.1 christos }
2733 1.1 christos }
2734 1.1 christos
2735 1.1 christos abuf->written = written;
2736 1.1 christos #undef FLD
2737 1.1 christos }
2738 1.1 christos NEXT (vpc);
2739 1.1 christos
2740 1.1 christos CASE (sem, INSN_MOVS_M_B_M) : /* movs-m.b [${Rs}${inc}],${Rd} */
2741 1.1 christos {
2742 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2743 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2744 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2745 1.1 christos int UNUSED written = 0;
2746 1.1 christos IADDR UNUSED pc = abuf->addr;
2747 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2748 1.1 christos
2749 1.1 christos {
2750 1.1 christos SI tmp_tmp;
2751 1.1 christos tmp_tmp = EXTQISI (({ SI tmp_addr;
2752 1.1 christos QI tmp_tmp_mem;
2753 1.1 christos BI tmp_postinc;
2754 1.1 christos tmp_postinc = FLD (f_memmode);
2755 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2756 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2757 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2758 1.1 christos {
2759 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2760 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2761 1.1 christos }
2762 1.1 christos {
2763 1.1 christos SI opval = tmp_addr;
2764 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2765 1.1 christos written |= (1 << 8);
2766 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2767 1.1 christos }
2768 1.1 christos }
2769 1.1 christos }
2770 1.1 christos ; tmp_tmp_mem; }));
2771 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2772 1.1 christos {
2773 1.1 christos SI opval = tmp_tmp;
2774 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2775 1.1 christos written |= (1 << 8);
2776 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2777 1.1 christos }
2778 1.1 christos } else {
2779 1.1 christos {
2780 1.1 christos SI opval = tmp_tmp;
2781 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2782 1.1 christos written |= (1 << 7);
2783 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2784 1.1 christos }
2785 1.1 christos }
2786 1.1 christos {
2787 1.1 christos {
2788 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2789 1.1 christos CPU (h_nbit) = opval;
2790 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2791 1.1 christos }
2792 1.1 christos {
2793 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2794 1.1 christos CPU (h_zbit) = opval;
2795 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2796 1.1 christos }
2797 1.1 christos SET_H_CBIT_MOVE (0);
2798 1.1 christos SET_H_VBIT_MOVE (0);
2799 1.1 christos {
2800 1.1 christos {
2801 1.1 christos BI opval = 0;
2802 1.1 christos CPU (h_xbit) = opval;
2803 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2804 1.1 christos }
2805 1.1 christos {
2806 1.1 christos BI opval = 0;
2807 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2808 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2809 1.1 christos }
2810 1.1 christos }
2811 1.1 christos }
2812 1.1 christos }
2813 1.1 christos
2814 1.1 christos abuf->written = written;
2815 1.1 christos #undef FLD
2816 1.1 christos }
2817 1.1 christos NEXT (vpc);
2818 1.1 christos
2819 1.1 christos CASE (sem, INSN_MOVS_M_W_M) : /* movs-m.w [${Rs}${inc}],${Rd} */
2820 1.1 christos {
2821 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2822 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2823 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2824 1.1 christos int UNUSED written = 0;
2825 1.1 christos IADDR UNUSED pc = abuf->addr;
2826 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2827 1.1 christos
2828 1.1 christos {
2829 1.1 christos SI tmp_tmp;
2830 1.1 christos tmp_tmp = EXTHISI (({ SI tmp_addr;
2831 1.1 christos HI tmp_tmp_mem;
2832 1.1 christos BI tmp_postinc;
2833 1.1 christos tmp_postinc = FLD (f_memmode);
2834 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2835 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2836 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2837 1.1 christos {
2838 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2839 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2840 1.1 christos }
2841 1.1 christos {
2842 1.1 christos SI opval = tmp_addr;
2843 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2844 1.1 christos written |= (1 << 8);
2845 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2846 1.1 christos }
2847 1.1 christos }
2848 1.1 christos }
2849 1.1 christos ; tmp_tmp_mem; }));
2850 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2851 1.1 christos {
2852 1.1 christos SI opval = tmp_tmp;
2853 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2854 1.1 christos written |= (1 << 8);
2855 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2856 1.1 christos }
2857 1.1 christos } else {
2858 1.1 christos {
2859 1.1 christos SI opval = tmp_tmp;
2860 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2861 1.1 christos written |= (1 << 7);
2862 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2863 1.1 christos }
2864 1.1 christos }
2865 1.1 christos {
2866 1.1 christos {
2867 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2868 1.1 christos CPU (h_nbit) = opval;
2869 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2870 1.1 christos }
2871 1.1 christos {
2872 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2873 1.1 christos CPU (h_zbit) = opval;
2874 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2875 1.1 christos }
2876 1.1 christos SET_H_CBIT_MOVE (0);
2877 1.1 christos SET_H_VBIT_MOVE (0);
2878 1.1 christos {
2879 1.1 christos {
2880 1.1 christos BI opval = 0;
2881 1.1 christos CPU (h_xbit) = opval;
2882 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2883 1.1 christos }
2884 1.1 christos {
2885 1.1 christos BI opval = 0;
2886 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2887 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2888 1.1 christos }
2889 1.1 christos }
2890 1.1 christos }
2891 1.1 christos }
2892 1.1 christos
2893 1.1 christos abuf->written = written;
2894 1.1 christos #undef FLD
2895 1.1 christos }
2896 1.1 christos NEXT (vpc);
2897 1.1 christos
2898 1.1 christos CASE (sem, INSN_MOVU_M_B_M) : /* movu-m.b [${Rs}${inc}],${Rd} */
2899 1.1 christos {
2900 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2901 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2902 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2903 1.1 christos int UNUSED written = 0;
2904 1.1 christos IADDR UNUSED pc = abuf->addr;
2905 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2906 1.1 christos
2907 1.1 christos {
2908 1.1 christos SI tmp_tmp;
2909 1.1 christos tmp_tmp = ZEXTQISI (({ SI tmp_addr;
2910 1.1 christos QI tmp_tmp_mem;
2911 1.1 christos BI tmp_postinc;
2912 1.1 christos tmp_postinc = FLD (f_memmode);
2913 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2914 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
2915 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2916 1.1 christos {
2917 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2918 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
2919 1.1 christos }
2920 1.1 christos {
2921 1.1 christos SI opval = tmp_addr;
2922 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2923 1.1 christos written |= (1 << 8);
2924 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2925 1.1 christos }
2926 1.1 christos }
2927 1.1 christos }
2928 1.1 christos ; tmp_tmp_mem; }));
2929 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
2930 1.1 christos {
2931 1.1 christos SI opval = tmp_tmp;
2932 1.1 christos SET_H_GR (FLD (f_operand1), opval);
2933 1.1 christos written |= (1 << 8);
2934 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2935 1.1 christos }
2936 1.1 christos } else {
2937 1.1 christos {
2938 1.1 christos SI opval = tmp_tmp;
2939 1.1 christos SET_H_GR (FLD (f_operand2), opval);
2940 1.1 christos written |= (1 << 7);
2941 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2942 1.1 christos }
2943 1.1 christos }
2944 1.1 christos {
2945 1.1 christos {
2946 1.1 christos BI opval = LTSI (tmp_tmp, 0);
2947 1.1 christos CPU (h_nbit) = opval;
2948 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
2949 1.1 christos }
2950 1.1 christos {
2951 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
2952 1.1 christos CPU (h_zbit) = opval;
2953 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
2954 1.1 christos }
2955 1.1 christos SET_H_CBIT_MOVE (0);
2956 1.1 christos SET_H_VBIT_MOVE (0);
2957 1.1 christos {
2958 1.1 christos {
2959 1.1 christos BI opval = 0;
2960 1.1 christos CPU (h_xbit) = opval;
2961 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
2962 1.1 christos }
2963 1.1 christos {
2964 1.1 christos BI opval = 0;
2965 1.1 christos SET_H_INSN_PREFIXED_P (opval);
2966 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
2967 1.1 christos }
2968 1.1 christos }
2969 1.1 christos }
2970 1.1 christos }
2971 1.1 christos
2972 1.1 christos abuf->written = written;
2973 1.1 christos #undef FLD
2974 1.1 christos }
2975 1.1 christos NEXT (vpc);
2976 1.1 christos
2977 1.1 christos CASE (sem, INSN_MOVU_M_W_M) : /* movu-m.w [${Rs}${inc}],${Rd} */
2978 1.1 christos {
2979 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2980 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2981 1.1 christos #define FLD(f) abuf->fields.sfmt_movs_m_b_m.f
2982 1.1 christos int UNUSED written = 0;
2983 1.1 christos IADDR UNUSED pc = abuf->addr;
2984 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2985 1.1 christos
2986 1.1 christos {
2987 1.1 christos SI tmp_tmp;
2988 1.1 christos tmp_tmp = ZEXTHISI (({ SI tmp_addr;
2989 1.1 christos HI tmp_tmp_mem;
2990 1.1 christos BI tmp_postinc;
2991 1.1 christos tmp_postinc = FLD (f_memmode);
2992 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
2993 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
2994 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
2995 1.1 christos {
2996 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
2997 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
2998 1.1 christos }
2999 1.1 christos {
3000 1.1 christos SI opval = tmp_addr;
3001 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3002 1.1 christos written |= (1 << 8);
3003 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3004 1.1 christos }
3005 1.1 christos }
3006 1.1 christos }
3007 1.1 christos ; tmp_tmp_mem; }));
3008 1.1 christos if (ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) {
3009 1.1 christos {
3010 1.1 christos SI opval = tmp_tmp;
3011 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3012 1.1 christos written |= (1 << 8);
3013 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3014 1.1 christos }
3015 1.1 christos } else {
3016 1.1 christos {
3017 1.1 christos SI opval = tmp_tmp;
3018 1.1 christos SET_H_GR (FLD (f_operand2), opval);
3019 1.1 christos written |= (1 << 7);
3020 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3021 1.1 christos }
3022 1.1 christos }
3023 1.1 christos {
3024 1.1 christos {
3025 1.1 christos BI opval = LTSI (tmp_tmp, 0);
3026 1.1 christos CPU (h_nbit) = opval;
3027 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
3028 1.1 christos }
3029 1.1 christos {
3030 1.1 christos BI opval = ANDIF (EQSI (tmp_tmp, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
3031 1.1 christos CPU (h_zbit) = opval;
3032 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
3033 1.1 christos }
3034 1.1 christos SET_H_CBIT_MOVE (0);
3035 1.1 christos SET_H_VBIT_MOVE (0);
3036 1.1 christos {
3037 1.1 christos {
3038 1.1 christos BI opval = 0;
3039 1.1 christos CPU (h_xbit) = opval;
3040 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3041 1.1 christos }
3042 1.1 christos {
3043 1.1 christos BI opval = 0;
3044 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3045 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3046 1.1 christos }
3047 1.1 christos }
3048 1.1 christos }
3049 1.1 christos }
3050 1.1 christos
3051 1.1 christos abuf->written = written;
3052 1.1 christos #undef FLD
3053 1.1 christos }
3054 1.1 christos NEXT (vpc);
3055 1.1 christos
3056 1.1 christos CASE (sem, INSN_MOVE_R_SPRV32) : /* move ${Rs},${Pd} */
3057 1.1 christos {
3058 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3059 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3060 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
3061 1.1 christos int UNUSED written = 0;
3062 1.1 christos IADDR UNUSED pc = abuf->addr;
3063 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3064 1.1 christos
3065 1.1 christos {
3066 1.1 christos SI tmp_tmp;
3067 1.1 christos SI tmp_rno;
3068 1.1 christos tmp_tmp = GET_H_GR (FLD (f_operand1));
3069 1.1 christos tmp_rno = FLD (f_operand2);
3070 1.1 christos if (ORIF (ORIF (EQSI (tmp_rno, 0), EQSI (tmp_rno, 1)), ORIF (EQSI (tmp_rno, 4), EQSI (tmp_rno, 8)))) {
3071 1.1 christos cgen_rtx_error (current_cpu, "move-r-spr: trying to set a read-only special register");
3072 1.1 christos }
3073 1.1 christos else {
3074 1.1 christos {
3075 1.1 christos SI opval = tmp_tmp;
3076 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3077 1.1 christos written |= (1 << 2);
3078 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3079 1.1 christos }
3080 1.1 christos }
3081 1.1 christos {
3082 1.1 christos {
3083 1.1 christos BI opval = 0;
3084 1.1 christos CPU (h_xbit) = opval;
3085 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3086 1.1 christos }
3087 1.1 christos {
3088 1.1 christos BI opval = 0;
3089 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3090 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3091 1.1 christos }
3092 1.1 christos }
3093 1.1 christos }
3094 1.1 christos
3095 1.1 christos abuf->written = written;
3096 1.1 christos #undef FLD
3097 1.1 christos }
3098 1.1 christos NEXT (vpc);
3099 1.1 christos
3100 1.1 christos CASE (sem, INSN_MOVE_SPR_RV32) : /* move ${Ps},${Rd-sfield} */
3101 1.1 christos {
3102 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3103 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3104 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
3105 1.1 christos int UNUSED written = 0;
3106 1.1 christos IADDR UNUSED pc = abuf->addr;
3107 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3108 1.1 christos
3109 1.1 christos {
3110 1.1 christos SI tmp_grno;
3111 1.1 christos SI tmp_prno;
3112 1.1 christos SI tmp_newval;
3113 1.1 christos tmp_prno = FLD (f_operand2);
3114 1.1 christos tmp_newval = GET_H_SR (FLD (f_operand2));
3115 1.1 christos if (EQSI (tmp_prno, 2)) {
3116 1.1 christos {
3117 1.1 christos SI opval = tmp_newval;
3118 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3119 1.1 christos written |= (1 << 4);
3120 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3121 1.1 christos }
3122 1.1 christos }
3123 1.1 christos else if (EQSI (tmp_prno, 3)) {
3124 1.1 christos {
3125 1.1 christos SI tmp_oldregval;
3126 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3127 1.1 christos {
3128 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3129 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3130 1.1 christos written |= (1 << 4);
3131 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3132 1.1 christos }
3133 1.1 christos }
3134 1.1 christos }
3135 1.1 christos else if (EQSI (tmp_prno, 5)) {
3136 1.1 christos {
3137 1.1 christos SI opval = tmp_newval;
3138 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3139 1.1 christos written |= (1 << 4);
3140 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3141 1.1 christos }
3142 1.1 christos }
3143 1.1 christos else if (EQSI (tmp_prno, 6)) {
3144 1.1 christos {
3145 1.1 christos SI opval = tmp_newval;
3146 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3147 1.1 christos written |= (1 << 4);
3148 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3149 1.1 christos }
3150 1.1 christos }
3151 1.1 christos else if (EQSI (tmp_prno, 7)) {
3152 1.1 christos {
3153 1.1 christos SI opval = tmp_newval;
3154 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3155 1.1 christos written |= (1 << 4);
3156 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3157 1.1 christos }
3158 1.1 christos }
3159 1.1 christos else if (EQSI (tmp_prno, 9)) {
3160 1.1 christos {
3161 1.1 christos SI opval = tmp_newval;
3162 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3163 1.1 christos written |= (1 << 4);
3164 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3165 1.1 christos }
3166 1.1 christos }
3167 1.1 christos else if (EQSI (tmp_prno, 10)) {
3168 1.1 christos {
3169 1.1 christos SI opval = tmp_newval;
3170 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3171 1.1 christos written |= (1 << 4);
3172 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3173 1.1 christos }
3174 1.1 christos }
3175 1.1 christos else if (EQSI (tmp_prno, 11)) {
3176 1.1 christos {
3177 1.1 christos SI opval = tmp_newval;
3178 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3179 1.1 christos written |= (1 << 4);
3180 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3181 1.1 christos }
3182 1.1 christos }
3183 1.1 christos else if (EQSI (tmp_prno, 12)) {
3184 1.1 christos {
3185 1.1 christos SI opval = tmp_newval;
3186 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3187 1.1 christos written |= (1 << 4);
3188 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3189 1.1 christos }
3190 1.1 christos }
3191 1.1 christos else if (EQSI (tmp_prno, 13)) {
3192 1.1 christos {
3193 1.1 christos SI opval = tmp_newval;
3194 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3195 1.1 christos written |= (1 << 4);
3196 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3197 1.1 christos }
3198 1.1 christos }
3199 1.1 christos else if (EQSI (tmp_prno, 14)) {
3200 1.1 christos {
3201 1.1 christos SI opval = tmp_newval;
3202 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3203 1.1 christos written |= (1 << 4);
3204 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3205 1.1 christos }
3206 1.1 christos }
3207 1.1 christos else if (EQSI (tmp_prno, 15)) {
3208 1.1 christos {
3209 1.1 christos SI opval = tmp_newval;
3210 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3211 1.1 christos written |= (1 << 4);
3212 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3213 1.1 christos }
3214 1.1 christos }
3215 1.1 christos else if (EQSI (tmp_prno, 0)) {
3216 1.1 christos {
3217 1.1 christos SI tmp_oldregval;
3218 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3219 1.1 christos {
3220 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3221 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3222 1.1 christos written |= (1 << 4);
3223 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3224 1.1 christos }
3225 1.1 christos }
3226 1.1 christos }
3227 1.1 christos else if (EQSI (tmp_prno, 1)) {
3228 1.1 christos {
3229 1.1 christos SI tmp_oldregval;
3230 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3231 1.1 christos {
3232 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
3233 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3234 1.1 christos written |= (1 << 4);
3235 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3236 1.1 christos }
3237 1.1 christos }
3238 1.1 christos }
3239 1.1 christos else if (EQSI (tmp_prno, 4)) {
3240 1.1 christos {
3241 1.1 christos SI tmp_oldregval;
3242 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand1));
3243 1.1 christos {
3244 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
3245 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3246 1.1 christos written |= (1 << 4);
3247 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3248 1.1 christos }
3249 1.1 christos }
3250 1.1 christos }
3251 1.1 christos else if (EQSI (tmp_prno, 8)) {
3252 1.1 christos {
3253 1.1 christos SI opval = tmp_newval;
3254 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3255 1.1 christos written |= (1 << 4);
3256 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3257 1.1 christos }
3258 1.1 christos }
3259 1.1 christos else {
3260 1.1 christos cgen_rtx_error (current_cpu, "move-spr-r from unimplemented register");
3261 1.1 christos }
3262 1.1 christos {
3263 1.1 christos {
3264 1.1 christos BI opval = 0;
3265 1.1 christos CPU (h_xbit) = opval;
3266 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3267 1.1 christos }
3268 1.1 christos {
3269 1.1 christos BI opval = 0;
3270 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3271 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3272 1.1 christos }
3273 1.1 christos }
3274 1.1 christos }
3275 1.1 christos
3276 1.1 christos abuf->written = written;
3277 1.1 christos #undef FLD
3278 1.1 christos }
3279 1.1 christos NEXT (vpc);
3280 1.1 christos
3281 1.1 christos CASE (sem, INSN_MOVE_M_SPRV32) : /* move [${Rs}${inc}],${Pd} */
3282 1.1 christos {
3283 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3284 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3285 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
3286 1.1 christos int UNUSED written = 0;
3287 1.1 christos IADDR UNUSED pc = abuf->addr;
3288 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3289 1.1 christos
3290 1.1 christos {
3291 1.1 christos SI tmp_rno;
3292 1.1 christos SI tmp_newval;
3293 1.1 christos tmp_rno = FLD (f_operand2);
3294 1.1 christos if (EQSI (tmp_rno, 2)) {
3295 1.1 christos tmp_newval = ({ SI tmp_addr;
3296 1.1 christos SI tmp_tmp_mem;
3297 1.1 christos BI tmp_postinc;
3298 1.1 christos tmp_postinc = FLD (f_memmode);
3299 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3300 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3301 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3302 1.1 christos {
3303 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3304 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3305 1.1 christos }
3306 1.1 christos {
3307 1.1 christos SI opval = tmp_addr;
3308 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3309 1.1 christos written |= (1 << 8);
3310 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3311 1.1 christos }
3312 1.1 christos }
3313 1.1 christos }
3314 1.1 christos ; tmp_tmp_mem; });
3315 1.1 christos }
3316 1.1 christos else if (EQSI (tmp_rno, 3)) {
3317 1.1 christos tmp_newval = EXTQISI (({ SI tmp_addr;
3318 1.1 christos QI tmp_tmp_mem;
3319 1.1 christos BI tmp_postinc;
3320 1.1 christos tmp_postinc = FLD (f_memmode);
3321 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3322 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
3323 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3324 1.1 christos {
3325 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3326 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
3327 1.1 christos }
3328 1.1 christos {
3329 1.1 christos SI opval = tmp_addr;
3330 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3331 1.1 christos written |= (1 << 8);
3332 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3333 1.1 christos }
3334 1.1 christos }
3335 1.1 christos }
3336 1.1 christos ; tmp_tmp_mem; }));
3337 1.1 christos }
3338 1.1 christos else if (EQSI (tmp_rno, 5)) {
3339 1.1 christos tmp_newval = ({ SI tmp_addr;
3340 1.1 christos SI tmp_tmp_mem;
3341 1.1 christos BI tmp_postinc;
3342 1.1 christos tmp_postinc = FLD (f_memmode);
3343 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3344 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3345 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3346 1.1 christos {
3347 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3348 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3349 1.1 christos }
3350 1.1 christos {
3351 1.1 christos SI opval = tmp_addr;
3352 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3353 1.1 christos written |= (1 << 8);
3354 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3355 1.1 christos }
3356 1.1 christos }
3357 1.1 christos }
3358 1.1 christos ; tmp_tmp_mem; });
3359 1.1 christos }
3360 1.1 christos else if (EQSI (tmp_rno, 6)) {
3361 1.1 christos tmp_newval = ({ SI tmp_addr;
3362 1.1 christos SI tmp_tmp_mem;
3363 1.1 christos BI tmp_postinc;
3364 1.1 christos tmp_postinc = FLD (f_memmode);
3365 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3366 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3367 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3368 1.1 christos {
3369 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3370 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3371 1.1 christos }
3372 1.1 christos {
3373 1.1 christos SI opval = tmp_addr;
3374 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3375 1.1 christos written |= (1 << 8);
3376 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3377 1.1 christos }
3378 1.1 christos }
3379 1.1 christos }
3380 1.1 christos ; tmp_tmp_mem; });
3381 1.1 christos }
3382 1.1 christos else if (EQSI (tmp_rno, 7)) {
3383 1.1 christos tmp_newval = ({ SI tmp_addr;
3384 1.1 christos SI tmp_tmp_mem;
3385 1.1 christos BI tmp_postinc;
3386 1.1 christos tmp_postinc = FLD (f_memmode);
3387 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3388 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3389 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3390 1.1 christos {
3391 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3392 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3393 1.1 christos }
3394 1.1 christos {
3395 1.1 christos SI opval = tmp_addr;
3396 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3397 1.1 christos written |= (1 << 8);
3398 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3399 1.1 christos }
3400 1.1 christos }
3401 1.1 christos }
3402 1.1 christos ; tmp_tmp_mem; });
3403 1.1 christos }
3404 1.1 christos else if (EQSI (tmp_rno, 9)) {
3405 1.1 christos tmp_newval = ({ SI tmp_addr;
3406 1.1 christos SI tmp_tmp_mem;
3407 1.1 christos BI tmp_postinc;
3408 1.1 christos tmp_postinc = FLD (f_memmode);
3409 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3410 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3411 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3412 1.1 christos {
3413 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3414 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3415 1.1 christos }
3416 1.1 christos {
3417 1.1 christos SI opval = tmp_addr;
3418 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3419 1.1 christos written |= (1 << 8);
3420 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3421 1.1 christos }
3422 1.1 christos }
3423 1.1 christos }
3424 1.1 christos ; tmp_tmp_mem; });
3425 1.1 christos }
3426 1.1 christos else if (EQSI (tmp_rno, 10)) {
3427 1.1 christos tmp_newval = ({ SI tmp_addr;
3428 1.1 christos SI tmp_tmp_mem;
3429 1.1 christos BI tmp_postinc;
3430 1.1 christos tmp_postinc = FLD (f_memmode);
3431 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3432 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3433 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3434 1.1 christos {
3435 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3436 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3437 1.1 christos }
3438 1.1 christos {
3439 1.1 christos SI opval = tmp_addr;
3440 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3441 1.1 christos written |= (1 << 8);
3442 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3443 1.1 christos }
3444 1.1 christos }
3445 1.1 christos }
3446 1.1 christos ; tmp_tmp_mem; });
3447 1.1 christos }
3448 1.1 christos else if (EQSI (tmp_rno, 11)) {
3449 1.1 christos tmp_newval = ({ SI tmp_addr;
3450 1.1 christos SI tmp_tmp_mem;
3451 1.1 christos BI tmp_postinc;
3452 1.1 christos tmp_postinc = FLD (f_memmode);
3453 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3454 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3455 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3456 1.1 christos {
3457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3459 1.1 christos }
3460 1.1 christos {
3461 1.1 christos SI opval = tmp_addr;
3462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3463 1.1 christos written |= (1 << 8);
3464 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3465 1.1 christos }
3466 1.1 christos }
3467 1.1 christos }
3468 1.1 christos ; tmp_tmp_mem; });
3469 1.1 christos }
3470 1.1 christos else if (EQSI (tmp_rno, 12)) {
3471 1.1 christos tmp_newval = ({ SI tmp_addr;
3472 1.1 christos SI tmp_tmp_mem;
3473 1.1 christos BI tmp_postinc;
3474 1.1 christos tmp_postinc = FLD (f_memmode);
3475 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3476 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3477 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3478 1.1 christos {
3479 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3480 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3481 1.1 christos }
3482 1.1 christos {
3483 1.1 christos SI opval = tmp_addr;
3484 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3485 1.1 christos written |= (1 << 8);
3486 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3487 1.1 christos }
3488 1.1 christos }
3489 1.1 christos }
3490 1.1 christos ; tmp_tmp_mem; });
3491 1.1 christos }
3492 1.1 christos else if (EQSI (tmp_rno, 13)) {
3493 1.1 christos tmp_newval = ({ SI tmp_addr;
3494 1.1 christos SI tmp_tmp_mem;
3495 1.1 christos BI tmp_postinc;
3496 1.1 christos tmp_postinc = FLD (f_memmode);
3497 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3498 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3499 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3500 1.1 christos {
3501 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3502 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3503 1.1 christos }
3504 1.1 christos {
3505 1.1 christos SI opval = tmp_addr;
3506 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3507 1.1 christos written |= (1 << 8);
3508 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3509 1.1 christos }
3510 1.1 christos }
3511 1.1 christos }
3512 1.1 christos ; tmp_tmp_mem; });
3513 1.1 christos }
3514 1.1 christos else if (EQSI (tmp_rno, 14)) {
3515 1.1 christos tmp_newval = ({ SI tmp_addr;
3516 1.1 christos SI tmp_tmp_mem;
3517 1.1 christos BI tmp_postinc;
3518 1.1 christos tmp_postinc = FLD (f_memmode);
3519 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3520 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3521 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3522 1.1 christos {
3523 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3524 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3525 1.1 christos }
3526 1.1 christos {
3527 1.1 christos SI opval = tmp_addr;
3528 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3529 1.1 christos written |= (1 << 8);
3530 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3531 1.1 christos }
3532 1.1 christos }
3533 1.1 christos }
3534 1.1 christos ; tmp_tmp_mem; });
3535 1.1 christos }
3536 1.1 christos else if (EQSI (tmp_rno, 15)) {
3537 1.1 christos tmp_newval = ({ SI tmp_addr;
3538 1.1 christos SI tmp_tmp_mem;
3539 1.1 christos BI tmp_postinc;
3540 1.1 christos tmp_postinc = FLD (f_memmode);
3541 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3542 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
3543 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
3544 1.1 christos {
3545 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
3546 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
3547 1.1 christos }
3548 1.1 christos {
3549 1.1 christos SI opval = tmp_addr;
3550 1.1 christos SET_H_GR (FLD (f_operand1), opval);
3551 1.1 christos written |= (1 << 8);
3552 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3553 1.1 christos }
3554 1.1 christos }
3555 1.1 christos }
3556 1.1 christos ; tmp_tmp_mem; });
3557 1.1 christos }
3558 1.1 christos else {
3559 1.1 christos cgen_rtx_error (current_cpu, "Trying to set unimplemented special register");
3560 1.1 christos }
3561 1.1 christos {
3562 1.1 christos SI opval = tmp_newval;
3563 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3564 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3565 1.1 christos }
3566 1.1 christos {
3567 1.1 christos {
3568 1.1 christos BI opval = 0;
3569 1.1 christos CPU (h_xbit) = opval;
3570 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3571 1.1 christos }
3572 1.1 christos {
3573 1.1 christos BI opval = 0;
3574 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3575 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3576 1.1 christos }
3577 1.1 christos }
3578 1.1 christos }
3579 1.1 christos
3580 1.1 christos abuf->written = written;
3581 1.1 christos #undef FLD
3582 1.1 christos }
3583 1.1 christos NEXT (vpc);
3584 1.1 christos
3585 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P2) : /* move ${const32},${Pd} */
3586 1.1 christos {
3587 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3588 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3589 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3590 1.1 christos int UNUSED written = 0;
3591 1.1 christos IADDR UNUSED pc = abuf->addr;
3592 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3593 1.1 christos
3594 1.1 christos {
3595 1.1 christos {
3596 1.1 christos SI opval = FLD (f_indir_pc__dword);
3597 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3598 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3599 1.1 christos }
3600 1.1 christos {
3601 1.1 christos {
3602 1.1 christos BI opval = 0;
3603 1.1 christos CPU (h_xbit) = opval;
3604 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3605 1.1 christos }
3606 1.1 christos {
3607 1.1 christos BI opval = 0;
3608 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3609 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3610 1.1 christos }
3611 1.1 christos }
3612 1.1 christos }
3613 1.1 christos
3614 1.1 christos #undef FLD
3615 1.1 christos }
3616 1.1 christos NEXT (vpc);
3617 1.1 christos
3618 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P3) : /* move ${const32},${Pd} */
3619 1.1 christos {
3620 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3621 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3622 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3623 1.1 christos int UNUSED written = 0;
3624 1.1 christos IADDR UNUSED pc = abuf->addr;
3625 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3626 1.1 christos
3627 1.1 christos {
3628 1.1 christos {
3629 1.1 christos SI opval = FLD (f_indir_pc__dword);
3630 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3631 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3632 1.1 christos }
3633 1.1 christos {
3634 1.1 christos {
3635 1.1 christos BI opval = 0;
3636 1.1 christos CPU (h_xbit) = opval;
3637 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3638 1.1 christos }
3639 1.1 christos {
3640 1.1 christos BI opval = 0;
3641 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3642 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3643 1.1 christos }
3644 1.1 christos }
3645 1.1 christos }
3646 1.1 christos
3647 1.1 christos #undef FLD
3648 1.1 christos }
3649 1.1 christos NEXT (vpc);
3650 1.1 christos
3651 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P5) : /* move ${const32},${Pd} */
3652 1.1 christos {
3653 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3654 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3655 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3656 1.1 christos int UNUSED written = 0;
3657 1.1 christos IADDR UNUSED pc = abuf->addr;
3658 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3659 1.1 christos
3660 1.1 christos {
3661 1.1 christos {
3662 1.1 christos SI opval = FLD (f_indir_pc__dword);
3663 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3664 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3665 1.1 christos }
3666 1.1 christos {
3667 1.1 christos {
3668 1.1 christos BI opval = 0;
3669 1.1 christos CPU (h_xbit) = opval;
3670 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3671 1.1 christos }
3672 1.1 christos {
3673 1.1 christos BI opval = 0;
3674 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3675 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3676 1.1 christos }
3677 1.1 christos }
3678 1.1 christos }
3679 1.1 christos
3680 1.1 christos #undef FLD
3681 1.1 christos }
3682 1.1 christos NEXT (vpc);
3683 1.1 christos
3684 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P6) : /* move ${const32},${Pd} */
3685 1.1 christos {
3686 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3687 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3688 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3689 1.1 christos int UNUSED written = 0;
3690 1.1 christos IADDR UNUSED pc = abuf->addr;
3691 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3692 1.1 christos
3693 1.1 christos {
3694 1.1 christos {
3695 1.1 christos SI opval = FLD (f_indir_pc__dword);
3696 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3697 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3698 1.1 christos }
3699 1.1 christos {
3700 1.1 christos {
3701 1.1 christos BI opval = 0;
3702 1.1 christos CPU (h_xbit) = opval;
3703 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3704 1.1 christos }
3705 1.1 christos {
3706 1.1 christos BI opval = 0;
3707 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3708 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3709 1.1 christos }
3710 1.1 christos }
3711 1.1 christos }
3712 1.1 christos
3713 1.1 christos #undef FLD
3714 1.1 christos }
3715 1.1 christos NEXT (vpc);
3716 1.1 christos
3717 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P7) : /* move ${const32},${Pd} */
3718 1.1 christos {
3719 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3720 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3721 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3722 1.1 christos int UNUSED written = 0;
3723 1.1 christos IADDR UNUSED pc = abuf->addr;
3724 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3725 1.1 christos
3726 1.1 christos {
3727 1.1 christos {
3728 1.1 christos SI opval = FLD (f_indir_pc__dword);
3729 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3730 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3731 1.1 christos }
3732 1.1 christos {
3733 1.1 christos {
3734 1.1 christos BI opval = 0;
3735 1.1 christos CPU (h_xbit) = opval;
3736 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3737 1.1 christos }
3738 1.1 christos {
3739 1.1 christos BI opval = 0;
3740 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3741 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3742 1.1 christos }
3743 1.1 christos }
3744 1.1 christos }
3745 1.1 christos
3746 1.1 christos #undef FLD
3747 1.1 christos }
3748 1.1 christos NEXT (vpc);
3749 1.1 christos
3750 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P9) : /* move ${const32},${Pd} */
3751 1.1 christos {
3752 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3753 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3754 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3755 1.1 christos int UNUSED written = 0;
3756 1.1 christos IADDR UNUSED pc = abuf->addr;
3757 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3758 1.1 christos
3759 1.1 christos {
3760 1.1 christos {
3761 1.1 christos SI opval = FLD (f_indir_pc__dword);
3762 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3763 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3764 1.1 christos }
3765 1.1 christos {
3766 1.1 christos {
3767 1.1 christos BI opval = 0;
3768 1.1 christos CPU (h_xbit) = opval;
3769 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3770 1.1 christos }
3771 1.1 christos {
3772 1.1 christos BI opval = 0;
3773 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3774 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3775 1.1 christos }
3776 1.1 christos }
3777 1.1 christos }
3778 1.1 christos
3779 1.1 christos #undef FLD
3780 1.1 christos }
3781 1.1 christos NEXT (vpc);
3782 1.1 christos
3783 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P10) : /* move ${const32},${Pd} */
3784 1.1 christos {
3785 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3786 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3787 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3788 1.1 christos int UNUSED written = 0;
3789 1.1 christos IADDR UNUSED pc = abuf->addr;
3790 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3791 1.1 christos
3792 1.1 christos {
3793 1.1 christos {
3794 1.1 christos SI opval = FLD (f_indir_pc__dword);
3795 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3796 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3797 1.1 christos }
3798 1.1 christos {
3799 1.1 christos {
3800 1.1 christos BI opval = 0;
3801 1.1 christos CPU (h_xbit) = opval;
3802 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3803 1.1 christos }
3804 1.1 christos {
3805 1.1 christos BI opval = 0;
3806 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3807 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3808 1.1 christos }
3809 1.1 christos }
3810 1.1 christos }
3811 1.1 christos
3812 1.1 christos #undef FLD
3813 1.1 christos }
3814 1.1 christos NEXT (vpc);
3815 1.1 christos
3816 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P11) : /* move ${const32},${Pd} */
3817 1.1 christos {
3818 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3819 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3820 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3821 1.1 christos int UNUSED written = 0;
3822 1.1 christos IADDR UNUSED pc = abuf->addr;
3823 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3824 1.1 christos
3825 1.1 christos {
3826 1.1 christos {
3827 1.1 christos SI opval = FLD (f_indir_pc__dword);
3828 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3829 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3830 1.1 christos }
3831 1.1 christos {
3832 1.1 christos {
3833 1.1 christos BI opval = 0;
3834 1.1 christos CPU (h_xbit) = opval;
3835 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3836 1.1 christos }
3837 1.1 christos {
3838 1.1 christos BI opval = 0;
3839 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3840 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3841 1.1 christos }
3842 1.1 christos }
3843 1.1 christos }
3844 1.1 christos
3845 1.1 christos #undef FLD
3846 1.1 christos }
3847 1.1 christos NEXT (vpc);
3848 1.1 christos
3849 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P12) : /* move ${const32},${Pd} */
3850 1.1 christos {
3851 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3852 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3853 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3854 1.1 christos int UNUSED written = 0;
3855 1.1 christos IADDR UNUSED pc = abuf->addr;
3856 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3857 1.1 christos
3858 1.1 christos {
3859 1.1 christos {
3860 1.1 christos SI opval = FLD (f_indir_pc__dword);
3861 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3862 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3863 1.1 christos }
3864 1.1 christos {
3865 1.1 christos {
3866 1.1 christos BI opval = 0;
3867 1.1 christos CPU (h_xbit) = opval;
3868 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3869 1.1 christos }
3870 1.1 christos {
3871 1.1 christos BI opval = 0;
3872 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3873 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3874 1.1 christos }
3875 1.1 christos }
3876 1.1 christos }
3877 1.1 christos
3878 1.1 christos #undef FLD
3879 1.1 christos }
3880 1.1 christos NEXT (vpc);
3881 1.1 christos
3882 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P13) : /* move ${const32},${Pd} */
3883 1.1 christos {
3884 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3885 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3886 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3887 1.1 christos int UNUSED written = 0;
3888 1.1 christos IADDR UNUSED pc = abuf->addr;
3889 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3890 1.1 christos
3891 1.1 christos {
3892 1.1 christos {
3893 1.1 christos SI opval = FLD (f_indir_pc__dword);
3894 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3895 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3896 1.1 christos }
3897 1.1 christos {
3898 1.1 christos {
3899 1.1 christos BI opval = 0;
3900 1.1 christos CPU (h_xbit) = opval;
3901 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3902 1.1 christos }
3903 1.1 christos {
3904 1.1 christos BI opval = 0;
3905 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3906 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3907 1.1 christos }
3908 1.1 christos }
3909 1.1 christos }
3910 1.1 christos
3911 1.1 christos #undef FLD
3912 1.1 christos }
3913 1.1 christos NEXT (vpc);
3914 1.1 christos
3915 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P14) : /* move ${const32},${Pd} */
3916 1.1 christos {
3917 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3918 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3919 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3920 1.1 christos int UNUSED written = 0;
3921 1.1 christos IADDR UNUSED pc = abuf->addr;
3922 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3923 1.1 christos
3924 1.1 christos {
3925 1.1 christos {
3926 1.1 christos SI opval = FLD (f_indir_pc__dword);
3927 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3928 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3929 1.1 christos }
3930 1.1 christos {
3931 1.1 christos {
3932 1.1 christos BI opval = 0;
3933 1.1 christos CPU (h_xbit) = opval;
3934 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3935 1.1 christos }
3936 1.1 christos {
3937 1.1 christos BI opval = 0;
3938 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3939 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3940 1.1 christos }
3941 1.1 christos }
3942 1.1 christos }
3943 1.1 christos
3944 1.1 christos #undef FLD
3945 1.1 christos }
3946 1.1 christos NEXT (vpc);
3947 1.1 christos
3948 1.1 christos CASE (sem, INSN_MOVE_C_SPRV32_P15) : /* move ${const32},${Pd} */
3949 1.1 christos {
3950 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3951 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3952 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
3953 1.1 christos int UNUSED written = 0;
3954 1.1 christos IADDR UNUSED pc = abuf->addr;
3955 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
3956 1.1 christos
3957 1.1 christos {
3958 1.1 christos {
3959 1.1 christos SI opval = FLD (f_indir_pc__dword);
3960 1.1 christos SET_H_SR (FLD (f_operand2), opval);
3961 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
3962 1.1 christos }
3963 1.1 christos {
3964 1.1 christos {
3965 1.1 christos BI opval = 0;
3966 1.1 christos CPU (h_xbit) = opval;
3967 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
3968 1.1 christos }
3969 1.1 christos {
3970 1.1 christos BI opval = 0;
3971 1.1 christos SET_H_INSN_PREFIXED_P (opval);
3972 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
3973 1.1 christos }
3974 1.1 christos }
3975 1.1 christos }
3976 1.1 christos
3977 1.1 christos #undef FLD
3978 1.1 christos }
3979 1.1 christos NEXT (vpc);
3980 1.1 christos
3981 1.1 christos CASE (sem, INSN_MOVE_SPR_MV32) : /* move ${Ps},[${Rd-sfield}${inc}] */
3982 1.1 christos {
3983 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3984 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3985 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
3986 1.1 christos int UNUSED written = 0;
3987 1.1 christos IADDR UNUSED pc = abuf->addr;
3988 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3989 1.1 christos
3990 1.1 christos {
3991 1.1 christos SI tmp_rno;
3992 1.1 christos tmp_rno = FLD (f_operand2);
3993 1.1 christos if (EQSI (tmp_rno, 2)) {
3994 1.1 christos {
3995 1.1 christos SI tmp_addr;
3996 1.1 christos BI tmp_postinc;
3997 1.1 christos tmp_postinc = FLD (f_memmode);
3998 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
3999 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4000 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4001 1.1 christos {
4002 1.1 christos {
4003 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4004 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4005 1.1 christos written |= (1 << 13);
4006 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4007 1.1 christos }
4008 1.1 christos {
4009 1.1 christos BI opval = CPU (h_pbit);
4010 1.1 christos CPU (h_cbit) = opval;
4011 1.1 christos written |= (1 << 10);
4012 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4013 1.1 christos }
4014 1.1 christos }
4015 1.1 christos } else {
4016 1.1 christos {
4017 1.1 christos BI opval = 1;
4018 1.1 christos CPU (h_cbit) = opval;
4019 1.1 christos written |= (1 << 10);
4020 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4021 1.1 christos }
4022 1.1 christos }
4023 1.1 christos } else {
4024 1.1 christos {
4025 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4026 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4027 1.1 christos written |= (1 << 13);
4028 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4029 1.1 christos }
4030 1.1 christos }
4031 1.1 christos if (NEBI (tmp_postinc, 0)) {
4032 1.1 christos {
4033 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4034 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4035 1.1 christos }
4036 1.1 christos {
4037 1.1 christos SI opval = tmp_addr;
4038 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4039 1.1 christos written |= (1 << 9);
4040 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4041 1.1 christos }
4042 1.1 christos }
4043 1.1 christos }
4044 1.1 christos }
4045 1.1 christos }
4046 1.1 christos else if (EQSI (tmp_rno, 3)) {
4047 1.1 christos {
4048 1.1 christos SI tmp_addr;
4049 1.1 christos BI tmp_postinc;
4050 1.1 christos tmp_postinc = FLD (f_memmode);
4051 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4052 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4053 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4054 1.1 christos {
4055 1.1 christos {
4056 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4057 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4058 1.1 christos written |= (1 << 12);
4059 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4060 1.1 christos }
4061 1.1 christos {
4062 1.1 christos BI opval = CPU (h_pbit);
4063 1.1 christos CPU (h_cbit) = opval;
4064 1.1 christos written |= (1 << 10);
4065 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4066 1.1 christos }
4067 1.1 christos }
4068 1.1 christos } else {
4069 1.1 christos {
4070 1.1 christos BI opval = 1;
4071 1.1 christos CPU (h_cbit) = opval;
4072 1.1 christos written |= (1 << 10);
4073 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4074 1.1 christos }
4075 1.1 christos }
4076 1.1 christos } else {
4077 1.1 christos {
4078 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4079 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4080 1.1 christos written |= (1 << 12);
4081 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4082 1.1 christos }
4083 1.1 christos }
4084 1.1 christos if (NEBI (tmp_postinc, 0)) {
4085 1.1 christos {
4086 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4087 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4088 1.1 christos }
4089 1.1 christos {
4090 1.1 christos SI opval = tmp_addr;
4091 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4092 1.1 christos written |= (1 << 9);
4093 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4094 1.1 christos }
4095 1.1 christos }
4096 1.1 christos }
4097 1.1 christos }
4098 1.1 christos }
4099 1.1 christos else if (EQSI (tmp_rno, 5)) {
4100 1.1 christos {
4101 1.1 christos SI tmp_addr;
4102 1.1 christos BI tmp_postinc;
4103 1.1 christos tmp_postinc = FLD (f_memmode);
4104 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4105 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4106 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4107 1.1 christos {
4108 1.1 christos {
4109 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4110 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4111 1.1 christos written |= (1 << 13);
4112 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4113 1.1 christos }
4114 1.1 christos {
4115 1.1 christos BI opval = CPU (h_pbit);
4116 1.1 christos CPU (h_cbit) = opval;
4117 1.1 christos written |= (1 << 10);
4118 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4119 1.1 christos }
4120 1.1 christos }
4121 1.1 christos } else {
4122 1.1 christos {
4123 1.1 christos BI opval = 1;
4124 1.1 christos CPU (h_cbit) = opval;
4125 1.1 christos written |= (1 << 10);
4126 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4127 1.1 christos }
4128 1.1 christos }
4129 1.1 christos } else {
4130 1.1 christos {
4131 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4132 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4133 1.1 christos written |= (1 << 13);
4134 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4135 1.1 christos }
4136 1.1 christos }
4137 1.1 christos if (NEBI (tmp_postinc, 0)) {
4138 1.1 christos {
4139 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4140 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4141 1.1 christos }
4142 1.1 christos {
4143 1.1 christos SI opval = tmp_addr;
4144 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4145 1.1 christos written |= (1 << 9);
4146 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4147 1.1 christos }
4148 1.1 christos }
4149 1.1 christos }
4150 1.1 christos }
4151 1.1 christos }
4152 1.1 christos else if (EQSI (tmp_rno, 6)) {
4153 1.1 christos {
4154 1.1 christos SI tmp_addr;
4155 1.1 christos BI tmp_postinc;
4156 1.1 christos tmp_postinc = FLD (f_memmode);
4157 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4158 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4159 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4160 1.1 christos {
4161 1.1 christos {
4162 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4163 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4164 1.1 christos written |= (1 << 13);
4165 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4166 1.1 christos }
4167 1.1 christos {
4168 1.1 christos BI opval = CPU (h_pbit);
4169 1.1 christos CPU (h_cbit) = opval;
4170 1.1 christos written |= (1 << 10);
4171 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4172 1.1 christos }
4173 1.1 christos }
4174 1.1 christos } else {
4175 1.1 christos {
4176 1.1 christos BI opval = 1;
4177 1.1 christos CPU (h_cbit) = opval;
4178 1.1 christos written |= (1 << 10);
4179 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4180 1.1 christos }
4181 1.1 christos }
4182 1.1 christos } else {
4183 1.1 christos {
4184 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4185 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4186 1.1 christos written |= (1 << 13);
4187 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4188 1.1 christos }
4189 1.1 christos }
4190 1.1 christos if (NEBI (tmp_postinc, 0)) {
4191 1.1 christos {
4192 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4193 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4194 1.1 christos }
4195 1.1 christos {
4196 1.1 christos SI opval = tmp_addr;
4197 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4198 1.1 christos written |= (1 << 9);
4199 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4200 1.1 christos }
4201 1.1 christos }
4202 1.1 christos }
4203 1.1 christos }
4204 1.1 christos }
4205 1.1 christos else if (EQSI (tmp_rno, 7)) {
4206 1.1 christos {
4207 1.1 christos SI tmp_addr;
4208 1.1 christos BI tmp_postinc;
4209 1.1 christos tmp_postinc = FLD (f_memmode);
4210 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4211 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4212 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4213 1.1 christos {
4214 1.1 christos {
4215 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4216 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4217 1.1 christos written |= (1 << 13);
4218 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4219 1.1 christos }
4220 1.1 christos {
4221 1.1 christos BI opval = CPU (h_pbit);
4222 1.1 christos CPU (h_cbit) = opval;
4223 1.1 christos written |= (1 << 10);
4224 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4225 1.1 christos }
4226 1.1 christos }
4227 1.1 christos } else {
4228 1.1 christos {
4229 1.1 christos BI opval = 1;
4230 1.1 christos CPU (h_cbit) = opval;
4231 1.1 christos written |= (1 << 10);
4232 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4233 1.1 christos }
4234 1.1 christos }
4235 1.1 christos } else {
4236 1.1 christos {
4237 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4238 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4239 1.1 christos written |= (1 << 13);
4240 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4241 1.1 christos }
4242 1.1 christos }
4243 1.1 christos if (NEBI (tmp_postinc, 0)) {
4244 1.1 christos {
4245 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4246 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4247 1.1 christos }
4248 1.1 christos {
4249 1.1 christos SI opval = tmp_addr;
4250 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4251 1.1 christos written |= (1 << 9);
4252 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4253 1.1 christos }
4254 1.1 christos }
4255 1.1 christos }
4256 1.1 christos }
4257 1.1 christos }
4258 1.1 christos else if (EQSI (tmp_rno, 9)) {
4259 1.1 christos {
4260 1.1 christos SI tmp_addr;
4261 1.1 christos BI tmp_postinc;
4262 1.1 christos tmp_postinc = FLD (f_memmode);
4263 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4264 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4265 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4266 1.1 christos {
4267 1.1 christos {
4268 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4269 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4270 1.1 christos written |= (1 << 13);
4271 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4272 1.1 christos }
4273 1.1 christos {
4274 1.1 christos BI opval = CPU (h_pbit);
4275 1.1 christos CPU (h_cbit) = opval;
4276 1.1 christos written |= (1 << 10);
4277 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4278 1.1 christos }
4279 1.1 christos }
4280 1.1 christos } else {
4281 1.1 christos {
4282 1.1 christos BI opval = 1;
4283 1.1 christos CPU (h_cbit) = opval;
4284 1.1 christos written |= (1 << 10);
4285 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4286 1.1 christos }
4287 1.1 christos }
4288 1.1 christos } else {
4289 1.1 christos {
4290 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4291 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4292 1.1 christos written |= (1 << 13);
4293 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4294 1.1 christos }
4295 1.1 christos }
4296 1.1 christos if (NEBI (tmp_postinc, 0)) {
4297 1.1 christos {
4298 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4299 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4300 1.1 christos }
4301 1.1 christos {
4302 1.1 christos SI opval = tmp_addr;
4303 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4304 1.1 christos written |= (1 << 9);
4305 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4306 1.1 christos }
4307 1.1 christos }
4308 1.1 christos }
4309 1.1 christos }
4310 1.1 christos }
4311 1.1 christos else if (EQSI (tmp_rno, 10)) {
4312 1.1 christos {
4313 1.1 christos SI tmp_addr;
4314 1.1 christos BI tmp_postinc;
4315 1.1 christos tmp_postinc = FLD (f_memmode);
4316 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4317 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4318 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4319 1.1 christos {
4320 1.1 christos {
4321 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4322 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4323 1.1 christos written |= (1 << 13);
4324 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4325 1.1 christos }
4326 1.1 christos {
4327 1.1 christos BI opval = CPU (h_pbit);
4328 1.1 christos CPU (h_cbit) = opval;
4329 1.1 christos written |= (1 << 10);
4330 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4331 1.1 christos }
4332 1.1 christos }
4333 1.1 christos } else {
4334 1.1 christos {
4335 1.1 christos BI opval = 1;
4336 1.1 christos CPU (h_cbit) = opval;
4337 1.1 christos written |= (1 << 10);
4338 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4339 1.1 christos }
4340 1.1 christos }
4341 1.1 christos } else {
4342 1.1 christos {
4343 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4344 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4345 1.1 christos written |= (1 << 13);
4346 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4347 1.1 christos }
4348 1.1 christos }
4349 1.1 christos if (NEBI (tmp_postinc, 0)) {
4350 1.1 christos {
4351 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4352 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4353 1.1 christos }
4354 1.1 christos {
4355 1.1 christos SI opval = tmp_addr;
4356 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4357 1.1 christos written |= (1 << 9);
4358 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4359 1.1 christos }
4360 1.1 christos }
4361 1.1 christos }
4362 1.1 christos }
4363 1.1 christos }
4364 1.1 christos else if (EQSI (tmp_rno, 11)) {
4365 1.1 christos {
4366 1.1 christos SI tmp_addr;
4367 1.1 christos BI tmp_postinc;
4368 1.1 christos tmp_postinc = FLD (f_memmode);
4369 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4370 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4371 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4372 1.1 christos {
4373 1.1 christos {
4374 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4375 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4376 1.1 christos written |= (1 << 13);
4377 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4378 1.1 christos }
4379 1.1 christos {
4380 1.1 christos BI opval = CPU (h_pbit);
4381 1.1 christos CPU (h_cbit) = opval;
4382 1.1 christos written |= (1 << 10);
4383 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4384 1.1 christos }
4385 1.1 christos }
4386 1.1 christos } else {
4387 1.1 christos {
4388 1.1 christos BI opval = 1;
4389 1.1 christos CPU (h_cbit) = opval;
4390 1.1 christos written |= (1 << 10);
4391 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4392 1.1 christos }
4393 1.1 christos }
4394 1.1 christos } else {
4395 1.1 christos {
4396 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4397 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4398 1.1 christos written |= (1 << 13);
4399 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4400 1.1 christos }
4401 1.1 christos }
4402 1.1 christos if (NEBI (tmp_postinc, 0)) {
4403 1.1 christos {
4404 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4405 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4406 1.1 christos }
4407 1.1 christos {
4408 1.1 christos SI opval = tmp_addr;
4409 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4410 1.1 christos written |= (1 << 9);
4411 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4412 1.1 christos }
4413 1.1 christos }
4414 1.1 christos }
4415 1.1 christos }
4416 1.1 christos }
4417 1.1 christos else if (EQSI (tmp_rno, 12)) {
4418 1.1 christos {
4419 1.1 christos SI tmp_addr;
4420 1.1 christos BI tmp_postinc;
4421 1.1 christos tmp_postinc = FLD (f_memmode);
4422 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4423 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4424 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4425 1.1 christos {
4426 1.1 christos {
4427 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4428 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4429 1.1 christos written |= (1 << 13);
4430 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4431 1.1 christos }
4432 1.1 christos {
4433 1.1 christos BI opval = CPU (h_pbit);
4434 1.1 christos CPU (h_cbit) = opval;
4435 1.1 christos written |= (1 << 10);
4436 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4437 1.1 christos }
4438 1.1 christos }
4439 1.1 christos } else {
4440 1.1 christos {
4441 1.1 christos BI opval = 1;
4442 1.1 christos CPU (h_cbit) = opval;
4443 1.1 christos written |= (1 << 10);
4444 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4445 1.1 christos }
4446 1.1 christos }
4447 1.1 christos } else {
4448 1.1 christos {
4449 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4450 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4451 1.1 christos written |= (1 << 13);
4452 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4453 1.1 christos }
4454 1.1 christos }
4455 1.1 christos if (NEBI (tmp_postinc, 0)) {
4456 1.1 christos {
4457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4459 1.1 christos }
4460 1.1 christos {
4461 1.1 christos SI opval = tmp_addr;
4462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4463 1.1 christos written |= (1 << 9);
4464 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4465 1.1 christos }
4466 1.1 christos }
4467 1.1 christos }
4468 1.1 christos }
4469 1.1 christos }
4470 1.1 christos else if (EQSI (tmp_rno, 13)) {
4471 1.1 christos {
4472 1.1 christos SI tmp_addr;
4473 1.1 christos BI tmp_postinc;
4474 1.1 christos tmp_postinc = FLD (f_memmode);
4475 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4476 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4477 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4478 1.1 christos {
4479 1.1 christos {
4480 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4481 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4482 1.1 christos written |= (1 << 13);
4483 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4484 1.1 christos }
4485 1.1 christos {
4486 1.1 christos BI opval = CPU (h_pbit);
4487 1.1 christos CPU (h_cbit) = opval;
4488 1.1 christos written |= (1 << 10);
4489 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4490 1.1 christos }
4491 1.1 christos }
4492 1.1 christos } else {
4493 1.1 christos {
4494 1.1 christos BI opval = 1;
4495 1.1 christos CPU (h_cbit) = opval;
4496 1.1 christos written |= (1 << 10);
4497 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4498 1.1 christos }
4499 1.1 christos }
4500 1.1 christos } else {
4501 1.1 christos {
4502 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4503 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4504 1.1 christos written |= (1 << 13);
4505 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4506 1.1 christos }
4507 1.1 christos }
4508 1.1 christos if (NEBI (tmp_postinc, 0)) {
4509 1.1 christos {
4510 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4511 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4512 1.1 christos }
4513 1.1 christos {
4514 1.1 christos SI opval = tmp_addr;
4515 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4516 1.1 christos written |= (1 << 9);
4517 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4518 1.1 christos }
4519 1.1 christos }
4520 1.1 christos }
4521 1.1 christos }
4522 1.1 christos }
4523 1.1 christos else if (EQSI (tmp_rno, 14)) {
4524 1.1 christos {
4525 1.1 christos SI tmp_addr;
4526 1.1 christos BI tmp_postinc;
4527 1.1 christos tmp_postinc = FLD (f_memmode);
4528 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4529 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4530 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4531 1.1 christos {
4532 1.1 christos {
4533 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4534 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4535 1.1 christos written |= (1 << 13);
4536 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4537 1.1 christos }
4538 1.1 christos {
4539 1.1 christos BI opval = CPU (h_pbit);
4540 1.1 christos CPU (h_cbit) = opval;
4541 1.1 christos written |= (1 << 10);
4542 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4543 1.1 christos }
4544 1.1 christos }
4545 1.1 christos } else {
4546 1.1 christos {
4547 1.1 christos BI opval = 1;
4548 1.1 christos CPU (h_cbit) = opval;
4549 1.1 christos written |= (1 << 10);
4550 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4551 1.1 christos }
4552 1.1 christos }
4553 1.1 christos } else {
4554 1.1 christos {
4555 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4556 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4557 1.1 christos written |= (1 << 13);
4558 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4559 1.1 christos }
4560 1.1 christos }
4561 1.1 christos if (NEBI (tmp_postinc, 0)) {
4562 1.1 christos {
4563 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4564 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4565 1.1 christos }
4566 1.1 christos {
4567 1.1 christos SI opval = tmp_addr;
4568 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4569 1.1 christos written |= (1 << 9);
4570 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4571 1.1 christos }
4572 1.1 christos }
4573 1.1 christos }
4574 1.1 christos }
4575 1.1 christos }
4576 1.1 christos else if (EQSI (tmp_rno, 15)) {
4577 1.1 christos {
4578 1.1 christos SI tmp_addr;
4579 1.1 christos BI tmp_postinc;
4580 1.1 christos tmp_postinc = FLD (f_memmode);
4581 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4582 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4583 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4584 1.1 christos {
4585 1.1 christos {
4586 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4587 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4588 1.1 christos written |= (1 << 13);
4589 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4590 1.1 christos }
4591 1.1 christos {
4592 1.1 christos BI opval = CPU (h_pbit);
4593 1.1 christos CPU (h_cbit) = opval;
4594 1.1 christos written |= (1 << 10);
4595 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4596 1.1 christos }
4597 1.1 christos }
4598 1.1 christos } else {
4599 1.1 christos {
4600 1.1 christos BI opval = 1;
4601 1.1 christos CPU (h_cbit) = opval;
4602 1.1 christos written |= (1 << 10);
4603 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4604 1.1 christos }
4605 1.1 christos }
4606 1.1 christos } else {
4607 1.1 christos {
4608 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4609 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4610 1.1 christos written |= (1 << 13);
4611 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4612 1.1 christos }
4613 1.1 christos }
4614 1.1 christos if (NEBI (tmp_postinc, 0)) {
4615 1.1 christos {
4616 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4617 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4618 1.1 christos }
4619 1.1 christos {
4620 1.1 christos SI opval = tmp_addr;
4621 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4622 1.1 christos written |= (1 << 9);
4623 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4624 1.1 christos }
4625 1.1 christos }
4626 1.1 christos }
4627 1.1 christos }
4628 1.1 christos }
4629 1.1 christos else if (EQSI (tmp_rno, 0)) {
4630 1.1 christos {
4631 1.1 christos SI tmp_addr;
4632 1.1 christos BI tmp_postinc;
4633 1.1 christos tmp_postinc = FLD (f_memmode);
4634 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4635 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4636 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4637 1.1 christos {
4638 1.1 christos {
4639 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4640 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4641 1.1 christos written |= (1 << 12);
4642 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4643 1.1 christos }
4644 1.1 christos {
4645 1.1 christos BI opval = CPU (h_pbit);
4646 1.1 christos CPU (h_cbit) = opval;
4647 1.1 christos written |= (1 << 10);
4648 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4649 1.1 christos }
4650 1.1 christos }
4651 1.1 christos } else {
4652 1.1 christos {
4653 1.1 christos BI opval = 1;
4654 1.1 christos CPU (h_cbit) = opval;
4655 1.1 christos written |= (1 << 10);
4656 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4657 1.1 christos }
4658 1.1 christos }
4659 1.1 christos } else {
4660 1.1 christos {
4661 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4662 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4663 1.1 christos written |= (1 << 12);
4664 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4665 1.1 christos }
4666 1.1 christos }
4667 1.1 christos if (NEBI (tmp_postinc, 0)) {
4668 1.1 christos {
4669 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4670 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4671 1.1 christos }
4672 1.1 christos {
4673 1.1 christos SI opval = tmp_addr;
4674 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4675 1.1 christos written |= (1 << 9);
4676 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4677 1.1 christos }
4678 1.1 christos }
4679 1.1 christos }
4680 1.1 christos }
4681 1.1 christos }
4682 1.1 christos else if (EQSI (tmp_rno, 1)) {
4683 1.1 christos {
4684 1.1 christos SI tmp_addr;
4685 1.1 christos BI tmp_postinc;
4686 1.1 christos tmp_postinc = FLD (f_memmode);
4687 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4688 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4689 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4690 1.1 christos {
4691 1.1 christos {
4692 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4693 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4694 1.1 christos written |= (1 << 12);
4695 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4696 1.1 christos }
4697 1.1 christos {
4698 1.1 christos BI opval = CPU (h_pbit);
4699 1.1 christos CPU (h_cbit) = opval;
4700 1.1 christos written |= (1 << 10);
4701 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4702 1.1 christos }
4703 1.1 christos }
4704 1.1 christos } else {
4705 1.1 christos {
4706 1.1 christos BI opval = 1;
4707 1.1 christos CPU (h_cbit) = opval;
4708 1.1 christos written |= (1 << 10);
4709 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4710 1.1 christos }
4711 1.1 christos }
4712 1.1 christos } else {
4713 1.1 christos {
4714 1.1 christos QI opval = GET_H_SR (FLD (f_operand2));
4715 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
4716 1.1 christos written |= (1 << 12);
4717 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4718 1.1 christos }
4719 1.1 christos }
4720 1.1 christos if (NEBI (tmp_postinc, 0)) {
4721 1.1 christos {
4722 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4723 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
4724 1.1 christos }
4725 1.1 christos {
4726 1.1 christos SI opval = tmp_addr;
4727 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4728 1.1 christos written |= (1 << 9);
4729 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4730 1.1 christos }
4731 1.1 christos }
4732 1.1 christos }
4733 1.1 christos }
4734 1.1 christos }
4735 1.1 christos else if (EQSI (tmp_rno, 4)) {
4736 1.1 christos {
4737 1.1 christos SI tmp_addr;
4738 1.1 christos BI tmp_postinc;
4739 1.1 christos tmp_postinc = FLD (f_memmode);
4740 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4741 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4742 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4743 1.1 christos {
4744 1.1 christos {
4745 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4746 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4747 1.1 christos written |= (1 << 11);
4748 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4749 1.1 christos }
4750 1.1 christos {
4751 1.1 christos BI opval = CPU (h_pbit);
4752 1.1 christos CPU (h_cbit) = opval;
4753 1.1 christos written |= (1 << 10);
4754 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4755 1.1 christos }
4756 1.1 christos }
4757 1.1 christos } else {
4758 1.1 christos {
4759 1.1 christos BI opval = 1;
4760 1.1 christos CPU (h_cbit) = opval;
4761 1.1 christos written |= (1 << 10);
4762 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4763 1.1 christos }
4764 1.1 christos }
4765 1.1 christos } else {
4766 1.1 christos {
4767 1.1 christos HI opval = GET_H_SR (FLD (f_operand2));
4768 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
4769 1.1 christos written |= (1 << 11);
4770 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4771 1.1 christos }
4772 1.1 christos }
4773 1.1 christos if (NEBI (tmp_postinc, 0)) {
4774 1.1 christos {
4775 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4776 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
4777 1.1 christos }
4778 1.1 christos {
4779 1.1 christos SI opval = tmp_addr;
4780 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4781 1.1 christos written |= (1 << 9);
4782 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4783 1.1 christos }
4784 1.1 christos }
4785 1.1 christos }
4786 1.1 christos }
4787 1.1 christos }
4788 1.1 christos else if (EQSI (tmp_rno, 8)) {
4789 1.1 christos {
4790 1.1 christos SI tmp_addr;
4791 1.1 christos BI tmp_postinc;
4792 1.1 christos tmp_postinc = FLD (f_memmode);
4793 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
4794 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
4795 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
4796 1.1 christos {
4797 1.1 christos {
4798 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4799 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4800 1.1 christos written |= (1 << 13);
4801 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4802 1.1 christos }
4803 1.1 christos {
4804 1.1 christos BI opval = CPU (h_pbit);
4805 1.1 christos CPU (h_cbit) = opval;
4806 1.1 christos written |= (1 << 10);
4807 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4808 1.1 christos }
4809 1.1 christos }
4810 1.1 christos } else {
4811 1.1 christos {
4812 1.1 christos BI opval = 1;
4813 1.1 christos CPU (h_cbit) = opval;
4814 1.1 christos written |= (1 << 10);
4815 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
4816 1.1 christos }
4817 1.1 christos }
4818 1.1 christos } else {
4819 1.1 christos {
4820 1.1 christos SI opval = GET_H_SR (FLD (f_operand2));
4821 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4822 1.1 christos written |= (1 << 13);
4823 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4824 1.1 christos }
4825 1.1 christos }
4826 1.1 christos if (NEBI (tmp_postinc, 0)) {
4827 1.1 christos {
4828 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
4829 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4830 1.1 christos }
4831 1.1 christos {
4832 1.1 christos SI opval = tmp_addr;
4833 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4834 1.1 christos written |= (1 << 9);
4835 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4836 1.1 christos }
4837 1.1 christos }
4838 1.1 christos }
4839 1.1 christos }
4840 1.1 christos }
4841 1.1 christos else {
4842 1.1 christos cgen_rtx_error (current_cpu, "write from unimplemented special register");
4843 1.1 christos }
4844 1.1 christos {
4845 1.1 christos {
4846 1.1 christos BI opval = 0;
4847 1.1 christos CPU (h_xbit) = opval;
4848 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4849 1.1 christos }
4850 1.1 christos {
4851 1.1 christos BI opval = 0;
4852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4854 1.1 christos }
4855 1.1 christos }
4856 1.1 christos }
4857 1.1 christos
4858 1.1 christos abuf->written = written;
4859 1.1 christos #undef FLD
4860 1.1 christos }
4861 1.1 christos NEXT (vpc);
4862 1.1 christos
4863 1.1 christos CASE (sem, INSN_MOVE_SS_R) : /* move ${Ss},${Rd-sfield} */
4864 1.1 christos {
4865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4867 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
4868 1.1 christos int UNUSED written = 0;
4869 1.1 christos IADDR UNUSED pc = abuf->addr;
4870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4871 1.1 christos
4872 1.1 christos {
4873 1.1 christos {
4874 1.1 christos SI opval = GET_H_SUPR (FLD (f_operand2));
4875 1.1 christos SET_H_GR (FLD (f_operand1), opval);
4876 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4877 1.1 christos }
4878 1.1 christos {
4879 1.1 christos {
4880 1.1 christos BI opval = 0;
4881 1.1 christos CPU (h_xbit) = opval;
4882 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4883 1.1 christos }
4884 1.1 christos {
4885 1.1 christos BI opval = 0;
4886 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4887 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4888 1.1 christos }
4889 1.1 christos }
4890 1.1 christos }
4891 1.1 christos
4892 1.1 christos #undef FLD
4893 1.1 christos }
4894 1.1 christos NEXT (vpc);
4895 1.1 christos
4896 1.1 christos CASE (sem, INSN_MOVE_R_SS) : /* move ${Rs},${Sd} */
4897 1.1 christos {
4898 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4899 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4900 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
4901 1.1 christos int UNUSED written = 0;
4902 1.1 christos IADDR UNUSED pc = abuf->addr;
4903 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4904 1.1 christos
4905 1.1 christos {
4906 1.1 christos {
4907 1.1 christos SI opval = GET_H_GR (FLD (f_operand1));
4908 1.1 christos SET_H_SUPR (FLD (f_operand2), opval);
4909 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "supr", 'x', opval);
4910 1.1 christos }
4911 1.1 christos {
4912 1.1 christos {
4913 1.1 christos BI opval = 0;
4914 1.1 christos CPU (h_xbit) = opval;
4915 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
4916 1.1 christos }
4917 1.1 christos {
4918 1.1 christos BI opval = 0;
4919 1.1 christos SET_H_INSN_PREFIXED_P (opval);
4920 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
4921 1.1 christos }
4922 1.1 christos }
4923 1.1 christos }
4924 1.1 christos
4925 1.1 christos #undef FLD
4926 1.1 christos }
4927 1.1 christos NEXT (vpc);
4928 1.1 christos
4929 1.1 christos CASE (sem, INSN_MOVEM_R_M_V32) : /* movem ${Rs-dfield},[${Rd-sfield}${inc}] */
4930 1.1 christos {
4931 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4932 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4933 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_r_m_v32.f
4934 1.1 christos int UNUSED written = 0;
4935 1.1 christos IADDR UNUSED pc = abuf->addr;
4936 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4937 1.1 christos
4938 1.1 christos {
4939 1.1 christos SI tmp_addr;
4940 1.1 christos BI tmp_postinc;
4941 1.1 christos tmp_postinc = FLD (f_memmode);
4942 1.1 christos {
4943 1.1 christos SI tmp_dummy;
4944 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
4945 1.1 christos }
4946 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
4947 1.1 christos {
4948 1.1 christos if (GESI (FLD (f_operand2), 0)) {
4949 1.1 christos {
4950 1.1 christos SI tmp_tmp;
4951 1.1 christos tmp_tmp = GET_H_GR (((UINT) 0));
4952 1.1 christos {
4953 1.1 christos SI opval = tmp_tmp;
4954 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4955 1.1 christos written |= (1 << 21);
4956 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4957 1.1 christos }
4958 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4959 1.1 christos }
4960 1.1 christos }
4961 1.1 christos if (GESI (FLD (f_operand2), 1)) {
4962 1.1 christos {
4963 1.1 christos SI tmp_tmp;
4964 1.1 christos tmp_tmp = GET_H_GR (((UINT) 1));
4965 1.1 christos {
4966 1.1 christos SI opval = tmp_tmp;
4967 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4968 1.1 christos written |= (1 << 21);
4969 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4970 1.1 christos }
4971 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4972 1.1 christos }
4973 1.1 christos }
4974 1.1 christos if (GESI (FLD (f_operand2), 2)) {
4975 1.1 christos {
4976 1.1 christos SI tmp_tmp;
4977 1.1 christos tmp_tmp = GET_H_GR (((UINT) 2));
4978 1.1 christos {
4979 1.1 christos SI opval = tmp_tmp;
4980 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4981 1.1 christos written |= (1 << 21);
4982 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4983 1.1 christos }
4984 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4985 1.1 christos }
4986 1.1 christos }
4987 1.1 christos if (GESI (FLD (f_operand2), 3)) {
4988 1.1 christos {
4989 1.1 christos SI tmp_tmp;
4990 1.1 christos tmp_tmp = GET_H_GR (((UINT) 3));
4991 1.1 christos {
4992 1.1 christos SI opval = tmp_tmp;
4993 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
4994 1.1 christos written |= (1 << 21);
4995 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
4996 1.1 christos }
4997 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
4998 1.1 christos }
4999 1.1 christos }
5000 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5001 1.1 christos {
5002 1.1 christos SI tmp_tmp;
5003 1.1 christos tmp_tmp = GET_H_GR (((UINT) 4));
5004 1.1 christos {
5005 1.1 christos SI opval = tmp_tmp;
5006 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5007 1.1 christos written |= (1 << 21);
5008 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5009 1.1 christos }
5010 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5011 1.1 christos }
5012 1.1 christos }
5013 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5014 1.1 christos {
5015 1.1 christos SI tmp_tmp;
5016 1.1 christos tmp_tmp = GET_H_GR (((UINT) 5));
5017 1.1 christos {
5018 1.1 christos SI opval = tmp_tmp;
5019 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5020 1.1 christos written |= (1 << 21);
5021 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5022 1.1 christos }
5023 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5024 1.1 christos }
5025 1.1 christos }
5026 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5027 1.1 christos {
5028 1.1 christos SI tmp_tmp;
5029 1.1 christos tmp_tmp = GET_H_GR (((UINT) 6));
5030 1.1 christos {
5031 1.1 christos SI opval = tmp_tmp;
5032 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5033 1.1 christos written |= (1 << 21);
5034 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5035 1.1 christos }
5036 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5037 1.1 christos }
5038 1.1 christos }
5039 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5040 1.1 christos {
5041 1.1 christos SI tmp_tmp;
5042 1.1 christos tmp_tmp = GET_H_GR (((UINT) 7));
5043 1.1 christos {
5044 1.1 christos SI opval = tmp_tmp;
5045 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5046 1.1 christos written |= (1 << 21);
5047 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5048 1.1 christos }
5049 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5050 1.1 christos }
5051 1.1 christos }
5052 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5053 1.1 christos {
5054 1.1 christos SI tmp_tmp;
5055 1.1 christos tmp_tmp = GET_H_GR (((UINT) 8));
5056 1.1 christos {
5057 1.1 christos SI opval = tmp_tmp;
5058 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5059 1.1 christos written |= (1 << 21);
5060 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5061 1.1 christos }
5062 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5063 1.1 christos }
5064 1.1 christos }
5065 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5066 1.1 christos {
5067 1.1 christos SI tmp_tmp;
5068 1.1 christos tmp_tmp = GET_H_GR (((UINT) 9));
5069 1.1 christos {
5070 1.1 christos SI opval = tmp_tmp;
5071 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5072 1.1 christos written |= (1 << 21);
5073 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5074 1.1 christos }
5075 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5076 1.1 christos }
5077 1.1 christos }
5078 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5079 1.1 christos {
5080 1.1 christos SI tmp_tmp;
5081 1.1 christos tmp_tmp = GET_H_GR (((UINT) 10));
5082 1.1 christos {
5083 1.1 christos SI opval = tmp_tmp;
5084 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5085 1.1 christos written |= (1 << 21);
5086 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5087 1.1 christos }
5088 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5089 1.1 christos }
5090 1.1 christos }
5091 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5092 1.1 christos {
5093 1.1 christos SI tmp_tmp;
5094 1.1 christos tmp_tmp = GET_H_GR (((UINT) 11));
5095 1.1 christos {
5096 1.1 christos SI opval = tmp_tmp;
5097 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5098 1.1 christos written |= (1 << 21);
5099 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5100 1.1 christos }
5101 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5102 1.1 christos }
5103 1.1 christos }
5104 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5105 1.1 christos {
5106 1.1 christos SI tmp_tmp;
5107 1.1 christos tmp_tmp = GET_H_GR (((UINT) 12));
5108 1.1 christos {
5109 1.1 christos SI opval = tmp_tmp;
5110 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5111 1.1 christos written |= (1 << 21);
5112 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5113 1.1 christos }
5114 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5115 1.1 christos }
5116 1.1 christos }
5117 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5118 1.1 christos {
5119 1.1 christos SI tmp_tmp;
5120 1.1 christos tmp_tmp = GET_H_GR (((UINT) 13));
5121 1.1 christos {
5122 1.1 christos SI opval = tmp_tmp;
5123 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5124 1.1 christos written |= (1 << 21);
5125 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5126 1.1 christos }
5127 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5128 1.1 christos }
5129 1.1 christos }
5130 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5131 1.1 christos {
5132 1.1 christos SI tmp_tmp;
5133 1.1 christos tmp_tmp = GET_H_GR (((UINT) 14));
5134 1.1 christos {
5135 1.1 christos SI opval = tmp_tmp;
5136 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5137 1.1 christos written |= (1 << 21);
5138 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5139 1.1 christos }
5140 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5141 1.1 christos }
5142 1.1 christos }
5143 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5144 1.1 christos {
5145 1.1 christos SI tmp_tmp;
5146 1.1 christos tmp_tmp = GET_H_GR (((UINT) 15));
5147 1.1 christos {
5148 1.1 christos SI opval = tmp_tmp;
5149 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
5150 1.1 christos written |= (1 << 21);
5151 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5152 1.1 christos }
5153 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5154 1.1 christos }
5155 1.1 christos }
5156 1.1 christos }
5157 1.1 christos if (NEBI (tmp_postinc, 0)) {
5158 1.1 christos {
5159 1.1 christos SI opval = tmp_addr;
5160 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5161 1.1 christos written |= (1 << 20);
5162 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5163 1.1 christos }
5164 1.1 christos }
5165 1.1 christos {
5166 1.1 christos {
5167 1.1 christos BI opval = 0;
5168 1.1 christos CPU (h_xbit) = opval;
5169 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5170 1.1 christos }
5171 1.1 christos {
5172 1.1 christos BI opval = 0;
5173 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5174 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5175 1.1 christos }
5176 1.1 christos }
5177 1.1 christos }
5178 1.1 christos
5179 1.1 christos abuf->written = written;
5180 1.1 christos #undef FLD
5181 1.1 christos }
5182 1.1 christos NEXT (vpc);
5183 1.1 christos
5184 1.1 christos CASE (sem, INSN_MOVEM_M_R_V32) : /* movem [${Rs}${inc}],${Rd} */
5185 1.1 christos {
5186 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5187 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5188 1.1 christos #define FLD(f) abuf->fields.sfmt_movem_m_r_v32.f
5189 1.1 christos int UNUSED written = 0;
5190 1.1 christos IADDR UNUSED pc = abuf->addr;
5191 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5192 1.1 christos
5193 1.1 christos {
5194 1.1 christos SI tmp_addr;
5195 1.1 christos BI tmp_postinc;
5196 1.1 christos tmp_postinc = FLD (f_memmode);
5197 1.1 christos tmp_addr = GET_H_GR (FLD (f_operand1));
5198 1.1 christos {
5199 1.1 christos SI tmp_dummy;
5200 1.1 christos tmp_dummy = GET_H_GR (FLD (f_operand2));
5201 1.1 christos }
5202 1.1 christos {
5203 1.1 christos if (GESI (FLD (f_operand2), 0)) {
5204 1.1 christos {
5205 1.1 christos SI tmp_tmp;
5206 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5207 1.1 christos {
5208 1.1 christos SI opval = tmp_tmp;
5209 1.1 christos SET_H_GR (((UINT) 0), opval);
5210 1.1 christos written |= (1 << 6);
5211 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5212 1.1 christos }
5213 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5214 1.1 christos }
5215 1.1 christos }
5216 1.1 christos if (GESI (FLD (f_operand2), 1)) {
5217 1.1 christos {
5218 1.1 christos SI tmp_tmp;
5219 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5220 1.1 christos {
5221 1.1 christos SI opval = tmp_tmp;
5222 1.1 christos SET_H_GR (((UINT) 1), opval);
5223 1.1 christos written |= (1 << 7);
5224 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5225 1.1 christos }
5226 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5227 1.1 christos }
5228 1.1 christos }
5229 1.1 christos if (GESI (FLD (f_operand2), 2)) {
5230 1.1 christos {
5231 1.1 christos SI tmp_tmp;
5232 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5233 1.1 christos {
5234 1.1 christos SI opval = tmp_tmp;
5235 1.1 christos SET_H_GR (((UINT) 2), opval);
5236 1.1 christos written |= (1 << 14);
5237 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5238 1.1 christos }
5239 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5240 1.1 christos }
5241 1.1 christos }
5242 1.1 christos if (GESI (FLD (f_operand2), 3)) {
5243 1.1 christos {
5244 1.1 christos SI tmp_tmp;
5245 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5246 1.1 christos {
5247 1.1 christos SI opval = tmp_tmp;
5248 1.1 christos SET_H_GR (((UINT) 3), opval);
5249 1.1 christos written |= (1 << 15);
5250 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5251 1.1 christos }
5252 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5253 1.1 christos }
5254 1.1 christos }
5255 1.1 christos if (GESI (FLD (f_operand2), 4)) {
5256 1.1 christos {
5257 1.1 christos SI tmp_tmp;
5258 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5259 1.1 christos {
5260 1.1 christos SI opval = tmp_tmp;
5261 1.1 christos SET_H_GR (((UINT) 4), opval);
5262 1.1 christos written |= (1 << 16);
5263 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5264 1.1 christos }
5265 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5266 1.1 christos }
5267 1.1 christos }
5268 1.1 christos if (GESI (FLD (f_operand2), 5)) {
5269 1.1 christos {
5270 1.1 christos SI tmp_tmp;
5271 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5272 1.1 christos {
5273 1.1 christos SI opval = tmp_tmp;
5274 1.1 christos SET_H_GR (((UINT) 5), opval);
5275 1.1 christos written |= (1 << 17);
5276 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5277 1.1 christos }
5278 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5279 1.1 christos }
5280 1.1 christos }
5281 1.1 christos if (GESI (FLD (f_operand2), 6)) {
5282 1.1 christos {
5283 1.1 christos SI tmp_tmp;
5284 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5285 1.1 christos {
5286 1.1 christos SI opval = tmp_tmp;
5287 1.1 christos SET_H_GR (((UINT) 6), opval);
5288 1.1 christos written |= (1 << 18);
5289 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5290 1.1 christos }
5291 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5292 1.1 christos }
5293 1.1 christos }
5294 1.1 christos if (GESI (FLD (f_operand2), 7)) {
5295 1.1 christos {
5296 1.1 christos SI tmp_tmp;
5297 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5298 1.1 christos {
5299 1.1 christos SI opval = tmp_tmp;
5300 1.1 christos SET_H_GR (((UINT) 7), opval);
5301 1.1 christos written |= (1 << 19);
5302 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5303 1.1 christos }
5304 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5305 1.1 christos }
5306 1.1 christos }
5307 1.1 christos if (GESI (FLD (f_operand2), 8)) {
5308 1.1 christos {
5309 1.1 christos SI tmp_tmp;
5310 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5311 1.1 christos {
5312 1.1 christos SI opval = tmp_tmp;
5313 1.1 christos SET_H_GR (((UINT) 8), opval);
5314 1.1 christos written |= (1 << 20);
5315 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5316 1.1 christos }
5317 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5318 1.1 christos }
5319 1.1 christos }
5320 1.1 christos if (GESI (FLD (f_operand2), 9)) {
5321 1.1 christos {
5322 1.1 christos SI tmp_tmp;
5323 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5324 1.1 christos {
5325 1.1 christos SI opval = tmp_tmp;
5326 1.1 christos SET_H_GR (((UINT) 9), opval);
5327 1.1 christos written |= (1 << 21);
5328 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5329 1.1 christos }
5330 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5331 1.1 christos }
5332 1.1 christos }
5333 1.1 christos if (GESI (FLD (f_operand2), 10)) {
5334 1.1 christos {
5335 1.1 christos SI tmp_tmp;
5336 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5337 1.1 christos {
5338 1.1 christos SI opval = tmp_tmp;
5339 1.1 christos SET_H_GR (((UINT) 10), opval);
5340 1.1 christos written |= (1 << 8);
5341 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5342 1.1 christos }
5343 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5344 1.1 christos }
5345 1.1 christos }
5346 1.1 christos if (GESI (FLD (f_operand2), 11)) {
5347 1.1 christos {
5348 1.1 christos SI tmp_tmp;
5349 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5350 1.1 christos {
5351 1.1 christos SI opval = tmp_tmp;
5352 1.1 christos SET_H_GR (((UINT) 11), opval);
5353 1.1 christos written |= (1 << 9);
5354 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5355 1.1 christos }
5356 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5357 1.1 christos }
5358 1.1 christos }
5359 1.1 christos if (GESI (FLD (f_operand2), 12)) {
5360 1.1 christos {
5361 1.1 christos SI tmp_tmp;
5362 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5363 1.1 christos {
5364 1.1 christos SI opval = tmp_tmp;
5365 1.1 christos SET_H_GR (((UINT) 12), opval);
5366 1.1 christos written |= (1 << 10);
5367 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5368 1.1 christos }
5369 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5370 1.1 christos }
5371 1.1 christos }
5372 1.1 christos if (GESI (FLD (f_operand2), 13)) {
5373 1.1 christos {
5374 1.1 christos SI tmp_tmp;
5375 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5376 1.1 christos {
5377 1.1 christos SI opval = tmp_tmp;
5378 1.1 christos SET_H_GR (((UINT) 13), opval);
5379 1.1 christos written |= (1 << 11);
5380 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5381 1.1 christos }
5382 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5383 1.1 christos }
5384 1.1 christos }
5385 1.1 christos if (GESI (FLD (f_operand2), 14)) {
5386 1.1 christos {
5387 1.1 christos SI tmp_tmp;
5388 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5389 1.1 christos {
5390 1.1 christos SI opval = tmp_tmp;
5391 1.1 christos SET_H_GR (((UINT) 14), opval);
5392 1.1 christos written |= (1 << 12);
5393 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5394 1.1 christos }
5395 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5396 1.1 christos }
5397 1.1 christos }
5398 1.1 christos if (GESI (FLD (f_operand2), 15)) {
5399 1.1 christos {
5400 1.1 christos SI tmp_tmp;
5401 1.1 christos tmp_tmp = GETMEMSI (current_cpu, pc, tmp_addr);
5402 1.1 christos {
5403 1.1 christos SI opval = tmp_tmp;
5404 1.1 christos SET_H_GR (((UINT) 15), opval);
5405 1.1 christos written |= (1 << 13);
5406 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5407 1.1 christos }
5408 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5409 1.1 christos }
5410 1.1 christos }
5411 1.1 christos }
5412 1.1 christos if (NEBI (tmp_postinc, 0)) {
5413 1.1 christos {
5414 1.1 christos SI opval = tmp_addr;
5415 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5416 1.1 christos written |= (1 << 5);
5417 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5418 1.1 christos }
5419 1.1 christos }
5420 1.1 christos {
5421 1.1 christos {
5422 1.1 christos BI opval = 0;
5423 1.1 christos CPU (h_xbit) = opval;
5424 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5425 1.1 christos }
5426 1.1 christos {
5427 1.1 christos BI opval = 0;
5428 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5429 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5430 1.1 christos }
5431 1.1 christos }
5432 1.1 christos }
5433 1.1 christos
5434 1.1 christos abuf->written = written;
5435 1.1 christos #undef FLD
5436 1.1 christos }
5437 1.1 christos NEXT (vpc);
5438 1.1 christos
5439 1.1 christos CASE (sem, INSN_ADD_B_R) : /* add.b $Rs,$Rd */
5440 1.1 christos {
5441 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5442 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5443 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5444 1.1 christos int UNUSED written = 0;
5445 1.1 christos IADDR UNUSED pc = abuf->addr;
5446 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5447 1.1 christos
5448 1.1 christos {
5449 1.1 christos QI tmp_tmpopd;
5450 1.1 christos QI tmp_tmpops;
5451 1.1 christos BI tmp_carry;
5452 1.1 christos QI tmp_newval;
5453 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5454 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5455 1.1 christos tmp_carry = CPU (h_cbit);
5456 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5457 1.1 christos {
5458 1.1 christos SI tmp_oldregval;
5459 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5460 1.1 christos {
5461 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5462 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5463 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5464 1.1 christos }
5465 1.1 christos }
5466 1.1 christos {
5467 1.1 christos {
5468 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5469 1.1 christos CPU (h_cbit) = opval;
5470 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5471 1.1 christos }
5472 1.1 christos {
5473 1.1 christos BI opval = LTQI (tmp_newval, 0);
5474 1.1 christos CPU (h_nbit) = opval;
5475 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5476 1.1 christos }
5477 1.1 christos {
5478 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5479 1.1 christos CPU (h_zbit) = opval;
5480 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5481 1.1 christos }
5482 1.1 christos {
5483 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5484 1.1 christos CPU (h_vbit) = opval;
5485 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5486 1.1 christos }
5487 1.1 christos {
5488 1.1 christos {
5489 1.1 christos BI opval = 0;
5490 1.1 christos CPU (h_xbit) = opval;
5491 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5492 1.1 christos }
5493 1.1 christos {
5494 1.1 christos BI opval = 0;
5495 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5496 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5497 1.1 christos }
5498 1.1 christos }
5499 1.1 christos }
5500 1.1 christos }
5501 1.1 christos
5502 1.1 christos #undef FLD
5503 1.1 christos }
5504 1.1 christos NEXT (vpc);
5505 1.1 christos
5506 1.1 christos CASE (sem, INSN_ADD_W_R) : /* add.w $Rs,$Rd */
5507 1.1 christos {
5508 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5509 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5510 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5511 1.1 christos int UNUSED written = 0;
5512 1.1 christos IADDR UNUSED pc = abuf->addr;
5513 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5514 1.1 christos
5515 1.1 christos {
5516 1.1 christos HI tmp_tmpopd;
5517 1.1 christos HI tmp_tmpops;
5518 1.1 christos BI tmp_carry;
5519 1.1 christos HI tmp_newval;
5520 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5521 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5522 1.1 christos tmp_carry = CPU (h_cbit);
5523 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5524 1.1 christos {
5525 1.1 christos SI tmp_oldregval;
5526 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5527 1.1 christos {
5528 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5529 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5530 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5531 1.1 christos }
5532 1.1 christos }
5533 1.1 christos {
5534 1.1 christos {
5535 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5536 1.1 christos CPU (h_cbit) = opval;
5537 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5538 1.1 christos }
5539 1.1 christos {
5540 1.1 christos BI opval = LTHI (tmp_newval, 0);
5541 1.1 christos CPU (h_nbit) = opval;
5542 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5543 1.1 christos }
5544 1.1 christos {
5545 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5546 1.1 christos CPU (h_zbit) = opval;
5547 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5548 1.1 christos }
5549 1.1 christos {
5550 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
5551 1.1 christos CPU (h_vbit) = opval;
5552 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5553 1.1 christos }
5554 1.1 christos {
5555 1.1 christos {
5556 1.1 christos BI opval = 0;
5557 1.1 christos CPU (h_xbit) = opval;
5558 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5559 1.1 christos }
5560 1.1 christos {
5561 1.1 christos BI opval = 0;
5562 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5563 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5564 1.1 christos }
5565 1.1 christos }
5566 1.1 christos }
5567 1.1 christos }
5568 1.1 christos
5569 1.1 christos #undef FLD
5570 1.1 christos }
5571 1.1 christos NEXT (vpc);
5572 1.1 christos
5573 1.1 christos CASE (sem, INSN_ADD_D_R) : /* add.d $Rs,$Rd */
5574 1.1 christos {
5575 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5576 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5577 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
5578 1.1 christos int UNUSED written = 0;
5579 1.1 christos IADDR UNUSED pc = abuf->addr;
5580 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5581 1.1 christos
5582 1.1 christos {
5583 1.1 christos SI tmp_tmpopd;
5584 1.1 christos SI tmp_tmpops;
5585 1.1 christos BI tmp_carry;
5586 1.1 christos SI tmp_newval;
5587 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
5588 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5589 1.1 christos tmp_carry = CPU (h_cbit);
5590 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5591 1.1 christos {
5592 1.1 christos SI opval = tmp_newval;
5593 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5594 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5595 1.1 christos }
5596 1.1 christos {
5597 1.1 christos {
5598 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
5599 1.1 christos CPU (h_cbit) = opval;
5600 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5601 1.1 christos }
5602 1.1 christos {
5603 1.1 christos BI opval = LTSI (tmp_newval, 0);
5604 1.1 christos CPU (h_nbit) = opval;
5605 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5606 1.1 christos }
5607 1.1 christos {
5608 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5609 1.1 christos CPU (h_zbit) = opval;
5610 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5611 1.1 christos }
5612 1.1 christos {
5613 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
5614 1.1 christos CPU (h_vbit) = opval;
5615 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5616 1.1 christos }
5617 1.1 christos {
5618 1.1 christos {
5619 1.1 christos BI opval = 0;
5620 1.1 christos CPU (h_xbit) = opval;
5621 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5622 1.1 christos }
5623 1.1 christos {
5624 1.1 christos BI opval = 0;
5625 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5626 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5627 1.1 christos }
5628 1.1 christos }
5629 1.1 christos }
5630 1.1 christos }
5631 1.1 christos
5632 1.1 christos #undef FLD
5633 1.1 christos }
5634 1.1 christos NEXT (vpc);
5635 1.1 christos
5636 1.1 christos CASE (sem, INSN_ADD_M_B_M) : /* add-m.b [${Rs}${inc}],${Rd} */
5637 1.1 christos {
5638 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5639 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5640 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5641 1.1 christos int UNUSED written = 0;
5642 1.1 christos IADDR UNUSED pc = abuf->addr;
5643 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5644 1.1 christos
5645 1.1 christos {
5646 1.1 christos QI tmp_tmpopd;
5647 1.1 christos QI tmp_tmpops;
5648 1.1 christos BI tmp_carry;
5649 1.1 christos QI tmp_newval;
5650 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5651 1.1 christos QI tmp_tmp_mem;
5652 1.1 christos BI tmp_postinc;
5653 1.1 christos tmp_postinc = FLD (f_memmode);
5654 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5655 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
5656 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5657 1.1 christos {
5658 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5659 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
5660 1.1 christos }
5661 1.1 christos {
5662 1.1 christos SI opval = tmp_addr;
5663 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5664 1.1 christos written |= (1 << 12);
5665 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5666 1.1 christos }
5667 1.1 christos }
5668 1.1 christos }
5669 1.1 christos ; tmp_tmp_mem; });
5670 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5671 1.1 christos tmp_carry = CPU (h_cbit);
5672 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5673 1.1 christos {
5674 1.1 christos SI tmp_oldregval;
5675 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
5676 1.1 christos {
5677 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5678 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5679 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5680 1.1 christos }
5681 1.1 christos }
5682 1.1 christos {
5683 1.1 christos {
5684 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5685 1.1 christos CPU (h_cbit) = opval;
5686 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5687 1.1 christos }
5688 1.1 christos {
5689 1.1 christos BI opval = LTQI (tmp_newval, 0);
5690 1.1 christos CPU (h_nbit) = opval;
5691 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5692 1.1 christos }
5693 1.1 christos {
5694 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5695 1.1 christos CPU (h_zbit) = opval;
5696 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5697 1.1 christos }
5698 1.1 christos {
5699 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5700 1.1 christos CPU (h_vbit) = opval;
5701 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5702 1.1 christos }
5703 1.1 christos {
5704 1.1 christos {
5705 1.1 christos BI opval = 0;
5706 1.1 christos CPU (h_xbit) = opval;
5707 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5708 1.1 christos }
5709 1.1 christos {
5710 1.1 christos BI opval = 0;
5711 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5712 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5713 1.1 christos }
5714 1.1 christos }
5715 1.1 christos }
5716 1.1 christos }
5717 1.1 christos
5718 1.1 christos abuf->written = written;
5719 1.1 christos #undef FLD
5720 1.1 christos }
5721 1.1 christos NEXT (vpc);
5722 1.1 christos
5723 1.1 christos CASE (sem, INSN_ADD_M_W_M) : /* add-m.w [${Rs}${inc}],${Rd} */
5724 1.1 christos {
5725 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5726 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5727 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5728 1.1 christos int UNUSED written = 0;
5729 1.1 christos IADDR UNUSED pc = abuf->addr;
5730 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5731 1.1 christos
5732 1.1 christos {
5733 1.1 christos HI tmp_tmpopd;
5734 1.1 christos HI tmp_tmpops;
5735 1.1 christos BI tmp_carry;
5736 1.1 christos HI tmp_newval;
5737 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5738 1.1 christos HI tmp_tmp_mem;
5739 1.1 christos BI tmp_postinc;
5740 1.1 christos tmp_postinc = FLD (f_memmode);
5741 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5742 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
5743 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5744 1.1 christos {
5745 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5746 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
5747 1.1 christos }
5748 1.1 christos {
5749 1.1 christos SI opval = tmp_addr;
5750 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5751 1.1 christos written |= (1 << 12);
5752 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5753 1.1 christos }
5754 1.1 christos }
5755 1.1 christos }
5756 1.1 christos ; tmp_tmp_mem; });
5757 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5758 1.1 christos tmp_carry = CPU (h_cbit);
5759 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5760 1.1 christos {
5761 1.1 christos SI tmp_oldregval;
5762 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
5763 1.1 christos {
5764 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5765 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5766 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5767 1.1 christos }
5768 1.1 christos }
5769 1.1 christos {
5770 1.1 christos {
5771 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5772 1.1 christos CPU (h_cbit) = opval;
5773 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5774 1.1 christos }
5775 1.1 christos {
5776 1.1 christos BI opval = LTHI (tmp_newval, 0);
5777 1.1 christos CPU (h_nbit) = opval;
5778 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5779 1.1 christos }
5780 1.1 christos {
5781 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5782 1.1 christos CPU (h_zbit) = opval;
5783 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5784 1.1 christos }
5785 1.1 christos {
5786 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
5787 1.1 christos CPU (h_vbit) = opval;
5788 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5789 1.1 christos }
5790 1.1 christos {
5791 1.1 christos {
5792 1.1 christos BI opval = 0;
5793 1.1 christos CPU (h_xbit) = opval;
5794 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5795 1.1 christos }
5796 1.1 christos {
5797 1.1 christos BI opval = 0;
5798 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5799 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5800 1.1 christos }
5801 1.1 christos }
5802 1.1 christos }
5803 1.1 christos }
5804 1.1 christos
5805 1.1 christos abuf->written = written;
5806 1.1 christos #undef FLD
5807 1.1 christos }
5808 1.1 christos NEXT (vpc);
5809 1.1 christos
5810 1.1 christos CASE (sem, INSN_ADD_M_D_M) : /* add-m.d [${Rs}${inc}],${Rd} */
5811 1.1 christos {
5812 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5813 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5814 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
5815 1.1 christos int UNUSED written = 0;
5816 1.1 christos IADDR UNUSED pc = abuf->addr;
5817 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5818 1.1 christos
5819 1.1 christos {
5820 1.1 christos SI tmp_tmpopd;
5821 1.1 christos SI tmp_tmpops;
5822 1.1 christos BI tmp_carry;
5823 1.1 christos SI tmp_newval;
5824 1.1 christos tmp_tmpops = ({ SI tmp_addr;
5825 1.1 christos SI tmp_tmp_mem;
5826 1.1 christos BI tmp_postinc;
5827 1.1 christos tmp_postinc = FLD (f_memmode);
5828 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
5829 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
5830 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
5831 1.1 christos {
5832 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
5833 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
5834 1.1 christos }
5835 1.1 christos {
5836 1.1 christos SI opval = tmp_addr;
5837 1.1 christos SET_H_GR (FLD (f_operand1), opval);
5838 1.1 christos written |= (1 << 11);
5839 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5840 1.1 christos }
5841 1.1 christos }
5842 1.1 christos }
5843 1.1 christos ; tmp_tmp_mem; });
5844 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5845 1.1 christos tmp_carry = CPU (h_cbit);
5846 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5847 1.1 christos {
5848 1.1 christos SI opval = tmp_newval;
5849 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
5850 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5851 1.1 christos }
5852 1.1 christos {
5853 1.1 christos {
5854 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
5855 1.1 christos CPU (h_cbit) = opval;
5856 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5857 1.1 christos }
5858 1.1 christos {
5859 1.1 christos BI opval = LTSI (tmp_newval, 0);
5860 1.1 christos CPU (h_nbit) = opval;
5861 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5862 1.1 christos }
5863 1.1 christos {
5864 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5865 1.1 christos CPU (h_zbit) = opval;
5866 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5867 1.1 christos }
5868 1.1 christos {
5869 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
5870 1.1 christos CPU (h_vbit) = opval;
5871 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5872 1.1 christos }
5873 1.1 christos {
5874 1.1 christos {
5875 1.1 christos BI opval = 0;
5876 1.1 christos CPU (h_xbit) = opval;
5877 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5878 1.1 christos }
5879 1.1 christos {
5880 1.1 christos BI opval = 0;
5881 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5882 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5883 1.1 christos }
5884 1.1 christos }
5885 1.1 christos }
5886 1.1 christos }
5887 1.1 christos
5888 1.1 christos abuf->written = written;
5889 1.1 christos #undef FLD
5890 1.1 christos }
5891 1.1 christos NEXT (vpc);
5892 1.1 christos
5893 1.1 christos CASE (sem, INSN_ADDCBR) : /* add.b ${sconst8}],${Rd} */
5894 1.1 christos {
5895 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5896 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5897 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
5898 1.1 christos int UNUSED written = 0;
5899 1.1 christos IADDR UNUSED pc = abuf->addr;
5900 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5901 1.1 christos
5902 1.1 christos {
5903 1.1 christos QI tmp_tmpopd;
5904 1.1 christos QI tmp_tmpops;
5905 1.1 christos BI tmp_carry;
5906 1.1 christos QI tmp_newval;
5907 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
5908 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5909 1.1 christos tmp_carry = CPU (h_cbit);
5910 1.1 christos tmp_newval = ADDCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5911 1.1 christos {
5912 1.1 christos SI tmp_oldregval;
5913 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5914 1.1 christos {
5915 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
5916 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5917 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5918 1.1 christos }
5919 1.1 christos }
5920 1.1 christos {
5921 1.1 christos {
5922 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), ORIF (ANDIF (LTQI (tmp_tmpopd, 0), GEQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_newval, 0))));
5923 1.1 christos CPU (h_cbit) = opval;
5924 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5925 1.1 christos }
5926 1.1 christos {
5927 1.1 christos BI opval = LTQI (tmp_newval, 0);
5928 1.1 christos CPU (h_nbit) = opval;
5929 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5930 1.1 christos }
5931 1.1 christos {
5932 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
5933 1.1 christos CPU (h_zbit) = opval;
5934 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
5935 1.1 christos }
5936 1.1 christos {
5937 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (GEQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
5938 1.1 christos CPU (h_vbit) = opval;
5939 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
5940 1.1 christos }
5941 1.1 christos {
5942 1.1 christos {
5943 1.1 christos BI opval = 0;
5944 1.1 christos CPU (h_xbit) = opval;
5945 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
5946 1.1 christos }
5947 1.1 christos {
5948 1.1 christos BI opval = 0;
5949 1.1 christos SET_H_INSN_PREFIXED_P (opval);
5950 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
5951 1.1 christos }
5952 1.1 christos }
5953 1.1 christos }
5954 1.1 christos }
5955 1.1 christos
5956 1.1 christos #undef FLD
5957 1.1 christos }
5958 1.1 christos NEXT (vpc);
5959 1.1 christos
5960 1.1 christos CASE (sem, INSN_ADDCWR) : /* add.w ${sconst16}],${Rd} */
5961 1.1 christos {
5962 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5963 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5964 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
5965 1.1 christos int UNUSED written = 0;
5966 1.1 christos IADDR UNUSED pc = abuf->addr;
5967 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
5968 1.1 christos
5969 1.1 christos {
5970 1.1 christos HI tmp_tmpopd;
5971 1.1 christos HI tmp_tmpops;
5972 1.1 christos BI tmp_carry;
5973 1.1 christos HI tmp_newval;
5974 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
5975 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
5976 1.1 christos tmp_carry = CPU (h_cbit);
5977 1.1 christos tmp_newval = ADDCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
5978 1.1 christos {
5979 1.1 christos SI tmp_oldregval;
5980 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
5981 1.1 christos {
5982 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
5983 1.1 christos SET_H_GR (FLD (f_operand2), opval);
5984 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5985 1.1 christos }
5986 1.1 christos }
5987 1.1 christos {
5988 1.1 christos {
5989 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), ORIF (ANDIF (LTHI (tmp_tmpopd, 0), GEHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_newval, 0))));
5990 1.1 christos CPU (h_cbit) = opval;
5991 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
5992 1.1 christos }
5993 1.1 christos {
5994 1.1 christos BI opval = LTHI (tmp_newval, 0);
5995 1.1 christos CPU (h_nbit) = opval;
5996 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
5997 1.1 christos }
5998 1.1 christos {
5999 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6000 1.1 christos CPU (h_zbit) = opval;
6001 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6002 1.1 christos }
6003 1.1 christos {
6004 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (GEHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
6005 1.1 christos CPU (h_vbit) = opval;
6006 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6007 1.1 christos }
6008 1.1 christos {
6009 1.1 christos {
6010 1.1 christos BI opval = 0;
6011 1.1 christos CPU (h_xbit) = opval;
6012 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6013 1.1 christos }
6014 1.1 christos {
6015 1.1 christos BI opval = 0;
6016 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6017 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6018 1.1 christos }
6019 1.1 christos }
6020 1.1 christos }
6021 1.1 christos }
6022 1.1 christos
6023 1.1 christos #undef FLD
6024 1.1 christos }
6025 1.1 christos NEXT (vpc);
6026 1.1 christos
6027 1.1 christos CASE (sem, INSN_ADDCDR) : /* add.d ${const32}],${Rd} */
6028 1.1 christos {
6029 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6030 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6031 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
6032 1.1 christos int UNUSED written = 0;
6033 1.1 christos IADDR UNUSED pc = abuf->addr;
6034 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
6035 1.1 christos
6036 1.1 christos {
6037 1.1 christos SI tmp_tmpopd;
6038 1.1 christos SI tmp_tmpops;
6039 1.1 christos BI tmp_carry;
6040 1.1 christos SI tmp_newval;
6041 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
6042 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6043 1.1 christos tmp_carry = CPU (h_cbit);
6044 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6045 1.1 christos {
6046 1.1 christos SI opval = tmp_newval;
6047 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6048 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6049 1.1 christos }
6050 1.1 christos {
6051 1.1 christos {
6052 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6053 1.1 christos CPU (h_cbit) = opval;
6054 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6055 1.1 christos }
6056 1.1 christos {
6057 1.1 christos BI opval = LTSI (tmp_newval, 0);
6058 1.1 christos CPU (h_nbit) = opval;
6059 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6060 1.1 christos }
6061 1.1 christos {
6062 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6063 1.1 christos CPU (h_zbit) = opval;
6064 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6065 1.1 christos }
6066 1.1 christos {
6067 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6068 1.1 christos CPU (h_vbit) = opval;
6069 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6070 1.1 christos }
6071 1.1 christos {
6072 1.1 christos {
6073 1.1 christos BI opval = 0;
6074 1.1 christos CPU (h_xbit) = opval;
6075 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6076 1.1 christos }
6077 1.1 christos {
6078 1.1 christos BI opval = 0;
6079 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6080 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6081 1.1 christos }
6082 1.1 christos }
6083 1.1 christos }
6084 1.1 christos }
6085 1.1 christos
6086 1.1 christos #undef FLD
6087 1.1 christos }
6088 1.1 christos NEXT (vpc);
6089 1.1 christos
6090 1.1 christos CASE (sem, INSN_ADDS_B_R) : /* adds.b $Rs,$Rd */
6091 1.1 christos {
6092 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6093 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6094 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6095 1.1 christos int UNUSED written = 0;
6096 1.1 christos IADDR UNUSED pc = abuf->addr;
6097 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6098 1.1 christos
6099 1.1 christos {
6100 1.1 christos SI tmp_tmpopd;
6101 1.1 christos SI tmp_tmpops;
6102 1.1 christos BI tmp_carry;
6103 1.1 christos SI tmp_newval;
6104 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6105 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6106 1.1 christos tmp_carry = CPU (h_cbit);
6107 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6108 1.1 christos {
6109 1.1 christos SI opval = tmp_newval;
6110 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6111 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6112 1.1 christos }
6113 1.1 christos {
6114 1.1 christos {
6115 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6116 1.1 christos CPU (h_cbit) = opval;
6117 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6118 1.1 christos }
6119 1.1 christos {
6120 1.1 christos BI opval = LTSI (tmp_newval, 0);
6121 1.1 christos CPU (h_nbit) = opval;
6122 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6123 1.1 christos }
6124 1.1 christos {
6125 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6126 1.1 christos CPU (h_zbit) = opval;
6127 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6128 1.1 christos }
6129 1.1 christos {
6130 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6131 1.1 christos CPU (h_vbit) = opval;
6132 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6133 1.1 christos }
6134 1.1 christos {
6135 1.1 christos {
6136 1.1 christos BI opval = 0;
6137 1.1 christos CPU (h_xbit) = opval;
6138 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6139 1.1 christos }
6140 1.1 christos {
6141 1.1 christos BI opval = 0;
6142 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6143 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6144 1.1 christos }
6145 1.1 christos }
6146 1.1 christos }
6147 1.1 christos }
6148 1.1 christos
6149 1.1 christos #undef FLD
6150 1.1 christos }
6151 1.1 christos NEXT (vpc);
6152 1.1 christos
6153 1.1 christos CASE (sem, INSN_ADDS_W_R) : /* adds.w $Rs,$Rd */
6154 1.1 christos {
6155 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6156 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6157 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6158 1.1 christos int UNUSED written = 0;
6159 1.1 christos IADDR UNUSED pc = abuf->addr;
6160 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6161 1.1 christos
6162 1.1 christos {
6163 1.1 christos SI tmp_tmpopd;
6164 1.1 christos SI tmp_tmpops;
6165 1.1 christos BI tmp_carry;
6166 1.1 christos SI tmp_newval;
6167 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6168 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6169 1.1 christos tmp_carry = CPU (h_cbit);
6170 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6171 1.1 christos {
6172 1.1 christos SI opval = tmp_newval;
6173 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6174 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6175 1.1 christos }
6176 1.1 christos {
6177 1.1 christos {
6178 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6179 1.1 christos CPU (h_cbit) = opval;
6180 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6181 1.1 christos }
6182 1.1 christos {
6183 1.1 christos BI opval = LTSI (tmp_newval, 0);
6184 1.1 christos CPU (h_nbit) = opval;
6185 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6186 1.1 christos }
6187 1.1 christos {
6188 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6189 1.1 christos CPU (h_zbit) = opval;
6190 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6191 1.1 christos }
6192 1.1 christos {
6193 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6194 1.1 christos CPU (h_vbit) = opval;
6195 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6196 1.1 christos }
6197 1.1 christos {
6198 1.1 christos {
6199 1.1 christos BI opval = 0;
6200 1.1 christos CPU (h_xbit) = opval;
6201 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6202 1.1 christos }
6203 1.1 christos {
6204 1.1 christos BI opval = 0;
6205 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6206 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6207 1.1 christos }
6208 1.1 christos }
6209 1.1 christos }
6210 1.1 christos }
6211 1.1 christos
6212 1.1 christos #undef FLD
6213 1.1 christos }
6214 1.1 christos NEXT (vpc);
6215 1.1 christos
6216 1.1 christos CASE (sem, INSN_ADDS_M_B_M) : /* adds-m.b [${Rs}${inc}],$Rd */
6217 1.1 christos {
6218 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6219 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6220 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6221 1.1 christos int UNUSED written = 0;
6222 1.1 christos IADDR UNUSED pc = abuf->addr;
6223 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6224 1.1 christos
6225 1.1 christos {
6226 1.1 christos SI tmp_tmpopd;
6227 1.1 christos SI tmp_tmpops;
6228 1.1 christos BI tmp_carry;
6229 1.1 christos SI tmp_newval;
6230 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
6231 1.1 christos QI tmp_tmp_mem;
6232 1.1 christos BI tmp_postinc;
6233 1.1 christos tmp_postinc = FLD (f_memmode);
6234 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6235 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6236 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6237 1.1 christos {
6238 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6239 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6240 1.1 christos }
6241 1.1 christos {
6242 1.1 christos SI opval = tmp_addr;
6243 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6244 1.1 christos written |= (1 << 11);
6245 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6246 1.1 christos }
6247 1.1 christos }
6248 1.1 christos }
6249 1.1 christos ; tmp_tmp_mem; }));
6250 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6251 1.1 christos tmp_carry = CPU (h_cbit);
6252 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6253 1.1 christos {
6254 1.1 christos SI opval = tmp_newval;
6255 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6256 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6257 1.1 christos }
6258 1.1 christos {
6259 1.1 christos {
6260 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6261 1.1 christos CPU (h_cbit) = opval;
6262 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6263 1.1 christos }
6264 1.1 christos {
6265 1.1 christos BI opval = LTSI (tmp_newval, 0);
6266 1.1 christos CPU (h_nbit) = opval;
6267 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6268 1.1 christos }
6269 1.1 christos {
6270 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6271 1.1 christos CPU (h_zbit) = opval;
6272 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6273 1.1 christos }
6274 1.1 christos {
6275 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6276 1.1 christos CPU (h_vbit) = opval;
6277 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6278 1.1 christos }
6279 1.1 christos {
6280 1.1 christos {
6281 1.1 christos BI opval = 0;
6282 1.1 christos CPU (h_xbit) = opval;
6283 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6284 1.1 christos }
6285 1.1 christos {
6286 1.1 christos BI opval = 0;
6287 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6288 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6289 1.1 christos }
6290 1.1 christos }
6291 1.1 christos }
6292 1.1 christos }
6293 1.1 christos
6294 1.1 christos abuf->written = written;
6295 1.1 christos #undef FLD
6296 1.1 christos }
6297 1.1 christos NEXT (vpc);
6298 1.1 christos
6299 1.1 christos CASE (sem, INSN_ADDS_M_W_M) : /* adds-m.w [${Rs}${inc}],$Rd */
6300 1.1 christos {
6301 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6302 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6303 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6304 1.1 christos int UNUSED written = 0;
6305 1.1 christos IADDR UNUSED pc = abuf->addr;
6306 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6307 1.1 christos
6308 1.1 christos {
6309 1.1 christos SI tmp_tmpopd;
6310 1.1 christos SI tmp_tmpops;
6311 1.1 christos BI tmp_carry;
6312 1.1 christos SI tmp_newval;
6313 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
6314 1.1 christos HI tmp_tmp_mem;
6315 1.1 christos BI tmp_postinc;
6316 1.1 christos tmp_postinc = FLD (f_memmode);
6317 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6318 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6319 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6320 1.1 christos {
6321 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6322 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6323 1.1 christos }
6324 1.1 christos {
6325 1.1 christos SI opval = tmp_addr;
6326 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6327 1.1 christos written |= (1 << 11);
6328 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6329 1.1 christos }
6330 1.1 christos }
6331 1.1 christos }
6332 1.1 christos ; tmp_tmp_mem; }));
6333 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6334 1.1 christos tmp_carry = CPU (h_cbit);
6335 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6336 1.1 christos {
6337 1.1 christos SI opval = tmp_newval;
6338 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6339 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6340 1.1 christos }
6341 1.1 christos {
6342 1.1 christos {
6343 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6344 1.1 christos CPU (h_cbit) = opval;
6345 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6346 1.1 christos }
6347 1.1 christos {
6348 1.1 christos BI opval = LTSI (tmp_newval, 0);
6349 1.1 christos CPU (h_nbit) = opval;
6350 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6351 1.1 christos }
6352 1.1 christos {
6353 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6354 1.1 christos CPU (h_zbit) = opval;
6355 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6356 1.1 christos }
6357 1.1 christos {
6358 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6359 1.1 christos CPU (h_vbit) = opval;
6360 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6361 1.1 christos }
6362 1.1 christos {
6363 1.1 christos {
6364 1.1 christos BI opval = 0;
6365 1.1 christos CPU (h_xbit) = opval;
6366 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6367 1.1 christos }
6368 1.1 christos {
6369 1.1 christos BI opval = 0;
6370 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6371 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6372 1.1 christos }
6373 1.1 christos }
6374 1.1 christos }
6375 1.1 christos }
6376 1.1 christos
6377 1.1 christos abuf->written = written;
6378 1.1 christos #undef FLD
6379 1.1 christos }
6380 1.1 christos NEXT (vpc);
6381 1.1 christos
6382 1.1 christos CASE (sem, INSN_ADDSCBR) : /* [${Rs}${inc}],$Rd */
6383 1.1 christos {
6384 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6385 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6386 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6387 1.1 christos int UNUSED written = 0;
6388 1.1 christos IADDR UNUSED pc = abuf->addr;
6389 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6390 1.1 christos
6391 1.1 christos {
6392 1.1 christos SI tmp_tmpopd;
6393 1.1 christos SI tmp_tmpops;
6394 1.1 christos BI tmp_carry;
6395 1.1 christos SI tmp_newval;
6396 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6397 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6398 1.1 christos tmp_carry = CPU (h_cbit);
6399 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6400 1.1 christos {
6401 1.1 christos SI opval = tmp_newval;
6402 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6403 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6404 1.1 christos }
6405 1.1 christos {
6406 1.1 christos {
6407 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6408 1.1 christos CPU (h_cbit) = opval;
6409 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6410 1.1 christos }
6411 1.1 christos {
6412 1.1 christos BI opval = LTSI (tmp_newval, 0);
6413 1.1 christos CPU (h_nbit) = opval;
6414 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6415 1.1 christos }
6416 1.1 christos {
6417 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6418 1.1 christos CPU (h_zbit) = opval;
6419 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6420 1.1 christos }
6421 1.1 christos {
6422 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6423 1.1 christos CPU (h_vbit) = opval;
6424 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6425 1.1 christos }
6426 1.1 christos {
6427 1.1 christos {
6428 1.1 christos BI opval = 0;
6429 1.1 christos CPU (h_xbit) = opval;
6430 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6431 1.1 christos }
6432 1.1 christos {
6433 1.1 christos BI opval = 0;
6434 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6435 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6436 1.1 christos }
6437 1.1 christos }
6438 1.1 christos }
6439 1.1 christos }
6440 1.1 christos
6441 1.1 christos #undef FLD
6442 1.1 christos }
6443 1.1 christos NEXT (vpc);
6444 1.1 christos
6445 1.1 christos CASE (sem, INSN_ADDSCWR) : /* [${Rs}${inc}],$Rd */
6446 1.1 christos {
6447 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6448 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6449 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6450 1.1 christos int UNUSED written = 0;
6451 1.1 christos IADDR UNUSED pc = abuf->addr;
6452 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6453 1.1 christos
6454 1.1 christos {
6455 1.1 christos SI tmp_tmpopd;
6456 1.1 christos SI tmp_tmpops;
6457 1.1 christos BI tmp_carry;
6458 1.1 christos SI tmp_newval;
6459 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6460 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6461 1.1 christos tmp_carry = CPU (h_cbit);
6462 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6463 1.1 christos {
6464 1.1 christos SI opval = tmp_newval;
6465 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6466 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6467 1.1 christos }
6468 1.1 christos {
6469 1.1 christos {
6470 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6471 1.1 christos CPU (h_cbit) = opval;
6472 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6473 1.1 christos }
6474 1.1 christos {
6475 1.1 christos BI opval = LTSI (tmp_newval, 0);
6476 1.1 christos CPU (h_nbit) = opval;
6477 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6478 1.1 christos }
6479 1.1 christos {
6480 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6481 1.1 christos CPU (h_zbit) = opval;
6482 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6483 1.1 christos }
6484 1.1 christos {
6485 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6486 1.1 christos CPU (h_vbit) = opval;
6487 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6488 1.1 christos }
6489 1.1 christos {
6490 1.1 christos {
6491 1.1 christos BI opval = 0;
6492 1.1 christos CPU (h_xbit) = opval;
6493 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6494 1.1 christos }
6495 1.1 christos {
6496 1.1 christos BI opval = 0;
6497 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6498 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6499 1.1 christos }
6500 1.1 christos }
6501 1.1 christos }
6502 1.1 christos }
6503 1.1 christos
6504 1.1 christos #undef FLD
6505 1.1 christos }
6506 1.1 christos NEXT (vpc);
6507 1.1 christos
6508 1.1 christos CASE (sem, INSN_ADDU_B_R) : /* addu.b $Rs,$Rd */
6509 1.1 christos {
6510 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6511 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6512 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6513 1.1 christos int UNUSED written = 0;
6514 1.1 christos IADDR UNUSED pc = abuf->addr;
6515 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6516 1.1 christos
6517 1.1 christos {
6518 1.1 christos SI tmp_tmpopd;
6519 1.1 christos SI tmp_tmpops;
6520 1.1 christos BI tmp_carry;
6521 1.1 christos SI tmp_newval;
6522 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
6523 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6524 1.1 christos tmp_carry = CPU (h_cbit);
6525 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6526 1.1 christos {
6527 1.1 christos SI opval = tmp_newval;
6528 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6529 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6530 1.1 christos }
6531 1.1 christos {
6532 1.1 christos {
6533 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6534 1.1 christos CPU (h_cbit) = opval;
6535 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6536 1.1 christos }
6537 1.1 christos {
6538 1.1 christos BI opval = LTSI (tmp_newval, 0);
6539 1.1 christos CPU (h_nbit) = opval;
6540 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6541 1.1 christos }
6542 1.1 christos {
6543 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6544 1.1 christos CPU (h_zbit) = opval;
6545 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6546 1.1 christos }
6547 1.1 christos {
6548 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6549 1.1 christos CPU (h_vbit) = opval;
6550 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6551 1.1 christos }
6552 1.1 christos {
6553 1.1 christos {
6554 1.1 christos BI opval = 0;
6555 1.1 christos CPU (h_xbit) = opval;
6556 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6557 1.1 christos }
6558 1.1 christos {
6559 1.1 christos BI opval = 0;
6560 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6561 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6562 1.1 christos }
6563 1.1 christos }
6564 1.1 christos }
6565 1.1 christos }
6566 1.1 christos
6567 1.1 christos #undef FLD
6568 1.1 christos }
6569 1.1 christos NEXT (vpc);
6570 1.1 christos
6571 1.1 christos CASE (sem, INSN_ADDU_W_R) : /* addu.w $Rs,$Rd */
6572 1.1 christos {
6573 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6574 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6575 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6576 1.1 christos int UNUSED written = 0;
6577 1.1 christos IADDR UNUSED pc = abuf->addr;
6578 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6579 1.1 christos
6580 1.1 christos {
6581 1.1 christos SI tmp_tmpopd;
6582 1.1 christos SI tmp_tmpops;
6583 1.1 christos BI tmp_carry;
6584 1.1 christos SI tmp_newval;
6585 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
6586 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6587 1.1 christos tmp_carry = CPU (h_cbit);
6588 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6589 1.1 christos {
6590 1.1 christos SI opval = tmp_newval;
6591 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6592 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6593 1.1 christos }
6594 1.1 christos {
6595 1.1 christos {
6596 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6597 1.1 christos CPU (h_cbit) = opval;
6598 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6599 1.1 christos }
6600 1.1 christos {
6601 1.1 christos BI opval = LTSI (tmp_newval, 0);
6602 1.1 christos CPU (h_nbit) = opval;
6603 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6604 1.1 christos }
6605 1.1 christos {
6606 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6607 1.1 christos CPU (h_zbit) = opval;
6608 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6609 1.1 christos }
6610 1.1 christos {
6611 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6612 1.1 christos CPU (h_vbit) = opval;
6613 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6614 1.1 christos }
6615 1.1 christos {
6616 1.1 christos {
6617 1.1 christos BI opval = 0;
6618 1.1 christos CPU (h_xbit) = opval;
6619 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6620 1.1 christos }
6621 1.1 christos {
6622 1.1 christos BI opval = 0;
6623 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6624 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6625 1.1 christos }
6626 1.1 christos }
6627 1.1 christos }
6628 1.1 christos }
6629 1.1 christos
6630 1.1 christos #undef FLD
6631 1.1 christos }
6632 1.1 christos NEXT (vpc);
6633 1.1 christos
6634 1.1 christos CASE (sem, INSN_ADDU_M_B_M) : /* addu-m.b [${Rs}${inc}],$Rd */
6635 1.1 christos {
6636 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6637 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6638 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6639 1.1 christos int UNUSED written = 0;
6640 1.1 christos IADDR UNUSED pc = abuf->addr;
6641 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6642 1.1 christos
6643 1.1 christos {
6644 1.1 christos SI tmp_tmpopd;
6645 1.1 christos SI tmp_tmpops;
6646 1.1 christos BI tmp_carry;
6647 1.1 christos SI tmp_newval;
6648 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
6649 1.1 christos QI tmp_tmp_mem;
6650 1.1 christos BI tmp_postinc;
6651 1.1 christos tmp_postinc = FLD (f_memmode);
6652 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6653 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
6654 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6655 1.1 christos {
6656 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6657 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
6658 1.1 christos }
6659 1.1 christos {
6660 1.1 christos SI opval = tmp_addr;
6661 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6662 1.1 christos written |= (1 << 11);
6663 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6664 1.1 christos }
6665 1.1 christos }
6666 1.1 christos }
6667 1.1 christos ; tmp_tmp_mem; }));
6668 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6669 1.1 christos tmp_carry = CPU (h_cbit);
6670 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6671 1.1 christos {
6672 1.1 christos SI opval = tmp_newval;
6673 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6674 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6675 1.1 christos }
6676 1.1 christos {
6677 1.1 christos {
6678 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6679 1.1 christos CPU (h_cbit) = opval;
6680 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6681 1.1 christos }
6682 1.1 christos {
6683 1.1 christos BI opval = LTSI (tmp_newval, 0);
6684 1.1 christos CPU (h_nbit) = opval;
6685 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6686 1.1 christos }
6687 1.1 christos {
6688 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6689 1.1 christos CPU (h_zbit) = opval;
6690 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6691 1.1 christos }
6692 1.1 christos {
6693 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6694 1.1 christos CPU (h_vbit) = opval;
6695 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6696 1.1 christos }
6697 1.1 christos {
6698 1.1 christos {
6699 1.1 christos BI opval = 0;
6700 1.1 christos CPU (h_xbit) = opval;
6701 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6702 1.1 christos }
6703 1.1 christos {
6704 1.1 christos BI opval = 0;
6705 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6706 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6707 1.1 christos }
6708 1.1 christos }
6709 1.1 christos }
6710 1.1 christos }
6711 1.1 christos
6712 1.1 christos abuf->written = written;
6713 1.1 christos #undef FLD
6714 1.1 christos }
6715 1.1 christos NEXT (vpc);
6716 1.1 christos
6717 1.1 christos CASE (sem, INSN_ADDU_M_W_M) : /* addu-m.w [${Rs}${inc}],$Rd */
6718 1.1 christos {
6719 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6720 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6721 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
6722 1.1 christos int UNUSED written = 0;
6723 1.1 christos IADDR UNUSED pc = abuf->addr;
6724 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6725 1.1 christos
6726 1.1 christos {
6727 1.1 christos SI tmp_tmpopd;
6728 1.1 christos SI tmp_tmpops;
6729 1.1 christos BI tmp_carry;
6730 1.1 christos SI tmp_newval;
6731 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
6732 1.1 christos HI tmp_tmp_mem;
6733 1.1 christos BI tmp_postinc;
6734 1.1 christos tmp_postinc = FLD (f_memmode);
6735 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
6736 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
6737 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
6738 1.1 christos {
6739 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
6740 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
6741 1.1 christos }
6742 1.1 christos {
6743 1.1 christos SI opval = tmp_addr;
6744 1.1 christos SET_H_GR (FLD (f_operand1), opval);
6745 1.1 christos written |= (1 << 11);
6746 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6747 1.1 christos }
6748 1.1 christos }
6749 1.1 christos }
6750 1.1 christos ; tmp_tmp_mem; }));
6751 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6752 1.1 christos tmp_carry = CPU (h_cbit);
6753 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6754 1.1 christos {
6755 1.1 christos SI opval = tmp_newval;
6756 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
6757 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6758 1.1 christos }
6759 1.1 christos {
6760 1.1 christos {
6761 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6762 1.1 christos CPU (h_cbit) = opval;
6763 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6764 1.1 christos }
6765 1.1 christos {
6766 1.1 christos BI opval = LTSI (tmp_newval, 0);
6767 1.1 christos CPU (h_nbit) = opval;
6768 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6769 1.1 christos }
6770 1.1 christos {
6771 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6772 1.1 christos CPU (h_zbit) = opval;
6773 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6774 1.1 christos }
6775 1.1 christos {
6776 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6777 1.1 christos CPU (h_vbit) = opval;
6778 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6779 1.1 christos }
6780 1.1 christos {
6781 1.1 christos {
6782 1.1 christos BI opval = 0;
6783 1.1 christos CPU (h_xbit) = opval;
6784 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6785 1.1 christos }
6786 1.1 christos {
6787 1.1 christos BI opval = 0;
6788 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6789 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6790 1.1 christos }
6791 1.1 christos }
6792 1.1 christos }
6793 1.1 christos }
6794 1.1 christos
6795 1.1 christos abuf->written = written;
6796 1.1 christos #undef FLD
6797 1.1 christos }
6798 1.1 christos NEXT (vpc);
6799 1.1 christos
6800 1.1 christos CASE (sem, INSN_ADDUCBR) : /* [${Rs}${inc}],$Rd */
6801 1.1 christos {
6802 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6803 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6804 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
6805 1.1 christos int UNUSED written = 0;
6806 1.1 christos IADDR UNUSED pc = abuf->addr;
6807 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6808 1.1 christos
6809 1.1 christos {
6810 1.1 christos SI tmp_tmpopd;
6811 1.1 christos SI tmp_tmpops;
6812 1.1 christos BI tmp_carry;
6813 1.1 christos SI tmp_newval;
6814 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
6815 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6816 1.1 christos tmp_carry = CPU (h_cbit);
6817 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6818 1.1 christos {
6819 1.1 christos SI opval = tmp_newval;
6820 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6821 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6822 1.1 christos }
6823 1.1 christos {
6824 1.1 christos {
6825 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6826 1.1 christos CPU (h_cbit) = opval;
6827 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6828 1.1 christos }
6829 1.1 christos {
6830 1.1 christos BI opval = LTSI (tmp_newval, 0);
6831 1.1 christos CPU (h_nbit) = opval;
6832 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6833 1.1 christos }
6834 1.1 christos {
6835 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6836 1.1 christos CPU (h_zbit) = opval;
6837 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6838 1.1 christos }
6839 1.1 christos {
6840 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6841 1.1 christos CPU (h_vbit) = opval;
6842 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6843 1.1 christos }
6844 1.1 christos {
6845 1.1 christos {
6846 1.1 christos BI opval = 0;
6847 1.1 christos CPU (h_xbit) = opval;
6848 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6849 1.1 christos }
6850 1.1 christos {
6851 1.1 christos BI opval = 0;
6852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6854 1.1 christos }
6855 1.1 christos }
6856 1.1 christos }
6857 1.1 christos }
6858 1.1 christos
6859 1.1 christos #undef FLD
6860 1.1 christos }
6861 1.1 christos NEXT (vpc);
6862 1.1 christos
6863 1.1 christos CASE (sem, INSN_ADDUCWR) : /* [${Rs}${inc}],$Rd */
6864 1.1 christos {
6865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6867 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
6868 1.1 christos int UNUSED written = 0;
6869 1.1 christos IADDR UNUSED pc = abuf->addr;
6870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
6871 1.1 christos
6872 1.1 christos {
6873 1.1 christos SI tmp_tmpopd;
6874 1.1 christos SI tmp_tmpops;
6875 1.1 christos BI tmp_carry;
6876 1.1 christos SI tmp_newval;
6877 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
6878 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6879 1.1 christos tmp_carry = CPU (h_cbit);
6880 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6881 1.1 christos {
6882 1.1 christos SI opval = tmp_newval;
6883 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6884 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6885 1.1 christos }
6886 1.1 christos {
6887 1.1 christos {
6888 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
6889 1.1 christos CPU (h_cbit) = opval;
6890 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6891 1.1 christos }
6892 1.1 christos {
6893 1.1 christos BI opval = LTSI (tmp_newval, 0);
6894 1.1 christos CPU (h_nbit) = opval;
6895 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6896 1.1 christos }
6897 1.1 christos {
6898 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6899 1.1 christos CPU (h_zbit) = opval;
6900 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6901 1.1 christos }
6902 1.1 christos {
6903 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
6904 1.1 christos CPU (h_vbit) = opval;
6905 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6906 1.1 christos }
6907 1.1 christos {
6908 1.1 christos {
6909 1.1 christos BI opval = 0;
6910 1.1 christos CPU (h_xbit) = opval;
6911 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6912 1.1 christos }
6913 1.1 christos {
6914 1.1 christos BI opval = 0;
6915 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6916 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6917 1.1 christos }
6918 1.1 christos }
6919 1.1 christos }
6920 1.1 christos }
6921 1.1 christos
6922 1.1 christos #undef FLD
6923 1.1 christos }
6924 1.1 christos NEXT (vpc);
6925 1.1 christos
6926 1.1 christos CASE (sem, INSN_SUB_B_R) : /* sub.b $Rs,$Rd */
6927 1.1 christos {
6928 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6929 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6930 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6931 1.1 christos int UNUSED written = 0;
6932 1.1 christos IADDR UNUSED pc = abuf->addr;
6933 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6934 1.1 christos
6935 1.1 christos {
6936 1.1 christos QI tmp_tmpopd;
6937 1.1 christos QI tmp_tmpops;
6938 1.1 christos BI tmp_carry;
6939 1.1 christos QI tmp_newval;
6940 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
6941 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
6942 1.1 christos tmp_carry = CPU (h_cbit);
6943 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
6944 1.1 christos {
6945 1.1 christos SI tmp_oldregval;
6946 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
6947 1.1 christos {
6948 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
6949 1.1 christos SET_H_GR (FLD (f_operand2), opval);
6950 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6951 1.1 christos }
6952 1.1 christos }
6953 1.1 christos {
6954 1.1 christos {
6955 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
6956 1.1 christos CPU (h_cbit) = opval;
6957 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
6958 1.1 christos }
6959 1.1 christos {
6960 1.1 christos BI opval = LTQI (tmp_newval, 0);
6961 1.1 christos CPU (h_nbit) = opval;
6962 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
6963 1.1 christos }
6964 1.1 christos {
6965 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
6966 1.1 christos CPU (h_zbit) = opval;
6967 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
6968 1.1 christos }
6969 1.1 christos {
6970 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
6971 1.1 christos CPU (h_vbit) = opval;
6972 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
6973 1.1 christos }
6974 1.1 christos {
6975 1.1 christos {
6976 1.1 christos BI opval = 0;
6977 1.1 christos CPU (h_xbit) = opval;
6978 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
6979 1.1 christos }
6980 1.1 christos {
6981 1.1 christos BI opval = 0;
6982 1.1 christos SET_H_INSN_PREFIXED_P (opval);
6983 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
6984 1.1 christos }
6985 1.1 christos }
6986 1.1 christos }
6987 1.1 christos }
6988 1.1 christos
6989 1.1 christos #undef FLD
6990 1.1 christos }
6991 1.1 christos NEXT (vpc);
6992 1.1 christos
6993 1.1 christos CASE (sem, INSN_SUB_W_R) : /* sub.w $Rs,$Rd */
6994 1.1 christos {
6995 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6996 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6997 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
6998 1.1 christos int UNUSED written = 0;
6999 1.1 christos IADDR UNUSED pc = abuf->addr;
7000 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7001 1.1 christos
7002 1.1 christos {
7003 1.1 christos HI tmp_tmpopd;
7004 1.1 christos HI tmp_tmpops;
7005 1.1 christos BI tmp_carry;
7006 1.1 christos HI tmp_newval;
7007 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7008 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7009 1.1 christos tmp_carry = CPU (h_cbit);
7010 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7011 1.1 christos {
7012 1.1 christos SI tmp_oldregval;
7013 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7014 1.1 christos {
7015 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7016 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7017 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7018 1.1 christos }
7019 1.1 christos }
7020 1.1 christos {
7021 1.1 christos {
7022 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7023 1.1 christos CPU (h_cbit) = opval;
7024 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7025 1.1 christos }
7026 1.1 christos {
7027 1.1 christos BI opval = LTHI (tmp_newval, 0);
7028 1.1 christos CPU (h_nbit) = opval;
7029 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7030 1.1 christos }
7031 1.1 christos {
7032 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7033 1.1 christos CPU (h_zbit) = opval;
7034 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7035 1.1 christos }
7036 1.1 christos {
7037 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7038 1.1 christos CPU (h_vbit) = opval;
7039 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7040 1.1 christos }
7041 1.1 christos {
7042 1.1 christos {
7043 1.1 christos BI opval = 0;
7044 1.1 christos CPU (h_xbit) = opval;
7045 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7046 1.1 christos }
7047 1.1 christos {
7048 1.1 christos BI opval = 0;
7049 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7050 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7051 1.1 christos }
7052 1.1 christos }
7053 1.1 christos }
7054 1.1 christos }
7055 1.1 christos
7056 1.1 christos #undef FLD
7057 1.1 christos }
7058 1.1 christos NEXT (vpc);
7059 1.1 christos
7060 1.1 christos CASE (sem, INSN_SUB_D_R) : /* sub.d $Rs,$Rd */
7061 1.1 christos {
7062 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7063 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7064 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7065 1.1 christos int UNUSED written = 0;
7066 1.1 christos IADDR UNUSED pc = abuf->addr;
7067 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7068 1.1 christos
7069 1.1 christos {
7070 1.1 christos SI tmp_tmpopd;
7071 1.1 christos SI tmp_tmpops;
7072 1.1 christos BI tmp_carry;
7073 1.1 christos SI tmp_newval;
7074 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
7075 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7076 1.1 christos tmp_carry = CPU (h_cbit);
7077 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7078 1.1 christos {
7079 1.1 christos SI opval = tmp_newval;
7080 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7081 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7082 1.1 christos }
7083 1.1 christos {
7084 1.1 christos {
7085 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7086 1.1 christos CPU (h_cbit) = opval;
7087 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7088 1.1 christos }
7089 1.1 christos {
7090 1.1 christos BI opval = LTSI (tmp_newval, 0);
7091 1.1 christos CPU (h_nbit) = opval;
7092 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7093 1.1 christos }
7094 1.1 christos {
7095 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7096 1.1 christos CPU (h_zbit) = opval;
7097 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7098 1.1 christos }
7099 1.1 christos {
7100 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7101 1.1 christos CPU (h_vbit) = opval;
7102 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7103 1.1 christos }
7104 1.1 christos {
7105 1.1 christos {
7106 1.1 christos BI opval = 0;
7107 1.1 christos CPU (h_xbit) = opval;
7108 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7109 1.1 christos }
7110 1.1 christos {
7111 1.1 christos BI opval = 0;
7112 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7113 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7114 1.1 christos }
7115 1.1 christos }
7116 1.1 christos }
7117 1.1 christos }
7118 1.1 christos
7119 1.1 christos #undef FLD
7120 1.1 christos }
7121 1.1 christos NEXT (vpc);
7122 1.1 christos
7123 1.1 christos CASE (sem, INSN_SUB_M_B_M) : /* sub-m.b [${Rs}${inc}],${Rd} */
7124 1.1 christos {
7125 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7126 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7127 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7128 1.1 christos int UNUSED written = 0;
7129 1.1 christos IADDR UNUSED pc = abuf->addr;
7130 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7131 1.1 christos
7132 1.1 christos {
7133 1.1 christos QI tmp_tmpopd;
7134 1.1 christos QI tmp_tmpops;
7135 1.1 christos BI tmp_carry;
7136 1.1 christos QI tmp_newval;
7137 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7138 1.1 christos QI tmp_tmp_mem;
7139 1.1 christos BI tmp_postinc;
7140 1.1 christos tmp_postinc = FLD (f_memmode);
7141 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7142 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7143 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7144 1.1 christos {
7145 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7146 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7147 1.1 christos }
7148 1.1 christos {
7149 1.1 christos SI opval = tmp_addr;
7150 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7151 1.1 christos written |= (1 << 12);
7152 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7153 1.1 christos }
7154 1.1 christos }
7155 1.1 christos }
7156 1.1 christos ; tmp_tmp_mem; });
7157 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7158 1.1 christos tmp_carry = CPU (h_cbit);
7159 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7160 1.1 christos {
7161 1.1 christos SI tmp_oldregval;
7162 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
7163 1.1 christos {
7164 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7165 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7166 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7167 1.1 christos }
7168 1.1 christos }
7169 1.1 christos {
7170 1.1 christos {
7171 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
7172 1.1 christos CPU (h_cbit) = opval;
7173 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7174 1.1 christos }
7175 1.1 christos {
7176 1.1 christos BI opval = LTQI (tmp_newval, 0);
7177 1.1 christos CPU (h_nbit) = opval;
7178 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7179 1.1 christos }
7180 1.1 christos {
7181 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7182 1.1 christos CPU (h_zbit) = opval;
7183 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7184 1.1 christos }
7185 1.1 christos {
7186 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
7187 1.1 christos CPU (h_vbit) = opval;
7188 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7189 1.1 christos }
7190 1.1 christos {
7191 1.1 christos {
7192 1.1 christos BI opval = 0;
7193 1.1 christos CPU (h_xbit) = opval;
7194 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7195 1.1 christos }
7196 1.1 christos {
7197 1.1 christos BI opval = 0;
7198 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7199 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7200 1.1 christos }
7201 1.1 christos }
7202 1.1 christos }
7203 1.1 christos }
7204 1.1 christos
7205 1.1 christos abuf->written = written;
7206 1.1 christos #undef FLD
7207 1.1 christos }
7208 1.1 christos NEXT (vpc);
7209 1.1 christos
7210 1.1 christos CASE (sem, INSN_SUB_M_W_M) : /* sub-m.w [${Rs}${inc}],${Rd} */
7211 1.1 christos {
7212 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7213 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7214 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7215 1.1 christos int UNUSED written = 0;
7216 1.1 christos IADDR UNUSED pc = abuf->addr;
7217 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7218 1.1 christos
7219 1.1 christos {
7220 1.1 christos HI tmp_tmpopd;
7221 1.1 christos HI tmp_tmpops;
7222 1.1 christos BI tmp_carry;
7223 1.1 christos HI tmp_newval;
7224 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7225 1.1 christos HI tmp_tmp_mem;
7226 1.1 christos BI tmp_postinc;
7227 1.1 christos tmp_postinc = FLD (f_memmode);
7228 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7229 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7230 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7231 1.1 christos {
7232 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7233 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7234 1.1 christos }
7235 1.1 christos {
7236 1.1 christos SI opval = tmp_addr;
7237 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7238 1.1 christos written |= (1 << 12);
7239 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7240 1.1 christos }
7241 1.1 christos }
7242 1.1 christos }
7243 1.1 christos ; tmp_tmp_mem; });
7244 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7245 1.1 christos tmp_carry = CPU (h_cbit);
7246 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7247 1.1 christos {
7248 1.1 christos SI tmp_oldregval;
7249 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
7250 1.1 christos {
7251 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7252 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7253 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7254 1.1 christos }
7255 1.1 christos }
7256 1.1 christos {
7257 1.1 christos {
7258 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7259 1.1 christos CPU (h_cbit) = opval;
7260 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7261 1.1 christos }
7262 1.1 christos {
7263 1.1 christos BI opval = LTHI (tmp_newval, 0);
7264 1.1 christos CPU (h_nbit) = opval;
7265 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7266 1.1 christos }
7267 1.1 christos {
7268 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7269 1.1 christos CPU (h_zbit) = opval;
7270 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7271 1.1 christos }
7272 1.1 christos {
7273 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7274 1.1 christos CPU (h_vbit) = opval;
7275 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7276 1.1 christos }
7277 1.1 christos {
7278 1.1 christos {
7279 1.1 christos BI opval = 0;
7280 1.1 christos CPU (h_xbit) = opval;
7281 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7282 1.1 christos }
7283 1.1 christos {
7284 1.1 christos BI opval = 0;
7285 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7286 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7287 1.1 christos }
7288 1.1 christos }
7289 1.1 christos }
7290 1.1 christos }
7291 1.1 christos
7292 1.1 christos abuf->written = written;
7293 1.1 christos #undef FLD
7294 1.1 christos }
7295 1.1 christos NEXT (vpc);
7296 1.1 christos
7297 1.1 christos CASE (sem, INSN_SUB_M_D_M) : /* sub-m.d [${Rs}${inc}],${Rd} */
7298 1.1 christos {
7299 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7300 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7301 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7302 1.1 christos int UNUSED written = 0;
7303 1.1 christos IADDR UNUSED pc = abuf->addr;
7304 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7305 1.1 christos
7306 1.1 christos {
7307 1.1 christos SI tmp_tmpopd;
7308 1.1 christos SI tmp_tmpops;
7309 1.1 christos BI tmp_carry;
7310 1.1 christos SI tmp_newval;
7311 1.1 christos tmp_tmpops = ({ SI tmp_addr;
7312 1.1 christos SI tmp_tmp_mem;
7313 1.1 christos BI tmp_postinc;
7314 1.1 christos tmp_postinc = FLD (f_memmode);
7315 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7316 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
7317 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7318 1.1 christos {
7319 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7320 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
7321 1.1 christos }
7322 1.1 christos {
7323 1.1 christos SI opval = tmp_addr;
7324 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7325 1.1 christos written |= (1 << 11);
7326 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7327 1.1 christos }
7328 1.1 christos }
7329 1.1 christos }
7330 1.1 christos ; tmp_tmp_mem; });
7331 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7332 1.1 christos tmp_carry = CPU (h_cbit);
7333 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7334 1.1 christos {
7335 1.1 christos SI opval = tmp_newval;
7336 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7337 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7338 1.1 christos }
7339 1.1 christos {
7340 1.1 christos {
7341 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7342 1.1 christos CPU (h_cbit) = opval;
7343 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7344 1.1 christos }
7345 1.1 christos {
7346 1.1 christos BI opval = LTSI (tmp_newval, 0);
7347 1.1 christos CPU (h_nbit) = opval;
7348 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7349 1.1 christos }
7350 1.1 christos {
7351 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7352 1.1 christos CPU (h_zbit) = opval;
7353 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7354 1.1 christos }
7355 1.1 christos {
7356 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7357 1.1 christos CPU (h_vbit) = opval;
7358 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7359 1.1 christos }
7360 1.1 christos {
7361 1.1 christos {
7362 1.1 christos BI opval = 0;
7363 1.1 christos CPU (h_xbit) = opval;
7364 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7365 1.1 christos }
7366 1.1 christos {
7367 1.1 christos BI opval = 0;
7368 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7369 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7370 1.1 christos }
7371 1.1 christos }
7372 1.1 christos }
7373 1.1 christos }
7374 1.1 christos
7375 1.1 christos abuf->written = written;
7376 1.1 christos #undef FLD
7377 1.1 christos }
7378 1.1 christos NEXT (vpc);
7379 1.1 christos
7380 1.1 christos CASE (sem, INSN_SUBCBR) : /* sub.b ${sconst8}],${Rd} */
7381 1.1 christos {
7382 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7383 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7384 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7385 1.1 christos int UNUSED written = 0;
7386 1.1 christos IADDR UNUSED pc = abuf->addr;
7387 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7388 1.1 christos
7389 1.1 christos {
7390 1.1 christos QI tmp_tmpopd;
7391 1.1 christos QI tmp_tmpops;
7392 1.1 christos BI tmp_carry;
7393 1.1 christos QI tmp_newval;
7394 1.1 christos tmp_tmpops = FLD (f_indir_pc__byte);
7395 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7396 1.1 christos tmp_carry = CPU (h_cbit);
7397 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7398 1.1 christos {
7399 1.1 christos SI tmp_oldregval;
7400 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7401 1.1 christos {
7402 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
7403 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7404 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7405 1.1 christos }
7406 1.1 christos }
7407 1.1 christos {
7408 1.1 christos {
7409 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
7410 1.1 christos CPU (h_cbit) = opval;
7411 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7412 1.1 christos }
7413 1.1 christos {
7414 1.1 christos BI opval = LTQI (tmp_newval, 0);
7415 1.1 christos CPU (h_nbit) = opval;
7416 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7417 1.1 christos }
7418 1.1 christos {
7419 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7420 1.1 christos CPU (h_zbit) = opval;
7421 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7422 1.1 christos }
7423 1.1 christos {
7424 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
7425 1.1 christos CPU (h_vbit) = opval;
7426 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7427 1.1 christos }
7428 1.1 christos {
7429 1.1 christos {
7430 1.1 christos BI opval = 0;
7431 1.1 christos CPU (h_xbit) = opval;
7432 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7433 1.1 christos }
7434 1.1 christos {
7435 1.1 christos BI opval = 0;
7436 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7437 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7438 1.1 christos }
7439 1.1 christos }
7440 1.1 christos }
7441 1.1 christos }
7442 1.1 christos
7443 1.1 christos #undef FLD
7444 1.1 christos }
7445 1.1 christos NEXT (vpc);
7446 1.1 christos
7447 1.1 christos CASE (sem, INSN_SUBCWR) : /* sub.w ${sconst16}],${Rd} */
7448 1.1 christos {
7449 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7450 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7451 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7452 1.1 christos int UNUSED written = 0;
7453 1.1 christos IADDR UNUSED pc = abuf->addr;
7454 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7455 1.1 christos
7456 1.1 christos {
7457 1.1 christos HI tmp_tmpopd;
7458 1.1 christos HI tmp_tmpops;
7459 1.1 christos BI tmp_carry;
7460 1.1 christos HI tmp_newval;
7461 1.1 christos tmp_tmpops = FLD (f_indir_pc__word);
7462 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7463 1.1 christos tmp_carry = CPU (h_cbit);
7464 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7465 1.1 christos {
7466 1.1 christos SI tmp_oldregval;
7467 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
7468 1.1 christos {
7469 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
7470 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7471 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7472 1.1 christos }
7473 1.1 christos }
7474 1.1 christos {
7475 1.1 christos {
7476 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
7477 1.1 christos CPU (h_cbit) = opval;
7478 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7479 1.1 christos }
7480 1.1 christos {
7481 1.1 christos BI opval = LTHI (tmp_newval, 0);
7482 1.1 christos CPU (h_nbit) = opval;
7483 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7484 1.1 christos }
7485 1.1 christos {
7486 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7487 1.1 christos CPU (h_zbit) = opval;
7488 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7489 1.1 christos }
7490 1.1 christos {
7491 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
7492 1.1 christos CPU (h_vbit) = opval;
7493 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7494 1.1 christos }
7495 1.1 christos {
7496 1.1 christos {
7497 1.1 christos BI opval = 0;
7498 1.1 christos CPU (h_xbit) = opval;
7499 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7500 1.1 christos }
7501 1.1 christos {
7502 1.1 christos BI opval = 0;
7503 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7504 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7505 1.1 christos }
7506 1.1 christos }
7507 1.1 christos }
7508 1.1 christos }
7509 1.1 christos
7510 1.1 christos #undef FLD
7511 1.1 christos }
7512 1.1 christos NEXT (vpc);
7513 1.1 christos
7514 1.1 christos CASE (sem, INSN_SUBCDR) : /* sub.d ${const32}],${Rd} */
7515 1.1 christos {
7516 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7517 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7518 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
7519 1.1 christos int UNUSED written = 0;
7520 1.1 christos IADDR UNUSED pc = abuf->addr;
7521 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
7522 1.1 christos
7523 1.1 christos {
7524 1.1 christos SI tmp_tmpopd;
7525 1.1 christos SI tmp_tmpops;
7526 1.1 christos BI tmp_carry;
7527 1.1 christos SI tmp_newval;
7528 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
7529 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7530 1.1 christos tmp_carry = CPU (h_cbit);
7531 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7532 1.1 christos {
7533 1.1 christos SI opval = tmp_newval;
7534 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7535 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7536 1.1 christos }
7537 1.1 christos {
7538 1.1 christos {
7539 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7540 1.1 christos CPU (h_cbit) = opval;
7541 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7542 1.1 christos }
7543 1.1 christos {
7544 1.1 christos BI opval = LTSI (tmp_newval, 0);
7545 1.1 christos CPU (h_nbit) = opval;
7546 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7547 1.1 christos }
7548 1.1 christos {
7549 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7550 1.1 christos CPU (h_zbit) = opval;
7551 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7552 1.1 christos }
7553 1.1 christos {
7554 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7555 1.1 christos CPU (h_vbit) = opval;
7556 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7557 1.1 christos }
7558 1.1 christos {
7559 1.1 christos {
7560 1.1 christos BI opval = 0;
7561 1.1 christos CPU (h_xbit) = opval;
7562 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7563 1.1 christos }
7564 1.1 christos {
7565 1.1 christos BI opval = 0;
7566 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7567 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7568 1.1 christos }
7569 1.1 christos }
7570 1.1 christos }
7571 1.1 christos }
7572 1.1 christos
7573 1.1 christos #undef FLD
7574 1.1 christos }
7575 1.1 christos NEXT (vpc);
7576 1.1 christos
7577 1.1 christos CASE (sem, INSN_SUBS_B_R) : /* subs.b $Rs,$Rd */
7578 1.1 christos {
7579 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7580 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7581 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7582 1.1 christos int UNUSED written = 0;
7583 1.1 christos IADDR UNUSED pc = abuf->addr;
7584 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7585 1.1 christos
7586 1.1 christos {
7587 1.1 christos SI tmp_tmpopd;
7588 1.1 christos SI tmp_tmpops;
7589 1.1 christos BI tmp_carry;
7590 1.1 christos SI tmp_newval;
7591 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
7592 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7593 1.1 christos tmp_carry = CPU (h_cbit);
7594 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7595 1.1 christos {
7596 1.1 christos SI opval = tmp_newval;
7597 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7598 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7599 1.1 christos }
7600 1.1 christos {
7601 1.1 christos {
7602 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7603 1.1 christos CPU (h_cbit) = opval;
7604 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7605 1.1 christos }
7606 1.1 christos {
7607 1.1 christos BI opval = LTSI (tmp_newval, 0);
7608 1.1 christos CPU (h_nbit) = opval;
7609 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7610 1.1 christos }
7611 1.1 christos {
7612 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7613 1.1 christos CPU (h_zbit) = opval;
7614 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7615 1.1 christos }
7616 1.1 christos {
7617 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7618 1.1 christos CPU (h_vbit) = opval;
7619 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7620 1.1 christos }
7621 1.1 christos {
7622 1.1 christos {
7623 1.1 christos BI opval = 0;
7624 1.1 christos CPU (h_xbit) = opval;
7625 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7626 1.1 christos }
7627 1.1 christos {
7628 1.1 christos BI opval = 0;
7629 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7630 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7631 1.1 christos }
7632 1.1 christos }
7633 1.1 christos }
7634 1.1 christos }
7635 1.1 christos
7636 1.1 christos #undef FLD
7637 1.1 christos }
7638 1.1 christos NEXT (vpc);
7639 1.1 christos
7640 1.1 christos CASE (sem, INSN_SUBS_W_R) : /* subs.w $Rs,$Rd */
7641 1.1 christos {
7642 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7643 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7644 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
7645 1.1 christos int UNUSED written = 0;
7646 1.1 christos IADDR UNUSED pc = abuf->addr;
7647 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7648 1.1 christos
7649 1.1 christos {
7650 1.1 christos SI tmp_tmpopd;
7651 1.1 christos SI tmp_tmpops;
7652 1.1 christos BI tmp_carry;
7653 1.1 christos SI tmp_newval;
7654 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
7655 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7656 1.1 christos tmp_carry = CPU (h_cbit);
7657 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7658 1.1 christos {
7659 1.1 christos SI opval = tmp_newval;
7660 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7661 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7662 1.1 christos }
7663 1.1 christos {
7664 1.1 christos {
7665 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7666 1.1 christos CPU (h_cbit) = opval;
7667 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7668 1.1 christos }
7669 1.1 christos {
7670 1.1 christos BI opval = LTSI (tmp_newval, 0);
7671 1.1 christos CPU (h_nbit) = opval;
7672 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7673 1.1 christos }
7674 1.1 christos {
7675 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7676 1.1 christos CPU (h_zbit) = opval;
7677 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7678 1.1 christos }
7679 1.1 christos {
7680 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7681 1.1 christos CPU (h_vbit) = opval;
7682 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7683 1.1 christos }
7684 1.1 christos {
7685 1.1 christos {
7686 1.1 christos BI opval = 0;
7687 1.1 christos CPU (h_xbit) = opval;
7688 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7689 1.1 christos }
7690 1.1 christos {
7691 1.1 christos BI opval = 0;
7692 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7693 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7694 1.1 christos }
7695 1.1 christos }
7696 1.1 christos }
7697 1.1 christos }
7698 1.1 christos
7699 1.1 christos #undef FLD
7700 1.1 christos }
7701 1.1 christos NEXT (vpc);
7702 1.1 christos
7703 1.1 christos CASE (sem, INSN_SUBS_M_B_M) : /* subs-m.b [${Rs}${inc}],$Rd */
7704 1.1 christos {
7705 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7706 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7707 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7708 1.1 christos int UNUSED written = 0;
7709 1.1 christos IADDR UNUSED pc = abuf->addr;
7710 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7711 1.1 christos
7712 1.1 christos {
7713 1.1 christos SI tmp_tmpopd;
7714 1.1 christos SI tmp_tmpops;
7715 1.1 christos BI tmp_carry;
7716 1.1 christos SI tmp_newval;
7717 1.1 christos tmp_tmpops = EXTQISI (({ SI tmp_addr;
7718 1.1 christos QI tmp_tmp_mem;
7719 1.1 christos BI tmp_postinc;
7720 1.1 christos tmp_postinc = FLD (f_memmode);
7721 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7722 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
7723 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7724 1.1 christos {
7725 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7726 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
7727 1.1 christos }
7728 1.1 christos {
7729 1.1 christos SI opval = tmp_addr;
7730 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7731 1.1 christos written |= (1 << 11);
7732 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7733 1.1 christos }
7734 1.1 christos }
7735 1.1 christos }
7736 1.1 christos ; tmp_tmp_mem; }));
7737 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7738 1.1 christos tmp_carry = CPU (h_cbit);
7739 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7740 1.1 christos {
7741 1.1 christos SI opval = tmp_newval;
7742 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7743 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7744 1.1 christos }
7745 1.1 christos {
7746 1.1 christos {
7747 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7748 1.1 christos CPU (h_cbit) = opval;
7749 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7750 1.1 christos }
7751 1.1 christos {
7752 1.1 christos BI opval = LTSI (tmp_newval, 0);
7753 1.1 christos CPU (h_nbit) = opval;
7754 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7755 1.1 christos }
7756 1.1 christos {
7757 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7758 1.1 christos CPU (h_zbit) = opval;
7759 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7760 1.1 christos }
7761 1.1 christos {
7762 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7763 1.1 christos CPU (h_vbit) = opval;
7764 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7765 1.1 christos }
7766 1.1 christos {
7767 1.1 christos {
7768 1.1 christos BI opval = 0;
7769 1.1 christos CPU (h_xbit) = opval;
7770 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7771 1.1 christos }
7772 1.1 christos {
7773 1.1 christos BI opval = 0;
7774 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7775 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7776 1.1 christos }
7777 1.1 christos }
7778 1.1 christos }
7779 1.1 christos }
7780 1.1 christos
7781 1.1 christos abuf->written = written;
7782 1.1 christos #undef FLD
7783 1.1 christos }
7784 1.1 christos NEXT (vpc);
7785 1.1 christos
7786 1.1 christos CASE (sem, INSN_SUBS_M_W_M) : /* subs-m.w [${Rs}${inc}],$Rd */
7787 1.1 christos {
7788 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7789 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7790 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
7791 1.1 christos int UNUSED written = 0;
7792 1.1 christos IADDR UNUSED pc = abuf->addr;
7793 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
7794 1.1 christos
7795 1.1 christos {
7796 1.1 christos SI tmp_tmpopd;
7797 1.1 christos SI tmp_tmpops;
7798 1.1 christos BI tmp_carry;
7799 1.1 christos SI tmp_newval;
7800 1.1 christos tmp_tmpops = EXTHISI (({ SI tmp_addr;
7801 1.1 christos HI tmp_tmp_mem;
7802 1.1 christos BI tmp_postinc;
7803 1.1 christos tmp_postinc = FLD (f_memmode);
7804 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
7805 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
7806 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
7807 1.1 christos {
7808 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
7809 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
7810 1.1 christos }
7811 1.1 christos {
7812 1.1 christos SI opval = tmp_addr;
7813 1.1 christos SET_H_GR (FLD (f_operand1), opval);
7814 1.1 christos written |= (1 << 11);
7815 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7816 1.1 christos }
7817 1.1 christos }
7818 1.1 christos }
7819 1.1 christos ; tmp_tmp_mem; }));
7820 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7821 1.1 christos tmp_carry = CPU (h_cbit);
7822 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7823 1.1 christos {
7824 1.1 christos SI opval = tmp_newval;
7825 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
7826 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7827 1.1 christos }
7828 1.1 christos {
7829 1.1 christos {
7830 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7831 1.1 christos CPU (h_cbit) = opval;
7832 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7833 1.1 christos }
7834 1.1 christos {
7835 1.1 christos BI opval = LTSI (tmp_newval, 0);
7836 1.1 christos CPU (h_nbit) = opval;
7837 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7838 1.1 christos }
7839 1.1 christos {
7840 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7841 1.1 christos CPU (h_zbit) = opval;
7842 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7843 1.1 christos }
7844 1.1 christos {
7845 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7846 1.1 christos CPU (h_vbit) = opval;
7847 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7848 1.1 christos }
7849 1.1 christos {
7850 1.1 christos {
7851 1.1 christos BI opval = 0;
7852 1.1 christos CPU (h_xbit) = opval;
7853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7854 1.1 christos }
7855 1.1 christos {
7856 1.1 christos BI opval = 0;
7857 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7858 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7859 1.1 christos }
7860 1.1 christos }
7861 1.1 christos }
7862 1.1 christos }
7863 1.1 christos
7864 1.1 christos abuf->written = written;
7865 1.1 christos #undef FLD
7866 1.1 christos }
7867 1.1 christos NEXT (vpc);
7868 1.1 christos
7869 1.1 christos CASE (sem, INSN_SUBSCBR) : /* [${Rs}${inc}],$Rd */
7870 1.1 christos {
7871 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7872 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7873 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
7874 1.1 christos int UNUSED written = 0;
7875 1.1 christos IADDR UNUSED pc = abuf->addr;
7876 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7877 1.1 christos
7878 1.1 christos {
7879 1.1 christos SI tmp_tmpopd;
7880 1.1 christos SI tmp_tmpops;
7881 1.1 christos BI tmp_carry;
7882 1.1 christos SI tmp_newval;
7883 1.1 christos tmp_tmpops = EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
7884 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7885 1.1 christos tmp_carry = CPU (h_cbit);
7886 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7887 1.1 christos {
7888 1.1 christos SI opval = tmp_newval;
7889 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7890 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7891 1.1 christos }
7892 1.1 christos {
7893 1.1 christos {
7894 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7895 1.1 christos CPU (h_cbit) = opval;
7896 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7897 1.1 christos }
7898 1.1 christos {
7899 1.1 christos BI opval = LTSI (tmp_newval, 0);
7900 1.1 christos CPU (h_nbit) = opval;
7901 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7902 1.1 christos }
7903 1.1 christos {
7904 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7905 1.1 christos CPU (h_zbit) = opval;
7906 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7907 1.1 christos }
7908 1.1 christos {
7909 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7910 1.1 christos CPU (h_vbit) = opval;
7911 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7912 1.1 christos }
7913 1.1 christos {
7914 1.1 christos {
7915 1.1 christos BI opval = 0;
7916 1.1 christos CPU (h_xbit) = opval;
7917 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7918 1.1 christos }
7919 1.1 christos {
7920 1.1 christos BI opval = 0;
7921 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7922 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7923 1.1 christos }
7924 1.1 christos }
7925 1.1 christos }
7926 1.1 christos }
7927 1.1 christos
7928 1.1 christos #undef FLD
7929 1.1 christos }
7930 1.1 christos NEXT (vpc);
7931 1.1 christos
7932 1.1 christos CASE (sem, INSN_SUBSCWR) : /* [${Rs}${inc}],$Rd */
7933 1.1 christos {
7934 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7935 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7936 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
7937 1.1 christos int UNUSED written = 0;
7938 1.1 christos IADDR UNUSED pc = abuf->addr;
7939 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
7940 1.1 christos
7941 1.1 christos {
7942 1.1 christos SI tmp_tmpopd;
7943 1.1 christos SI tmp_tmpops;
7944 1.1 christos BI tmp_carry;
7945 1.1 christos SI tmp_newval;
7946 1.1 christos tmp_tmpops = EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
7947 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
7948 1.1 christos tmp_carry = CPU (h_cbit);
7949 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
7950 1.1 christos {
7951 1.1 christos SI opval = tmp_newval;
7952 1.1 christos SET_H_GR (FLD (f_operand2), opval);
7953 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
7954 1.1 christos }
7955 1.1 christos {
7956 1.1 christos {
7957 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
7958 1.1 christos CPU (h_cbit) = opval;
7959 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
7960 1.1 christos }
7961 1.1 christos {
7962 1.1 christos BI opval = LTSI (tmp_newval, 0);
7963 1.1 christos CPU (h_nbit) = opval;
7964 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
7965 1.1 christos }
7966 1.1 christos {
7967 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
7968 1.1 christos CPU (h_zbit) = opval;
7969 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
7970 1.1 christos }
7971 1.1 christos {
7972 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
7973 1.1 christos CPU (h_vbit) = opval;
7974 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
7975 1.1 christos }
7976 1.1 christos {
7977 1.1 christos {
7978 1.1 christos BI opval = 0;
7979 1.1 christos CPU (h_xbit) = opval;
7980 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
7981 1.1 christos }
7982 1.1 christos {
7983 1.1 christos BI opval = 0;
7984 1.1 christos SET_H_INSN_PREFIXED_P (opval);
7985 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
7986 1.1 christos }
7987 1.1 christos }
7988 1.1 christos }
7989 1.1 christos }
7990 1.1 christos
7991 1.1 christos #undef FLD
7992 1.1 christos }
7993 1.1 christos NEXT (vpc);
7994 1.1 christos
7995 1.1 christos CASE (sem, INSN_SUBU_B_R) : /* subu.b $Rs,$Rd */
7996 1.1 christos {
7997 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
7998 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
7999 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8000 1.1 christos int UNUSED written = 0;
8001 1.1 christos IADDR UNUSED pc = abuf->addr;
8002 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8003 1.1 christos
8004 1.1 christos {
8005 1.1 christos SI tmp_tmpopd;
8006 1.1 christos SI tmp_tmpops;
8007 1.1 christos BI tmp_carry;
8008 1.1 christos SI tmp_newval;
8009 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
8010 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8011 1.1 christos tmp_carry = CPU (h_cbit);
8012 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8013 1.1 christos {
8014 1.1 christos SI opval = tmp_newval;
8015 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8016 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8017 1.1 christos }
8018 1.1 christos {
8019 1.1 christos {
8020 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8021 1.1 christos CPU (h_cbit) = opval;
8022 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8023 1.1 christos }
8024 1.1 christos {
8025 1.1 christos BI opval = LTSI (tmp_newval, 0);
8026 1.1 christos CPU (h_nbit) = opval;
8027 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8028 1.1 christos }
8029 1.1 christos {
8030 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8031 1.1 christos CPU (h_zbit) = opval;
8032 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8033 1.1 christos }
8034 1.1 christos {
8035 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8036 1.1 christos CPU (h_vbit) = opval;
8037 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8038 1.1 christos }
8039 1.1 christos {
8040 1.1 christos {
8041 1.1 christos BI opval = 0;
8042 1.1 christos CPU (h_xbit) = opval;
8043 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8044 1.1 christos }
8045 1.1 christos {
8046 1.1 christos BI opval = 0;
8047 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8048 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8049 1.1 christos }
8050 1.1 christos }
8051 1.1 christos }
8052 1.1 christos }
8053 1.1 christos
8054 1.1 christos #undef FLD
8055 1.1 christos }
8056 1.1 christos NEXT (vpc);
8057 1.1 christos
8058 1.1 christos CASE (sem, INSN_SUBU_W_R) : /* subu.w $Rs,$Rd */
8059 1.1 christos {
8060 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8061 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8062 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8063 1.1 christos int UNUSED written = 0;
8064 1.1 christos IADDR UNUSED pc = abuf->addr;
8065 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8066 1.1 christos
8067 1.1 christos {
8068 1.1 christos SI tmp_tmpopd;
8069 1.1 christos SI tmp_tmpops;
8070 1.1 christos BI tmp_carry;
8071 1.1 christos SI tmp_newval;
8072 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
8073 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8074 1.1 christos tmp_carry = CPU (h_cbit);
8075 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8076 1.1 christos {
8077 1.1 christos SI opval = tmp_newval;
8078 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8079 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8080 1.1 christos }
8081 1.1 christos {
8082 1.1 christos {
8083 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8084 1.1 christos CPU (h_cbit) = opval;
8085 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8086 1.1 christos }
8087 1.1 christos {
8088 1.1 christos BI opval = LTSI (tmp_newval, 0);
8089 1.1 christos CPU (h_nbit) = opval;
8090 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8091 1.1 christos }
8092 1.1 christos {
8093 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8094 1.1 christos CPU (h_zbit) = opval;
8095 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8096 1.1 christos }
8097 1.1 christos {
8098 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8099 1.1 christos CPU (h_vbit) = opval;
8100 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8101 1.1 christos }
8102 1.1 christos {
8103 1.1 christos {
8104 1.1 christos BI opval = 0;
8105 1.1 christos CPU (h_xbit) = opval;
8106 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8107 1.1 christos }
8108 1.1 christos {
8109 1.1 christos BI opval = 0;
8110 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8111 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8112 1.1 christos }
8113 1.1 christos }
8114 1.1 christos }
8115 1.1 christos }
8116 1.1 christos
8117 1.1 christos #undef FLD
8118 1.1 christos }
8119 1.1 christos NEXT (vpc);
8120 1.1 christos
8121 1.1 christos CASE (sem, INSN_SUBU_M_B_M) : /* subu-m.b [${Rs}${inc}],$Rd */
8122 1.1 christos {
8123 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8124 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8125 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8126 1.1 christos int UNUSED written = 0;
8127 1.1 christos IADDR UNUSED pc = abuf->addr;
8128 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8129 1.1 christos
8130 1.1 christos {
8131 1.1 christos SI tmp_tmpopd;
8132 1.1 christos SI tmp_tmpops;
8133 1.1 christos BI tmp_carry;
8134 1.1 christos SI tmp_newval;
8135 1.1 christos tmp_tmpops = ZEXTQISI (({ SI tmp_addr;
8136 1.1 christos QI tmp_tmp_mem;
8137 1.1 christos BI tmp_postinc;
8138 1.1 christos tmp_postinc = FLD (f_memmode);
8139 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8140 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
8141 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8142 1.1 christos {
8143 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8144 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
8145 1.1 christos }
8146 1.1 christos {
8147 1.1 christos SI opval = tmp_addr;
8148 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8149 1.1 christos written |= (1 << 11);
8150 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8151 1.1 christos }
8152 1.1 christos }
8153 1.1 christos }
8154 1.1 christos ; tmp_tmp_mem; }));
8155 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8156 1.1 christos tmp_carry = CPU (h_cbit);
8157 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8158 1.1 christos {
8159 1.1 christos SI opval = tmp_newval;
8160 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8161 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8162 1.1 christos }
8163 1.1 christos {
8164 1.1 christos {
8165 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8166 1.1 christos CPU (h_cbit) = opval;
8167 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8168 1.1 christos }
8169 1.1 christos {
8170 1.1 christos BI opval = LTSI (tmp_newval, 0);
8171 1.1 christos CPU (h_nbit) = opval;
8172 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8173 1.1 christos }
8174 1.1 christos {
8175 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8176 1.1 christos CPU (h_zbit) = opval;
8177 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8178 1.1 christos }
8179 1.1 christos {
8180 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8181 1.1 christos CPU (h_vbit) = opval;
8182 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8183 1.1 christos }
8184 1.1 christos {
8185 1.1 christos {
8186 1.1 christos BI opval = 0;
8187 1.1 christos CPU (h_xbit) = opval;
8188 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8189 1.1 christos }
8190 1.1 christos {
8191 1.1 christos BI opval = 0;
8192 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8193 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8194 1.1 christos }
8195 1.1 christos }
8196 1.1 christos }
8197 1.1 christos }
8198 1.1 christos
8199 1.1 christos abuf->written = written;
8200 1.1 christos #undef FLD
8201 1.1 christos }
8202 1.1 christos NEXT (vpc);
8203 1.1 christos
8204 1.1 christos CASE (sem, INSN_SUBU_M_W_M) : /* subu-m.w [${Rs}${inc}],$Rd */
8205 1.1 christos {
8206 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8207 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8208 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
8209 1.1 christos int UNUSED written = 0;
8210 1.1 christos IADDR UNUSED pc = abuf->addr;
8211 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8212 1.1 christos
8213 1.1 christos {
8214 1.1 christos SI tmp_tmpopd;
8215 1.1 christos SI tmp_tmpops;
8216 1.1 christos BI tmp_carry;
8217 1.1 christos SI tmp_newval;
8218 1.1 christos tmp_tmpops = ZEXTHISI (({ SI tmp_addr;
8219 1.1 christos HI tmp_tmp_mem;
8220 1.1 christos BI tmp_postinc;
8221 1.1 christos tmp_postinc = FLD (f_memmode);
8222 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8223 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
8224 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8225 1.1 christos {
8226 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8227 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
8228 1.1 christos }
8229 1.1 christos {
8230 1.1 christos SI opval = tmp_addr;
8231 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8232 1.1 christos written |= (1 << 11);
8233 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8234 1.1 christos }
8235 1.1 christos }
8236 1.1 christos }
8237 1.1 christos ; tmp_tmp_mem; }));
8238 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8239 1.1 christos tmp_carry = CPU (h_cbit);
8240 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8241 1.1 christos {
8242 1.1 christos SI opval = tmp_newval;
8243 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
8244 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8245 1.1 christos }
8246 1.1 christos {
8247 1.1 christos {
8248 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8249 1.1 christos CPU (h_cbit) = opval;
8250 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8251 1.1 christos }
8252 1.1 christos {
8253 1.1 christos BI opval = LTSI (tmp_newval, 0);
8254 1.1 christos CPU (h_nbit) = opval;
8255 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8256 1.1 christos }
8257 1.1 christos {
8258 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8259 1.1 christos CPU (h_zbit) = opval;
8260 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8261 1.1 christos }
8262 1.1 christos {
8263 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8264 1.1 christos CPU (h_vbit) = opval;
8265 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8266 1.1 christos }
8267 1.1 christos {
8268 1.1 christos {
8269 1.1 christos BI opval = 0;
8270 1.1 christos CPU (h_xbit) = opval;
8271 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8272 1.1 christos }
8273 1.1 christos {
8274 1.1 christos BI opval = 0;
8275 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8276 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8277 1.1 christos }
8278 1.1 christos }
8279 1.1 christos }
8280 1.1 christos }
8281 1.1 christos
8282 1.1 christos abuf->written = written;
8283 1.1 christos #undef FLD
8284 1.1 christos }
8285 1.1 christos NEXT (vpc);
8286 1.1 christos
8287 1.1 christos CASE (sem, INSN_SUBUCBR) : /* [${Rs}${inc}],$Rd */
8288 1.1 christos {
8289 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8290 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8291 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
8292 1.1 christos int UNUSED written = 0;
8293 1.1 christos IADDR UNUSED pc = abuf->addr;
8294 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8295 1.1 christos
8296 1.1 christos {
8297 1.1 christos SI tmp_tmpopd;
8298 1.1 christos SI tmp_tmpops;
8299 1.1 christos BI tmp_carry;
8300 1.1 christos SI tmp_newval;
8301 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
8302 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8303 1.1 christos tmp_carry = CPU (h_cbit);
8304 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8305 1.1 christos {
8306 1.1 christos SI opval = tmp_newval;
8307 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8308 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8309 1.1 christos }
8310 1.1 christos {
8311 1.1 christos {
8312 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8313 1.1 christos CPU (h_cbit) = opval;
8314 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8315 1.1 christos }
8316 1.1 christos {
8317 1.1 christos BI opval = LTSI (tmp_newval, 0);
8318 1.1 christos CPU (h_nbit) = opval;
8319 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8320 1.1 christos }
8321 1.1 christos {
8322 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8323 1.1 christos CPU (h_zbit) = opval;
8324 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8325 1.1 christos }
8326 1.1 christos {
8327 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8328 1.1 christos CPU (h_vbit) = opval;
8329 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8330 1.1 christos }
8331 1.1 christos {
8332 1.1 christos {
8333 1.1 christos BI opval = 0;
8334 1.1 christos CPU (h_xbit) = opval;
8335 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8336 1.1 christos }
8337 1.1 christos {
8338 1.1 christos BI opval = 0;
8339 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8340 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8341 1.1 christos }
8342 1.1 christos }
8343 1.1 christos }
8344 1.1 christos }
8345 1.1 christos
8346 1.1 christos #undef FLD
8347 1.1 christos }
8348 1.1 christos NEXT (vpc);
8349 1.1 christos
8350 1.1 christos CASE (sem, INSN_SUBUCWR) : /* [${Rs}${inc}],$Rd */
8351 1.1 christos {
8352 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8353 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8354 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
8355 1.1 christos int UNUSED written = 0;
8356 1.1 christos IADDR UNUSED pc = abuf->addr;
8357 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
8358 1.1 christos
8359 1.1 christos {
8360 1.1 christos SI tmp_tmpopd;
8361 1.1 christos SI tmp_tmpops;
8362 1.1 christos BI tmp_carry;
8363 1.1 christos SI tmp_newval;
8364 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (FLD (f_indir_pc__word)));
8365 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8366 1.1 christos tmp_carry = CPU (h_cbit);
8367 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8368 1.1 christos {
8369 1.1 christos SI opval = tmp_newval;
8370 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8371 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8372 1.1 christos }
8373 1.1 christos {
8374 1.1 christos {
8375 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8376 1.1 christos CPU (h_cbit) = opval;
8377 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8378 1.1 christos }
8379 1.1 christos {
8380 1.1 christos BI opval = LTSI (tmp_newval, 0);
8381 1.1 christos CPU (h_nbit) = opval;
8382 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8383 1.1 christos }
8384 1.1 christos {
8385 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8386 1.1 christos CPU (h_zbit) = opval;
8387 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8388 1.1 christos }
8389 1.1 christos {
8390 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8391 1.1 christos CPU (h_vbit) = opval;
8392 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8393 1.1 christos }
8394 1.1 christos {
8395 1.1 christos {
8396 1.1 christos BI opval = 0;
8397 1.1 christos CPU (h_xbit) = opval;
8398 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8399 1.1 christos }
8400 1.1 christos {
8401 1.1 christos BI opval = 0;
8402 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8403 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8404 1.1 christos }
8405 1.1 christos }
8406 1.1 christos }
8407 1.1 christos }
8408 1.1 christos
8409 1.1 christos #undef FLD
8410 1.1 christos }
8411 1.1 christos NEXT (vpc);
8412 1.1 christos
8413 1.1 christos CASE (sem, INSN_ADDC_R) : /* addc $Rs,$Rd */
8414 1.1 christos {
8415 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8416 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8417 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8418 1.1 christos int UNUSED written = 0;
8419 1.1 christos IADDR UNUSED pc = abuf->addr;
8420 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8421 1.1 christos
8422 1.1 christos {
8423 1.1 christos CPU (h_xbit) = 1;
8424 1.1 christos {
8425 1.1 christos SI tmp_tmpopd;
8426 1.1 christos SI tmp_tmpops;
8427 1.1 christos BI tmp_carry;
8428 1.1 christos SI tmp_newval;
8429 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8430 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8431 1.1 christos tmp_carry = CPU (h_cbit);
8432 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8433 1.1 christos {
8434 1.1 christos SI opval = tmp_newval;
8435 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8436 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8437 1.1 christos }
8438 1.1 christos {
8439 1.1 christos {
8440 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8441 1.1 christos CPU (h_cbit) = opval;
8442 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8443 1.1 christos }
8444 1.1 christos {
8445 1.1 christos BI opval = LTSI (tmp_newval, 0);
8446 1.1 christos CPU (h_nbit) = opval;
8447 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8448 1.1 christos }
8449 1.1 christos {
8450 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8451 1.1 christos CPU (h_zbit) = opval;
8452 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8453 1.1 christos }
8454 1.1 christos {
8455 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8456 1.1 christos CPU (h_vbit) = opval;
8457 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8458 1.1 christos }
8459 1.1 christos {
8460 1.1 christos {
8461 1.1 christos BI opval = 0;
8462 1.1 christos CPU (h_xbit) = opval;
8463 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8464 1.1 christos }
8465 1.1 christos {
8466 1.1 christos BI opval = 0;
8467 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8468 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8469 1.1 christos }
8470 1.1 christos }
8471 1.1 christos }
8472 1.1 christos }
8473 1.1 christos }
8474 1.1 christos
8475 1.1 christos #undef FLD
8476 1.1 christos }
8477 1.1 christos NEXT (vpc);
8478 1.1 christos
8479 1.1 christos CASE (sem, INSN_ADDC_M) : /* addc [${Rs}${inc}],${Rd} */
8480 1.1 christos {
8481 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8482 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8483 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8484 1.1 christos int UNUSED written = 0;
8485 1.1 christos IADDR UNUSED pc = abuf->addr;
8486 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8487 1.1 christos
8488 1.1 christos {
8489 1.1 christos CPU (h_xbit) = 1;
8490 1.1 christos {
8491 1.1 christos SI tmp_tmpopd;
8492 1.1 christos SI tmp_tmpops;
8493 1.1 christos BI tmp_carry;
8494 1.1 christos SI tmp_newval;
8495 1.1 christos tmp_tmpops = ({ SI tmp_addr;
8496 1.1 christos SI tmp_tmp_mem;
8497 1.1 christos BI tmp_postinc;
8498 1.1 christos tmp_postinc = FLD (f_memmode);
8499 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
8500 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
8501 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
8502 1.1 christos {
8503 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
8504 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
8505 1.1 christos }
8506 1.1 christos {
8507 1.1 christos SI opval = tmp_addr;
8508 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8509 1.1 christos written |= (1 << 10);
8510 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8511 1.1 christos }
8512 1.1 christos }
8513 1.1 christos }
8514 1.1 christos ; tmp_tmp_mem; });
8515 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8516 1.1 christos tmp_carry = CPU (h_cbit);
8517 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8518 1.1 christos {
8519 1.1 christos SI opval = tmp_newval;
8520 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8521 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8522 1.1 christos }
8523 1.1 christos {
8524 1.1 christos {
8525 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8526 1.1 christos CPU (h_cbit) = opval;
8527 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8528 1.1 christos }
8529 1.1 christos {
8530 1.1 christos BI opval = LTSI (tmp_newval, 0);
8531 1.1 christos CPU (h_nbit) = opval;
8532 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8533 1.1 christos }
8534 1.1 christos {
8535 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8536 1.1 christos CPU (h_zbit) = opval;
8537 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8538 1.1 christos }
8539 1.1 christos {
8540 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8541 1.1 christos CPU (h_vbit) = opval;
8542 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8543 1.1 christos }
8544 1.1 christos {
8545 1.1 christos {
8546 1.1 christos BI opval = 0;
8547 1.1 christos CPU (h_xbit) = opval;
8548 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8549 1.1 christos }
8550 1.1 christos {
8551 1.1 christos BI opval = 0;
8552 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8553 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8554 1.1 christos }
8555 1.1 christos }
8556 1.1 christos }
8557 1.1 christos }
8558 1.1 christos }
8559 1.1 christos
8560 1.1 christos abuf->written = written;
8561 1.1 christos #undef FLD
8562 1.1 christos }
8563 1.1 christos NEXT (vpc);
8564 1.1 christos
8565 1.1 christos CASE (sem, INSN_ADDC_C) : /* addc ${const32},${Rd} */
8566 1.1 christos {
8567 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8568 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8569 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
8570 1.1 christos int UNUSED written = 0;
8571 1.1 christos IADDR UNUSED pc = abuf->addr;
8572 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8573 1.1 christos
8574 1.1 christos {
8575 1.1 christos CPU (h_xbit) = 1;
8576 1.1 christos {
8577 1.1 christos SI tmp_tmpopd;
8578 1.1 christos SI tmp_tmpops;
8579 1.1 christos BI tmp_carry;
8580 1.1 christos SI tmp_newval;
8581 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
8582 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
8583 1.1 christos tmp_carry = CPU (h_cbit);
8584 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8585 1.1 christos {
8586 1.1 christos SI opval = tmp_newval;
8587 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8588 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8589 1.1 christos }
8590 1.1 christos {
8591 1.1 christos {
8592 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
8593 1.1 christos CPU (h_cbit) = opval;
8594 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8595 1.1 christos }
8596 1.1 christos {
8597 1.1 christos BI opval = LTSI (tmp_newval, 0);
8598 1.1 christos CPU (h_nbit) = opval;
8599 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8600 1.1 christos }
8601 1.1 christos {
8602 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8603 1.1 christos CPU (h_zbit) = opval;
8604 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8605 1.1 christos }
8606 1.1 christos {
8607 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8608 1.1 christos CPU (h_vbit) = opval;
8609 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8610 1.1 christos }
8611 1.1 christos {
8612 1.1 christos {
8613 1.1 christos BI opval = 0;
8614 1.1 christos CPU (h_xbit) = opval;
8615 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8616 1.1 christos }
8617 1.1 christos {
8618 1.1 christos BI opval = 0;
8619 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8620 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8621 1.1 christos }
8622 1.1 christos }
8623 1.1 christos }
8624 1.1 christos }
8625 1.1 christos }
8626 1.1 christos
8627 1.1 christos #undef FLD
8628 1.1 christos }
8629 1.1 christos NEXT (vpc);
8630 1.1 christos
8631 1.1 christos CASE (sem, INSN_LAPC_D) : /* lapc.d ${const32-pcrel},${Rd} */
8632 1.1 christos {
8633 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8634 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8635 1.1 christos #define FLD(f) abuf->fields.sfmt_lapc_d.f
8636 1.1 christos int UNUSED written = 0;
8637 1.1 christos IADDR UNUSED pc = abuf->addr;
8638 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
8639 1.1 christos
8640 1.1 christos {
8641 1.1 christos {
8642 1.1 christos SI opval = FLD (i_const32_pcrel);
8643 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8644 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8645 1.1 christos }
8646 1.1 christos {
8647 1.1 christos {
8648 1.1 christos BI opval = 0;
8649 1.1 christos CPU (h_xbit) = opval;
8650 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8651 1.1 christos }
8652 1.1 christos {
8653 1.1 christos BI opval = 0;
8654 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8655 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8656 1.1 christos }
8657 1.1 christos }
8658 1.1 christos }
8659 1.1 christos
8660 1.1 christos #undef FLD
8661 1.1 christos }
8662 1.1 christos NEXT (vpc);
8663 1.1 christos
8664 1.1 christos CASE (sem, INSN_LAPCQ) : /* lapcq ${qo},${Rd} */
8665 1.1 christos {
8666 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8667 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8668 1.1 christos #define FLD(f) abuf->fields.sfmt_lapcq.f
8669 1.1 christos int UNUSED written = 0;
8670 1.1 christos IADDR UNUSED pc = abuf->addr;
8671 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8672 1.1 christos
8673 1.1 christos {
8674 1.1 christos {
8675 1.1 christos SI opval = FLD (i_qo);
8676 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8677 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8678 1.1 christos }
8679 1.1 christos {
8680 1.1 christos {
8681 1.1 christos BI opval = 0;
8682 1.1 christos CPU (h_xbit) = opval;
8683 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8684 1.1 christos }
8685 1.1 christos {
8686 1.1 christos BI opval = 0;
8687 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8688 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8689 1.1 christos }
8690 1.1 christos }
8691 1.1 christos }
8692 1.1 christos
8693 1.1 christos #undef FLD
8694 1.1 christos }
8695 1.1 christos NEXT (vpc);
8696 1.1 christos
8697 1.1 christos CASE (sem, INSN_ADDI_B_R) : /* addi.b ${Rs-dfield}.m,${Rd-sfield} */
8698 1.1 christos {
8699 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8700 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8701 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8702 1.1 christos int UNUSED written = 0;
8703 1.1 christos IADDR UNUSED pc = abuf->addr;
8704 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8705 1.1 christos
8706 1.1 christos {
8707 1.1 christos {
8708 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
8709 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8710 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8711 1.1 christos }
8712 1.1 christos {
8713 1.1 christos {
8714 1.1 christos BI opval = 0;
8715 1.1 christos CPU (h_xbit) = opval;
8716 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8717 1.1 christos }
8718 1.1 christos {
8719 1.1 christos BI opval = 0;
8720 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8721 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8722 1.1 christos }
8723 1.1 christos }
8724 1.1 christos }
8725 1.1 christos
8726 1.1 christos #undef FLD
8727 1.1 christos }
8728 1.1 christos NEXT (vpc);
8729 1.1 christos
8730 1.1 christos CASE (sem, INSN_ADDI_W_R) : /* addi.w ${Rs-dfield}.m,${Rd-sfield} */
8731 1.1 christos {
8732 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8733 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8734 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8735 1.1 christos int UNUSED written = 0;
8736 1.1 christos IADDR UNUSED pc = abuf->addr;
8737 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8738 1.1 christos
8739 1.1 christos {
8740 1.1 christos {
8741 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
8742 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8743 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8744 1.1 christos }
8745 1.1 christos {
8746 1.1 christos {
8747 1.1 christos BI opval = 0;
8748 1.1 christos CPU (h_xbit) = opval;
8749 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8750 1.1 christos }
8751 1.1 christos {
8752 1.1 christos BI opval = 0;
8753 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8754 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8755 1.1 christos }
8756 1.1 christos }
8757 1.1 christos }
8758 1.1 christos
8759 1.1 christos #undef FLD
8760 1.1 christos }
8761 1.1 christos NEXT (vpc);
8762 1.1 christos
8763 1.1 christos CASE (sem, INSN_ADDI_D_R) : /* addi.d ${Rs-dfield}.m,${Rd-sfield} */
8764 1.1 christos {
8765 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8766 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8767 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8768 1.1 christos int UNUSED written = 0;
8769 1.1 christos IADDR UNUSED pc = abuf->addr;
8770 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8771 1.1 christos
8772 1.1 christos {
8773 1.1 christos {
8774 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
8775 1.1 christos SET_H_GR (FLD (f_operand1), opval);
8776 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8777 1.1 christos }
8778 1.1 christos {
8779 1.1 christos {
8780 1.1 christos BI opval = 0;
8781 1.1 christos CPU (h_xbit) = opval;
8782 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8783 1.1 christos }
8784 1.1 christos {
8785 1.1 christos BI opval = 0;
8786 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8787 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8788 1.1 christos }
8789 1.1 christos }
8790 1.1 christos }
8791 1.1 christos
8792 1.1 christos #undef FLD
8793 1.1 christos }
8794 1.1 christos NEXT (vpc);
8795 1.1 christos
8796 1.1 christos CASE (sem, INSN_NEG_B_R) : /* neg.b $Rs,$Rd */
8797 1.1 christos {
8798 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8799 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8800 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8801 1.1 christos int UNUSED written = 0;
8802 1.1 christos IADDR UNUSED pc = abuf->addr;
8803 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8804 1.1 christos
8805 1.1 christos {
8806 1.1 christos QI tmp_tmpopd;
8807 1.1 christos QI tmp_tmpops;
8808 1.1 christos BI tmp_carry;
8809 1.1 christos QI tmp_newval;
8810 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8811 1.1 christos tmp_tmpopd = 0;
8812 1.1 christos tmp_carry = CPU (h_cbit);
8813 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8814 1.1 christos {
8815 1.1 christos SI tmp_oldregval;
8816 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8817 1.1 christos {
8818 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 255), ANDSI (tmp_oldregval, 0xffffff00));
8819 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8820 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8821 1.1 christos }
8822 1.1 christos }
8823 1.1 christos {
8824 1.1 christos {
8825 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
8826 1.1 christos CPU (h_cbit) = opval;
8827 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8828 1.1 christos }
8829 1.1 christos {
8830 1.1 christos BI opval = LTQI (tmp_newval, 0);
8831 1.1 christos CPU (h_nbit) = opval;
8832 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8833 1.1 christos }
8834 1.1 christos {
8835 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8836 1.1 christos CPU (h_zbit) = opval;
8837 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8838 1.1 christos }
8839 1.1 christos {
8840 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
8841 1.1 christos CPU (h_vbit) = opval;
8842 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8843 1.1 christos }
8844 1.1 christos {
8845 1.1 christos {
8846 1.1 christos BI opval = 0;
8847 1.1 christos CPU (h_xbit) = opval;
8848 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8849 1.1 christos }
8850 1.1 christos {
8851 1.1 christos BI opval = 0;
8852 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8854 1.1 christos }
8855 1.1 christos }
8856 1.1 christos }
8857 1.1 christos }
8858 1.1 christos
8859 1.1 christos #undef FLD
8860 1.1 christos }
8861 1.1 christos NEXT (vpc);
8862 1.1 christos
8863 1.1 christos CASE (sem, INSN_NEG_W_R) : /* neg.w $Rs,$Rd */
8864 1.1 christos {
8865 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8866 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8867 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8868 1.1 christos int UNUSED written = 0;
8869 1.1 christos IADDR UNUSED pc = abuf->addr;
8870 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8871 1.1 christos
8872 1.1 christos {
8873 1.1 christos HI tmp_tmpopd;
8874 1.1 christos HI tmp_tmpops;
8875 1.1 christos BI tmp_carry;
8876 1.1 christos HI tmp_newval;
8877 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8878 1.1 christos tmp_tmpopd = 0;
8879 1.1 christos tmp_carry = CPU (h_cbit);
8880 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8881 1.1 christos {
8882 1.1 christos SI tmp_oldregval;
8883 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
8884 1.1 christos {
8885 1.1 christos SI opval = ORSI (ANDSI (tmp_newval, 65535), ANDSI (tmp_oldregval, 0xffff0000));
8886 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8887 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8888 1.1 christos }
8889 1.1 christos }
8890 1.1 christos {
8891 1.1 christos {
8892 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
8893 1.1 christos CPU (h_cbit) = opval;
8894 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8895 1.1 christos }
8896 1.1 christos {
8897 1.1 christos BI opval = LTHI (tmp_newval, 0);
8898 1.1 christos CPU (h_nbit) = opval;
8899 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8900 1.1 christos }
8901 1.1 christos {
8902 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8903 1.1 christos CPU (h_zbit) = opval;
8904 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8905 1.1 christos }
8906 1.1 christos {
8907 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
8908 1.1 christos CPU (h_vbit) = opval;
8909 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8910 1.1 christos }
8911 1.1 christos {
8912 1.1 christos {
8913 1.1 christos BI opval = 0;
8914 1.1 christos CPU (h_xbit) = opval;
8915 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8916 1.1 christos }
8917 1.1 christos {
8918 1.1 christos BI opval = 0;
8919 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8920 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8921 1.1 christos }
8922 1.1 christos }
8923 1.1 christos }
8924 1.1 christos }
8925 1.1 christos
8926 1.1 christos #undef FLD
8927 1.1 christos }
8928 1.1 christos NEXT (vpc);
8929 1.1 christos
8930 1.1 christos CASE (sem, INSN_NEG_D_R) : /* neg.d $Rs,$Rd */
8931 1.1 christos {
8932 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8933 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8934 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
8935 1.1 christos int UNUSED written = 0;
8936 1.1 christos IADDR UNUSED pc = abuf->addr;
8937 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
8938 1.1 christos
8939 1.1 christos {
8940 1.1 christos SI tmp_tmpopd;
8941 1.1 christos SI tmp_tmpops;
8942 1.1 christos BI tmp_carry;
8943 1.1 christos SI tmp_newval;
8944 1.1 christos tmp_tmpops = GET_H_GR (FLD (f_operand1));
8945 1.1 christos tmp_tmpopd = 0;
8946 1.1 christos tmp_carry = CPU (h_cbit);
8947 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
8948 1.1 christos {
8949 1.1 christos SI opval = tmp_newval;
8950 1.1 christos SET_H_GR (FLD (f_operand2), opval);
8951 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
8952 1.1 christos }
8953 1.1 christos {
8954 1.1 christos {
8955 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
8956 1.1 christos CPU (h_cbit) = opval;
8957 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
8958 1.1 christos }
8959 1.1 christos {
8960 1.1 christos BI opval = LTSI (tmp_newval, 0);
8961 1.1 christos CPU (h_nbit) = opval;
8962 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
8963 1.1 christos }
8964 1.1 christos {
8965 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
8966 1.1 christos CPU (h_zbit) = opval;
8967 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
8968 1.1 christos }
8969 1.1 christos {
8970 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
8971 1.1 christos CPU (h_vbit) = opval;
8972 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
8973 1.1 christos }
8974 1.1 christos {
8975 1.1 christos {
8976 1.1 christos BI opval = 0;
8977 1.1 christos CPU (h_xbit) = opval;
8978 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
8979 1.1 christos }
8980 1.1 christos {
8981 1.1 christos BI opval = 0;
8982 1.1 christos SET_H_INSN_PREFIXED_P (opval);
8983 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
8984 1.1 christos }
8985 1.1 christos }
8986 1.1 christos }
8987 1.1 christos }
8988 1.1 christos
8989 1.1 christos #undef FLD
8990 1.1 christos }
8991 1.1 christos NEXT (vpc);
8992 1.1 christos
8993 1.1 christos CASE (sem, INSN_TEST_M_B_M) : /* test-m.b [${Rs}${inc}] */
8994 1.1 christos {
8995 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
8996 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
8997 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
8998 1.1 christos int UNUSED written = 0;
8999 1.1 christos IADDR UNUSED pc = abuf->addr;
9000 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9001 1.1 christos
9002 1.1 christos {
9003 1.1 christos QI tmp_tmpd;
9004 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9005 1.1 christos QI tmp_tmp_mem;
9006 1.1 christos BI tmp_postinc;
9007 1.1 christos tmp_postinc = FLD (f_memmode);
9008 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9009 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
9010 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9011 1.1 christos {
9012 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9013 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9014 1.1 christos }
9015 1.1 christos {
9016 1.1 christos SI opval = tmp_addr;
9017 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9018 1.1 christos written |= (1 << 8);
9019 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9020 1.1 christos }
9021 1.1 christos }
9022 1.1 christos }
9023 1.1 christos ; tmp_tmp_mem; });
9024 1.1 christos {
9025 1.1 christos QI tmp_tmpopd;
9026 1.1 christos QI tmp_tmpops;
9027 1.1 christos BI tmp_carry;
9028 1.1 christos QI tmp_newval;
9029 1.1 christos tmp_tmpops = 0;
9030 1.1 christos tmp_tmpopd = tmp_tmpd;
9031 1.1 christos tmp_carry = CPU (h_cbit);
9032 1.1 christos tmp_newval = SUBCQI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9033 1.1 christos ((void) 0); /*nop*/
9034 1.1 christos {
9035 1.1 christos {
9036 1.1 christos BI opval = ORIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), ORIF (ANDIF (GEQI (tmp_tmpopd, 0), LTQI (tmp_newval, 0)), ANDIF (LTQI (tmp_tmpops, 0), LTQI (tmp_newval, 0))));
9037 1.1 christos CPU (h_cbit) = opval;
9038 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9039 1.1 christos }
9040 1.1 christos {
9041 1.1 christos BI opval = LTQI (tmp_newval, 0);
9042 1.1 christos CPU (h_nbit) = opval;
9043 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9044 1.1 christos }
9045 1.1 christos {
9046 1.1 christos BI opval = ANDIF (EQQI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9047 1.1 christos CPU (h_zbit) = opval;
9048 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9049 1.1 christos }
9050 1.1 christos {
9051 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEQI (tmp_tmpops, 0), LTQI (tmp_tmpopd, 0)), GEQI (tmp_newval, 0)), ANDIF (ANDIF (LTQI (tmp_tmpops, 0), GEQI (tmp_tmpopd, 0)), LTQI (tmp_newval, 0)));
9052 1.1 christos CPU (h_vbit) = opval;
9053 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9054 1.1 christos }
9055 1.1 christos {
9056 1.1 christos {
9057 1.1 christos BI opval = 0;
9058 1.1 christos CPU (h_xbit) = opval;
9059 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9060 1.1 christos }
9061 1.1 christos {
9062 1.1 christos BI opval = 0;
9063 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9064 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9065 1.1 christos }
9066 1.1 christos }
9067 1.1 christos }
9068 1.1 christos }
9069 1.1 christos }
9070 1.1 christos
9071 1.1 christos abuf->written = written;
9072 1.1 christos #undef FLD
9073 1.1 christos }
9074 1.1 christos NEXT (vpc);
9075 1.1 christos
9076 1.1 christos CASE (sem, INSN_TEST_M_W_M) : /* test-m.w [${Rs}${inc}] */
9077 1.1 christos {
9078 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9079 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9080 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9081 1.1 christos int UNUSED written = 0;
9082 1.1 christos IADDR UNUSED pc = abuf->addr;
9083 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9084 1.1 christos
9085 1.1 christos {
9086 1.1 christos HI tmp_tmpd;
9087 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9088 1.1 christos HI tmp_tmp_mem;
9089 1.1 christos BI tmp_postinc;
9090 1.1 christos tmp_postinc = FLD (f_memmode);
9091 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9092 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
9093 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9094 1.1 christos {
9095 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9096 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9097 1.1 christos }
9098 1.1 christos {
9099 1.1 christos SI opval = tmp_addr;
9100 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9101 1.1 christos written |= (1 << 8);
9102 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9103 1.1 christos }
9104 1.1 christos }
9105 1.1 christos }
9106 1.1 christos ; tmp_tmp_mem; });
9107 1.1 christos {
9108 1.1 christos HI tmp_tmpopd;
9109 1.1 christos HI tmp_tmpops;
9110 1.1 christos BI tmp_carry;
9111 1.1 christos HI tmp_newval;
9112 1.1 christos tmp_tmpops = 0;
9113 1.1 christos tmp_tmpopd = tmp_tmpd;
9114 1.1 christos tmp_carry = CPU (h_cbit);
9115 1.1 christos tmp_newval = SUBCHI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9116 1.1 christos ((void) 0); /*nop*/
9117 1.1 christos {
9118 1.1 christos {
9119 1.1 christos BI opval = ORIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), ORIF (ANDIF (GEHI (tmp_tmpopd, 0), LTHI (tmp_newval, 0)), ANDIF (LTHI (tmp_tmpops, 0), LTHI (tmp_newval, 0))));
9120 1.1 christos CPU (h_cbit) = opval;
9121 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9122 1.1 christos }
9123 1.1 christos {
9124 1.1 christos BI opval = LTHI (tmp_newval, 0);
9125 1.1 christos CPU (h_nbit) = opval;
9126 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9127 1.1 christos }
9128 1.1 christos {
9129 1.1 christos BI opval = ANDIF (EQHI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9130 1.1 christos CPU (h_zbit) = opval;
9131 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9132 1.1 christos }
9133 1.1 christos {
9134 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GEHI (tmp_tmpops, 0), LTHI (tmp_tmpopd, 0)), GEHI (tmp_newval, 0)), ANDIF (ANDIF (LTHI (tmp_tmpops, 0), GEHI (tmp_tmpopd, 0)), LTHI (tmp_newval, 0)));
9135 1.1 christos CPU (h_vbit) = opval;
9136 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9137 1.1 christos }
9138 1.1 christos {
9139 1.1 christos {
9140 1.1 christos BI opval = 0;
9141 1.1 christos CPU (h_xbit) = opval;
9142 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9143 1.1 christos }
9144 1.1 christos {
9145 1.1 christos BI opval = 0;
9146 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9147 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9148 1.1 christos }
9149 1.1 christos }
9150 1.1 christos }
9151 1.1 christos }
9152 1.1 christos }
9153 1.1 christos
9154 1.1 christos abuf->written = written;
9155 1.1 christos #undef FLD
9156 1.1 christos }
9157 1.1 christos NEXT (vpc);
9158 1.1 christos
9159 1.1 christos CASE (sem, INSN_TEST_M_D_M) : /* test-m.d [${Rs}${inc}] */
9160 1.1 christos {
9161 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9162 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9163 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
9164 1.1 christos int UNUSED written = 0;
9165 1.1 christos IADDR UNUSED pc = abuf->addr;
9166 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9167 1.1 christos
9168 1.1 christos {
9169 1.1 christos SI tmp_tmpd;
9170 1.1 christos tmp_tmpd = ({ SI tmp_addr;
9171 1.1 christos SI tmp_tmp_mem;
9172 1.1 christos BI tmp_postinc;
9173 1.1 christos tmp_postinc = FLD (f_memmode);
9174 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9175 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
9176 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
9177 1.1 christos {
9178 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9179 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9180 1.1 christos }
9181 1.1 christos {
9182 1.1 christos SI opval = tmp_addr;
9183 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9184 1.1 christos written |= (1 << 8);
9185 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9186 1.1 christos }
9187 1.1 christos }
9188 1.1 christos }
9189 1.1 christos ; tmp_tmp_mem; });
9190 1.1 christos {
9191 1.1 christos SI tmp_tmpopd;
9192 1.1 christos SI tmp_tmpops;
9193 1.1 christos BI tmp_carry;
9194 1.1 christos SI tmp_newval;
9195 1.1 christos tmp_tmpops = 0;
9196 1.1 christos tmp_tmpopd = tmp_tmpd;
9197 1.1 christos tmp_carry = CPU (h_cbit);
9198 1.1 christos tmp_newval = SUBCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9199 1.1 christos ((void) 0); /*nop*/
9200 1.1 christos {
9201 1.1 christos {
9202 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), ORIF (ANDIF (GESI (tmp_tmpopd, 0), LTSI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_newval, 0))));
9203 1.1 christos CPU (h_cbit) = opval;
9204 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9205 1.1 christos }
9206 1.1 christos {
9207 1.1 christos BI opval = LTSI (tmp_newval, 0);
9208 1.1 christos CPU (h_nbit) = opval;
9209 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9210 1.1 christos }
9211 1.1 christos {
9212 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9213 1.1 christos CPU (h_zbit) = opval;
9214 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9215 1.1 christos }
9216 1.1 christos {
9217 1.1 christos BI opval = ORIF (ANDIF (ANDIF (GESI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
9218 1.1 christos CPU (h_vbit) = opval;
9219 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9220 1.1 christos }
9221 1.1 christos {
9222 1.1 christos {
9223 1.1 christos BI opval = 0;
9224 1.1 christos CPU (h_xbit) = opval;
9225 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9226 1.1 christos }
9227 1.1 christos {
9228 1.1 christos BI opval = 0;
9229 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9230 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9231 1.1 christos }
9232 1.1 christos }
9233 1.1 christos }
9234 1.1 christos }
9235 1.1 christos }
9236 1.1 christos
9237 1.1 christos abuf->written = written;
9238 1.1 christos #undef FLD
9239 1.1 christos }
9240 1.1 christos NEXT (vpc);
9241 1.1 christos
9242 1.1 christos CASE (sem, INSN_MOVE_R_M_B_M) : /* move-r-m.b ${Rs-dfield},[${Rd-sfield}${inc}] */
9243 1.1 christos {
9244 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9245 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9246 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9247 1.1 christos int UNUSED written = 0;
9248 1.1 christos IADDR UNUSED pc = abuf->addr;
9249 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9250 1.1 christos
9251 1.1 christos {
9252 1.1 christos QI tmp_tmpd;
9253 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9254 1.1 christos {
9255 1.1 christos SI tmp_addr;
9256 1.1 christos BI tmp_postinc;
9257 1.1 christos tmp_postinc = FLD (f_memmode);
9258 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9259 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9260 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9261 1.1 christos {
9262 1.1 christos {
9263 1.1 christos QI opval = tmp_tmpd;
9264 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9265 1.1 christos written |= (1 << 10);
9266 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9267 1.1 christos }
9268 1.1 christos {
9269 1.1 christos BI opval = CPU (h_pbit);
9270 1.1 christos CPU (h_cbit) = opval;
9271 1.1 christos written |= (1 << 9);
9272 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9273 1.1 christos }
9274 1.1 christos }
9275 1.1 christos } else {
9276 1.1 christos {
9277 1.1 christos BI opval = 1;
9278 1.1 christos CPU (h_cbit) = opval;
9279 1.1 christos written |= (1 << 9);
9280 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9281 1.1 christos }
9282 1.1 christos }
9283 1.1 christos } else {
9284 1.1 christos {
9285 1.1 christos QI opval = tmp_tmpd;
9286 1.1 christos SETMEMQI (current_cpu, pc, tmp_addr, opval);
9287 1.1 christos written |= (1 << 10);
9288 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9289 1.1 christos }
9290 1.1 christos }
9291 1.1 christos if (NEBI (tmp_postinc, 0)) {
9292 1.1 christos {
9293 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9294 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
9295 1.1 christos }
9296 1.1 christos {
9297 1.1 christos SI opval = tmp_addr;
9298 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9299 1.1 christos written |= (1 << 8);
9300 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9301 1.1 christos }
9302 1.1 christos }
9303 1.1 christos }
9304 1.1 christos }
9305 1.1 christos {
9306 1.1 christos {
9307 1.1 christos BI opval = 0;
9308 1.1 christos CPU (h_xbit) = opval;
9309 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9310 1.1 christos }
9311 1.1 christos {
9312 1.1 christos BI opval = 0;
9313 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9314 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9315 1.1 christos }
9316 1.1 christos }
9317 1.1 christos }
9318 1.1 christos
9319 1.1 christos abuf->written = written;
9320 1.1 christos #undef FLD
9321 1.1 christos }
9322 1.1 christos NEXT (vpc);
9323 1.1 christos
9324 1.1 christos CASE (sem, INSN_MOVE_R_M_W_M) : /* move-r-m.w ${Rs-dfield},[${Rd-sfield}${inc}] */
9325 1.1 christos {
9326 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9327 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9328 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9329 1.1 christos int UNUSED written = 0;
9330 1.1 christos IADDR UNUSED pc = abuf->addr;
9331 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9332 1.1 christos
9333 1.1 christos {
9334 1.1 christos HI tmp_tmpd;
9335 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9336 1.1 christos {
9337 1.1 christos SI tmp_addr;
9338 1.1 christos BI tmp_postinc;
9339 1.1 christos tmp_postinc = FLD (f_memmode);
9340 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9341 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9342 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9343 1.1 christos {
9344 1.1 christos {
9345 1.1 christos HI opval = tmp_tmpd;
9346 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9347 1.1 christos written |= (1 << 10);
9348 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9349 1.1 christos }
9350 1.1 christos {
9351 1.1 christos BI opval = CPU (h_pbit);
9352 1.1 christos CPU (h_cbit) = opval;
9353 1.1 christos written |= (1 << 9);
9354 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9355 1.1 christos }
9356 1.1 christos }
9357 1.1 christos } else {
9358 1.1 christos {
9359 1.1 christos BI opval = 1;
9360 1.1 christos CPU (h_cbit) = opval;
9361 1.1 christos written |= (1 << 9);
9362 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9363 1.1 christos }
9364 1.1 christos }
9365 1.1 christos } else {
9366 1.1 christos {
9367 1.1 christos HI opval = tmp_tmpd;
9368 1.1 christos SETMEMHI (current_cpu, pc, tmp_addr, opval);
9369 1.1 christos written |= (1 << 10);
9370 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9371 1.1 christos }
9372 1.1 christos }
9373 1.1 christos if (NEBI (tmp_postinc, 0)) {
9374 1.1 christos {
9375 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9376 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
9377 1.1 christos }
9378 1.1 christos {
9379 1.1 christos SI opval = tmp_addr;
9380 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9381 1.1 christos written |= (1 << 8);
9382 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9383 1.1 christos }
9384 1.1 christos }
9385 1.1 christos }
9386 1.1 christos }
9387 1.1 christos {
9388 1.1 christos {
9389 1.1 christos BI opval = 0;
9390 1.1 christos CPU (h_xbit) = opval;
9391 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9392 1.1 christos }
9393 1.1 christos {
9394 1.1 christos BI opval = 0;
9395 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9396 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9397 1.1 christos }
9398 1.1 christos }
9399 1.1 christos }
9400 1.1 christos
9401 1.1 christos abuf->written = written;
9402 1.1 christos #undef FLD
9403 1.1 christos }
9404 1.1 christos NEXT (vpc);
9405 1.1 christos
9406 1.1 christos CASE (sem, INSN_MOVE_R_M_D_M) : /* move-r-m.d ${Rs-dfield},[${Rd-sfield}${inc}] */
9407 1.1 christos {
9408 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9409 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9410 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
9411 1.1 christos int UNUSED written = 0;
9412 1.1 christos IADDR UNUSED pc = abuf->addr;
9413 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9414 1.1 christos
9415 1.1 christos {
9416 1.1 christos SI tmp_tmpd;
9417 1.1 christos tmp_tmpd = GET_H_GR (FLD (f_operand2));
9418 1.1 christos {
9419 1.1 christos SI tmp_addr;
9420 1.1 christos BI tmp_postinc;
9421 1.1 christos tmp_postinc = FLD (f_memmode);
9422 1.1 christos tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
9423 1.1 christos if (ANDIF (GET_H_V32_V32 (), NEBI (CPU (h_xbit), 0))) {
9424 1.1 christos if (EQBI (CPU (h_pbit), 0)) {
9425 1.1 christos {
9426 1.1 christos {
9427 1.1 christos SI opval = tmp_tmpd;
9428 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9429 1.1 christos written |= (1 << 10);
9430 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9431 1.1 christos }
9432 1.1 christos {
9433 1.1 christos BI opval = CPU (h_pbit);
9434 1.1 christos CPU (h_cbit) = opval;
9435 1.1 christos written |= (1 << 9);
9436 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9437 1.1 christos }
9438 1.1 christos }
9439 1.1 christos } else {
9440 1.1 christos {
9441 1.1 christos BI opval = 1;
9442 1.1 christos CPU (h_cbit) = opval;
9443 1.1 christos written |= (1 << 9);
9444 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9445 1.1 christos }
9446 1.1 christos }
9447 1.1 christos } else {
9448 1.1 christos {
9449 1.1 christos SI opval = tmp_tmpd;
9450 1.1 christos SETMEMSI (current_cpu, pc, tmp_addr, opval);
9451 1.1 christos written |= (1 << 10);
9452 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
9453 1.1 christos }
9454 1.1 christos }
9455 1.1 christos if (NEBI (tmp_postinc, 0)) {
9456 1.1 christos {
9457 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
9458 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
9459 1.1 christos }
9460 1.1 christos {
9461 1.1 christos SI opval = tmp_addr;
9462 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9463 1.1 christos written |= (1 << 8);
9464 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9465 1.1 christos }
9466 1.1 christos }
9467 1.1 christos }
9468 1.1 christos }
9469 1.1 christos {
9470 1.1 christos {
9471 1.1 christos BI opval = 0;
9472 1.1 christos CPU (h_xbit) = opval;
9473 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9474 1.1 christos }
9475 1.1 christos {
9476 1.1 christos BI opval = 0;
9477 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9478 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9479 1.1 christos }
9480 1.1 christos }
9481 1.1 christos }
9482 1.1 christos
9483 1.1 christos abuf->written = written;
9484 1.1 christos #undef FLD
9485 1.1 christos }
9486 1.1 christos NEXT (vpc);
9487 1.1 christos
9488 1.1 christos CASE (sem, INSN_MULS_B) : /* muls.b $Rs,$Rd */
9489 1.1 christos {
9490 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9491 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9492 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9493 1.1 christos int UNUSED written = 0;
9494 1.1 christos IADDR UNUSED pc = abuf->addr;
9495 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9496 1.1 christos
9497 1.1 christos {
9498 1.1 christos DI tmp_src1;
9499 1.1 christos DI tmp_src2;
9500 1.1 christos DI tmp_tmpr;
9501 1.1 christos tmp_src1 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9502 1.1 christos tmp_src2 = EXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9503 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9504 1.1 christos {
9505 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9506 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9507 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9508 1.1 christos }
9509 1.1 christos {
9510 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9511 1.1 christos SET_H_SR (((UINT) 7), opval);
9512 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9513 1.1 christos }
9514 1.1 christos {
9515 1.1 christos {
9516 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9517 1.1 christos CPU (h_cbit) = opval;
9518 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9519 1.1 christos }
9520 1.1 christos {
9521 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9522 1.1 christos CPU (h_nbit) = opval;
9523 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9524 1.1 christos }
9525 1.1 christos {
9526 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9527 1.1 christos CPU (h_zbit) = opval;
9528 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9529 1.1 christos }
9530 1.1 christos {
9531 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9532 1.1 christos CPU (h_vbit) = opval;
9533 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9534 1.1 christos }
9535 1.1 christos {
9536 1.1 christos {
9537 1.1 christos BI opval = 0;
9538 1.1 christos CPU (h_xbit) = opval;
9539 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9540 1.1 christos }
9541 1.1 christos {
9542 1.1 christos BI opval = 0;
9543 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9544 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9545 1.1 christos }
9546 1.1 christos }
9547 1.1 christos }
9548 1.1 christos }
9549 1.1 christos
9550 1.1 christos #undef FLD
9551 1.1 christos }
9552 1.1 christos NEXT (vpc);
9553 1.1 christos
9554 1.1 christos CASE (sem, INSN_MULS_W) : /* muls.w $Rs,$Rd */
9555 1.1 christos {
9556 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9557 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9558 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9559 1.1 christos int UNUSED written = 0;
9560 1.1 christos IADDR UNUSED pc = abuf->addr;
9561 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9562 1.1 christos
9563 1.1 christos {
9564 1.1 christos DI tmp_src1;
9565 1.1 christos DI tmp_src2;
9566 1.1 christos DI tmp_tmpr;
9567 1.1 christos tmp_src1 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9568 1.1 christos tmp_src2 = EXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9569 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9570 1.1 christos {
9571 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9572 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9573 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9574 1.1 christos }
9575 1.1 christos {
9576 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9577 1.1 christos SET_H_SR (((UINT) 7), opval);
9578 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9579 1.1 christos }
9580 1.1 christos {
9581 1.1 christos {
9582 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9583 1.1 christos CPU (h_cbit) = opval;
9584 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9585 1.1 christos }
9586 1.1 christos {
9587 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9588 1.1 christos CPU (h_nbit) = opval;
9589 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9590 1.1 christos }
9591 1.1 christos {
9592 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9593 1.1 christos CPU (h_zbit) = opval;
9594 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9595 1.1 christos }
9596 1.1 christos {
9597 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9598 1.1 christos CPU (h_vbit) = opval;
9599 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9600 1.1 christos }
9601 1.1 christos {
9602 1.1 christos {
9603 1.1 christos BI opval = 0;
9604 1.1 christos CPU (h_xbit) = opval;
9605 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9606 1.1 christos }
9607 1.1 christos {
9608 1.1 christos BI opval = 0;
9609 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9610 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9611 1.1 christos }
9612 1.1 christos }
9613 1.1 christos }
9614 1.1 christos }
9615 1.1 christos
9616 1.1 christos #undef FLD
9617 1.1 christos }
9618 1.1 christos NEXT (vpc);
9619 1.1 christos
9620 1.1 christos CASE (sem, INSN_MULS_D) : /* muls.d $Rs,$Rd */
9621 1.1 christos {
9622 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9623 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9624 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9625 1.1 christos int UNUSED written = 0;
9626 1.1 christos IADDR UNUSED pc = abuf->addr;
9627 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9628 1.1 christos
9629 1.1 christos {
9630 1.1 christos DI tmp_src1;
9631 1.1 christos DI tmp_src2;
9632 1.1 christos DI tmp_tmpr;
9633 1.1 christos tmp_src1 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9634 1.1 christos tmp_src2 = EXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9635 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9636 1.1 christos {
9637 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9638 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9639 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9640 1.1 christos }
9641 1.1 christos {
9642 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9643 1.1 christos SET_H_SR (((UINT) 7), opval);
9644 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9645 1.1 christos }
9646 1.1 christos {
9647 1.1 christos {
9648 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9649 1.1 christos CPU (h_cbit) = opval;
9650 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9651 1.1 christos }
9652 1.1 christos {
9653 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9654 1.1 christos CPU (h_nbit) = opval;
9655 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9656 1.1 christos }
9657 1.1 christos {
9658 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9659 1.1 christos CPU (h_zbit) = opval;
9660 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9661 1.1 christos }
9662 1.1 christos {
9663 1.1 christos BI opval = NEDI (tmp_tmpr, EXTSIDI (TRUNCDISI (tmp_tmpr)));
9664 1.1 christos CPU (h_vbit) = opval;
9665 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9666 1.1 christos }
9667 1.1 christos {
9668 1.1 christos {
9669 1.1 christos BI opval = 0;
9670 1.1 christos CPU (h_xbit) = opval;
9671 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9672 1.1 christos }
9673 1.1 christos {
9674 1.1 christos BI opval = 0;
9675 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9676 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9677 1.1 christos }
9678 1.1 christos }
9679 1.1 christos }
9680 1.1 christos }
9681 1.1 christos
9682 1.1 christos #undef FLD
9683 1.1 christos }
9684 1.1 christos NEXT (vpc);
9685 1.1 christos
9686 1.1 christos CASE (sem, INSN_MULU_B) : /* mulu.b $Rs,$Rd */
9687 1.1 christos {
9688 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9689 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9690 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9691 1.1 christos int UNUSED written = 0;
9692 1.1 christos IADDR UNUSED pc = abuf->addr;
9693 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9694 1.1 christos
9695 1.1 christos {
9696 1.1 christos DI tmp_src1;
9697 1.1 christos DI tmp_src2;
9698 1.1 christos DI tmp_tmpr;
9699 1.1 christos tmp_src1 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
9700 1.1 christos tmp_src2 = ZEXTQIDI (TRUNCSIQI (GET_H_GR (FLD (f_operand2))));
9701 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9702 1.1 christos {
9703 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9704 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9705 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9706 1.1 christos }
9707 1.1 christos {
9708 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9709 1.1 christos SET_H_SR (((UINT) 7), opval);
9710 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9711 1.1 christos }
9712 1.1 christos {
9713 1.1 christos {
9714 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9715 1.1 christos CPU (h_cbit) = opval;
9716 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9717 1.1 christos }
9718 1.1 christos {
9719 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9720 1.1 christos CPU (h_nbit) = opval;
9721 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9722 1.1 christos }
9723 1.1 christos {
9724 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9725 1.1 christos CPU (h_zbit) = opval;
9726 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9727 1.1 christos }
9728 1.1 christos {
9729 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9730 1.1 christos CPU (h_vbit) = opval;
9731 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9732 1.1 christos }
9733 1.1 christos {
9734 1.1 christos {
9735 1.1 christos BI opval = 0;
9736 1.1 christos CPU (h_xbit) = opval;
9737 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9738 1.1 christos }
9739 1.1 christos {
9740 1.1 christos BI opval = 0;
9741 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9742 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9743 1.1 christos }
9744 1.1 christos }
9745 1.1 christos }
9746 1.1 christos }
9747 1.1 christos
9748 1.1 christos #undef FLD
9749 1.1 christos }
9750 1.1 christos NEXT (vpc);
9751 1.1 christos
9752 1.1 christos CASE (sem, INSN_MULU_W) : /* mulu.w $Rs,$Rd */
9753 1.1 christos {
9754 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9755 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9756 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9757 1.1 christos int UNUSED written = 0;
9758 1.1 christos IADDR UNUSED pc = abuf->addr;
9759 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9760 1.1 christos
9761 1.1 christos {
9762 1.1 christos DI tmp_src1;
9763 1.1 christos DI tmp_src2;
9764 1.1 christos DI tmp_tmpr;
9765 1.1 christos tmp_src1 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
9766 1.1 christos tmp_src2 = ZEXTHIDI (TRUNCSIHI (GET_H_GR (FLD (f_operand2))));
9767 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9768 1.1 christos {
9769 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9770 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9771 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9772 1.1 christos }
9773 1.1 christos {
9774 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9775 1.1 christos SET_H_SR (((UINT) 7), opval);
9776 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9777 1.1 christos }
9778 1.1 christos {
9779 1.1 christos {
9780 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9781 1.1 christos CPU (h_cbit) = opval;
9782 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9783 1.1 christos }
9784 1.1 christos {
9785 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9786 1.1 christos CPU (h_nbit) = opval;
9787 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9788 1.1 christos }
9789 1.1 christos {
9790 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9791 1.1 christos CPU (h_zbit) = opval;
9792 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9793 1.1 christos }
9794 1.1 christos {
9795 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9796 1.1 christos CPU (h_vbit) = opval;
9797 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9798 1.1 christos }
9799 1.1 christos {
9800 1.1 christos {
9801 1.1 christos BI opval = 0;
9802 1.1 christos CPU (h_xbit) = opval;
9803 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9804 1.1 christos }
9805 1.1 christos {
9806 1.1 christos BI opval = 0;
9807 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9808 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9809 1.1 christos }
9810 1.1 christos }
9811 1.1 christos }
9812 1.1 christos }
9813 1.1 christos
9814 1.1 christos #undef FLD
9815 1.1 christos }
9816 1.1 christos NEXT (vpc);
9817 1.1 christos
9818 1.1 christos CASE (sem, INSN_MULU_D) : /* mulu.d $Rs,$Rd */
9819 1.1 christos {
9820 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9821 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9822 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9823 1.1 christos int UNUSED written = 0;
9824 1.1 christos IADDR UNUSED pc = abuf->addr;
9825 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9826 1.1 christos
9827 1.1 christos {
9828 1.1 christos DI tmp_src1;
9829 1.1 christos DI tmp_src2;
9830 1.1 christos DI tmp_tmpr;
9831 1.1 christos tmp_src1 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand1))));
9832 1.1 christos tmp_src2 = ZEXTSIDI (TRUNCSISI (GET_H_GR (FLD (f_operand2))));
9833 1.1 christos tmp_tmpr = MULDI (tmp_src1, tmp_src2);
9834 1.1 christos {
9835 1.1 christos SI opval = TRUNCDISI (tmp_tmpr);
9836 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9837 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9838 1.1 christos }
9839 1.1 christos {
9840 1.1 christos SI opval = TRUNCDISI (SRLDI (tmp_tmpr, 32));
9841 1.1 christos SET_H_SR (((UINT) 7), opval);
9842 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
9843 1.1 christos }
9844 1.1 christos {
9845 1.1 christos {
9846 1.1 christos BI opval = ANDIF (GET_H_V32_V32 (), CPU (h_cbit));
9847 1.1 christos CPU (h_cbit) = opval;
9848 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
9849 1.1 christos }
9850 1.1 christos {
9851 1.1 christos BI opval = LTDI (tmp_tmpr, 0);
9852 1.1 christos CPU (h_nbit) = opval;
9853 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9854 1.1 christos }
9855 1.1 christos {
9856 1.1 christos BI opval = ANDIF (EQDI (tmp_tmpr, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9857 1.1 christos CPU (h_zbit) = opval;
9858 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9859 1.1 christos }
9860 1.1 christos {
9861 1.1 christos BI opval = NEDI (tmp_tmpr, ZEXTSIDI (TRUNCDISI (tmp_tmpr)));
9862 1.1 christos CPU (h_vbit) = opval;
9863 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9864 1.1 christos }
9865 1.1 christos {
9866 1.1 christos {
9867 1.1 christos BI opval = 0;
9868 1.1 christos CPU (h_xbit) = opval;
9869 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9870 1.1 christos }
9871 1.1 christos {
9872 1.1 christos BI opval = 0;
9873 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9874 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9875 1.1 christos }
9876 1.1 christos }
9877 1.1 christos }
9878 1.1 christos }
9879 1.1 christos
9880 1.1 christos #undef FLD
9881 1.1 christos }
9882 1.1 christos NEXT (vpc);
9883 1.1 christos
9884 1.1 christos CASE (sem, INSN_MCP) : /* mcp $Ps,$Rd */
9885 1.1 christos {
9886 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9887 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9888 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
9889 1.1 christos int UNUSED written = 0;
9890 1.1 christos IADDR UNUSED pc = abuf->addr;
9891 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9892 1.1 christos
9893 1.1 christos {
9894 1.1 christos CPU (h_xbit) = 1;
9895 1.1 christos CPU (h_zbit) = 1;
9896 1.1 christos {
9897 1.1 christos SI tmp_tmpopd;
9898 1.1 christos SI tmp_tmpops;
9899 1.1 christos BI tmp_carry;
9900 1.1 christos SI tmp_newval;
9901 1.1 christos tmp_tmpops = GET_H_SR (FLD (f_operand2));
9902 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand1));
9903 1.1 christos tmp_carry = CPU (h_rbit);
9904 1.1 christos tmp_newval = ADDCSI (tmp_tmpopd, tmp_tmpops, ((EQBI (CPU (h_xbit), 0)) ? (0) : (tmp_carry)));
9905 1.1 christos {
9906 1.1 christos SI opval = tmp_newval;
9907 1.1 christos SET_H_GR (FLD (f_operand1), opval);
9908 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9909 1.1 christos }
9910 1.1 christos {
9911 1.1 christos {
9912 1.1 christos BI opval = ORIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), ORIF (ANDIF (LTSI (tmp_tmpopd, 0), GESI (tmp_newval, 0)), ANDIF (LTSI (tmp_tmpops, 0), GESI (tmp_newval, 0))));
9913 1.1 christos CPU (h_rbit) = opval;
9914 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "rbit", 'x', opval);
9915 1.1 christos }
9916 1.1 christos {
9917 1.1 christos BI opval = LTSI (tmp_newval, 0);
9918 1.1 christos CPU (h_nbit) = opval;
9919 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9920 1.1 christos }
9921 1.1 christos {
9922 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ORIF (CPU (h_zbit), NOTBI (CPU (h_xbit))));
9923 1.1 christos CPU (h_zbit) = opval;
9924 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9925 1.1 christos }
9926 1.1 christos {
9927 1.1 christos BI opval = ORIF (ANDIF (ANDIF (LTSI (tmp_tmpops, 0), LTSI (tmp_tmpopd, 0)), GESI (tmp_newval, 0)), ANDIF (ANDIF (GESI (tmp_tmpops, 0), GESI (tmp_tmpopd, 0)), LTSI (tmp_newval, 0)));
9928 1.1 christos CPU (h_vbit) = opval;
9929 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
9930 1.1 christos }
9931 1.1 christos {
9932 1.1 christos {
9933 1.1 christos BI opval = 0;
9934 1.1 christos CPU (h_xbit) = opval;
9935 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9936 1.1 christos }
9937 1.1 christos {
9938 1.1 christos BI opval = 0;
9939 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9940 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9941 1.1 christos }
9942 1.1 christos }
9943 1.1 christos }
9944 1.1 christos }
9945 1.1 christos }
9946 1.1 christos
9947 1.1 christos #undef FLD
9948 1.1 christos }
9949 1.1 christos NEXT (vpc);
9950 1.1 christos
9951 1.1 christos CASE (sem, INSN_DSTEP) : /* dstep $Rs,$Rd */
9952 1.1 christos {
9953 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
9954 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
9955 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
9956 1.1 christos int UNUSED written = 0;
9957 1.1 christos IADDR UNUSED pc = abuf->addr;
9958 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
9959 1.1 christos
9960 1.1 christos {
9961 1.1 christos SI tmp_tmp;
9962 1.1 christos SI tmp_tmps;
9963 1.1 christos SI tmp_tmpd;
9964 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
9965 1.1 christos tmp_tmp = SLLSI (GET_H_GR (FLD (f_operand2)), 1);
9966 1.1 christos tmp_tmpd = ((GEUSI (tmp_tmp, tmp_tmps)) ? (SUBSI (tmp_tmp, tmp_tmps)) : (tmp_tmp));
9967 1.1 christos {
9968 1.1 christos SI opval = tmp_tmpd;
9969 1.1 christos SET_H_GR (FLD (f_operand2), opval);
9970 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
9971 1.1 christos }
9972 1.1 christos {
9973 1.1 christos {
9974 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
9975 1.1 christos CPU (h_nbit) = opval;
9976 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
9977 1.1 christos }
9978 1.1 christos {
9979 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
9980 1.1 christos CPU (h_zbit) = opval;
9981 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
9982 1.1 christos }
9983 1.1 christos SET_H_CBIT_MOVE (0);
9984 1.1 christos SET_H_VBIT_MOVE (0);
9985 1.1 christos {
9986 1.1 christos {
9987 1.1 christos BI opval = 0;
9988 1.1 christos CPU (h_xbit) = opval;
9989 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
9990 1.1 christos }
9991 1.1 christos {
9992 1.1 christos BI opval = 0;
9993 1.1 christos SET_H_INSN_PREFIXED_P (opval);
9994 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
9995 1.1 christos }
9996 1.1 christos }
9997 1.1 christos }
9998 1.1 christos }
9999 1.1 christos
10000 1.1 christos #undef FLD
10001 1.1 christos }
10002 1.1 christos NEXT (vpc);
10003 1.1 christos
10004 1.1 christos CASE (sem, INSN_ABS) : /* abs $Rs,$Rd */
10005 1.1 christos {
10006 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10007 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10008 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
10009 1.1 christos int UNUSED written = 0;
10010 1.1 christos IADDR UNUSED pc = abuf->addr;
10011 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10012 1.1 christos
10013 1.1 christos {
10014 1.1 christos SI tmp_tmpd;
10015 1.1 christos tmp_tmpd = ABSSI (GET_H_GR (FLD (f_operand1)));
10016 1.1 christos {
10017 1.1 christos SI opval = tmp_tmpd;
10018 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10019 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10020 1.1 christos }
10021 1.1 christos {
10022 1.1 christos {
10023 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10024 1.1 christos CPU (h_nbit) = opval;
10025 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10026 1.1 christos }
10027 1.1 christos {
10028 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10029 1.1 christos CPU (h_zbit) = opval;
10030 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10031 1.1 christos }
10032 1.1 christos SET_H_CBIT_MOVE (0);
10033 1.1 christos SET_H_VBIT_MOVE (0);
10034 1.1 christos {
10035 1.1 christos {
10036 1.1 christos BI opval = 0;
10037 1.1 christos CPU (h_xbit) = opval;
10038 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10039 1.1 christos }
10040 1.1 christos {
10041 1.1 christos BI opval = 0;
10042 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10043 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10044 1.1 christos }
10045 1.1 christos }
10046 1.1 christos }
10047 1.1 christos }
10048 1.1 christos
10049 1.1 christos #undef FLD
10050 1.1 christos }
10051 1.1 christos NEXT (vpc);
10052 1.1 christos
10053 1.1 christos CASE (sem, INSN_AND_B_R) : /* and.b $Rs,$Rd */
10054 1.1 christos {
10055 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10056 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10057 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10058 1.1 christos int UNUSED written = 0;
10059 1.1 christos IADDR UNUSED pc = abuf->addr;
10060 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10061 1.1 christos
10062 1.1 christos {
10063 1.1 christos QI tmp_tmpd;
10064 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10065 1.1 christos {
10066 1.1 christos SI tmp_oldregval;
10067 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10068 1.1 christos {
10069 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10070 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10071 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10072 1.1 christos }
10073 1.1 christos }
10074 1.1 christos {
10075 1.1 christos {
10076 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10077 1.1 christos CPU (h_nbit) = opval;
10078 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10079 1.1 christos }
10080 1.1 christos {
10081 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10082 1.1 christos CPU (h_zbit) = opval;
10083 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10084 1.1 christos }
10085 1.1 christos SET_H_CBIT_MOVE (0);
10086 1.1 christos SET_H_VBIT_MOVE (0);
10087 1.1 christos {
10088 1.1 christos {
10089 1.1 christos BI opval = 0;
10090 1.1 christos CPU (h_xbit) = opval;
10091 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10092 1.1 christos }
10093 1.1 christos {
10094 1.1 christos BI opval = 0;
10095 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10096 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10097 1.1 christos }
10098 1.1 christos }
10099 1.1 christos }
10100 1.1 christos }
10101 1.1 christos
10102 1.1 christos #undef FLD
10103 1.1 christos }
10104 1.1 christos NEXT (vpc);
10105 1.1 christos
10106 1.1 christos CASE (sem, INSN_AND_W_R) : /* and.w $Rs,$Rd */
10107 1.1 christos {
10108 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10109 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10110 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10111 1.1 christos int UNUSED written = 0;
10112 1.1 christos IADDR UNUSED pc = abuf->addr;
10113 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10114 1.1 christos
10115 1.1 christos {
10116 1.1 christos HI tmp_tmpd;
10117 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10118 1.1 christos {
10119 1.1 christos SI tmp_oldregval;
10120 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10121 1.1 christos {
10122 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10123 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10124 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10125 1.1 christos }
10126 1.1 christos }
10127 1.1 christos {
10128 1.1 christos {
10129 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10130 1.1 christos CPU (h_nbit) = opval;
10131 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10132 1.1 christos }
10133 1.1 christos {
10134 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10135 1.1 christos CPU (h_zbit) = opval;
10136 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10137 1.1 christos }
10138 1.1 christos SET_H_CBIT_MOVE (0);
10139 1.1 christos SET_H_VBIT_MOVE (0);
10140 1.1 christos {
10141 1.1 christos {
10142 1.1 christos BI opval = 0;
10143 1.1 christos CPU (h_xbit) = opval;
10144 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10145 1.1 christos }
10146 1.1 christos {
10147 1.1 christos BI opval = 0;
10148 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10149 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10150 1.1 christos }
10151 1.1 christos }
10152 1.1 christos }
10153 1.1 christos }
10154 1.1 christos
10155 1.1 christos #undef FLD
10156 1.1 christos }
10157 1.1 christos NEXT (vpc);
10158 1.1 christos
10159 1.1 christos CASE (sem, INSN_AND_D_R) : /* and.d $Rs,$Rd */
10160 1.1 christos {
10161 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10162 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10163 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10164 1.1 christos int UNUSED written = 0;
10165 1.1 christos IADDR UNUSED pc = abuf->addr;
10166 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10167 1.1 christos
10168 1.1 christos {
10169 1.1 christos SI tmp_tmpd;
10170 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10171 1.1 christos {
10172 1.1 christos SI opval = tmp_tmpd;
10173 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10174 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10175 1.1 christos }
10176 1.1 christos {
10177 1.1 christos {
10178 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10179 1.1 christos CPU (h_nbit) = opval;
10180 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10181 1.1 christos }
10182 1.1 christos {
10183 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10184 1.1 christos CPU (h_zbit) = opval;
10185 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10186 1.1 christos }
10187 1.1 christos SET_H_CBIT_MOVE (0);
10188 1.1 christos SET_H_VBIT_MOVE (0);
10189 1.1 christos {
10190 1.1 christos {
10191 1.1 christos BI opval = 0;
10192 1.1 christos CPU (h_xbit) = opval;
10193 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10194 1.1 christos }
10195 1.1 christos {
10196 1.1 christos BI opval = 0;
10197 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10198 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10199 1.1 christos }
10200 1.1 christos }
10201 1.1 christos }
10202 1.1 christos }
10203 1.1 christos
10204 1.1 christos #undef FLD
10205 1.1 christos }
10206 1.1 christos NEXT (vpc);
10207 1.1 christos
10208 1.1 christos CASE (sem, INSN_AND_M_B_M) : /* and-m.b [${Rs}${inc}],${Rd} */
10209 1.1 christos {
10210 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10211 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10212 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10213 1.1 christos int UNUSED written = 0;
10214 1.1 christos IADDR UNUSED pc = abuf->addr;
10215 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10216 1.1 christos
10217 1.1 christos {
10218 1.1 christos QI tmp_tmpd;
10219 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10220 1.1 christos QI tmp_tmp_mem;
10221 1.1 christos BI tmp_postinc;
10222 1.1 christos tmp_postinc = FLD (f_memmode);
10223 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10224 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10225 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10226 1.1 christos {
10227 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10228 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10229 1.1 christos }
10230 1.1 christos {
10231 1.1 christos SI opval = tmp_addr;
10232 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10233 1.1 christos written |= (1 << 11);
10234 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10235 1.1 christos }
10236 1.1 christos }
10237 1.1 christos }
10238 1.1 christos ; tmp_tmp_mem; }));
10239 1.1 christos {
10240 1.1 christos SI tmp_oldregval;
10241 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10242 1.1 christos {
10243 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10244 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10245 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10246 1.1 christos }
10247 1.1 christos }
10248 1.1 christos {
10249 1.1 christos {
10250 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10251 1.1 christos CPU (h_nbit) = opval;
10252 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10253 1.1 christos }
10254 1.1 christos {
10255 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10256 1.1 christos CPU (h_zbit) = opval;
10257 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10258 1.1 christos }
10259 1.1 christos SET_H_CBIT_MOVE (0);
10260 1.1 christos SET_H_VBIT_MOVE (0);
10261 1.1 christos {
10262 1.1 christos {
10263 1.1 christos BI opval = 0;
10264 1.1 christos CPU (h_xbit) = opval;
10265 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10266 1.1 christos }
10267 1.1 christos {
10268 1.1 christos BI opval = 0;
10269 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10270 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10271 1.1 christos }
10272 1.1 christos }
10273 1.1 christos }
10274 1.1 christos }
10275 1.1 christos
10276 1.1 christos abuf->written = written;
10277 1.1 christos #undef FLD
10278 1.1 christos }
10279 1.1 christos NEXT (vpc);
10280 1.1 christos
10281 1.1 christos CASE (sem, INSN_AND_M_W_M) : /* and-m.w [${Rs}${inc}],${Rd} */
10282 1.1 christos {
10283 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10284 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10285 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10286 1.1 christos int UNUSED written = 0;
10287 1.1 christos IADDR UNUSED pc = abuf->addr;
10288 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10289 1.1 christos
10290 1.1 christos {
10291 1.1 christos HI tmp_tmpd;
10292 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10293 1.1 christos HI tmp_tmp_mem;
10294 1.1 christos BI tmp_postinc;
10295 1.1 christos tmp_postinc = FLD (f_memmode);
10296 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10297 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10298 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10299 1.1 christos {
10300 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10301 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10302 1.1 christos }
10303 1.1 christos {
10304 1.1 christos SI opval = tmp_addr;
10305 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10306 1.1 christos written |= (1 << 11);
10307 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10308 1.1 christos }
10309 1.1 christos }
10310 1.1 christos }
10311 1.1 christos ; tmp_tmp_mem; }));
10312 1.1 christos {
10313 1.1 christos SI tmp_oldregval;
10314 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10315 1.1 christos {
10316 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10317 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10318 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10319 1.1 christos }
10320 1.1 christos }
10321 1.1 christos {
10322 1.1 christos {
10323 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10324 1.1 christos CPU (h_nbit) = opval;
10325 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10326 1.1 christos }
10327 1.1 christos {
10328 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10329 1.1 christos CPU (h_zbit) = opval;
10330 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10331 1.1 christos }
10332 1.1 christos SET_H_CBIT_MOVE (0);
10333 1.1 christos SET_H_VBIT_MOVE (0);
10334 1.1 christos {
10335 1.1 christos {
10336 1.1 christos BI opval = 0;
10337 1.1 christos CPU (h_xbit) = opval;
10338 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10339 1.1 christos }
10340 1.1 christos {
10341 1.1 christos BI opval = 0;
10342 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10343 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10344 1.1 christos }
10345 1.1 christos }
10346 1.1 christos }
10347 1.1 christos }
10348 1.1 christos
10349 1.1 christos abuf->written = written;
10350 1.1 christos #undef FLD
10351 1.1 christos }
10352 1.1 christos NEXT (vpc);
10353 1.1 christos
10354 1.1 christos CASE (sem, INSN_AND_M_D_M) : /* and-m.d [${Rs}${inc}],${Rd} */
10355 1.1 christos {
10356 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10357 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10358 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10359 1.1 christos int UNUSED written = 0;
10360 1.1 christos IADDR UNUSED pc = abuf->addr;
10361 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10362 1.1 christos
10363 1.1 christos {
10364 1.1 christos SI tmp_tmpd;
10365 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10366 1.1 christos SI tmp_tmp_mem;
10367 1.1 christos BI tmp_postinc;
10368 1.1 christos tmp_postinc = FLD (f_memmode);
10369 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10370 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10371 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10372 1.1 christos {
10373 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10374 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10375 1.1 christos }
10376 1.1 christos {
10377 1.1 christos SI opval = tmp_addr;
10378 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10379 1.1 christos written |= (1 << 10);
10380 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10381 1.1 christos }
10382 1.1 christos }
10383 1.1 christos }
10384 1.1 christos ; tmp_tmp_mem; }));
10385 1.1 christos {
10386 1.1 christos SI opval = tmp_tmpd;
10387 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10388 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10389 1.1 christos }
10390 1.1 christos {
10391 1.1 christos {
10392 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10393 1.1 christos CPU (h_nbit) = opval;
10394 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10395 1.1 christos }
10396 1.1 christos {
10397 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10398 1.1 christos CPU (h_zbit) = opval;
10399 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10400 1.1 christos }
10401 1.1 christos SET_H_CBIT_MOVE (0);
10402 1.1 christos SET_H_VBIT_MOVE (0);
10403 1.1 christos {
10404 1.1 christos {
10405 1.1 christos BI opval = 0;
10406 1.1 christos CPU (h_xbit) = opval;
10407 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10408 1.1 christos }
10409 1.1 christos {
10410 1.1 christos BI opval = 0;
10411 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10412 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10413 1.1 christos }
10414 1.1 christos }
10415 1.1 christos }
10416 1.1 christos }
10417 1.1 christos
10418 1.1 christos abuf->written = written;
10419 1.1 christos #undef FLD
10420 1.1 christos }
10421 1.1 christos NEXT (vpc);
10422 1.1 christos
10423 1.1 christos CASE (sem, INSN_ANDCBR) : /* and.b ${sconst8}],${Rd} */
10424 1.1 christos {
10425 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10426 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10427 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
10428 1.1 christos int UNUSED written = 0;
10429 1.1 christos IADDR UNUSED pc = abuf->addr;
10430 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10431 1.1 christos
10432 1.1 christos {
10433 1.1 christos QI tmp_tmpd;
10434 1.1 christos tmp_tmpd = ANDQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
10435 1.1 christos {
10436 1.1 christos SI tmp_oldregval;
10437 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10438 1.1 christos {
10439 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10440 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10441 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10442 1.1 christos }
10443 1.1 christos }
10444 1.1 christos {
10445 1.1 christos {
10446 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10447 1.1 christos CPU (h_nbit) = opval;
10448 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10449 1.1 christos }
10450 1.1 christos {
10451 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10452 1.1 christos CPU (h_zbit) = opval;
10453 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10454 1.1 christos }
10455 1.1 christos SET_H_CBIT_MOVE (0);
10456 1.1 christos SET_H_VBIT_MOVE (0);
10457 1.1 christos {
10458 1.1 christos {
10459 1.1 christos BI opval = 0;
10460 1.1 christos CPU (h_xbit) = opval;
10461 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10462 1.1 christos }
10463 1.1 christos {
10464 1.1 christos BI opval = 0;
10465 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10466 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10467 1.1 christos }
10468 1.1 christos }
10469 1.1 christos }
10470 1.1 christos }
10471 1.1 christos
10472 1.1 christos #undef FLD
10473 1.1 christos }
10474 1.1 christos NEXT (vpc);
10475 1.1 christos
10476 1.1 christos CASE (sem, INSN_ANDCWR) : /* and.w ${sconst16}],${Rd} */
10477 1.1 christos {
10478 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10479 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10480 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
10481 1.1 christos int UNUSED written = 0;
10482 1.1 christos IADDR UNUSED pc = abuf->addr;
10483 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
10484 1.1 christos
10485 1.1 christos {
10486 1.1 christos HI tmp_tmpd;
10487 1.1 christos tmp_tmpd = ANDHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
10488 1.1 christos {
10489 1.1 christos SI tmp_oldregval;
10490 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10491 1.1 christos {
10492 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10493 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10494 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10495 1.1 christos }
10496 1.1 christos }
10497 1.1 christos {
10498 1.1 christos {
10499 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10500 1.1 christos CPU (h_nbit) = opval;
10501 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10502 1.1 christos }
10503 1.1 christos {
10504 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10505 1.1 christos CPU (h_zbit) = opval;
10506 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10507 1.1 christos }
10508 1.1 christos SET_H_CBIT_MOVE (0);
10509 1.1 christos SET_H_VBIT_MOVE (0);
10510 1.1 christos {
10511 1.1 christos {
10512 1.1 christos BI opval = 0;
10513 1.1 christos CPU (h_xbit) = opval;
10514 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10515 1.1 christos }
10516 1.1 christos {
10517 1.1 christos BI opval = 0;
10518 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10519 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10520 1.1 christos }
10521 1.1 christos }
10522 1.1 christos }
10523 1.1 christos }
10524 1.1 christos
10525 1.1 christos #undef FLD
10526 1.1 christos }
10527 1.1 christos NEXT (vpc);
10528 1.1 christos
10529 1.1 christos CASE (sem, INSN_ANDCDR) : /* and.d ${const32}],${Rd} */
10530 1.1 christos {
10531 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10532 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10533 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
10534 1.1 christos int UNUSED written = 0;
10535 1.1 christos IADDR UNUSED pc = abuf->addr;
10536 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
10537 1.1 christos
10538 1.1 christos {
10539 1.1 christos SI tmp_tmpd;
10540 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
10541 1.1 christos {
10542 1.1 christos SI opval = tmp_tmpd;
10543 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10544 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10545 1.1 christos }
10546 1.1 christos {
10547 1.1 christos {
10548 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10549 1.1 christos CPU (h_nbit) = opval;
10550 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10551 1.1 christos }
10552 1.1 christos {
10553 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10554 1.1 christos CPU (h_zbit) = opval;
10555 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10556 1.1 christos }
10557 1.1 christos SET_H_CBIT_MOVE (0);
10558 1.1 christos SET_H_VBIT_MOVE (0);
10559 1.1 christos {
10560 1.1 christos {
10561 1.1 christos BI opval = 0;
10562 1.1 christos CPU (h_xbit) = opval;
10563 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10564 1.1 christos }
10565 1.1 christos {
10566 1.1 christos BI opval = 0;
10567 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10568 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10569 1.1 christos }
10570 1.1 christos }
10571 1.1 christos }
10572 1.1 christos }
10573 1.1 christos
10574 1.1 christos #undef FLD
10575 1.1 christos }
10576 1.1 christos NEXT (vpc);
10577 1.1 christos
10578 1.1 christos CASE (sem, INSN_ANDQ) : /* andq $i,$Rd */
10579 1.1 christos {
10580 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10581 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10582 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
10583 1.1 christos int UNUSED written = 0;
10584 1.1 christos IADDR UNUSED pc = abuf->addr;
10585 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10586 1.1 christos
10587 1.1 christos {
10588 1.1 christos SI tmp_tmpd;
10589 1.1 christos tmp_tmpd = ANDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
10590 1.1 christos {
10591 1.1 christos SI opval = tmp_tmpd;
10592 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10593 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10594 1.1 christos }
10595 1.1 christos {
10596 1.1 christos {
10597 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10598 1.1 christos CPU (h_nbit) = opval;
10599 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10600 1.1 christos }
10601 1.1 christos {
10602 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10603 1.1 christos CPU (h_zbit) = opval;
10604 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10605 1.1 christos }
10606 1.1 christos SET_H_CBIT_MOVE (0);
10607 1.1 christos SET_H_VBIT_MOVE (0);
10608 1.1 christos {
10609 1.1 christos {
10610 1.1 christos BI opval = 0;
10611 1.1 christos CPU (h_xbit) = opval;
10612 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10613 1.1 christos }
10614 1.1 christos {
10615 1.1 christos BI opval = 0;
10616 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10617 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10618 1.1 christos }
10619 1.1 christos }
10620 1.1 christos }
10621 1.1 christos }
10622 1.1 christos
10623 1.1 christos #undef FLD
10624 1.1 christos }
10625 1.1 christos NEXT (vpc);
10626 1.1 christos
10627 1.1 christos CASE (sem, INSN_ORR_B_R) : /* orr.b $Rs,$Rd */
10628 1.1 christos {
10629 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10630 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10631 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10632 1.1 christos int UNUSED written = 0;
10633 1.1 christos IADDR UNUSED pc = abuf->addr;
10634 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10635 1.1 christos
10636 1.1 christos {
10637 1.1 christos QI tmp_tmpd;
10638 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10639 1.1 christos {
10640 1.1 christos SI tmp_oldregval;
10641 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10642 1.1 christos {
10643 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10644 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10645 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10646 1.1 christos }
10647 1.1 christos }
10648 1.1 christos {
10649 1.1 christos {
10650 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10651 1.1 christos CPU (h_nbit) = opval;
10652 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10653 1.1 christos }
10654 1.1 christos {
10655 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10656 1.1 christos CPU (h_zbit) = opval;
10657 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10658 1.1 christos }
10659 1.1 christos SET_H_CBIT_MOVE (0);
10660 1.1 christos SET_H_VBIT_MOVE (0);
10661 1.1 christos {
10662 1.1 christos {
10663 1.1 christos BI opval = 0;
10664 1.1 christos CPU (h_xbit) = opval;
10665 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10666 1.1 christos }
10667 1.1 christos {
10668 1.1 christos BI opval = 0;
10669 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10670 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10671 1.1 christos }
10672 1.1 christos }
10673 1.1 christos }
10674 1.1 christos }
10675 1.1 christos
10676 1.1 christos #undef FLD
10677 1.1 christos }
10678 1.1 christos NEXT (vpc);
10679 1.1 christos
10680 1.1 christos CASE (sem, INSN_ORR_W_R) : /* orr.w $Rs,$Rd */
10681 1.1 christos {
10682 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10683 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10684 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10685 1.1 christos int UNUSED written = 0;
10686 1.1 christos IADDR UNUSED pc = abuf->addr;
10687 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10688 1.1 christos
10689 1.1 christos {
10690 1.1 christos HI tmp_tmpd;
10691 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10692 1.1 christos {
10693 1.1 christos SI tmp_oldregval;
10694 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
10695 1.1 christos {
10696 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10697 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10698 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10699 1.1 christos }
10700 1.1 christos }
10701 1.1 christos {
10702 1.1 christos {
10703 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10704 1.1 christos CPU (h_nbit) = opval;
10705 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10706 1.1 christos }
10707 1.1 christos {
10708 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10709 1.1 christos CPU (h_zbit) = opval;
10710 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10711 1.1 christos }
10712 1.1 christos SET_H_CBIT_MOVE (0);
10713 1.1 christos SET_H_VBIT_MOVE (0);
10714 1.1 christos {
10715 1.1 christos {
10716 1.1 christos BI opval = 0;
10717 1.1 christos CPU (h_xbit) = opval;
10718 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10719 1.1 christos }
10720 1.1 christos {
10721 1.1 christos BI opval = 0;
10722 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10723 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10724 1.1 christos }
10725 1.1 christos }
10726 1.1 christos }
10727 1.1 christos }
10728 1.1 christos
10729 1.1 christos #undef FLD
10730 1.1 christos }
10731 1.1 christos NEXT (vpc);
10732 1.1 christos
10733 1.1 christos CASE (sem, INSN_ORR_D_R) : /* orr.d $Rs,$Rd */
10734 1.1 christos {
10735 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10736 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10737 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
10738 1.1 christos int UNUSED written = 0;
10739 1.1 christos IADDR UNUSED pc = abuf->addr;
10740 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10741 1.1 christos
10742 1.1 christos {
10743 1.1 christos SI tmp_tmpd;
10744 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
10745 1.1 christos {
10746 1.1 christos SI opval = tmp_tmpd;
10747 1.1 christos SET_H_GR (FLD (f_operand2), opval);
10748 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10749 1.1 christos }
10750 1.1 christos {
10751 1.1 christos {
10752 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10753 1.1 christos CPU (h_nbit) = opval;
10754 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10755 1.1 christos }
10756 1.1 christos {
10757 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10758 1.1 christos CPU (h_zbit) = opval;
10759 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10760 1.1 christos }
10761 1.1 christos SET_H_CBIT_MOVE (0);
10762 1.1 christos SET_H_VBIT_MOVE (0);
10763 1.1 christos {
10764 1.1 christos {
10765 1.1 christos BI opval = 0;
10766 1.1 christos CPU (h_xbit) = opval;
10767 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10768 1.1 christos }
10769 1.1 christos {
10770 1.1 christos BI opval = 0;
10771 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10772 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10773 1.1 christos }
10774 1.1 christos }
10775 1.1 christos }
10776 1.1 christos }
10777 1.1 christos
10778 1.1 christos #undef FLD
10779 1.1 christos }
10780 1.1 christos NEXT (vpc);
10781 1.1 christos
10782 1.1 christos CASE (sem, INSN_OR_M_B_M) : /* or-m.b [${Rs}${inc}],${Rd} */
10783 1.1 christos {
10784 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10785 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10786 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10787 1.1 christos int UNUSED written = 0;
10788 1.1 christos IADDR UNUSED pc = abuf->addr;
10789 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10790 1.1 christos
10791 1.1 christos {
10792 1.1 christos QI tmp_tmpd;
10793 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10794 1.1 christos QI tmp_tmp_mem;
10795 1.1 christos BI tmp_postinc;
10796 1.1 christos tmp_postinc = FLD (f_memmode);
10797 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10798 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
10799 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10800 1.1 christos {
10801 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10802 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
10803 1.1 christos }
10804 1.1 christos {
10805 1.1 christos SI opval = tmp_addr;
10806 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10807 1.1 christos written |= (1 << 11);
10808 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10809 1.1 christos }
10810 1.1 christos }
10811 1.1 christos }
10812 1.1 christos ; tmp_tmp_mem; }));
10813 1.1 christos {
10814 1.1 christos SI tmp_oldregval;
10815 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10816 1.1 christos {
10817 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
10818 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10819 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10820 1.1 christos }
10821 1.1 christos }
10822 1.1 christos {
10823 1.1 christos {
10824 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
10825 1.1 christos CPU (h_nbit) = opval;
10826 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10827 1.1 christos }
10828 1.1 christos {
10829 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10830 1.1 christos CPU (h_zbit) = opval;
10831 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10832 1.1 christos }
10833 1.1 christos SET_H_CBIT_MOVE (0);
10834 1.1 christos SET_H_VBIT_MOVE (0);
10835 1.1 christos {
10836 1.1 christos {
10837 1.1 christos BI opval = 0;
10838 1.1 christos CPU (h_xbit) = opval;
10839 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10840 1.1 christos }
10841 1.1 christos {
10842 1.1 christos BI opval = 0;
10843 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10844 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10845 1.1 christos }
10846 1.1 christos }
10847 1.1 christos }
10848 1.1 christos }
10849 1.1 christos
10850 1.1 christos abuf->written = written;
10851 1.1 christos #undef FLD
10852 1.1 christos }
10853 1.1 christos NEXT (vpc);
10854 1.1 christos
10855 1.1 christos CASE (sem, INSN_OR_M_W_M) : /* or-m.w [${Rs}${inc}],${Rd} */
10856 1.1 christos {
10857 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10858 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10859 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10860 1.1 christos int UNUSED written = 0;
10861 1.1 christos IADDR UNUSED pc = abuf->addr;
10862 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10863 1.1 christos
10864 1.1 christos {
10865 1.1 christos HI tmp_tmpd;
10866 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10867 1.1 christos HI tmp_tmp_mem;
10868 1.1 christos BI tmp_postinc;
10869 1.1 christos tmp_postinc = FLD (f_memmode);
10870 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10871 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
10872 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10873 1.1 christos {
10874 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10875 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
10876 1.1 christos }
10877 1.1 christos {
10878 1.1 christos SI opval = tmp_addr;
10879 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10880 1.1 christos written |= (1 << 11);
10881 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10882 1.1 christos }
10883 1.1 christos }
10884 1.1 christos }
10885 1.1 christos ; tmp_tmp_mem; }));
10886 1.1 christos {
10887 1.1 christos SI tmp_oldregval;
10888 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))));
10889 1.1 christos {
10890 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
10891 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10892 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10893 1.1 christos }
10894 1.1 christos }
10895 1.1 christos {
10896 1.1 christos {
10897 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
10898 1.1 christos CPU (h_nbit) = opval;
10899 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10900 1.1 christos }
10901 1.1 christos {
10902 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10903 1.1 christos CPU (h_zbit) = opval;
10904 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10905 1.1 christos }
10906 1.1 christos SET_H_CBIT_MOVE (0);
10907 1.1 christos SET_H_VBIT_MOVE (0);
10908 1.1 christos {
10909 1.1 christos {
10910 1.1 christos BI opval = 0;
10911 1.1 christos CPU (h_xbit) = opval;
10912 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10913 1.1 christos }
10914 1.1 christos {
10915 1.1 christos BI opval = 0;
10916 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10917 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10918 1.1 christos }
10919 1.1 christos }
10920 1.1 christos }
10921 1.1 christos }
10922 1.1 christos
10923 1.1 christos abuf->written = written;
10924 1.1 christos #undef FLD
10925 1.1 christos }
10926 1.1 christos NEXT (vpc);
10927 1.1 christos
10928 1.1 christos CASE (sem, INSN_OR_M_D_M) : /* or-m.d [${Rs}${inc}],${Rd} */
10929 1.1 christos {
10930 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
10931 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
10932 1.1 christos #define FLD(f) abuf->fields.sfmt_add_m_b_m.f
10933 1.1 christos int UNUSED written = 0;
10934 1.1 christos IADDR UNUSED pc = abuf->addr;
10935 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
10936 1.1 christos
10937 1.1 christos {
10938 1.1 christos SI tmp_tmpd;
10939 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), ({ SI tmp_addr;
10940 1.1 christos SI tmp_tmp_mem;
10941 1.1 christos BI tmp_postinc;
10942 1.1 christos tmp_postinc = FLD (f_memmode);
10943 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
10944 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
10945 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
10946 1.1 christos {
10947 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
10948 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
10949 1.1 christos }
10950 1.1 christos {
10951 1.1 christos SI opval = tmp_addr;
10952 1.1 christos SET_H_GR (FLD (f_operand1), opval);
10953 1.1 christos written |= (1 << 10);
10954 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10955 1.1 christos }
10956 1.1 christos }
10957 1.1 christos }
10958 1.1 christos ; tmp_tmp_mem; }));
10959 1.1 christos {
10960 1.1 christos SI opval = tmp_tmpd;
10961 1.1 christos SET_H_GR (((ANDIF (GET_H_INSN_PREFIXED_P (), NOTSI (FLD (f_memmode)))) ? (FLD (f_operand1)) : (FLD (f_operand2))), opval);
10962 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
10963 1.1 christos }
10964 1.1 christos {
10965 1.1 christos {
10966 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
10967 1.1 christos CPU (h_nbit) = opval;
10968 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
10969 1.1 christos }
10970 1.1 christos {
10971 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
10972 1.1 christos CPU (h_zbit) = opval;
10973 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
10974 1.1 christos }
10975 1.1 christos SET_H_CBIT_MOVE (0);
10976 1.1 christos SET_H_VBIT_MOVE (0);
10977 1.1 christos {
10978 1.1 christos {
10979 1.1 christos BI opval = 0;
10980 1.1 christos CPU (h_xbit) = opval;
10981 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
10982 1.1 christos }
10983 1.1 christos {
10984 1.1 christos BI opval = 0;
10985 1.1 christos SET_H_INSN_PREFIXED_P (opval);
10986 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
10987 1.1 christos }
10988 1.1 christos }
10989 1.1 christos }
10990 1.1 christos }
10991 1.1 christos
10992 1.1 christos abuf->written = written;
10993 1.1 christos #undef FLD
10994 1.1 christos }
10995 1.1 christos NEXT (vpc);
10996 1.1 christos
10997 1.1 christos CASE (sem, INSN_ORCBR) : /* or.b ${sconst8}],${Rd} */
10998 1.1 christos {
10999 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11000 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11001 1.1 christos #define FLD(f) abuf->fields.sfmt_addcbr.f
11002 1.1 christos int UNUSED written = 0;
11003 1.1 christos IADDR UNUSED pc = abuf->addr;
11004 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11005 1.1 christos
11006 1.1 christos {
11007 1.1 christos QI tmp_tmpd;
11008 1.1 christos tmp_tmpd = ORQI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__byte));
11009 1.1 christos {
11010 1.1 christos SI tmp_oldregval;
11011 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11012 1.1 christos {
11013 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11014 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11015 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11016 1.1 christos }
11017 1.1 christos }
11018 1.1 christos {
11019 1.1 christos {
11020 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11021 1.1 christos CPU (h_nbit) = opval;
11022 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11023 1.1 christos }
11024 1.1 christos {
11025 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11026 1.1 christos CPU (h_zbit) = opval;
11027 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11028 1.1 christos }
11029 1.1 christos SET_H_CBIT_MOVE (0);
11030 1.1 christos SET_H_VBIT_MOVE (0);
11031 1.1 christos {
11032 1.1 christos {
11033 1.1 christos BI opval = 0;
11034 1.1 christos CPU (h_xbit) = opval;
11035 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11036 1.1 christos }
11037 1.1 christos {
11038 1.1 christos BI opval = 0;
11039 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11040 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11041 1.1 christos }
11042 1.1 christos }
11043 1.1 christos }
11044 1.1 christos }
11045 1.1 christos
11046 1.1 christos #undef FLD
11047 1.1 christos }
11048 1.1 christos NEXT (vpc);
11049 1.1 christos
11050 1.1 christos CASE (sem, INSN_ORCWR) : /* or.w ${sconst16}],${Rd} */
11051 1.1 christos {
11052 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11053 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11054 1.1 christos #define FLD(f) abuf->fields.sfmt_addcwr.f
11055 1.1 christos int UNUSED written = 0;
11056 1.1 christos IADDR UNUSED pc = abuf->addr;
11057 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
11058 1.1 christos
11059 1.1 christos {
11060 1.1 christos HI tmp_tmpd;
11061 1.1 christos tmp_tmpd = ORHI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__word));
11062 1.1 christos {
11063 1.1 christos SI tmp_oldregval;
11064 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11065 1.1 christos {
11066 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11067 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11068 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11069 1.1 christos }
11070 1.1 christos }
11071 1.1 christos {
11072 1.1 christos {
11073 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11074 1.1 christos CPU (h_nbit) = opval;
11075 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11076 1.1 christos }
11077 1.1 christos {
11078 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11079 1.1 christos CPU (h_zbit) = opval;
11080 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11081 1.1 christos }
11082 1.1 christos SET_H_CBIT_MOVE (0);
11083 1.1 christos SET_H_VBIT_MOVE (0);
11084 1.1 christos {
11085 1.1 christos {
11086 1.1 christos BI opval = 0;
11087 1.1 christos CPU (h_xbit) = opval;
11088 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11089 1.1 christos }
11090 1.1 christos {
11091 1.1 christos BI opval = 0;
11092 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11093 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11094 1.1 christos }
11095 1.1 christos }
11096 1.1 christos }
11097 1.1 christos }
11098 1.1 christos
11099 1.1 christos #undef FLD
11100 1.1 christos }
11101 1.1 christos NEXT (vpc);
11102 1.1 christos
11103 1.1 christos CASE (sem, INSN_ORCDR) : /* or.d ${const32}],${Rd} */
11104 1.1 christos {
11105 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11106 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11107 1.1 christos #define FLD(f) abuf->fields.sfmt_addcdr.f
11108 1.1 christos int UNUSED written = 0;
11109 1.1 christos IADDR UNUSED pc = abuf->addr;
11110 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
11111 1.1 christos
11112 1.1 christos {
11113 1.1 christos SI tmp_tmpd;
11114 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
11115 1.1 christos {
11116 1.1 christos SI opval = tmp_tmpd;
11117 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11118 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11119 1.1 christos }
11120 1.1 christos {
11121 1.1 christos {
11122 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11123 1.1 christos CPU (h_nbit) = opval;
11124 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11125 1.1 christos }
11126 1.1 christos {
11127 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11128 1.1 christos CPU (h_zbit) = opval;
11129 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11130 1.1 christos }
11131 1.1 christos SET_H_CBIT_MOVE (0);
11132 1.1 christos SET_H_VBIT_MOVE (0);
11133 1.1 christos {
11134 1.1 christos {
11135 1.1 christos BI opval = 0;
11136 1.1 christos CPU (h_xbit) = opval;
11137 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11138 1.1 christos }
11139 1.1 christos {
11140 1.1 christos BI opval = 0;
11141 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11142 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11143 1.1 christos }
11144 1.1 christos }
11145 1.1 christos }
11146 1.1 christos }
11147 1.1 christos
11148 1.1 christos #undef FLD
11149 1.1 christos }
11150 1.1 christos NEXT (vpc);
11151 1.1 christos
11152 1.1 christos CASE (sem, INSN_ORQ) : /* orq $i,$Rd */
11153 1.1 christos {
11154 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11155 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11156 1.1 christos #define FLD(f) abuf->fields.sfmt_andq.f
11157 1.1 christos int UNUSED written = 0;
11158 1.1 christos IADDR UNUSED pc = abuf->addr;
11159 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11160 1.1 christos
11161 1.1 christos {
11162 1.1 christos SI tmp_tmpd;
11163 1.1 christos tmp_tmpd = ORSI (GET_H_GR (FLD (f_operand2)), FLD (f_s6));
11164 1.1 christos {
11165 1.1 christos SI opval = tmp_tmpd;
11166 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11167 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11168 1.1 christos }
11169 1.1 christos {
11170 1.1 christos {
11171 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11172 1.1 christos CPU (h_nbit) = opval;
11173 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11174 1.1 christos }
11175 1.1 christos {
11176 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11177 1.1 christos CPU (h_zbit) = opval;
11178 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11179 1.1 christos }
11180 1.1 christos SET_H_CBIT_MOVE (0);
11181 1.1 christos SET_H_VBIT_MOVE (0);
11182 1.1 christos {
11183 1.1 christos {
11184 1.1 christos BI opval = 0;
11185 1.1 christos CPU (h_xbit) = opval;
11186 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11187 1.1 christos }
11188 1.1 christos {
11189 1.1 christos BI opval = 0;
11190 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11191 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11192 1.1 christos }
11193 1.1 christos }
11194 1.1 christos }
11195 1.1 christos }
11196 1.1 christos
11197 1.1 christos #undef FLD
11198 1.1 christos }
11199 1.1 christos NEXT (vpc);
11200 1.1 christos
11201 1.1 christos CASE (sem, INSN_XOR) : /* xor $Rs,$Rd */
11202 1.1 christos {
11203 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11204 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11205 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
11206 1.1 christos int UNUSED written = 0;
11207 1.1 christos IADDR UNUSED pc = abuf->addr;
11208 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11209 1.1 christos
11210 1.1 christos {
11211 1.1 christos SI tmp_tmpd;
11212 1.1 christos tmp_tmpd = XORSI (GET_H_GR (FLD (f_operand2)), GET_H_GR (FLD (f_operand1)));
11213 1.1 christos {
11214 1.1 christos SI opval = tmp_tmpd;
11215 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11216 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11217 1.1 christos }
11218 1.1 christos {
11219 1.1 christos {
11220 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11221 1.1 christos CPU (h_nbit) = opval;
11222 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11223 1.1 christos }
11224 1.1 christos {
11225 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11226 1.1 christos CPU (h_zbit) = opval;
11227 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11228 1.1 christos }
11229 1.1 christos SET_H_CBIT_MOVE (0);
11230 1.1 christos SET_H_VBIT_MOVE (0);
11231 1.1 christos {
11232 1.1 christos {
11233 1.1 christos BI opval = 0;
11234 1.1 christos CPU (h_xbit) = opval;
11235 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11236 1.1 christos }
11237 1.1 christos {
11238 1.1 christos BI opval = 0;
11239 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11240 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11241 1.1 christos }
11242 1.1 christos }
11243 1.1 christos }
11244 1.1 christos }
11245 1.1 christos
11246 1.1 christos #undef FLD
11247 1.1 christos }
11248 1.1 christos NEXT (vpc);
11249 1.1 christos
11250 1.1 christos CASE (sem, INSN_SWAP) : /* swap${swapoption} ${Rs} */
11251 1.1 christos {
11252 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11253 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11254 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
11255 1.1 christos int UNUSED written = 0;
11256 1.1 christos IADDR UNUSED pc = abuf->addr;
11257 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11258 1.1 christos
11259 1.1 christos {
11260 1.1 christos SI tmp_tmps;
11261 1.1 christos SI tmp_tmpd;
11262 1.1 christos tmp_tmps = GET_H_GR (FLD (f_operand1));
11263 1.1 christos tmp_tmpd = ({ SI tmp_tmpcode;
11264 1.1 christos SI tmp_tmpval;
11265 1.1 christos SI tmp_tmpres;
11266 1.1 christos tmp_tmpcode = FLD (f_operand2);
11267 1.1 christos ; tmp_tmpval = tmp_tmps;
11268 1.1 christos ; if (EQSI (tmp_tmpcode, 0)) {
11269 1.1 christos tmp_tmpres = (cgen_rtx_error (current_cpu, "SWAP without swap modifier isn't implemented"), 0);
11270 1.1 christos }
11271 1.1 christos else if (EQSI (tmp_tmpcode, 1)) {
11272 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11273 1.1 christos tmp_tmpr = tmp_tmpval;
11274 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11275 1.1 christos }
11276 1.1 christos else if (EQSI (tmp_tmpcode, 2)) {
11277 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11278 1.1 christos tmp_tmpb = tmp_tmpval;
11279 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11280 1.1 christos }
11281 1.1 christos else if (EQSI (tmp_tmpcode, 3)) {
11282 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11283 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11284 1.1 christos tmp_tmpb = tmp_tmpval;
11285 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11286 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11287 1.1 christos }
11288 1.1 christos else if (EQSI (tmp_tmpcode, 4)) {
11289 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11290 1.1 christos tmp_tmpb = tmp_tmpval;
11291 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11292 1.1 christos }
11293 1.1 christos else if (EQSI (tmp_tmpcode, 5)) {
11294 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11295 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11296 1.1 christos tmp_tmpb = tmp_tmpval;
11297 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11298 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11299 1.1 christos }
11300 1.1 christos else if (EQSI (tmp_tmpcode, 6)) {
11301 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11302 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11303 1.1 christos tmp_tmpb = tmp_tmpval;
11304 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11305 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11306 1.1 christos }
11307 1.1 christos else if (EQSI (tmp_tmpcode, 7)) {
11308 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11309 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11310 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11311 1.1 christos tmp_tmpb = tmp_tmpval;
11312 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11313 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11314 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11315 1.1 christos }
11316 1.1 christos else if (EQSI (tmp_tmpcode, 8)) {
11317 1.1 christos tmp_tmpres = INVSI (tmp_tmpval);
11318 1.1 christos }
11319 1.1 christos else if (EQSI (tmp_tmpcode, 9)) {
11320 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11321 1.1 christos tmp_tmpr = INVSI (tmp_tmpval);
11322 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11323 1.1 christos }
11324 1.1 christos else if (EQSI (tmp_tmpcode, 10)) {
11325 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11326 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11327 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11328 1.1 christos }
11329 1.1 christos else if (EQSI (tmp_tmpcode, 11)) {
11330 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11331 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11332 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11333 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11334 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11335 1.1 christos }
11336 1.1 christos else if (EQSI (tmp_tmpcode, 12)) {
11337 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11338 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11339 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11340 1.1 christos }
11341 1.1 christos else if (EQSI (tmp_tmpcode, 13)) {
11342 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11343 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11344 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11345 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11346 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11347 1.1 christos }
11348 1.1 christos else if (EQSI (tmp_tmpcode, 14)) {
11349 1.1 christos tmp_tmpres = ({ SI tmp_tmpb;
11350 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11351 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11352 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11353 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11354 1.1 christos }
11355 1.1 christos else if (EQSI (tmp_tmpcode, 15)) {
11356 1.1 christos tmp_tmpres = ({ SI tmp_tmpr;
11357 1.1 christos tmp_tmpr = ({ SI tmp_tmpb;
11358 1.1 christos tmp_tmpb = ({ SI tmp_tmpb;
11359 1.1 christos tmp_tmpb = INVSI (tmp_tmpval);
11360 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 16), 0xffff0000), ANDSI (SRLSI (tmp_tmpb, 16), 65535)); });
11361 1.1 christos ; ORSI (ANDSI (SLLSI (tmp_tmpb, 8), 0xff00ff00), ANDSI (SRLSI (tmp_tmpb, 8), 16711935)); });
11362 1.1 christos ; ORSI (SLLSI (ANDSI (tmp_tmpr, 16843009), 7), ORSI (SLLSI (ANDSI (tmp_tmpr, 33686018), 5), ORSI (SLLSI (ANDSI (tmp_tmpr, 67372036), 3), ORSI (SLLSI (ANDSI (tmp_tmpr, 134744072), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 269488144), 1), ORSI (SRLSI (ANDSI (tmp_tmpr, 538976288), 3), ORSI (SRLSI (ANDSI (tmp_tmpr, 1077952576), 5), SRLSI (ANDSI (tmp_tmpr, 0x80808080), 7)))))))); });
11363 1.1 christos }
11364 1.1 christos ; tmp_tmpres; });
11365 1.1 christos {
11366 1.1 christos SI opval = tmp_tmpd;
11367 1.1 christos SET_H_GR (FLD (f_operand1), opval);
11368 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11369 1.1 christos }
11370 1.1 christos {
11371 1.1 christos {
11372 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11373 1.1 christos CPU (h_nbit) = opval;
11374 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11375 1.1 christos }
11376 1.1 christos {
11377 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11378 1.1 christos CPU (h_zbit) = opval;
11379 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11380 1.1 christos }
11381 1.1 christos SET_H_CBIT_MOVE (0);
11382 1.1 christos SET_H_VBIT_MOVE (0);
11383 1.1 christos {
11384 1.1 christos {
11385 1.1 christos BI opval = 0;
11386 1.1 christos CPU (h_xbit) = opval;
11387 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11388 1.1 christos }
11389 1.1 christos {
11390 1.1 christos BI opval = 0;
11391 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11392 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11393 1.1 christos }
11394 1.1 christos }
11395 1.1 christos }
11396 1.1 christos }
11397 1.1 christos
11398 1.1 christos #undef FLD
11399 1.1 christos }
11400 1.1 christos NEXT (vpc);
11401 1.1 christos
11402 1.1 christos CASE (sem, INSN_ASRR_B_R) : /* asrr.b $Rs,$Rd */
11403 1.1 christos {
11404 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11405 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11406 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11407 1.1 christos int UNUSED written = 0;
11408 1.1 christos IADDR UNUSED pc = abuf->addr;
11409 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11410 1.1 christos
11411 1.1 christos {
11412 1.1 christos QI tmp_tmpd;
11413 1.1 christos SI tmp_cnt1;
11414 1.1 christos SI tmp_cnt2;
11415 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11416 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11417 1.1 christos tmp_tmpd = SRASI (EXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11418 1.1 christos {
11419 1.1 christos SI tmp_oldregval;
11420 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11421 1.1 christos {
11422 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11423 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11424 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11425 1.1 christos }
11426 1.1 christos }
11427 1.1 christos {
11428 1.1 christos {
11429 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11430 1.1 christos CPU (h_nbit) = opval;
11431 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11432 1.1 christos }
11433 1.1 christos {
11434 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11435 1.1 christos CPU (h_zbit) = opval;
11436 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11437 1.1 christos }
11438 1.1 christos SET_H_CBIT_MOVE (0);
11439 1.1 christos SET_H_VBIT_MOVE (0);
11440 1.1 christos {
11441 1.1 christos {
11442 1.1 christos BI opval = 0;
11443 1.1 christos CPU (h_xbit) = opval;
11444 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11445 1.1 christos }
11446 1.1 christos {
11447 1.1 christos BI opval = 0;
11448 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11449 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11450 1.1 christos }
11451 1.1 christos }
11452 1.1 christos }
11453 1.1 christos }
11454 1.1 christos
11455 1.1 christos #undef FLD
11456 1.1 christos }
11457 1.1 christos NEXT (vpc);
11458 1.1 christos
11459 1.1 christos CASE (sem, INSN_ASRR_W_R) : /* asrr.w $Rs,$Rd */
11460 1.1 christos {
11461 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11462 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11463 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11464 1.1 christos int UNUSED written = 0;
11465 1.1 christos IADDR UNUSED pc = abuf->addr;
11466 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11467 1.1 christos
11468 1.1 christos {
11469 1.1 christos HI tmp_tmpd;
11470 1.1 christos SI tmp_cnt1;
11471 1.1 christos SI tmp_cnt2;
11472 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11473 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11474 1.1 christos tmp_tmpd = SRASI (EXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11475 1.1 christos {
11476 1.1 christos SI tmp_oldregval;
11477 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11478 1.1 christos {
11479 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11480 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11481 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11482 1.1 christos }
11483 1.1 christos }
11484 1.1 christos {
11485 1.1 christos {
11486 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11487 1.1 christos CPU (h_nbit) = opval;
11488 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11489 1.1 christos }
11490 1.1 christos {
11491 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11492 1.1 christos CPU (h_zbit) = opval;
11493 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11494 1.1 christos }
11495 1.1 christos SET_H_CBIT_MOVE (0);
11496 1.1 christos SET_H_VBIT_MOVE (0);
11497 1.1 christos {
11498 1.1 christos {
11499 1.1 christos BI opval = 0;
11500 1.1 christos CPU (h_xbit) = opval;
11501 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11502 1.1 christos }
11503 1.1 christos {
11504 1.1 christos BI opval = 0;
11505 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11506 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11507 1.1 christos }
11508 1.1 christos }
11509 1.1 christos }
11510 1.1 christos }
11511 1.1 christos
11512 1.1 christos #undef FLD
11513 1.1 christos }
11514 1.1 christos NEXT (vpc);
11515 1.1 christos
11516 1.1 christos CASE (sem, INSN_ASRR_D_R) : /* asrr.d $Rs,$Rd */
11517 1.1 christos {
11518 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11519 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11520 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11521 1.1 christos int UNUSED written = 0;
11522 1.1 christos IADDR UNUSED pc = abuf->addr;
11523 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11524 1.1 christos
11525 1.1 christos {
11526 1.1 christos SI tmp_tmpd;
11527 1.1 christos SI tmp_cnt1;
11528 1.1 christos SI tmp_cnt2;
11529 1.1 christos tmp_cnt1 = GET_H_GR (FLD (f_operand1));
11530 1.1 christos tmp_cnt2 = ((NESI (ANDSI (tmp_cnt1, 32), 0)) ? (31) : (ANDSI (tmp_cnt1, 31)));
11531 1.1 christos tmp_tmpd = SRASI (EXTSISI (TRUNCSISI (GET_H_GR (FLD (f_operand2)))), tmp_cnt2);
11532 1.1 christos {
11533 1.1 christos SI opval = tmp_tmpd;
11534 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11535 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11536 1.1 christos }
11537 1.1 christos {
11538 1.1 christos {
11539 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11540 1.1 christos CPU (h_nbit) = opval;
11541 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11542 1.1 christos }
11543 1.1 christos {
11544 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11545 1.1 christos CPU (h_zbit) = opval;
11546 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11547 1.1 christos }
11548 1.1 christos SET_H_CBIT_MOVE (0);
11549 1.1 christos SET_H_VBIT_MOVE (0);
11550 1.1 christos {
11551 1.1 christos {
11552 1.1 christos BI opval = 0;
11553 1.1 christos CPU (h_xbit) = opval;
11554 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11555 1.1 christos }
11556 1.1 christos {
11557 1.1 christos BI opval = 0;
11558 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11559 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11560 1.1 christos }
11561 1.1 christos }
11562 1.1 christos }
11563 1.1 christos }
11564 1.1 christos
11565 1.1 christos #undef FLD
11566 1.1 christos }
11567 1.1 christos NEXT (vpc);
11568 1.1 christos
11569 1.1 christos CASE (sem, INSN_ASRQ) : /* asrq $c,${Rd} */
11570 1.1 christos {
11571 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11572 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11573 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11574 1.1 christos int UNUSED written = 0;
11575 1.1 christos IADDR UNUSED pc = abuf->addr;
11576 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11577 1.1 christos
11578 1.1 christos {
11579 1.1 christos SI tmp_tmpd;
11580 1.1 christos tmp_tmpd = SRASI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11581 1.1 christos {
11582 1.1 christos SI opval = tmp_tmpd;
11583 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11584 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11585 1.1 christos }
11586 1.1 christos {
11587 1.1 christos {
11588 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11589 1.1 christos CPU (h_nbit) = opval;
11590 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11591 1.1 christos }
11592 1.1 christos {
11593 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11594 1.1 christos CPU (h_zbit) = opval;
11595 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11596 1.1 christos }
11597 1.1 christos SET_H_CBIT_MOVE (0);
11598 1.1 christos SET_H_VBIT_MOVE (0);
11599 1.1 christos {
11600 1.1 christos {
11601 1.1 christos BI opval = 0;
11602 1.1 christos CPU (h_xbit) = opval;
11603 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11604 1.1 christos }
11605 1.1 christos {
11606 1.1 christos BI opval = 0;
11607 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11608 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11609 1.1 christos }
11610 1.1 christos }
11611 1.1 christos }
11612 1.1 christos }
11613 1.1 christos
11614 1.1 christos #undef FLD
11615 1.1 christos }
11616 1.1 christos NEXT (vpc);
11617 1.1 christos
11618 1.1 christos CASE (sem, INSN_LSRR_B_R) : /* lsrr.b $Rs,$Rd */
11619 1.1 christos {
11620 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11621 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11622 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11623 1.1 christos int UNUSED written = 0;
11624 1.1 christos IADDR UNUSED pc = abuf->addr;
11625 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11626 1.1 christos
11627 1.1 christos {
11628 1.1 christos SI tmp_tmpd;
11629 1.1 christos SI tmp_cnt;
11630 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11631 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))));
11632 1.1 christos {
11633 1.1 christos SI tmp_oldregval;
11634 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11635 1.1 christos {
11636 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11637 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11638 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11639 1.1 christos }
11640 1.1 christos }
11641 1.1 christos {
11642 1.1 christos {
11643 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11644 1.1 christos CPU (h_nbit) = opval;
11645 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11646 1.1 christos }
11647 1.1 christos {
11648 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11649 1.1 christos CPU (h_zbit) = opval;
11650 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11651 1.1 christos }
11652 1.1 christos SET_H_CBIT_MOVE (0);
11653 1.1 christos SET_H_VBIT_MOVE (0);
11654 1.1 christos {
11655 1.1 christos {
11656 1.1 christos BI opval = 0;
11657 1.1 christos CPU (h_xbit) = opval;
11658 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11659 1.1 christos }
11660 1.1 christos {
11661 1.1 christos BI opval = 0;
11662 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11663 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11664 1.1 christos }
11665 1.1 christos }
11666 1.1 christos }
11667 1.1 christos }
11668 1.1 christos
11669 1.1 christos #undef FLD
11670 1.1 christos }
11671 1.1 christos NEXT (vpc);
11672 1.1 christos
11673 1.1 christos CASE (sem, INSN_LSRR_W_R) : /* lsrr.w $Rs,$Rd */
11674 1.1 christos {
11675 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11676 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11677 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11678 1.1 christos int UNUSED written = 0;
11679 1.1 christos IADDR UNUSED pc = abuf->addr;
11680 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11681 1.1 christos
11682 1.1 christos {
11683 1.1 christos SI tmp_tmpd;
11684 1.1 christos SI tmp_cnt;
11685 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11686 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))));
11687 1.1 christos {
11688 1.1 christos SI tmp_oldregval;
11689 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11690 1.1 christos {
11691 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11692 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11693 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11694 1.1 christos }
11695 1.1 christos }
11696 1.1 christos {
11697 1.1 christos {
11698 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11699 1.1 christos CPU (h_nbit) = opval;
11700 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11701 1.1 christos }
11702 1.1 christos {
11703 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11704 1.1 christos CPU (h_zbit) = opval;
11705 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11706 1.1 christos }
11707 1.1 christos SET_H_CBIT_MOVE (0);
11708 1.1 christos SET_H_VBIT_MOVE (0);
11709 1.1 christos {
11710 1.1 christos {
11711 1.1 christos BI opval = 0;
11712 1.1 christos CPU (h_xbit) = opval;
11713 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11714 1.1 christos }
11715 1.1 christos {
11716 1.1 christos BI opval = 0;
11717 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11718 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11719 1.1 christos }
11720 1.1 christos }
11721 1.1 christos }
11722 1.1 christos }
11723 1.1 christos
11724 1.1 christos #undef FLD
11725 1.1 christos }
11726 1.1 christos NEXT (vpc);
11727 1.1 christos
11728 1.1 christos CASE (sem, INSN_LSRR_D_R) : /* lsrr.d $Rs,$Rd */
11729 1.1 christos {
11730 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11731 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11732 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11733 1.1 christos int UNUSED written = 0;
11734 1.1 christos IADDR UNUSED pc = abuf->addr;
11735 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11736 1.1 christos
11737 1.1 christos {
11738 1.1 christos SI tmp_tmpd;
11739 1.1 christos SI tmp_cnt;
11740 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11741 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))));
11742 1.1 christos {
11743 1.1 christos SI opval = tmp_tmpd;
11744 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11745 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11746 1.1 christos }
11747 1.1 christos {
11748 1.1 christos {
11749 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11750 1.1 christos CPU (h_nbit) = opval;
11751 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11752 1.1 christos }
11753 1.1 christos {
11754 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11755 1.1 christos CPU (h_zbit) = opval;
11756 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11757 1.1 christos }
11758 1.1 christos SET_H_CBIT_MOVE (0);
11759 1.1 christos SET_H_VBIT_MOVE (0);
11760 1.1 christos {
11761 1.1 christos {
11762 1.1 christos BI opval = 0;
11763 1.1 christos CPU (h_xbit) = opval;
11764 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11765 1.1 christos }
11766 1.1 christos {
11767 1.1 christos BI opval = 0;
11768 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11769 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11770 1.1 christos }
11771 1.1 christos }
11772 1.1 christos }
11773 1.1 christos }
11774 1.1 christos
11775 1.1 christos #undef FLD
11776 1.1 christos }
11777 1.1 christos NEXT (vpc);
11778 1.1 christos
11779 1.1 christos CASE (sem, INSN_LSRQ) : /* lsrq $c,${Rd} */
11780 1.1 christos {
11781 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11782 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11783 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11784 1.1 christos int UNUSED written = 0;
11785 1.1 christos IADDR UNUSED pc = abuf->addr;
11786 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11787 1.1 christos
11788 1.1 christos {
11789 1.1 christos SI tmp_tmpd;
11790 1.1 christos tmp_tmpd = SRLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
11791 1.1 christos {
11792 1.1 christos SI opval = tmp_tmpd;
11793 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11794 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11795 1.1 christos }
11796 1.1 christos {
11797 1.1 christos {
11798 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11799 1.1 christos CPU (h_nbit) = opval;
11800 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11801 1.1 christos }
11802 1.1 christos {
11803 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11804 1.1 christos CPU (h_zbit) = opval;
11805 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11806 1.1 christos }
11807 1.1 christos SET_H_CBIT_MOVE (0);
11808 1.1 christos SET_H_VBIT_MOVE (0);
11809 1.1 christos {
11810 1.1 christos {
11811 1.1 christos BI opval = 0;
11812 1.1 christos CPU (h_xbit) = opval;
11813 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11814 1.1 christos }
11815 1.1 christos {
11816 1.1 christos BI opval = 0;
11817 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11818 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11819 1.1 christos }
11820 1.1 christos }
11821 1.1 christos }
11822 1.1 christos }
11823 1.1 christos
11824 1.1 christos #undef FLD
11825 1.1 christos }
11826 1.1 christos NEXT (vpc);
11827 1.1 christos
11828 1.1 christos CASE (sem, INSN_LSLR_B_R) : /* lslr.b $Rs,$Rd */
11829 1.1 christos {
11830 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11831 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11832 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11833 1.1 christos int UNUSED written = 0;
11834 1.1 christos IADDR UNUSED pc = abuf->addr;
11835 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11836 1.1 christos
11837 1.1 christos {
11838 1.1 christos SI tmp_tmpd;
11839 1.1 christos SI tmp_cnt;
11840 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11841 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))));
11842 1.1 christos {
11843 1.1 christos SI tmp_oldregval;
11844 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11845 1.1 christos {
11846 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 255), ANDSI (tmp_oldregval, 0xffffff00));
11847 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11848 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11849 1.1 christos }
11850 1.1 christos }
11851 1.1 christos {
11852 1.1 christos {
11853 1.1 christos BI opval = LTQI (tmp_tmpd, 0);
11854 1.1 christos CPU (h_nbit) = opval;
11855 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11856 1.1 christos }
11857 1.1 christos {
11858 1.1 christos BI opval = ANDIF (EQQI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11859 1.1 christos CPU (h_zbit) = opval;
11860 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11861 1.1 christos }
11862 1.1 christos SET_H_CBIT_MOVE (0);
11863 1.1 christos SET_H_VBIT_MOVE (0);
11864 1.1 christos {
11865 1.1 christos {
11866 1.1 christos BI opval = 0;
11867 1.1 christos CPU (h_xbit) = opval;
11868 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11869 1.1 christos }
11870 1.1 christos {
11871 1.1 christos BI opval = 0;
11872 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11873 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11874 1.1 christos }
11875 1.1 christos }
11876 1.1 christos }
11877 1.1 christos }
11878 1.1 christos
11879 1.1 christos #undef FLD
11880 1.1 christos }
11881 1.1 christos NEXT (vpc);
11882 1.1 christos
11883 1.1 christos CASE (sem, INSN_LSLR_W_R) : /* lslr.w $Rs,$Rd */
11884 1.1 christos {
11885 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11886 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11887 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11888 1.1 christos int UNUSED written = 0;
11889 1.1 christos IADDR UNUSED pc = abuf->addr;
11890 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11891 1.1 christos
11892 1.1 christos {
11893 1.1 christos SI tmp_tmpd;
11894 1.1 christos SI tmp_cnt;
11895 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11896 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))));
11897 1.1 christos {
11898 1.1 christos SI tmp_oldregval;
11899 1.1 christos tmp_oldregval = GET_H_RAW_GR_ACR (FLD (f_operand2));
11900 1.1 christos {
11901 1.1 christos SI opval = ORSI (ANDSI (tmp_tmpd, 65535), ANDSI (tmp_oldregval, 0xffff0000));
11902 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11903 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11904 1.1 christos }
11905 1.1 christos }
11906 1.1 christos {
11907 1.1 christos {
11908 1.1 christos BI opval = LTHI (tmp_tmpd, 0);
11909 1.1 christos CPU (h_nbit) = opval;
11910 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11911 1.1 christos }
11912 1.1 christos {
11913 1.1 christos BI opval = ANDIF (EQHI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11914 1.1 christos CPU (h_zbit) = opval;
11915 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11916 1.1 christos }
11917 1.1 christos SET_H_CBIT_MOVE (0);
11918 1.1 christos SET_H_VBIT_MOVE (0);
11919 1.1 christos {
11920 1.1 christos {
11921 1.1 christos BI opval = 0;
11922 1.1 christos CPU (h_xbit) = opval;
11923 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11924 1.1 christos }
11925 1.1 christos {
11926 1.1 christos BI opval = 0;
11927 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11928 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11929 1.1 christos }
11930 1.1 christos }
11931 1.1 christos }
11932 1.1 christos }
11933 1.1 christos
11934 1.1 christos #undef FLD
11935 1.1 christos }
11936 1.1 christos NEXT (vpc);
11937 1.1 christos
11938 1.1 christos CASE (sem, INSN_LSLR_D_R) : /* lslr.d $Rs,$Rd */
11939 1.1 christos {
11940 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11941 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11942 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
11943 1.1 christos int UNUSED written = 0;
11944 1.1 christos IADDR UNUSED pc = abuf->addr;
11945 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11946 1.1 christos
11947 1.1 christos {
11948 1.1 christos SI tmp_tmpd;
11949 1.1 christos SI tmp_cnt;
11950 1.1 christos tmp_cnt = ANDSI (GET_H_GR (FLD (f_operand1)), 63);
11951 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))));
11952 1.1 christos {
11953 1.1 christos SI opval = tmp_tmpd;
11954 1.1 christos SET_H_GR (FLD (f_operand2), opval);
11955 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
11956 1.1 christos }
11957 1.1 christos {
11958 1.1 christos {
11959 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
11960 1.1 christos CPU (h_nbit) = opval;
11961 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
11962 1.1 christos }
11963 1.1 christos {
11964 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
11965 1.1 christos CPU (h_zbit) = opval;
11966 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
11967 1.1 christos }
11968 1.1 christos SET_H_CBIT_MOVE (0);
11969 1.1 christos SET_H_VBIT_MOVE (0);
11970 1.1 christos {
11971 1.1 christos {
11972 1.1 christos BI opval = 0;
11973 1.1 christos CPU (h_xbit) = opval;
11974 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
11975 1.1 christos }
11976 1.1 christos {
11977 1.1 christos BI opval = 0;
11978 1.1 christos SET_H_INSN_PREFIXED_P (opval);
11979 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
11980 1.1 christos }
11981 1.1 christos }
11982 1.1 christos }
11983 1.1 christos }
11984 1.1 christos
11985 1.1 christos #undef FLD
11986 1.1 christos }
11987 1.1 christos NEXT (vpc);
11988 1.1 christos
11989 1.1 christos CASE (sem, INSN_LSLQ) : /* lslq $c,${Rd} */
11990 1.1 christos {
11991 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
11992 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
11993 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
11994 1.1 christos int UNUSED written = 0;
11995 1.1 christos IADDR UNUSED pc = abuf->addr;
11996 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
11997 1.1 christos
11998 1.1 christos {
11999 1.1 christos SI tmp_tmpd;
12000 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), FLD (f_u5));
12001 1.1 christos {
12002 1.1 christos SI opval = tmp_tmpd;
12003 1.1 christos SET_H_GR (FLD (f_operand2), opval);
12004 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
12005 1.1 christos }
12006 1.1 christos {
12007 1.1 christos {
12008 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12009 1.1 christos CPU (h_nbit) = opval;
12010 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12011 1.1 christos }
12012 1.1 christos {
12013 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12014 1.1 christos CPU (h_zbit) = opval;
12015 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12016 1.1 christos }
12017 1.1 christos SET_H_CBIT_MOVE (0);
12018 1.1 christos SET_H_VBIT_MOVE (0);
12019 1.1 christos {
12020 1.1 christos {
12021 1.1 christos BI opval = 0;
12022 1.1 christos CPU (h_xbit) = opval;
12023 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12024 1.1 christos }
12025 1.1 christos {
12026 1.1 christos BI opval = 0;
12027 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12028 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12029 1.1 christos }
12030 1.1 christos }
12031 1.1 christos }
12032 1.1 christos }
12033 1.1 christos
12034 1.1 christos #undef FLD
12035 1.1 christos }
12036 1.1 christos NEXT (vpc);
12037 1.1 christos
12038 1.1 christos CASE (sem, INSN_BTST) : /* $Rs,$Rd */
12039 1.1 christos {
12040 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12041 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12042 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
12043 1.1 christos int UNUSED written = 0;
12044 1.1 christos IADDR UNUSED pc = abuf->addr;
12045 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12046 1.1 christos
12047 1.1 christos {
12048 1.1 christos SI tmp_tmpd;
12049 1.1 christos SI tmp_cnt;
12050 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, ANDSI (GET_H_GR (FLD (f_operand1)), 31)));
12051 1.1 christos {
12052 1.1 christos {
12053 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12054 1.1 christos CPU (h_nbit) = opval;
12055 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12056 1.1 christos }
12057 1.1 christos {
12058 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12059 1.1 christos CPU (h_zbit) = opval;
12060 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12061 1.1 christos }
12062 1.1 christos SET_H_CBIT_MOVE (0);
12063 1.1 christos SET_H_VBIT_MOVE (0);
12064 1.1 christos {
12065 1.1 christos {
12066 1.1 christos BI opval = 0;
12067 1.1 christos CPU (h_xbit) = opval;
12068 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12069 1.1 christos }
12070 1.1 christos {
12071 1.1 christos BI opval = 0;
12072 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12073 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12074 1.1 christos }
12075 1.1 christos }
12076 1.1 christos }
12077 1.1 christos }
12078 1.1 christos
12079 1.1 christos #undef FLD
12080 1.1 christos }
12081 1.1 christos NEXT (vpc);
12082 1.1 christos
12083 1.1 christos CASE (sem, INSN_BTSTQ) : /* btstq $c,${Rd} */
12084 1.1 christos {
12085 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12086 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12087 1.1 christos #define FLD(f) abuf->fields.sfmt_asrq.f
12088 1.1 christos int UNUSED written = 0;
12089 1.1 christos IADDR UNUSED pc = abuf->addr;
12090 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12091 1.1 christos
12092 1.1 christos {
12093 1.1 christos SI tmp_tmpd;
12094 1.1 christos tmp_tmpd = SLLSI (GET_H_GR (FLD (f_operand2)), SUBSI (31, FLD (f_u5)));
12095 1.1 christos {
12096 1.1 christos {
12097 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
12098 1.1 christos CPU (h_nbit) = opval;
12099 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12100 1.1 christos }
12101 1.1 christos {
12102 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
12103 1.1 christos CPU (h_zbit) = opval;
12104 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12105 1.1 christos }
12106 1.1 christos SET_H_CBIT_MOVE (0);
12107 1.1 christos SET_H_VBIT_MOVE (0);
12108 1.1 christos {
12109 1.1 christos {
12110 1.1 christos BI opval = 0;
12111 1.1 christos CPU (h_xbit) = opval;
12112 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12113 1.1 christos }
12114 1.1 christos {
12115 1.1 christos BI opval = 0;
12116 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12117 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12118 1.1 christos }
12119 1.1 christos }
12120 1.1 christos }
12121 1.1 christos }
12122 1.1 christos
12123 1.1 christos #undef FLD
12124 1.1 christos }
12125 1.1 christos NEXT (vpc);
12126 1.1 christos
12127 1.1 christos CASE (sem, INSN_SETF) : /* setf ${list-of-flags} */
12128 1.1 christos {
12129 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12130 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12131 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12132 1.1 christos int UNUSED written = 0;
12133 1.1 christos IADDR UNUSED pc = abuf->addr;
12134 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12135 1.1 christos
12136 1.1 christos {
12137 1.1 christos SI tmp_tmp;
12138 1.1 christos tmp_tmp = FLD (f_dstsrc);
12139 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12140 1.1 christos {
12141 1.1 christos BI opval = 1;
12142 1.1 christos CPU (h_cbit) = opval;
12143 1.1 christos written |= (1 << 1);
12144 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12145 1.1 christos }
12146 1.1 christos }
12147 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12148 1.1 christos {
12149 1.1 christos BI opval = 1;
12150 1.1 christos CPU (h_vbit) = opval;
12151 1.1 christos written |= (1 << 7);
12152 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12153 1.1 christos }
12154 1.1 christos }
12155 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12156 1.1 christos {
12157 1.1 christos BI opval = 1;
12158 1.1 christos CPU (h_zbit) = opval;
12159 1.1 christos written |= (1 << 9);
12160 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12161 1.1 christos }
12162 1.1 christos }
12163 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12164 1.1 christos {
12165 1.1 christos BI opval = 1;
12166 1.1 christos CPU (h_nbit) = opval;
12167 1.1 christos written |= (1 << 3);
12168 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12169 1.1 christos }
12170 1.1 christos }
12171 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12172 1.1 christos {
12173 1.1 christos BI opval = 1;
12174 1.1 christos CPU (h_xbit) = opval;
12175 1.1 christos written |= (1 << 8);
12176 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12177 1.1 christos }
12178 1.1 christos }
12179 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12180 1.1 christos {
12181 1.1 christos BI opval = 1;
12182 1.1 christos SET_H_IBIT (opval);
12183 1.1 christos written |= (1 << 2);
12184 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12185 1.1 christos }
12186 1.1 christos }
12187 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12188 1.1 christos {
12189 1.1 christos BI opval = 1;
12190 1.1 christos SET_H_UBIT (opval);
12191 1.1 christos written |= (1 << 6);
12192 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12193 1.1 christos }
12194 1.1 christos }
12195 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12196 1.1 christos {
12197 1.1 christos BI opval = 1;
12198 1.1 christos CPU (h_pbit) = opval;
12199 1.1 christos written |= (1 << 4);
12200 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12201 1.1 christos }
12202 1.1 christos }
12203 1.1 christos {
12204 1.1 christos BI opval = 0;
12205 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12206 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12207 1.1 christos }
12208 1.1 christos if (EQSI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12209 1.1 christos {
12210 1.1 christos BI opval = 0;
12211 1.1 christos CPU (h_xbit) = opval;
12212 1.1 christos written |= (1 << 8);
12213 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12214 1.1 christos }
12215 1.1 christos }
12216 1.1 christos }
12217 1.1 christos
12218 1.1 christos abuf->written = written;
12219 1.1 christos #undef FLD
12220 1.1 christos }
12221 1.1 christos NEXT (vpc);
12222 1.1 christos
12223 1.1 christos CASE (sem, INSN_CLEARF) : /* clearf ${list-of-flags} */
12224 1.1 christos {
12225 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12226 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12227 1.1 christos #define FLD(f) abuf->fields.sfmt_setf.f
12228 1.1 christos int UNUSED written = 0;
12229 1.1 christos IADDR UNUSED pc = abuf->addr;
12230 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12231 1.1 christos
12232 1.1 christos {
12233 1.1 christos SI tmp_tmp;
12234 1.1 christos tmp_tmp = FLD (f_dstsrc);
12235 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 0)), 0)) {
12236 1.1 christos {
12237 1.1 christos BI opval = 0;
12238 1.1 christos CPU (h_cbit) = opval;
12239 1.1 christos written |= (1 << 1);
12240 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "cbit", 'x', opval);
12241 1.1 christos }
12242 1.1 christos }
12243 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 1)), 0)) {
12244 1.1 christos {
12245 1.1 christos BI opval = 0;
12246 1.1 christos CPU (h_vbit) = opval;
12247 1.1 christos written |= (1 << 7);
12248 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "vbit", 'x', opval);
12249 1.1 christos }
12250 1.1 christos }
12251 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 2)), 0)) {
12252 1.1 christos {
12253 1.1 christos BI opval = 0;
12254 1.1 christos CPU (h_zbit) = opval;
12255 1.1 christos written |= (1 << 9);
12256 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
12257 1.1 christos }
12258 1.1 christos }
12259 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 3)), 0)) {
12260 1.1 christos {
12261 1.1 christos BI opval = 0;
12262 1.1 christos CPU (h_nbit) = opval;
12263 1.1 christos written |= (1 << 3);
12264 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
12265 1.1 christos }
12266 1.1 christos }
12267 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 4)), 0)) {
12268 1.1 christos {
12269 1.1 christos BI opval = 0;
12270 1.1 christos CPU (h_xbit) = opval;
12271 1.1 christos written |= (1 << 8);
12272 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12273 1.1 christos }
12274 1.1 christos }
12275 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 5)), 0)) {
12276 1.1 christos {
12277 1.1 christos BI opval = 0;
12278 1.1 christos SET_H_IBIT (opval);
12279 1.1 christos written |= (1 << 2);
12280 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ibit", 'x', opval);
12281 1.1 christos }
12282 1.1 christos }
12283 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 6)), 0)) {
12284 1.1 christos {
12285 1.1 christos BI opval = 0;
12286 1.1 christos SET_H_UBIT (opval);
12287 1.1 christos written |= (1 << 6);
12288 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "ubit", 'x', opval);
12289 1.1 christos }
12290 1.1 christos }
12291 1.1 christos if (NESI (ANDSI (tmp_tmp, SLLSI (1, 7)), 0)) {
12292 1.1 christos {
12293 1.1 christos BI opval = 0;
12294 1.1 christos CPU (h_pbit) = opval;
12295 1.1 christos written |= (1 << 4);
12296 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pbit", 'x', opval);
12297 1.1 christos }
12298 1.1 christos }
12299 1.1 christos {
12300 1.1 christos {
12301 1.1 christos BI opval = 0;
12302 1.1 christos CPU (h_xbit) = opval;
12303 1.1 christos written |= (1 << 8);
12304 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12305 1.1 christos }
12306 1.1 christos {
12307 1.1 christos BI opval = 0;
12308 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12309 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12310 1.1 christos }
12311 1.1 christos }
12312 1.1 christos }
12313 1.1 christos
12314 1.1 christos abuf->written = written;
12315 1.1 christos #undef FLD
12316 1.1 christos }
12317 1.1 christos NEXT (vpc);
12318 1.1 christos
12319 1.1 christos CASE (sem, INSN_RFE) : /* rfe */
12320 1.1 christos {
12321 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12322 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12323 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12324 1.1 christos int UNUSED written = 0;
12325 1.1 christos IADDR UNUSED pc = abuf->addr;
12326 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12327 1.1 christos
12328 1.1 christos {
12329 1.1 christos USI tmp_oldccs;
12330 1.1 christos USI tmp_samebits;
12331 1.1 christos USI tmp_shiftbits;
12332 1.1 christos USI tmp_keepmask;
12333 1.1 christos BI tmp_p1;
12334 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12335 1.1 christos tmp_keepmask = 0xc0000000;
12336 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12337 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12338 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12339 1.1 christos {
12340 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12341 1.1 christos SET_H_SR (((UINT) 13), opval);
12342 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12343 1.1 christos }
12344 1.1 christos }
12345 1.1 christos
12346 1.1 christos #undef FLD
12347 1.1 christos }
12348 1.1 christos NEXT (vpc);
12349 1.1 christos
12350 1.1 christos CASE (sem, INSN_SFE) : /* sfe */
12351 1.1 christos {
12352 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12353 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12354 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12355 1.1 christos int UNUSED written = 0;
12356 1.1 christos IADDR UNUSED pc = abuf->addr;
12357 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12358 1.1 christos
12359 1.1 christos {
12360 1.1 christos SI tmp_oldccs;
12361 1.1 christos SI tmp_savemask;
12362 1.1 christos tmp_savemask = 0xc0000000;
12363 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12364 1.1 christos {
12365 1.1 christos SI opval = ORSI (ANDSI (tmp_savemask, tmp_oldccs), ANDSI (INVSI (tmp_savemask), SLLSI (tmp_oldccs, 10)));
12366 1.1 christos SET_H_SR (((UINT) 13), opval);
12367 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12368 1.1 christos }
12369 1.1 christos }
12370 1.1 christos
12371 1.1 christos #undef FLD
12372 1.1 christos }
12373 1.1 christos NEXT (vpc);
12374 1.1 christos
12375 1.1 christos CASE (sem, INSN_RFG) : /* rfg */
12376 1.1 christos {
12377 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12378 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12379 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12380 1.1 christos int UNUSED written = 0;
12381 1.1 christos IADDR UNUSED pc = abuf->addr;
12382 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12383 1.1 christos
12384 1.1 christos crisv32f_rfg_handler (current_cpu, pc);
12385 1.1 christos
12386 1.1 christos #undef FLD
12387 1.1 christos }
12388 1.1 christos NEXT (vpc);
12389 1.1 christos
12390 1.1 christos CASE (sem, INSN_RFN) : /* rfn */
12391 1.1 christos {
12392 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12393 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12394 1.1 christos #define FLD(f) abuf->fields.sfmt_rfe.f
12395 1.1 christos int UNUSED written = 0;
12396 1.1 christos IADDR UNUSED pc = abuf->addr;
12397 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12398 1.1 christos
12399 1.1 christos {
12400 1.1 christos {
12401 1.1 christos USI tmp_oldccs;
12402 1.1 christos USI tmp_samebits;
12403 1.1 christos USI tmp_shiftbits;
12404 1.1 christos USI tmp_keepmask;
12405 1.1 christos BI tmp_p1;
12406 1.1 christos tmp_oldccs = GET_H_SR (((UINT) 13));
12407 1.1 christos tmp_keepmask = 0xc0000000;
12408 1.1 christos tmp_samebits = ANDSI (tmp_oldccs, tmp_keepmask);
12409 1.1 christos tmp_shiftbits = ANDSI (SRLSI (ANDSI (tmp_oldccs, 1073609728), 10), INVSI (tmp_keepmask));
12410 1.1 christos tmp_p1 = NESI (0, ANDSI (tmp_oldccs, 131072));
12411 1.1 christos {
12412 1.1 christos SI opval = ORSI (ORSI (tmp_samebits, tmp_shiftbits), ((ANDBI (CPU (h_rbit), NOTBI (tmp_p1))) ? (0) : (128)));
12413 1.1 christos SET_H_SR (((UINT) 13), opval);
12414 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12415 1.1 christos }
12416 1.1 christos }
12417 1.1 christos {
12418 1.1 christos BI opval = 1;
12419 1.1 christos SET_H_MBIT (opval);
12420 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "mbit", 'x', opval);
12421 1.1 christos }
12422 1.1 christos }
12423 1.1 christos
12424 1.1 christos #undef FLD
12425 1.1 christos }
12426 1.1 christos NEXT (vpc);
12427 1.1 christos
12428 1.1 christos CASE (sem, INSN_HALT) : /* halt */
12429 1.1 christos {
12430 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12431 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12432 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
12433 1.1 christos int UNUSED written = 0;
12434 1.1 christos IADDR UNUSED pc = abuf->addr;
12435 1.1 christos SEM_BRANCH_INIT
12436 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12437 1.1 christos
12438 1.1 christos {
12439 1.1 christos USI opval = crisv32f_halt_handler (current_cpu, pc);
12440 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12441 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12442 1.1 christos }
12443 1.1 christos
12444 1.1 christos SEM_BRANCH_FINI (vpc);
12445 1.1 christos #undef FLD
12446 1.1 christos }
12447 1.1 christos NEXT (vpc);
12448 1.1 christos
12449 1.1 christos CASE (sem, INSN_BCC_B) : /* b${cc} ${o-pcrel} */
12450 1.1 christos {
12451 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12452 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12453 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12454 1.1 christos int UNUSED written = 0;
12455 1.1 christos IADDR UNUSED pc = abuf->addr;
12456 1.1 christos SEM_BRANCH_INIT
12457 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12458 1.1 christos
12459 1.1 christos {
12460 1.1 christos BI tmp_truthval;
12461 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12462 1.1 christos BI tmp_condres;
12463 1.1 christos tmp_tmpcond = FLD (f_operand2);
12464 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12465 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12466 1.1 christos }
12467 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12468 1.1 christos tmp_condres = CPU (h_cbit);
12469 1.1 christos }
12470 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12471 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12472 1.1 christos }
12473 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12474 1.1 christos tmp_condres = CPU (h_zbit);
12475 1.1 christos }
12476 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12477 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12478 1.1 christos }
12479 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12480 1.1 christos tmp_condres = CPU (h_vbit);
12481 1.1 christos }
12482 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12483 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12484 1.1 christos }
12485 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12486 1.1 christos tmp_condres = CPU (h_nbit);
12487 1.1 christos }
12488 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12489 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12490 1.1 christos }
12491 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12492 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12493 1.1 christos }
12494 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12495 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12496 1.1 christos }
12497 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12498 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12499 1.1 christos }
12500 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12501 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12502 1.1 christos }
12503 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12504 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12505 1.1 christos }
12506 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12507 1.1 christos tmp_condres = 1;
12508 1.1 christos }
12509 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12510 1.1 christos tmp_condres = CPU (h_pbit);
12511 1.1 christos }
12512 1.1 christos ; tmp_condres; });
12513 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_pcrel), tmp_truthval);
12514 1.1 christos {
12515 1.1 christos {
12516 1.1 christos BI opval = 0;
12517 1.1 christos CPU (h_xbit) = opval;
12518 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12519 1.1 christos }
12520 1.1 christos {
12521 1.1 christos BI opval = 0;
12522 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12523 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12524 1.1 christos }
12525 1.1 christos }
12526 1.1 christos if (tmp_truthval) {
12527 1.1 christos {
12528 1.1 christos {
12529 1.1 christos USI opval = FLD (i_o_pcrel);
12530 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12531 1.1 christos written |= (1 << 8);
12532 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12533 1.1 christos }
12534 1.1 christos }
12535 1.1 christos }
12536 1.1 christos }
12537 1.1 christos
12538 1.1 christos abuf->written = written;
12539 1.1 christos SEM_BRANCH_FINI (vpc);
12540 1.1 christos #undef FLD
12541 1.1 christos }
12542 1.1 christos NEXT (vpc);
12543 1.1 christos
12544 1.1 christos CASE (sem, INSN_BA_B) : /* ba ${o-pcrel} */
12545 1.1 christos {
12546 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12547 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12548 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_b.f
12549 1.1 christos int UNUSED written = 0;
12550 1.1 christos IADDR UNUSED pc = abuf->addr;
12551 1.1 christos SEM_BRANCH_INIT
12552 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12553 1.1 christos
12554 1.1 christos {
12555 1.1 christos {
12556 1.1 christos {
12557 1.1 christos BI opval = 0;
12558 1.1 christos CPU (h_xbit) = opval;
12559 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12560 1.1 christos }
12561 1.1 christos {
12562 1.1 christos BI opval = 0;
12563 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12564 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12565 1.1 christos }
12566 1.1 christos }
12567 1.1 christos {
12568 1.1 christos {
12569 1.1 christos USI opval = FLD (i_o_pcrel);
12570 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12571 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12572 1.1 christos }
12573 1.1 christos }
12574 1.1 christos }
12575 1.1 christos
12576 1.1 christos SEM_BRANCH_FINI (vpc);
12577 1.1 christos #undef FLD
12578 1.1 christos }
12579 1.1 christos NEXT (vpc);
12580 1.1 christos
12581 1.1 christos CASE (sem, INSN_BCC_W) : /* b${cc} ${o-word-pcrel} */
12582 1.1 christos {
12583 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12584 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12585 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12586 1.1 christos int UNUSED written = 0;
12587 1.1 christos IADDR UNUSED pc = abuf->addr;
12588 1.1 christos SEM_BRANCH_INIT
12589 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12590 1.1 christos
12591 1.1 christos {
12592 1.1 christos BI tmp_truthval;
12593 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
12594 1.1 christos BI tmp_condres;
12595 1.1 christos tmp_tmpcond = FLD (f_operand2);
12596 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
12597 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
12598 1.1 christos }
12599 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
12600 1.1 christos tmp_condres = CPU (h_cbit);
12601 1.1 christos }
12602 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
12603 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
12604 1.1 christos }
12605 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
12606 1.1 christos tmp_condres = CPU (h_zbit);
12607 1.1 christos }
12608 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
12609 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
12610 1.1 christos }
12611 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
12612 1.1 christos tmp_condres = CPU (h_vbit);
12613 1.1 christos }
12614 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
12615 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
12616 1.1 christos }
12617 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
12618 1.1 christos tmp_condres = CPU (h_nbit);
12619 1.1 christos }
12620 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
12621 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
12622 1.1 christos }
12623 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
12624 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
12625 1.1 christos }
12626 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
12627 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
12628 1.1 christos }
12629 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
12630 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
12631 1.1 christos }
12632 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
12633 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
12634 1.1 christos }
12635 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
12636 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
12637 1.1 christos }
12638 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
12639 1.1 christos tmp_condres = 1;
12640 1.1 christos }
12641 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
12642 1.1 christos tmp_condres = CPU (h_pbit);
12643 1.1 christos }
12644 1.1 christos ; tmp_condres; });
12645 1.1 christos crisv32f_branch_taken (current_cpu, pc, FLD (i_o_word_pcrel), tmp_truthval);
12646 1.1 christos {
12647 1.1 christos {
12648 1.1 christos BI opval = 0;
12649 1.1 christos CPU (h_xbit) = opval;
12650 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12651 1.1 christos }
12652 1.1 christos {
12653 1.1 christos BI opval = 0;
12654 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12655 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12656 1.1 christos }
12657 1.1 christos }
12658 1.1 christos if (tmp_truthval) {
12659 1.1 christos {
12660 1.1 christos {
12661 1.1 christos USI opval = FLD (i_o_word_pcrel);
12662 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12663 1.1 christos written |= (1 << 8);
12664 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12665 1.1 christos }
12666 1.1 christos }
12667 1.1 christos }
12668 1.1 christos }
12669 1.1 christos
12670 1.1 christos abuf->written = written;
12671 1.1 christos SEM_BRANCH_FINI (vpc);
12672 1.1 christos #undef FLD
12673 1.1 christos }
12674 1.1 christos NEXT (vpc);
12675 1.1 christos
12676 1.1 christos CASE (sem, INSN_BA_W) : /* ba ${o-word-pcrel} */
12677 1.1 christos {
12678 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12679 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12680 1.1 christos #define FLD(f) abuf->fields.sfmt_bcc_w.f
12681 1.1 christos int UNUSED written = 0;
12682 1.1 christos IADDR UNUSED pc = abuf->addr;
12683 1.1 christos SEM_BRANCH_INIT
12684 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
12685 1.1 christos
12686 1.1 christos {
12687 1.1 christos {
12688 1.1 christos {
12689 1.1 christos BI opval = 0;
12690 1.1 christos CPU (h_xbit) = opval;
12691 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12692 1.1 christos }
12693 1.1 christos {
12694 1.1 christos BI opval = 0;
12695 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12696 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12697 1.1 christos }
12698 1.1 christos }
12699 1.1 christos {
12700 1.1 christos {
12701 1.1 christos USI opval = FLD (i_o_word_pcrel);
12702 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12703 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12704 1.1 christos }
12705 1.1 christos }
12706 1.1 christos }
12707 1.1 christos
12708 1.1 christos SEM_BRANCH_FINI (vpc);
12709 1.1 christos #undef FLD
12710 1.1 christos }
12711 1.1 christos NEXT (vpc);
12712 1.1 christos
12713 1.1 christos CASE (sem, INSN_JAS_R) : /* jas ${Rs},${Pd} */
12714 1.1 christos {
12715 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12716 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12717 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12718 1.1 christos int UNUSED written = 0;
12719 1.1 christos IADDR UNUSED pc = abuf->addr;
12720 1.1 christos SEM_BRANCH_INIT
12721 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12722 1.1 christos
12723 1.1 christos {
12724 1.1 christos {
12725 1.1 christos {
12726 1.1 christos BI opval = 0;
12727 1.1 christos CPU (h_xbit) = opval;
12728 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12729 1.1 christos }
12730 1.1 christos {
12731 1.1 christos BI opval = 0;
12732 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12733 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12734 1.1 christos }
12735 1.1 christos }
12736 1.1 christos if (ANDIF (EQSI (FLD (f_operand1), 1), EQSI (FLD (f_operand2), 11))) {
12737 1.1 christos cris_flush_simulator_decode_cache (current_cpu, pc);
12738 1.1 christos }
12739 1.1 christos {
12740 1.1 christos {
12741 1.1 christos {
12742 1.1 christos SI opval = ADDSI (pc, 4);
12743 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12744 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12745 1.1 christos }
12746 1.1 christos {
12747 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12748 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12749 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12750 1.1 christos }
12751 1.1 christos }
12752 1.1 christos }
12753 1.1 christos }
12754 1.1 christos
12755 1.1 christos SEM_BRANCH_FINI (vpc);
12756 1.1 christos #undef FLD
12757 1.1 christos }
12758 1.1 christos NEXT (vpc);
12759 1.1 christos
12760 1.1 christos CASE (sem, INSN_JAS_C) : /* jas ${const32},${Pd} */
12761 1.1 christos {
12762 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12763 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12764 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12765 1.1 christos int UNUSED written = 0;
12766 1.1 christos IADDR UNUSED pc = abuf->addr;
12767 1.1 christos SEM_BRANCH_INIT
12768 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12769 1.1 christos
12770 1.1 christos {
12771 1.1 christos {
12772 1.1 christos {
12773 1.1 christos BI opval = 0;
12774 1.1 christos CPU (h_xbit) = opval;
12775 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12776 1.1 christos }
12777 1.1 christos {
12778 1.1 christos BI opval = 0;
12779 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12780 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12781 1.1 christos }
12782 1.1 christos }
12783 1.1 christos {
12784 1.1 christos {
12785 1.1 christos {
12786 1.1 christos SI opval = ADDSI (pc, 8);
12787 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12788 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12789 1.1 christos }
12790 1.1 christos {
12791 1.1 christos USI opval = FLD (f_indir_pc__dword);
12792 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12793 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12794 1.1 christos }
12795 1.1 christos }
12796 1.1 christos }
12797 1.1 christos }
12798 1.1 christos
12799 1.1 christos SEM_BRANCH_FINI (vpc);
12800 1.1 christos #undef FLD
12801 1.1 christos }
12802 1.1 christos NEXT (vpc);
12803 1.1 christos
12804 1.1 christos CASE (sem, INSN_JUMP_P) : /* jump ${Ps} */
12805 1.1 christos {
12806 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12807 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12808 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
12809 1.1 christos int UNUSED written = 0;
12810 1.1 christos IADDR UNUSED pc = abuf->addr;
12811 1.1 christos SEM_BRANCH_INIT
12812 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12813 1.1 christos
12814 1.1 christos {
12815 1.1 christos {
12816 1.1 christos {
12817 1.1 christos BI opval = 0;
12818 1.1 christos CPU (h_xbit) = opval;
12819 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12820 1.1 christos }
12821 1.1 christos {
12822 1.1 christos BI opval = 0;
12823 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12824 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12825 1.1 christos }
12826 1.1 christos }
12827 1.1 christos {
12828 1.1 christos {
12829 1.1 christos USI opval = GET_H_SR (FLD (f_operand2));
12830 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12831 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12832 1.1 christos }
12833 1.1 christos }
12834 1.1 christos }
12835 1.1 christos
12836 1.1 christos SEM_BRANCH_FINI (vpc);
12837 1.1 christos #undef FLD
12838 1.1 christos }
12839 1.1 christos NEXT (vpc);
12840 1.1 christos
12841 1.1 christos CASE (sem, INSN_BAS_C) : /* bas ${const32},${Pd} */
12842 1.1 christos {
12843 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12844 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12845 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12846 1.1 christos int UNUSED written = 0;
12847 1.1 christos IADDR UNUSED pc = abuf->addr;
12848 1.1 christos SEM_BRANCH_INIT
12849 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12850 1.1 christos
12851 1.1 christos {
12852 1.1 christos {
12853 1.1 christos {
12854 1.1 christos BI opval = 0;
12855 1.1 christos CPU (h_xbit) = opval;
12856 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12857 1.1 christos }
12858 1.1 christos {
12859 1.1 christos BI opval = 0;
12860 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12861 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12862 1.1 christos }
12863 1.1 christos }
12864 1.1 christos {
12865 1.1 christos {
12866 1.1 christos {
12867 1.1 christos SI opval = ADDSI (pc, 8);
12868 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12869 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12870 1.1 christos }
12871 1.1 christos {
12872 1.1 christos USI opval = FLD (i_const32_pcrel);
12873 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12874 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12875 1.1 christos }
12876 1.1 christos }
12877 1.1 christos }
12878 1.1 christos }
12879 1.1 christos
12880 1.1 christos SEM_BRANCH_FINI (vpc);
12881 1.1 christos #undef FLD
12882 1.1 christos }
12883 1.1 christos NEXT (vpc);
12884 1.1 christos
12885 1.1 christos CASE (sem, INSN_JASC_R) : /* jasc ${Rs},${Pd} */
12886 1.1 christos {
12887 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12888 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12889 1.1 christos #define FLD(f) abuf->fields.sfmt_move_m_sprv32.f
12890 1.1 christos int UNUSED written = 0;
12891 1.1 christos IADDR UNUSED pc = abuf->addr;
12892 1.1 christos SEM_BRANCH_INIT
12893 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
12894 1.1 christos
12895 1.1 christos {
12896 1.1 christos {
12897 1.1 christos {
12898 1.1 christos BI opval = 0;
12899 1.1 christos CPU (h_xbit) = opval;
12900 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12901 1.1 christos }
12902 1.1 christos {
12903 1.1 christos BI opval = 0;
12904 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12905 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12906 1.1 christos }
12907 1.1 christos }
12908 1.1 christos {
12909 1.1 christos {
12910 1.1 christos {
12911 1.1 christos SI opval = ADDSI (pc, 8);
12912 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12913 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12914 1.1 christos }
12915 1.1 christos {
12916 1.1 christos USI opval = GET_H_GR (FLD (f_operand1));
12917 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
12918 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12919 1.1 christos }
12920 1.1 christos }
12921 1.1 christos }
12922 1.1 christos }
12923 1.1 christos
12924 1.1 christos SEM_BRANCH_FINI (vpc);
12925 1.1 christos #undef FLD
12926 1.1 christos }
12927 1.1 christos NEXT (vpc);
12928 1.1 christos
12929 1.1 christos CASE (sem, INSN_JASC_C) : /* jasc ${const32},${Pd} */
12930 1.1 christos {
12931 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12932 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12933 1.1 christos #define FLD(f) abuf->fields.sfmt_move_c_sprv32_p2.f
12934 1.1 christos int UNUSED written = 0;
12935 1.1 christos IADDR UNUSED pc = abuf->addr;
12936 1.1 christos SEM_BRANCH_INIT
12937 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12938 1.1 christos
12939 1.1 christos {
12940 1.1 christos {
12941 1.1 christos {
12942 1.1 christos BI opval = 0;
12943 1.1 christos CPU (h_xbit) = opval;
12944 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12945 1.1 christos }
12946 1.1 christos {
12947 1.1 christos BI opval = 0;
12948 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12949 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12950 1.1 christos }
12951 1.1 christos }
12952 1.1 christos {
12953 1.1 christos {
12954 1.1 christos {
12955 1.1 christos SI opval = ADDSI (pc, 12);
12956 1.1 christos SET_H_SR (FLD (f_operand2), opval);
12957 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
12958 1.1 christos }
12959 1.1 christos {
12960 1.1 christos USI opval = FLD (f_indir_pc__dword);
12961 1.1 christos SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
12962 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
12963 1.1 christos }
12964 1.1 christos }
12965 1.1 christos }
12966 1.1 christos }
12967 1.1 christos
12968 1.1 christos SEM_BRANCH_FINI (vpc);
12969 1.1 christos #undef FLD
12970 1.1 christos }
12971 1.1 christos NEXT (vpc);
12972 1.1 christos
12973 1.1 christos CASE (sem, INSN_BASC_C) : /* basc ${const32},${Pd} */
12974 1.1 christos {
12975 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
12976 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
12977 1.1 christos #define FLD(f) abuf->fields.sfmt_bas_c.f
12978 1.1 christos int UNUSED written = 0;
12979 1.1 christos IADDR UNUSED pc = abuf->addr;
12980 1.1 christos SEM_BRANCH_INIT
12981 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
12982 1.1 christos
12983 1.1 christos {
12984 1.1 christos {
12985 1.1 christos {
12986 1.1 christos BI opval = 0;
12987 1.1 christos CPU (h_xbit) = opval;
12988 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
12989 1.1 christos }
12990 1.1 christos {
12991 1.1 christos BI opval = 0;
12992 1.1 christos SET_H_INSN_PREFIXED_P (opval);
12993 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
12994 1.1 christos }
12995 1.1 christos }
12996 1.1 christos {
12997 1.1 christos {
12998 1.1 christos {
12999 1.1 christos SI opval = ADDSI (pc, 12);
13000 1.1 christos SET_H_SR (FLD (f_operand2), opval);
13001 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "sr", 'x', opval);
13002 1.1 christos }
13003 1.1 christos {
13004 1.1 christos USI opval = FLD (i_const32_pcrel);
13005 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13006 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13007 1.1 christos }
13008 1.1 christos }
13009 1.1 christos }
13010 1.1 christos }
13011 1.1 christos
13012 1.1 christos SEM_BRANCH_FINI (vpc);
13013 1.1 christos #undef FLD
13014 1.1 christos }
13015 1.1 christos NEXT (vpc);
13016 1.1 christos
13017 1.1 christos CASE (sem, INSN_BREAK) : /* break $n */
13018 1.1 christos {
13019 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13020 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13021 1.1 christos #define FLD(f) abuf->fields.sfmt_break.f
13022 1.1 christos int UNUSED written = 0;
13023 1.1 christos IADDR UNUSED pc = abuf->addr;
13024 1.1 christos SEM_BRANCH_INIT
13025 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13026 1.1 christos
13027 1.1 christos {
13028 1.1 christos {
13029 1.1 christos {
13030 1.1 christos BI opval = 0;
13031 1.1 christos CPU (h_xbit) = opval;
13032 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13033 1.1 christos }
13034 1.1 christos {
13035 1.1 christos BI opval = 0;
13036 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13037 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13038 1.1 christos }
13039 1.1 christos }
13040 1.1 christos {
13041 1.1 christos USI opval = crisv32f_break_handler (current_cpu, FLD (f_u4), pc);
13042 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
13043 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
13044 1.1 christos }
13045 1.1 christos }
13046 1.1 christos
13047 1.1 christos SEM_BRANCH_FINI (vpc);
13048 1.1 christos #undef FLD
13049 1.1 christos }
13050 1.1 christos NEXT (vpc);
13051 1.1 christos
13052 1.1 christos CASE (sem, INSN_BOUND_R_B_R) : /* bound-r.b ${Rs},${Rd} */
13053 1.1 christos {
13054 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13055 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13056 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13057 1.1 christos int UNUSED written = 0;
13058 1.1 christos IADDR UNUSED pc = abuf->addr;
13059 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13060 1.1 christos
13061 1.1 christos {
13062 1.1 christos SI tmp_tmpopd;
13063 1.1 christos SI tmp_tmpops;
13064 1.1 christos SI tmp_newval;
13065 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (GET_H_GR (FLD (f_operand1))));
13066 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13067 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13068 1.1 christos {
13069 1.1 christos SI opval = tmp_newval;
13070 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13071 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13072 1.1 christos }
13073 1.1 christos {
13074 1.1 christos {
13075 1.1 christos BI opval = LTSI (tmp_newval, 0);
13076 1.1 christos CPU (h_nbit) = opval;
13077 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13078 1.1 christos }
13079 1.1 christos {
13080 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13081 1.1 christos CPU (h_zbit) = opval;
13082 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13083 1.1 christos }
13084 1.1 christos SET_H_CBIT_MOVE (0);
13085 1.1 christos SET_H_VBIT_MOVE (0);
13086 1.1 christos {
13087 1.1 christos {
13088 1.1 christos BI opval = 0;
13089 1.1 christos CPU (h_xbit) = opval;
13090 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13091 1.1 christos }
13092 1.1 christos {
13093 1.1 christos BI opval = 0;
13094 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13095 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13096 1.1 christos }
13097 1.1 christos }
13098 1.1 christos }
13099 1.1 christos }
13100 1.1 christos
13101 1.1 christos #undef FLD
13102 1.1 christos }
13103 1.1 christos NEXT (vpc);
13104 1.1 christos
13105 1.1 christos CASE (sem, INSN_BOUND_R_W_R) : /* bound-r.w ${Rs},${Rd} */
13106 1.1 christos {
13107 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13108 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13109 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13110 1.1 christos int UNUSED written = 0;
13111 1.1 christos IADDR UNUSED pc = abuf->addr;
13112 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13113 1.1 christos
13114 1.1 christos {
13115 1.1 christos SI tmp_tmpopd;
13116 1.1 christos SI tmp_tmpops;
13117 1.1 christos SI tmp_newval;
13118 1.1 christos tmp_tmpops = ZEXTHISI (TRUNCSIHI (GET_H_GR (FLD (f_operand1))));
13119 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13120 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13121 1.1 christos {
13122 1.1 christos SI opval = tmp_newval;
13123 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13124 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13125 1.1 christos }
13126 1.1 christos {
13127 1.1 christos {
13128 1.1 christos BI opval = LTSI (tmp_newval, 0);
13129 1.1 christos CPU (h_nbit) = opval;
13130 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13131 1.1 christos }
13132 1.1 christos {
13133 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13134 1.1 christos CPU (h_zbit) = opval;
13135 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13136 1.1 christos }
13137 1.1 christos SET_H_CBIT_MOVE (0);
13138 1.1 christos SET_H_VBIT_MOVE (0);
13139 1.1 christos {
13140 1.1 christos {
13141 1.1 christos BI opval = 0;
13142 1.1 christos CPU (h_xbit) = opval;
13143 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13144 1.1 christos }
13145 1.1 christos {
13146 1.1 christos BI opval = 0;
13147 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13148 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13149 1.1 christos }
13150 1.1 christos }
13151 1.1 christos }
13152 1.1 christos }
13153 1.1 christos
13154 1.1 christos #undef FLD
13155 1.1 christos }
13156 1.1 christos NEXT (vpc);
13157 1.1 christos
13158 1.1 christos CASE (sem, INSN_BOUND_R_D_R) : /* bound-r.d ${Rs},${Rd} */
13159 1.1 christos {
13160 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13161 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13162 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13163 1.1 christos int UNUSED written = 0;
13164 1.1 christos IADDR UNUSED pc = abuf->addr;
13165 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13166 1.1 christos
13167 1.1 christos {
13168 1.1 christos SI tmp_tmpopd;
13169 1.1 christos SI tmp_tmpops;
13170 1.1 christos SI tmp_newval;
13171 1.1 christos tmp_tmpops = TRUNCSISI (GET_H_GR (FLD (f_operand1)));
13172 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13173 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13174 1.1 christos {
13175 1.1 christos SI opval = tmp_newval;
13176 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13177 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13178 1.1 christos }
13179 1.1 christos {
13180 1.1 christos {
13181 1.1 christos BI opval = LTSI (tmp_newval, 0);
13182 1.1 christos CPU (h_nbit) = opval;
13183 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13184 1.1 christos }
13185 1.1 christos {
13186 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13187 1.1 christos CPU (h_zbit) = opval;
13188 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13189 1.1 christos }
13190 1.1 christos SET_H_CBIT_MOVE (0);
13191 1.1 christos SET_H_VBIT_MOVE (0);
13192 1.1 christos {
13193 1.1 christos {
13194 1.1 christos BI opval = 0;
13195 1.1 christos CPU (h_xbit) = opval;
13196 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13197 1.1 christos }
13198 1.1 christos {
13199 1.1 christos BI opval = 0;
13200 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13201 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13202 1.1 christos }
13203 1.1 christos }
13204 1.1 christos }
13205 1.1 christos }
13206 1.1 christos
13207 1.1 christos #undef FLD
13208 1.1 christos }
13209 1.1 christos NEXT (vpc);
13210 1.1 christos
13211 1.1 christos CASE (sem, INSN_BOUND_CB) : /* bound.b [PC+],${Rd} */
13212 1.1 christos {
13213 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13214 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13215 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13216 1.1 christos int UNUSED written = 0;
13217 1.1 christos IADDR UNUSED pc = abuf->addr;
13218 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13219 1.1 christos
13220 1.1 christos {
13221 1.1 christos SI tmp_tmpopd;
13222 1.1 christos SI tmp_tmpops;
13223 1.1 christos SI tmp_newval;
13224 1.1 christos tmp_tmpops = ZEXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte)));
13225 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13226 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13227 1.1 christos {
13228 1.1 christos SI opval = tmp_newval;
13229 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13230 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13231 1.1 christos }
13232 1.1 christos {
13233 1.1 christos {
13234 1.1 christos BI opval = LTSI (tmp_newval, 0);
13235 1.1 christos CPU (h_nbit) = opval;
13236 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13237 1.1 christos }
13238 1.1 christos {
13239 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13240 1.1 christos CPU (h_zbit) = opval;
13241 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13242 1.1 christos }
13243 1.1 christos SET_H_CBIT_MOVE (0);
13244 1.1 christos SET_H_VBIT_MOVE (0);
13245 1.1 christos {
13246 1.1 christos {
13247 1.1 christos BI opval = 0;
13248 1.1 christos CPU (h_xbit) = opval;
13249 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13250 1.1 christos }
13251 1.1 christos {
13252 1.1 christos BI opval = 0;
13253 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13254 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13255 1.1 christos }
13256 1.1 christos }
13257 1.1 christos }
13258 1.1 christos }
13259 1.1 christos
13260 1.1 christos #undef FLD
13261 1.1 christos }
13262 1.1 christos NEXT (vpc);
13263 1.1 christos
13264 1.1 christos CASE (sem, INSN_BOUND_CW) : /* bound.w [PC+],${Rd} */
13265 1.1 christos {
13266 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13267 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13268 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13269 1.1 christos int UNUSED written = 0;
13270 1.1 christos IADDR UNUSED pc = abuf->addr;
13271 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13272 1.1 christos
13273 1.1 christos {
13274 1.1 christos SI tmp_tmpopd;
13275 1.1 christos SI tmp_tmpops;
13276 1.1 christos SI tmp_newval;
13277 1.1 christos tmp_tmpops = ZEXTSISI (FLD (f_indir_pc__word));
13278 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13279 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13280 1.1 christos {
13281 1.1 christos SI opval = tmp_newval;
13282 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13283 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13284 1.1 christos }
13285 1.1 christos {
13286 1.1 christos {
13287 1.1 christos BI opval = LTSI (tmp_newval, 0);
13288 1.1 christos CPU (h_nbit) = opval;
13289 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13290 1.1 christos }
13291 1.1 christos {
13292 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13293 1.1 christos CPU (h_zbit) = opval;
13294 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13295 1.1 christos }
13296 1.1 christos SET_H_CBIT_MOVE (0);
13297 1.1 christos SET_H_VBIT_MOVE (0);
13298 1.1 christos {
13299 1.1 christos {
13300 1.1 christos BI opval = 0;
13301 1.1 christos CPU (h_xbit) = opval;
13302 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13303 1.1 christos }
13304 1.1 christos {
13305 1.1 christos BI opval = 0;
13306 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13307 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13308 1.1 christos }
13309 1.1 christos }
13310 1.1 christos }
13311 1.1 christos }
13312 1.1 christos
13313 1.1 christos #undef FLD
13314 1.1 christos }
13315 1.1 christos NEXT (vpc);
13316 1.1 christos
13317 1.1 christos CASE (sem, INSN_BOUND_CD) : /* bound.d [PC+],${Rd} */
13318 1.1 christos {
13319 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13320 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13321 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13322 1.1 christos int UNUSED written = 0;
13323 1.1 christos IADDR UNUSED pc = abuf->addr;
13324 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13325 1.1 christos
13326 1.1 christos {
13327 1.1 christos SI tmp_tmpopd;
13328 1.1 christos SI tmp_tmpops;
13329 1.1 christos SI tmp_newval;
13330 1.1 christos tmp_tmpops = FLD (f_indir_pc__dword);
13331 1.1 christos tmp_tmpopd = GET_H_GR (FLD (f_operand2));
13332 1.1 christos tmp_newval = ((LTUSI (tmp_tmpops, tmp_tmpopd)) ? (tmp_tmpops) : (tmp_tmpopd));
13333 1.1 christos {
13334 1.1 christos SI opval = tmp_newval;
13335 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13336 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13337 1.1 christos }
13338 1.1 christos {
13339 1.1 christos {
13340 1.1 christos BI opval = LTSI (tmp_newval, 0);
13341 1.1 christos CPU (h_nbit) = opval;
13342 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13343 1.1 christos }
13344 1.1 christos {
13345 1.1 christos BI opval = ANDIF (EQSI (tmp_newval, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13346 1.1 christos CPU (h_zbit) = opval;
13347 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13348 1.1 christos }
13349 1.1 christos SET_H_CBIT_MOVE (0);
13350 1.1 christos SET_H_VBIT_MOVE (0);
13351 1.1 christos {
13352 1.1 christos {
13353 1.1 christos BI opval = 0;
13354 1.1 christos CPU (h_xbit) = opval;
13355 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13356 1.1 christos }
13357 1.1 christos {
13358 1.1 christos BI opval = 0;
13359 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13360 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13361 1.1 christos }
13362 1.1 christos }
13363 1.1 christos }
13364 1.1 christos }
13365 1.1 christos
13366 1.1 christos #undef FLD
13367 1.1 christos }
13368 1.1 christos NEXT (vpc);
13369 1.1 christos
13370 1.1 christos CASE (sem, INSN_SCC) : /* s${cc} ${Rd-sfield} */
13371 1.1 christos {
13372 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13373 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13374 1.1 christos #define FLD(f) abuf->fields.sfmt_move_spr_mv32.f
13375 1.1 christos int UNUSED written = 0;
13376 1.1 christos IADDR UNUSED pc = abuf->addr;
13377 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13378 1.1 christos
13379 1.1 christos {
13380 1.1 christos BI tmp_truthval;
13381 1.1 christos tmp_truthval = ({ SI tmp_tmpcond;
13382 1.1 christos BI tmp_condres;
13383 1.1 christos tmp_tmpcond = FLD (f_operand2);
13384 1.1 christos ; if (EQSI (tmp_tmpcond, 0)) {
13385 1.1 christos tmp_condres = NOTBI (CPU (h_cbit));
13386 1.1 christos }
13387 1.1 christos else if (EQSI (tmp_tmpcond, 1)) {
13388 1.1 christos tmp_condres = CPU (h_cbit);
13389 1.1 christos }
13390 1.1 christos else if (EQSI (tmp_tmpcond, 2)) {
13391 1.1 christos tmp_condres = NOTBI (CPU (h_zbit));
13392 1.1 christos }
13393 1.1 christos else if (EQSI (tmp_tmpcond, 3)) {
13394 1.1 christos tmp_condres = CPU (h_zbit);
13395 1.1 christos }
13396 1.1 christos else if (EQSI (tmp_tmpcond, 4)) {
13397 1.1 christos tmp_condres = NOTBI (CPU (h_vbit));
13398 1.1 christos }
13399 1.1 christos else if (EQSI (tmp_tmpcond, 5)) {
13400 1.1 christos tmp_condres = CPU (h_vbit);
13401 1.1 christos }
13402 1.1 christos else if (EQSI (tmp_tmpcond, 6)) {
13403 1.1 christos tmp_condres = NOTBI (CPU (h_nbit));
13404 1.1 christos }
13405 1.1 christos else if (EQSI (tmp_tmpcond, 7)) {
13406 1.1 christos tmp_condres = CPU (h_nbit);
13407 1.1 christos }
13408 1.1 christos else if (EQSI (tmp_tmpcond, 8)) {
13409 1.1 christos tmp_condres = ORBI (CPU (h_cbit), CPU (h_zbit));
13410 1.1 christos }
13411 1.1 christos else if (EQSI (tmp_tmpcond, 9)) {
13412 1.1 christos tmp_condres = NOTBI (ORBI (CPU (h_cbit), CPU (h_zbit)));
13413 1.1 christos }
13414 1.1 christos else if (EQSI (tmp_tmpcond, 10)) {
13415 1.1 christos tmp_condres = NOTBI (XORBI (CPU (h_vbit), CPU (h_nbit)));
13416 1.1 christos }
13417 1.1 christos else if (EQSI (tmp_tmpcond, 11)) {
13418 1.1 christos tmp_condres = XORBI (CPU (h_vbit), CPU (h_nbit));
13419 1.1 christos }
13420 1.1 christos else if (EQSI (tmp_tmpcond, 12)) {
13421 1.1 christos tmp_condres = NOTBI (ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit)));
13422 1.1 christos }
13423 1.1 christos else if (EQSI (tmp_tmpcond, 13)) {
13424 1.1 christos tmp_condres = ORBI (XORBI (CPU (h_vbit), CPU (h_nbit)), CPU (h_zbit));
13425 1.1 christos }
13426 1.1 christos else if (EQSI (tmp_tmpcond, 14)) {
13427 1.1 christos tmp_condres = 1;
13428 1.1 christos }
13429 1.1 christos else if (EQSI (tmp_tmpcond, 15)) {
13430 1.1 christos tmp_condres = CPU (h_pbit);
13431 1.1 christos }
13432 1.1 christos ; tmp_condres; });
13433 1.1 christos {
13434 1.1 christos SI opval = ZEXTBISI (tmp_truthval);
13435 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13436 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13437 1.1 christos }
13438 1.1 christos {
13439 1.1 christos {
13440 1.1 christos BI opval = 0;
13441 1.1 christos CPU (h_xbit) = opval;
13442 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13443 1.1 christos }
13444 1.1 christos {
13445 1.1 christos BI opval = 0;
13446 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13447 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13448 1.1 christos }
13449 1.1 christos }
13450 1.1 christos }
13451 1.1 christos
13452 1.1 christos #undef FLD
13453 1.1 christos }
13454 1.1 christos NEXT (vpc);
13455 1.1 christos
13456 1.1 christos CASE (sem, INSN_LZ) : /* lz ${Rs},${Rd} */
13457 1.1 christos {
13458 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13459 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13460 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13461 1.1 christos int UNUSED written = 0;
13462 1.1 christos IADDR UNUSED pc = abuf->addr;
13463 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13464 1.1 christos
13465 1.1 christos {
13466 1.1 christos SI tmp_tmpd;
13467 1.1 christos SI tmp_tmp;
13468 1.1 christos tmp_tmp = GET_H_GR (FLD (f_operand1));
13469 1.1 christos tmp_tmpd = 0;
13470 1.1 christos {
13471 1.1 christos if (GESI (tmp_tmp, 0)) {
13472 1.1 christos {
13473 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13474 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13475 1.1 christos }
13476 1.1 christos }
13477 1.1 christos if (GESI (tmp_tmp, 0)) {
13478 1.1 christos {
13479 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13480 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13481 1.1 christos }
13482 1.1 christos }
13483 1.1 christos if (GESI (tmp_tmp, 0)) {
13484 1.1 christos {
13485 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13486 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13487 1.1 christos }
13488 1.1 christos }
13489 1.1 christos if (GESI (tmp_tmp, 0)) {
13490 1.1 christos {
13491 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13492 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13493 1.1 christos }
13494 1.1 christos }
13495 1.1 christos if (GESI (tmp_tmp, 0)) {
13496 1.1 christos {
13497 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13498 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13499 1.1 christos }
13500 1.1 christos }
13501 1.1 christos if (GESI (tmp_tmp, 0)) {
13502 1.1 christos {
13503 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13504 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13505 1.1 christos }
13506 1.1 christos }
13507 1.1 christos if (GESI (tmp_tmp, 0)) {
13508 1.1 christos {
13509 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13510 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13511 1.1 christos }
13512 1.1 christos }
13513 1.1 christos if (GESI (tmp_tmp, 0)) {
13514 1.1 christos {
13515 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13516 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13517 1.1 christos }
13518 1.1 christos }
13519 1.1 christos if (GESI (tmp_tmp, 0)) {
13520 1.1 christos {
13521 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13522 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13523 1.1 christos }
13524 1.1 christos }
13525 1.1 christos if (GESI (tmp_tmp, 0)) {
13526 1.1 christos {
13527 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13528 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13529 1.1 christos }
13530 1.1 christos }
13531 1.1 christos if (GESI (tmp_tmp, 0)) {
13532 1.1 christos {
13533 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13534 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13535 1.1 christos }
13536 1.1 christos }
13537 1.1 christos if (GESI (tmp_tmp, 0)) {
13538 1.1 christos {
13539 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13540 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13541 1.1 christos }
13542 1.1 christos }
13543 1.1 christos if (GESI (tmp_tmp, 0)) {
13544 1.1 christos {
13545 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13546 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13547 1.1 christos }
13548 1.1 christos }
13549 1.1 christos if (GESI (tmp_tmp, 0)) {
13550 1.1 christos {
13551 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13552 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13553 1.1 christos }
13554 1.1 christos }
13555 1.1 christos if (GESI (tmp_tmp, 0)) {
13556 1.1 christos {
13557 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13558 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13559 1.1 christos }
13560 1.1 christos }
13561 1.1 christos if (GESI (tmp_tmp, 0)) {
13562 1.1 christos {
13563 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13564 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13565 1.1 christos }
13566 1.1 christos }
13567 1.1 christos if (GESI (tmp_tmp, 0)) {
13568 1.1 christos {
13569 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13570 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13571 1.1 christos }
13572 1.1 christos }
13573 1.1 christos if (GESI (tmp_tmp, 0)) {
13574 1.1 christos {
13575 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13576 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13577 1.1 christos }
13578 1.1 christos }
13579 1.1 christos if (GESI (tmp_tmp, 0)) {
13580 1.1 christos {
13581 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13582 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13583 1.1 christos }
13584 1.1 christos }
13585 1.1 christos if (GESI (tmp_tmp, 0)) {
13586 1.1 christos {
13587 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13588 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13589 1.1 christos }
13590 1.1 christos }
13591 1.1 christos if (GESI (tmp_tmp, 0)) {
13592 1.1 christos {
13593 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13594 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13595 1.1 christos }
13596 1.1 christos }
13597 1.1 christos if (GESI (tmp_tmp, 0)) {
13598 1.1 christos {
13599 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13600 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13601 1.1 christos }
13602 1.1 christos }
13603 1.1 christos if (GESI (tmp_tmp, 0)) {
13604 1.1 christos {
13605 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13606 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13607 1.1 christos }
13608 1.1 christos }
13609 1.1 christos if (GESI (tmp_tmp, 0)) {
13610 1.1 christos {
13611 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13612 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13613 1.1 christos }
13614 1.1 christos }
13615 1.1 christos if (GESI (tmp_tmp, 0)) {
13616 1.1 christos {
13617 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13618 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13619 1.1 christos }
13620 1.1 christos }
13621 1.1 christos if (GESI (tmp_tmp, 0)) {
13622 1.1 christos {
13623 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13624 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13625 1.1 christos }
13626 1.1 christos }
13627 1.1 christos if (GESI (tmp_tmp, 0)) {
13628 1.1 christos {
13629 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13630 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13631 1.1 christos }
13632 1.1 christos }
13633 1.1 christos if (GESI (tmp_tmp, 0)) {
13634 1.1 christos {
13635 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13636 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13637 1.1 christos }
13638 1.1 christos }
13639 1.1 christos if (GESI (tmp_tmp, 0)) {
13640 1.1 christos {
13641 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13642 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13643 1.1 christos }
13644 1.1 christos }
13645 1.1 christos if (GESI (tmp_tmp, 0)) {
13646 1.1 christos {
13647 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13648 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13649 1.1 christos }
13650 1.1 christos }
13651 1.1 christos if (GESI (tmp_tmp, 0)) {
13652 1.1 christos {
13653 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13654 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13655 1.1 christos }
13656 1.1 christos }
13657 1.1 christos if (GESI (tmp_tmp, 0)) {
13658 1.1 christos {
13659 1.1 christos tmp_tmp = SLLSI (tmp_tmp, 1);
13660 1.1 christos tmp_tmpd = ADDSI (tmp_tmpd, 1);
13661 1.1 christos }
13662 1.1 christos }
13663 1.1 christos }
13664 1.1 christos {
13665 1.1 christos SI opval = tmp_tmpd;
13666 1.1 christos SET_H_GR (FLD (f_operand2), opval);
13667 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13668 1.1 christos }
13669 1.1 christos {
13670 1.1 christos {
13671 1.1 christos BI opval = LTSI (tmp_tmpd, 0);
13672 1.1 christos CPU (h_nbit) = opval;
13673 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "nbit", 'x', opval);
13674 1.1 christos }
13675 1.1 christos {
13676 1.1 christos BI opval = ANDIF (EQSI (tmp_tmpd, 0), ((CPU (h_xbit)) ? (CPU (h_zbit)) : (1)));
13677 1.1 christos CPU (h_zbit) = opval;
13678 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "zbit", 'x', opval);
13679 1.1 christos }
13680 1.1 christos SET_H_CBIT_MOVE (0);
13681 1.1 christos SET_H_VBIT_MOVE (0);
13682 1.1 christos {
13683 1.1 christos {
13684 1.1 christos BI opval = 0;
13685 1.1 christos CPU (h_xbit) = opval;
13686 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "xbit", 'x', opval);
13687 1.1 christos }
13688 1.1 christos {
13689 1.1 christos BI opval = 0;
13690 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13691 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13692 1.1 christos }
13693 1.1 christos }
13694 1.1 christos }
13695 1.1 christos }
13696 1.1 christos
13697 1.1 christos #undef FLD
13698 1.1 christos }
13699 1.1 christos NEXT (vpc);
13700 1.1 christos
13701 1.1 christos CASE (sem, INSN_ADDOQ) : /* addoq $o,$Rs,ACR */
13702 1.1 christos {
13703 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13704 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13705 1.1 christos #define FLD(f) abuf->fields.sfmt_addoq.f
13706 1.1 christos int UNUSED written = 0;
13707 1.1 christos IADDR UNUSED pc = abuf->addr;
13708 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13709 1.1 christos
13710 1.1 christos {
13711 1.1 christos {
13712 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_s8));
13713 1.1 christos SET_H_PREFIXREG_V32 (opval);
13714 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13715 1.1 christos }
13716 1.1 christos {
13717 1.1 christos BI opval = 1;
13718 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13719 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13720 1.1 christos }
13721 1.1 christos }
13722 1.1 christos
13723 1.1 christos #undef FLD
13724 1.1 christos }
13725 1.1 christos NEXT (vpc);
13726 1.1 christos
13727 1.1 christos CASE (sem, INSN_ADDO_M_B_M) : /* addo-m.b [${Rs}${inc}],$Rd,ACR */
13728 1.1 christos {
13729 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13730 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13731 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13732 1.1 christos int UNUSED written = 0;
13733 1.1 christos IADDR UNUSED pc = abuf->addr;
13734 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13735 1.1 christos
13736 1.1 christos {
13737 1.1 christos QI tmp_tmps;
13738 1.1 christos tmp_tmps = ({ SI tmp_addr;
13739 1.1 christos QI tmp_tmp_mem;
13740 1.1 christos BI tmp_postinc;
13741 1.1 christos tmp_postinc = FLD (f_memmode);
13742 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13743 1.1 christos ; tmp_tmp_mem = GETMEMQI (current_cpu, pc, tmp_addr);
13744 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13745 1.1 christos {
13746 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13747 1.1 christos tmp_addr = ADDSI (tmp_addr, 1);
13748 1.1 christos }
13749 1.1 christos {
13750 1.1 christos SI opval = tmp_addr;
13751 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13752 1.1 christos written |= (1 << 6);
13753 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13754 1.1 christos }
13755 1.1 christos }
13756 1.1 christos }
13757 1.1 christos ; tmp_tmp_mem; });
13758 1.1 christos {
13759 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (tmp_tmps));
13760 1.1 christos SET_H_PREFIXREG_V32 (opval);
13761 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13762 1.1 christos }
13763 1.1 christos {
13764 1.1 christos BI opval = 1;
13765 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13766 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13767 1.1 christos }
13768 1.1 christos }
13769 1.1 christos
13770 1.1 christos abuf->written = written;
13771 1.1 christos #undef FLD
13772 1.1 christos }
13773 1.1 christos NEXT (vpc);
13774 1.1 christos
13775 1.1 christos CASE (sem, INSN_ADDO_M_W_M) : /* addo-m.w [${Rs}${inc}],$Rd,ACR */
13776 1.1 christos {
13777 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13778 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13779 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13780 1.1 christos int UNUSED written = 0;
13781 1.1 christos IADDR UNUSED pc = abuf->addr;
13782 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13783 1.1 christos
13784 1.1 christos {
13785 1.1 christos HI tmp_tmps;
13786 1.1 christos tmp_tmps = ({ SI tmp_addr;
13787 1.1 christos HI tmp_tmp_mem;
13788 1.1 christos BI tmp_postinc;
13789 1.1 christos tmp_postinc = FLD (f_memmode);
13790 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13791 1.1 christos ; tmp_tmp_mem = GETMEMHI (current_cpu, pc, tmp_addr);
13792 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13793 1.1 christos {
13794 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13795 1.1 christos tmp_addr = ADDSI (tmp_addr, 2);
13796 1.1 christos }
13797 1.1 christos {
13798 1.1 christos SI opval = tmp_addr;
13799 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13800 1.1 christos written |= (1 << 6);
13801 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13802 1.1 christos }
13803 1.1 christos }
13804 1.1 christos }
13805 1.1 christos ; tmp_tmp_mem; });
13806 1.1 christos {
13807 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (tmp_tmps));
13808 1.1 christos SET_H_PREFIXREG_V32 (opval);
13809 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13810 1.1 christos }
13811 1.1 christos {
13812 1.1 christos BI opval = 1;
13813 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13814 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13815 1.1 christos }
13816 1.1 christos }
13817 1.1 christos
13818 1.1 christos abuf->written = written;
13819 1.1 christos #undef FLD
13820 1.1 christos }
13821 1.1 christos NEXT (vpc);
13822 1.1 christos
13823 1.1 christos CASE (sem, INSN_ADDO_M_D_M) : /* addo-m.d [${Rs}${inc}],$Rd,ACR */
13824 1.1 christos {
13825 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13826 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13827 1.1 christos #define FLD(f) abuf->fields.sfmt_addc_m.f
13828 1.1 christos int UNUSED written = 0;
13829 1.1 christos IADDR UNUSED pc = abuf->addr;
13830 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13831 1.1 christos
13832 1.1 christos {
13833 1.1 christos SI tmp_tmps;
13834 1.1 christos tmp_tmps = ({ SI tmp_addr;
13835 1.1 christos SI tmp_tmp_mem;
13836 1.1 christos BI tmp_postinc;
13837 1.1 christos tmp_postinc = FLD (f_memmode);
13838 1.1 christos ; tmp_addr = ((EQBI (GET_H_INSN_PREFIXED_P (), 0)) ? (GET_H_GR (FLD (f_operand1))) : (GET_H_PREFIXREG_V32 ()));
13839 1.1 christos ; tmp_tmp_mem = GETMEMSI (current_cpu, pc, tmp_addr);
13840 1.1 christos ; if (NEBI (tmp_postinc, 0)) {
13841 1.1 christos {
13842 1.1 christos if (EQBI (GET_H_INSN_PREFIXED_P (), 0)) {
13843 1.1 christos tmp_addr = ADDSI (tmp_addr, 4);
13844 1.1 christos }
13845 1.1 christos {
13846 1.1 christos SI opval = tmp_addr;
13847 1.1 christos SET_H_GR (FLD (f_operand1), opval);
13848 1.1 christos written |= (1 << 6);
13849 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
13850 1.1 christos }
13851 1.1 christos }
13852 1.1 christos }
13853 1.1 christos ; tmp_tmp_mem; });
13854 1.1 christos {
13855 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), tmp_tmps);
13856 1.1 christos SET_H_PREFIXREG_V32 (opval);
13857 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13858 1.1 christos }
13859 1.1 christos {
13860 1.1 christos BI opval = 1;
13861 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13862 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13863 1.1 christos }
13864 1.1 christos }
13865 1.1 christos
13866 1.1 christos abuf->written = written;
13867 1.1 christos #undef FLD
13868 1.1 christos }
13869 1.1 christos NEXT (vpc);
13870 1.1 christos
13871 1.1 christos CASE (sem, INSN_ADDO_CB) : /* addo.b [PC+],$Rd,ACR */
13872 1.1 christos {
13873 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13874 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13875 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cb.f
13876 1.1 christos int UNUSED written = 0;
13877 1.1 christos IADDR UNUSED pc = abuf->addr;
13878 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13879 1.1 christos
13880 1.1 christos {
13881 1.1 christos {
13882 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTQISI (TRUNCSIQI (FLD (f_indir_pc__byte))));
13883 1.1 christos SET_H_PREFIXREG_V32 (opval);
13884 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13885 1.1 christos }
13886 1.1 christos {
13887 1.1 christos BI opval = 1;
13888 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13889 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13890 1.1 christos }
13891 1.1 christos }
13892 1.1 christos
13893 1.1 christos #undef FLD
13894 1.1 christos }
13895 1.1 christos NEXT (vpc);
13896 1.1 christos
13897 1.1 christos CASE (sem, INSN_ADDO_CW) : /* addo.w [PC+],$Rd,ACR */
13898 1.1 christos {
13899 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13900 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13901 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cw.f
13902 1.1 christos int UNUSED written = 0;
13903 1.1 christos IADDR UNUSED pc = abuf->addr;
13904 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
13905 1.1 christos
13906 1.1 christos {
13907 1.1 christos {
13908 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), EXTHISI (TRUNCSIHI (FLD (f_indir_pc__word))));
13909 1.1 christos SET_H_PREFIXREG_V32 (opval);
13910 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13911 1.1 christos }
13912 1.1 christos {
13913 1.1 christos BI opval = 1;
13914 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13915 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13916 1.1 christos }
13917 1.1 christos }
13918 1.1 christos
13919 1.1 christos #undef FLD
13920 1.1 christos }
13921 1.1 christos NEXT (vpc);
13922 1.1 christos
13923 1.1 christos CASE (sem, INSN_ADDO_CD) : /* addo.d [PC+],$Rd,ACR */
13924 1.1 christos {
13925 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13926 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13927 1.1 christos #define FLD(f) abuf->fields.sfmt_bound_cd.f
13928 1.1 christos int UNUSED written = 0;
13929 1.1 christos IADDR UNUSED pc = abuf->addr;
13930 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 6);
13931 1.1 christos
13932 1.1 christos {
13933 1.1 christos {
13934 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand2)), FLD (f_indir_pc__dword));
13935 1.1 christos SET_H_PREFIXREG_V32 (opval);
13936 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13937 1.1 christos }
13938 1.1 christos {
13939 1.1 christos BI opval = 1;
13940 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13941 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13942 1.1 christos }
13943 1.1 christos }
13944 1.1 christos
13945 1.1 christos #undef FLD
13946 1.1 christos }
13947 1.1 christos NEXT (vpc);
13948 1.1 christos
13949 1.1 christos CASE (sem, INSN_ADDI_ACR_B_R) : /* addi-acr.b ${Rs-dfield}.m,${Rd-sfield},ACR */
13950 1.1 christos {
13951 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13952 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13953 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13954 1.1 christos int UNUSED written = 0;
13955 1.1 christos IADDR UNUSED pc = abuf->addr;
13956 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13957 1.1 christos
13958 1.1 christos {
13959 1.1 christos {
13960 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 1));
13961 1.1 christos SET_H_PREFIXREG_V32 (opval);
13962 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13963 1.1 christos }
13964 1.1 christos {
13965 1.1 christos BI opval = 1;
13966 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13967 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13968 1.1 christos }
13969 1.1 christos }
13970 1.1 christos
13971 1.1 christos #undef FLD
13972 1.1 christos }
13973 1.1 christos NEXT (vpc);
13974 1.1 christos
13975 1.1 christos CASE (sem, INSN_ADDI_ACR_W_R) : /* addi-acr.w ${Rs-dfield}.m,${Rd-sfield},ACR */
13976 1.1 christos {
13977 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
13978 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
13979 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
13980 1.1 christos int UNUSED written = 0;
13981 1.1 christos IADDR UNUSED pc = abuf->addr;
13982 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
13983 1.1 christos
13984 1.1 christos {
13985 1.1 christos {
13986 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 2));
13987 1.1 christos SET_H_PREFIXREG_V32 (opval);
13988 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
13989 1.1 christos }
13990 1.1 christos {
13991 1.1 christos BI opval = 1;
13992 1.1 christos SET_H_INSN_PREFIXED_P (opval);
13993 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
13994 1.1 christos }
13995 1.1 christos }
13996 1.1 christos
13997 1.1 christos #undef FLD
13998 1.1 christos }
13999 1.1 christos NEXT (vpc);
14000 1.1 christos
14001 1.1 christos CASE (sem, INSN_ADDI_ACR_D_R) : /* addi-acr.d ${Rs-dfield}.m,${Rd-sfield},ACR */
14002 1.1 christos {
14003 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14004 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14005 1.1 christos #define FLD(f) abuf->fields.sfmt_muls_b.f
14006 1.1 christos int UNUSED written = 0;
14007 1.1 christos IADDR UNUSED pc = abuf->addr;
14008 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14009 1.1 christos
14010 1.1 christos {
14011 1.1 christos {
14012 1.1 christos SI opval = ADDSI (GET_H_GR (FLD (f_operand1)), MULSI (GET_H_GR (FLD (f_operand2)), 4));
14013 1.1 christos SET_H_PREFIXREG_V32 (opval);
14014 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "prefixreg", 'x', opval);
14015 1.1 christos }
14016 1.1 christos {
14017 1.1 christos BI opval = 1;
14018 1.1 christos SET_H_INSN_PREFIXED_P (opval);
14019 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "insn-prefixed-p", 'x', opval);
14020 1.1 christos }
14021 1.1 christos }
14022 1.1 christos
14023 1.1 christos #undef FLD
14024 1.1 christos }
14025 1.1 christos NEXT (vpc);
14026 1.1 christos
14027 1.1 christos CASE (sem, INSN_FIDXI) : /* fidxi [$Rs] */
14028 1.1 christos {
14029 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14030 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14031 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14032 1.1 christos int UNUSED written = 0;
14033 1.1 christos IADDR UNUSED pc = abuf->addr;
14034 1.1 christos SEM_BRANCH_INIT
14035 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14036 1.1 christos
14037 1.1 christos {
14038 1.1 christos USI opval = crisv32f_fidxi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14039 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14040 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14041 1.1 christos }
14042 1.1 christos
14043 1.1 christos SEM_BRANCH_FINI (vpc);
14044 1.1 christos #undef FLD
14045 1.1 christos }
14046 1.1 christos NEXT (vpc);
14047 1.1 christos
14048 1.1 christos CASE (sem, INSN_FTAGI) : /* fidxi [$Rs] */
14049 1.1 christos {
14050 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14051 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14052 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14053 1.1 christos int UNUSED written = 0;
14054 1.1 christos IADDR UNUSED pc = abuf->addr;
14055 1.1 christos SEM_BRANCH_INIT
14056 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14057 1.1 christos
14058 1.1 christos {
14059 1.1 christos USI opval = crisv32f_ftagi_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14060 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14061 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14062 1.1 christos }
14063 1.1 christos
14064 1.1 christos SEM_BRANCH_FINI (vpc);
14065 1.1 christos #undef FLD
14066 1.1 christos }
14067 1.1 christos NEXT (vpc);
14068 1.1 christos
14069 1.1 christos CASE (sem, INSN_FIDXD) : /* fidxd [$Rs] */
14070 1.1 christos {
14071 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14072 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14073 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14074 1.1 christos int UNUSED written = 0;
14075 1.1 christos IADDR UNUSED pc = abuf->addr;
14076 1.1 christos SEM_BRANCH_INIT
14077 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14078 1.1 christos
14079 1.1 christos {
14080 1.1 christos USI opval = crisv32f_fidxd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14081 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14082 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14083 1.1 christos }
14084 1.1 christos
14085 1.1 christos SEM_BRANCH_FINI (vpc);
14086 1.1 christos #undef FLD
14087 1.1 christos }
14088 1.1 christos NEXT (vpc);
14089 1.1 christos
14090 1.1 christos CASE (sem, INSN_FTAGD) : /* ftagd [$Rs] */
14091 1.1 christos {
14092 1.1 christos SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
14093 1.1 christos ARGBUF *abuf = SEM_ARGBUF (sem_arg);
14094 1.1 christos #define FLD(f) abuf->fields.sfmt_mcp.f
14095 1.1 christos int UNUSED written = 0;
14096 1.1 christos IADDR UNUSED pc = abuf->addr;
14097 1.1 christos SEM_BRANCH_INIT
14098 1.1 christos vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
14099 1.1 christos
14100 1.1 christos {
14101 1.1 christos USI opval = crisv32f_ftagd_handler (current_cpu, pc, GET_H_GR (FLD (f_operand1)));
14102 1.1 christos SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
14103 1.1.1.5 christos CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
14104 1.1 christos }
14105 1.1 christos
14106 1.1 christos SEM_BRANCH_FINI (vpc);
14107 1.1 christos #undef FLD
14108 1.1 christos }
14109 1.1 christos NEXT (vpc);
14110 1.1 christos
14111 1.1 christos
14112 1.1 christos }
14113 1.1 christos ENDSWITCH (sem) /* End of semantic switch. */
14114 1.1 christos
14115 1.1 christos /* At this point `vpc' contains the next insn to execute. */
14116 1.1 christos }
14117 1.1 christos
14118 1.1 christos #undef DEFINE_SWITCH
14119 1.1 christos #endif /* DEFINE_SWITCH */
14120