xref: /netbsd-src/external/gpl3/gdb.old/dist/sim/m32r/sem2-switch.c (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1a5a4af3bSchristos /* Simulator instruction semantics for m32r2f.
2a5a4af3bSchristos 
3a5a4af3bSchristos THIS FILE IS MACHINE GENERATED WITH CGEN.
4a5a4af3bSchristos 
5*8b657b07Schristos Copyright 1996-2023 Free Software Foundation, Inc.
6a5a4af3bSchristos 
7a5a4af3bSchristos This file is part of the GNU simulators.
8a5a4af3bSchristos 
9a5a4af3bSchristos    This file is free software; you can redistribute it and/or modify
10a5a4af3bSchristos    it under the terms of the GNU General Public License as published by
11a5a4af3bSchristos    the Free Software Foundation; either version 3, or (at your option)
12a5a4af3bSchristos    any later version.
13a5a4af3bSchristos 
14a5a4af3bSchristos    It is distributed in the hope that it will be useful, but WITHOUT
15a5a4af3bSchristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16a5a4af3bSchristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17a5a4af3bSchristos    License for more details.
18a5a4af3bSchristos 
19a5a4af3bSchristos    You should have received a copy of the GNU General Public License along
20a5a4af3bSchristos    with this program; if not, see <http://www.gnu.org/licenses/>.
21a5a4af3bSchristos 
22a5a4af3bSchristos */
23a5a4af3bSchristos 
24a5a4af3bSchristos #ifdef DEFINE_LABELS
25a5a4af3bSchristos 
26a5a4af3bSchristos   /* The labels have the case they have because the enum of insn types
27a5a4af3bSchristos      is all uppercase and in the non-stdc case the insn symbol is built
28a5a4af3bSchristos      into the enum name.  */
29a5a4af3bSchristos 
30a5a4af3bSchristos   static struct {
31a5a4af3bSchristos     int index;
32a5a4af3bSchristos     void *label;
33a5a4af3bSchristos   } labels[] = {
34a5a4af3bSchristos     { M32R2F_INSN_X_INVALID, && case_sem_INSN_X_INVALID },
35a5a4af3bSchristos     { M32R2F_INSN_X_AFTER, && case_sem_INSN_X_AFTER },
36a5a4af3bSchristos     { M32R2F_INSN_X_BEFORE, && case_sem_INSN_X_BEFORE },
37a5a4af3bSchristos     { M32R2F_INSN_X_CTI_CHAIN, && case_sem_INSN_X_CTI_CHAIN },
38a5a4af3bSchristos     { M32R2F_INSN_X_CHAIN, && case_sem_INSN_X_CHAIN },
39a5a4af3bSchristos     { M32R2F_INSN_X_BEGIN, && case_sem_INSN_X_BEGIN },
40a5a4af3bSchristos     { M32R2F_INSN_ADD, && case_sem_INSN_ADD },
41a5a4af3bSchristos     { M32R2F_INSN_ADD3, && case_sem_INSN_ADD3 },
42a5a4af3bSchristos     { M32R2F_INSN_AND, && case_sem_INSN_AND },
43a5a4af3bSchristos     { M32R2F_INSN_AND3, && case_sem_INSN_AND3 },
44a5a4af3bSchristos     { M32R2F_INSN_OR, && case_sem_INSN_OR },
45a5a4af3bSchristos     { M32R2F_INSN_OR3, && case_sem_INSN_OR3 },
46a5a4af3bSchristos     { M32R2F_INSN_XOR, && case_sem_INSN_XOR },
47a5a4af3bSchristos     { M32R2F_INSN_XOR3, && case_sem_INSN_XOR3 },
48a5a4af3bSchristos     { M32R2F_INSN_ADDI, && case_sem_INSN_ADDI },
49a5a4af3bSchristos     { M32R2F_INSN_ADDV, && case_sem_INSN_ADDV },
50a5a4af3bSchristos     { M32R2F_INSN_ADDV3, && case_sem_INSN_ADDV3 },
51a5a4af3bSchristos     { M32R2F_INSN_ADDX, && case_sem_INSN_ADDX },
52a5a4af3bSchristos     { M32R2F_INSN_BC8, && case_sem_INSN_BC8 },
53a5a4af3bSchristos     { M32R2F_INSN_BC24, && case_sem_INSN_BC24 },
54a5a4af3bSchristos     { M32R2F_INSN_BEQ, && case_sem_INSN_BEQ },
55a5a4af3bSchristos     { M32R2F_INSN_BEQZ, && case_sem_INSN_BEQZ },
56a5a4af3bSchristos     { M32R2F_INSN_BGEZ, && case_sem_INSN_BGEZ },
57a5a4af3bSchristos     { M32R2F_INSN_BGTZ, && case_sem_INSN_BGTZ },
58a5a4af3bSchristos     { M32R2F_INSN_BLEZ, && case_sem_INSN_BLEZ },
59a5a4af3bSchristos     { M32R2F_INSN_BLTZ, && case_sem_INSN_BLTZ },
60a5a4af3bSchristos     { M32R2F_INSN_BNEZ, && case_sem_INSN_BNEZ },
61a5a4af3bSchristos     { M32R2F_INSN_BL8, && case_sem_INSN_BL8 },
62a5a4af3bSchristos     { M32R2F_INSN_BL24, && case_sem_INSN_BL24 },
63a5a4af3bSchristos     { M32R2F_INSN_BCL8, && case_sem_INSN_BCL8 },
64a5a4af3bSchristos     { M32R2F_INSN_BCL24, && case_sem_INSN_BCL24 },
65a5a4af3bSchristos     { M32R2F_INSN_BNC8, && case_sem_INSN_BNC8 },
66a5a4af3bSchristos     { M32R2F_INSN_BNC24, && case_sem_INSN_BNC24 },
67a5a4af3bSchristos     { M32R2F_INSN_BNE, && case_sem_INSN_BNE },
68a5a4af3bSchristos     { M32R2F_INSN_BRA8, && case_sem_INSN_BRA8 },
69a5a4af3bSchristos     { M32R2F_INSN_BRA24, && case_sem_INSN_BRA24 },
70a5a4af3bSchristos     { M32R2F_INSN_BNCL8, && case_sem_INSN_BNCL8 },
71a5a4af3bSchristos     { M32R2F_INSN_BNCL24, && case_sem_INSN_BNCL24 },
72a5a4af3bSchristos     { M32R2F_INSN_CMP, && case_sem_INSN_CMP },
73a5a4af3bSchristos     { M32R2F_INSN_CMPI, && case_sem_INSN_CMPI },
74a5a4af3bSchristos     { M32R2F_INSN_CMPU, && case_sem_INSN_CMPU },
75a5a4af3bSchristos     { M32R2F_INSN_CMPUI, && case_sem_INSN_CMPUI },
76a5a4af3bSchristos     { M32R2F_INSN_CMPEQ, && case_sem_INSN_CMPEQ },
77a5a4af3bSchristos     { M32R2F_INSN_CMPZ, && case_sem_INSN_CMPZ },
78a5a4af3bSchristos     { M32R2F_INSN_DIV, && case_sem_INSN_DIV },
79a5a4af3bSchristos     { M32R2F_INSN_DIVU, && case_sem_INSN_DIVU },
80a5a4af3bSchristos     { M32R2F_INSN_REM, && case_sem_INSN_REM },
81a5a4af3bSchristos     { M32R2F_INSN_REMU, && case_sem_INSN_REMU },
82a5a4af3bSchristos     { M32R2F_INSN_REMH, && case_sem_INSN_REMH },
83a5a4af3bSchristos     { M32R2F_INSN_REMUH, && case_sem_INSN_REMUH },
84a5a4af3bSchristos     { M32R2F_INSN_REMB, && case_sem_INSN_REMB },
85a5a4af3bSchristos     { M32R2F_INSN_REMUB, && case_sem_INSN_REMUB },
86a5a4af3bSchristos     { M32R2F_INSN_DIVUH, && case_sem_INSN_DIVUH },
87a5a4af3bSchristos     { M32R2F_INSN_DIVB, && case_sem_INSN_DIVB },
88a5a4af3bSchristos     { M32R2F_INSN_DIVUB, && case_sem_INSN_DIVUB },
89a5a4af3bSchristos     { M32R2F_INSN_DIVH, && case_sem_INSN_DIVH },
90a5a4af3bSchristos     { M32R2F_INSN_JC, && case_sem_INSN_JC },
91a5a4af3bSchristos     { M32R2F_INSN_JNC, && case_sem_INSN_JNC },
92a5a4af3bSchristos     { M32R2F_INSN_JL, && case_sem_INSN_JL },
93a5a4af3bSchristos     { M32R2F_INSN_JMP, && case_sem_INSN_JMP },
94a5a4af3bSchristos     { M32R2F_INSN_LD, && case_sem_INSN_LD },
95a5a4af3bSchristos     { M32R2F_INSN_LD_D, && case_sem_INSN_LD_D },
96a5a4af3bSchristos     { M32R2F_INSN_LDB, && case_sem_INSN_LDB },
97a5a4af3bSchristos     { M32R2F_INSN_LDB_D, && case_sem_INSN_LDB_D },
98a5a4af3bSchristos     { M32R2F_INSN_LDH, && case_sem_INSN_LDH },
99a5a4af3bSchristos     { M32R2F_INSN_LDH_D, && case_sem_INSN_LDH_D },
100a5a4af3bSchristos     { M32R2F_INSN_LDUB, && case_sem_INSN_LDUB },
101a5a4af3bSchristos     { M32R2F_INSN_LDUB_D, && case_sem_INSN_LDUB_D },
102a5a4af3bSchristos     { M32R2F_INSN_LDUH, && case_sem_INSN_LDUH },
103a5a4af3bSchristos     { M32R2F_INSN_LDUH_D, && case_sem_INSN_LDUH_D },
104a5a4af3bSchristos     { M32R2F_INSN_LD_PLUS, && case_sem_INSN_LD_PLUS },
105a5a4af3bSchristos     { M32R2F_INSN_LD24, && case_sem_INSN_LD24 },
106a5a4af3bSchristos     { M32R2F_INSN_LDI8, && case_sem_INSN_LDI8 },
107a5a4af3bSchristos     { M32R2F_INSN_LDI16, && case_sem_INSN_LDI16 },
108a5a4af3bSchristos     { M32R2F_INSN_LOCK, && case_sem_INSN_LOCK },
109a5a4af3bSchristos     { M32R2F_INSN_MACHI_A, && case_sem_INSN_MACHI_A },
110a5a4af3bSchristos     { M32R2F_INSN_MACLO_A, && case_sem_INSN_MACLO_A },
111a5a4af3bSchristos     { M32R2F_INSN_MACWHI_A, && case_sem_INSN_MACWHI_A },
112a5a4af3bSchristos     { M32R2F_INSN_MACWLO_A, && case_sem_INSN_MACWLO_A },
113a5a4af3bSchristos     { M32R2F_INSN_MUL, && case_sem_INSN_MUL },
114a5a4af3bSchristos     { M32R2F_INSN_MULHI_A, && case_sem_INSN_MULHI_A },
115a5a4af3bSchristos     { M32R2F_INSN_MULLO_A, && case_sem_INSN_MULLO_A },
116a5a4af3bSchristos     { M32R2F_INSN_MULWHI_A, && case_sem_INSN_MULWHI_A },
117a5a4af3bSchristos     { M32R2F_INSN_MULWLO_A, && case_sem_INSN_MULWLO_A },
118a5a4af3bSchristos     { M32R2F_INSN_MV, && case_sem_INSN_MV },
119a5a4af3bSchristos     { M32R2F_INSN_MVFACHI_A, && case_sem_INSN_MVFACHI_A },
120a5a4af3bSchristos     { M32R2F_INSN_MVFACLO_A, && case_sem_INSN_MVFACLO_A },
121a5a4af3bSchristos     { M32R2F_INSN_MVFACMI_A, && case_sem_INSN_MVFACMI_A },
122a5a4af3bSchristos     { M32R2F_INSN_MVFC, && case_sem_INSN_MVFC },
123a5a4af3bSchristos     { M32R2F_INSN_MVTACHI_A, && case_sem_INSN_MVTACHI_A },
124a5a4af3bSchristos     { M32R2F_INSN_MVTACLO_A, && case_sem_INSN_MVTACLO_A },
125a5a4af3bSchristos     { M32R2F_INSN_MVTC, && case_sem_INSN_MVTC },
126a5a4af3bSchristos     { M32R2F_INSN_NEG, && case_sem_INSN_NEG },
127a5a4af3bSchristos     { M32R2F_INSN_NOP, && case_sem_INSN_NOP },
128a5a4af3bSchristos     { M32R2F_INSN_NOT, && case_sem_INSN_NOT },
129a5a4af3bSchristos     { M32R2F_INSN_RAC_DSI, && case_sem_INSN_RAC_DSI },
130a5a4af3bSchristos     { M32R2F_INSN_RACH_DSI, && case_sem_INSN_RACH_DSI },
131a5a4af3bSchristos     { M32R2F_INSN_RTE, && case_sem_INSN_RTE },
132a5a4af3bSchristos     { M32R2F_INSN_SETH, && case_sem_INSN_SETH },
133a5a4af3bSchristos     { M32R2F_INSN_SLL, && case_sem_INSN_SLL },
134a5a4af3bSchristos     { M32R2F_INSN_SLL3, && case_sem_INSN_SLL3 },
135a5a4af3bSchristos     { M32R2F_INSN_SLLI, && case_sem_INSN_SLLI },
136a5a4af3bSchristos     { M32R2F_INSN_SRA, && case_sem_INSN_SRA },
137a5a4af3bSchristos     { M32R2F_INSN_SRA3, && case_sem_INSN_SRA3 },
138a5a4af3bSchristos     { M32R2F_INSN_SRAI, && case_sem_INSN_SRAI },
139a5a4af3bSchristos     { M32R2F_INSN_SRL, && case_sem_INSN_SRL },
140a5a4af3bSchristos     { M32R2F_INSN_SRL3, && case_sem_INSN_SRL3 },
141a5a4af3bSchristos     { M32R2F_INSN_SRLI, && case_sem_INSN_SRLI },
142a5a4af3bSchristos     { M32R2F_INSN_ST, && case_sem_INSN_ST },
143a5a4af3bSchristos     { M32R2F_INSN_ST_D, && case_sem_INSN_ST_D },
144a5a4af3bSchristos     { M32R2F_INSN_STB, && case_sem_INSN_STB },
145a5a4af3bSchristos     { M32R2F_INSN_STB_D, && case_sem_INSN_STB_D },
146a5a4af3bSchristos     { M32R2F_INSN_STH, && case_sem_INSN_STH },
147a5a4af3bSchristos     { M32R2F_INSN_STH_D, && case_sem_INSN_STH_D },
148a5a4af3bSchristos     { M32R2F_INSN_ST_PLUS, && case_sem_INSN_ST_PLUS },
149a5a4af3bSchristos     { M32R2F_INSN_STH_PLUS, && case_sem_INSN_STH_PLUS },
150a5a4af3bSchristos     { M32R2F_INSN_STB_PLUS, && case_sem_INSN_STB_PLUS },
151a5a4af3bSchristos     { M32R2F_INSN_ST_MINUS, && case_sem_INSN_ST_MINUS },
152a5a4af3bSchristos     { M32R2F_INSN_SUB, && case_sem_INSN_SUB },
153a5a4af3bSchristos     { M32R2F_INSN_SUBV, && case_sem_INSN_SUBV },
154a5a4af3bSchristos     { M32R2F_INSN_SUBX, && case_sem_INSN_SUBX },
155a5a4af3bSchristos     { M32R2F_INSN_TRAP, && case_sem_INSN_TRAP },
156a5a4af3bSchristos     { M32R2F_INSN_UNLOCK, && case_sem_INSN_UNLOCK },
157a5a4af3bSchristos     { M32R2F_INSN_SATB, && case_sem_INSN_SATB },
158a5a4af3bSchristos     { M32R2F_INSN_SATH, && case_sem_INSN_SATH },
159a5a4af3bSchristos     { M32R2F_INSN_SAT, && case_sem_INSN_SAT },
160a5a4af3bSchristos     { M32R2F_INSN_PCMPBZ, && case_sem_INSN_PCMPBZ },
161a5a4af3bSchristos     { M32R2F_INSN_SADD, && case_sem_INSN_SADD },
162a5a4af3bSchristos     { M32R2F_INSN_MACWU1, && case_sem_INSN_MACWU1 },
163a5a4af3bSchristos     { M32R2F_INSN_MSBLO, && case_sem_INSN_MSBLO },
164a5a4af3bSchristos     { M32R2F_INSN_MULWU1, && case_sem_INSN_MULWU1 },
165a5a4af3bSchristos     { M32R2F_INSN_MACLH1, && case_sem_INSN_MACLH1 },
166a5a4af3bSchristos     { M32R2F_INSN_SC, && case_sem_INSN_SC },
167a5a4af3bSchristos     { M32R2F_INSN_SNC, && case_sem_INSN_SNC },
168a5a4af3bSchristos     { M32R2F_INSN_CLRPSW, && case_sem_INSN_CLRPSW },
169a5a4af3bSchristos     { M32R2F_INSN_SETPSW, && case_sem_INSN_SETPSW },
170a5a4af3bSchristos     { M32R2F_INSN_BSET, && case_sem_INSN_BSET },
171a5a4af3bSchristos     { M32R2F_INSN_BCLR, && case_sem_INSN_BCLR },
172a5a4af3bSchristos     { M32R2F_INSN_BTST, && case_sem_INSN_BTST },
173a5a4af3bSchristos     { M32R2F_INSN_PAR_ADD, && case_sem_INSN_PAR_ADD },
174a5a4af3bSchristos     { M32R2F_INSN_WRITE_ADD, && case_sem_INSN_WRITE_ADD },
175a5a4af3bSchristos     { M32R2F_INSN_PAR_AND, && case_sem_INSN_PAR_AND },
176a5a4af3bSchristos     { M32R2F_INSN_WRITE_AND, && case_sem_INSN_WRITE_AND },
177a5a4af3bSchristos     { M32R2F_INSN_PAR_OR, && case_sem_INSN_PAR_OR },
178a5a4af3bSchristos     { M32R2F_INSN_WRITE_OR, && case_sem_INSN_WRITE_OR },
179a5a4af3bSchristos     { M32R2F_INSN_PAR_XOR, && case_sem_INSN_PAR_XOR },
180a5a4af3bSchristos     { M32R2F_INSN_WRITE_XOR, && case_sem_INSN_WRITE_XOR },
181a5a4af3bSchristos     { M32R2F_INSN_PAR_ADDI, && case_sem_INSN_PAR_ADDI },
182a5a4af3bSchristos     { M32R2F_INSN_WRITE_ADDI, && case_sem_INSN_WRITE_ADDI },
183a5a4af3bSchristos     { M32R2F_INSN_PAR_ADDV, && case_sem_INSN_PAR_ADDV },
184a5a4af3bSchristos     { M32R2F_INSN_WRITE_ADDV, && case_sem_INSN_WRITE_ADDV },
185a5a4af3bSchristos     { M32R2F_INSN_PAR_ADDX, && case_sem_INSN_PAR_ADDX },
186a5a4af3bSchristos     { M32R2F_INSN_WRITE_ADDX, && case_sem_INSN_WRITE_ADDX },
187a5a4af3bSchristos     { M32R2F_INSN_PAR_BC8, && case_sem_INSN_PAR_BC8 },
188a5a4af3bSchristos     { M32R2F_INSN_WRITE_BC8, && case_sem_INSN_WRITE_BC8 },
189a5a4af3bSchristos     { M32R2F_INSN_PAR_BL8, && case_sem_INSN_PAR_BL8 },
190a5a4af3bSchristos     { M32R2F_INSN_WRITE_BL8, && case_sem_INSN_WRITE_BL8 },
191a5a4af3bSchristos     { M32R2F_INSN_PAR_BCL8, && case_sem_INSN_PAR_BCL8 },
192a5a4af3bSchristos     { M32R2F_INSN_WRITE_BCL8, && case_sem_INSN_WRITE_BCL8 },
193a5a4af3bSchristos     { M32R2F_INSN_PAR_BNC8, && case_sem_INSN_PAR_BNC8 },
194a5a4af3bSchristos     { M32R2F_INSN_WRITE_BNC8, && case_sem_INSN_WRITE_BNC8 },
195a5a4af3bSchristos     { M32R2F_INSN_PAR_BRA8, && case_sem_INSN_PAR_BRA8 },
196a5a4af3bSchristos     { M32R2F_INSN_WRITE_BRA8, && case_sem_INSN_WRITE_BRA8 },
197a5a4af3bSchristos     { M32R2F_INSN_PAR_BNCL8, && case_sem_INSN_PAR_BNCL8 },
198a5a4af3bSchristos     { M32R2F_INSN_WRITE_BNCL8, && case_sem_INSN_WRITE_BNCL8 },
199a5a4af3bSchristos     { M32R2F_INSN_PAR_CMP, && case_sem_INSN_PAR_CMP },
200a5a4af3bSchristos     { M32R2F_INSN_WRITE_CMP, && case_sem_INSN_WRITE_CMP },
201a5a4af3bSchristos     { M32R2F_INSN_PAR_CMPU, && case_sem_INSN_PAR_CMPU },
202a5a4af3bSchristos     { M32R2F_INSN_WRITE_CMPU, && case_sem_INSN_WRITE_CMPU },
203a5a4af3bSchristos     { M32R2F_INSN_PAR_CMPEQ, && case_sem_INSN_PAR_CMPEQ },
204a5a4af3bSchristos     { M32R2F_INSN_WRITE_CMPEQ, && case_sem_INSN_WRITE_CMPEQ },
205a5a4af3bSchristos     { M32R2F_INSN_PAR_CMPZ, && case_sem_INSN_PAR_CMPZ },
206a5a4af3bSchristos     { M32R2F_INSN_WRITE_CMPZ, && case_sem_INSN_WRITE_CMPZ },
207a5a4af3bSchristos     { M32R2F_INSN_PAR_JC, && case_sem_INSN_PAR_JC },
208a5a4af3bSchristos     { M32R2F_INSN_WRITE_JC, && case_sem_INSN_WRITE_JC },
209a5a4af3bSchristos     { M32R2F_INSN_PAR_JNC, && case_sem_INSN_PAR_JNC },
210a5a4af3bSchristos     { M32R2F_INSN_WRITE_JNC, && case_sem_INSN_WRITE_JNC },
211a5a4af3bSchristos     { M32R2F_INSN_PAR_JL, && case_sem_INSN_PAR_JL },
212a5a4af3bSchristos     { M32R2F_INSN_WRITE_JL, && case_sem_INSN_WRITE_JL },
213a5a4af3bSchristos     { M32R2F_INSN_PAR_JMP, && case_sem_INSN_PAR_JMP },
214a5a4af3bSchristos     { M32R2F_INSN_WRITE_JMP, && case_sem_INSN_WRITE_JMP },
215a5a4af3bSchristos     { M32R2F_INSN_PAR_LD, && case_sem_INSN_PAR_LD },
216a5a4af3bSchristos     { M32R2F_INSN_WRITE_LD, && case_sem_INSN_WRITE_LD },
217a5a4af3bSchristos     { M32R2F_INSN_PAR_LDB, && case_sem_INSN_PAR_LDB },
218a5a4af3bSchristos     { M32R2F_INSN_WRITE_LDB, && case_sem_INSN_WRITE_LDB },
219a5a4af3bSchristos     { M32R2F_INSN_PAR_LDH, && case_sem_INSN_PAR_LDH },
220a5a4af3bSchristos     { M32R2F_INSN_WRITE_LDH, && case_sem_INSN_WRITE_LDH },
221a5a4af3bSchristos     { M32R2F_INSN_PAR_LDUB, && case_sem_INSN_PAR_LDUB },
222a5a4af3bSchristos     { M32R2F_INSN_WRITE_LDUB, && case_sem_INSN_WRITE_LDUB },
223a5a4af3bSchristos     { M32R2F_INSN_PAR_LDUH, && case_sem_INSN_PAR_LDUH },
224a5a4af3bSchristos     { M32R2F_INSN_WRITE_LDUH, && case_sem_INSN_WRITE_LDUH },
225a5a4af3bSchristos     { M32R2F_INSN_PAR_LD_PLUS, && case_sem_INSN_PAR_LD_PLUS },
226a5a4af3bSchristos     { M32R2F_INSN_WRITE_LD_PLUS, && case_sem_INSN_WRITE_LD_PLUS },
227a5a4af3bSchristos     { M32R2F_INSN_PAR_LDI8, && case_sem_INSN_PAR_LDI8 },
228a5a4af3bSchristos     { M32R2F_INSN_WRITE_LDI8, && case_sem_INSN_WRITE_LDI8 },
229a5a4af3bSchristos     { M32R2F_INSN_PAR_LOCK, && case_sem_INSN_PAR_LOCK },
230a5a4af3bSchristos     { M32R2F_INSN_WRITE_LOCK, && case_sem_INSN_WRITE_LOCK },
231a5a4af3bSchristos     { M32R2F_INSN_PAR_MACHI_A, && case_sem_INSN_PAR_MACHI_A },
232a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACHI_A, && case_sem_INSN_WRITE_MACHI_A },
233a5a4af3bSchristos     { M32R2F_INSN_PAR_MACLO_A, && case_sem_INSN_PAR_MACLO_A },
234a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACLO_A, && case_sem_INSN_WRITE_MACLO_A },
235a5a4af3bSchristos     { M32R2F_INSN_PAR_MACWHI_A, && case_sem_INSN_PAR_MACWHI_A },
236a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACWHI_A, && case_sem_INSN_WRITE_MACWHI_A },
237a5a4af3bSchristos     { M32R2F_INSN_PAR_MACWLO_A, && case_sem_INSN_PAR_MACWLO_A },
238a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACWLO_A, && case_sem_INSN_WRITE_MACWLO_A },
239a5a4af3bSchristos     { M32R2F_INSN_PAR_MUL, && case_sem_INSN_PAR_MUL },
240a5a4af3bSchristos     { M32R2F_INSN_WRITE_MUL, && case_sem_INSN_WRITE_MUL },
241a5a4af3bSchristos     { M32R2F_INSN_PAR_MULHI_A, && case_sem_INSN_PAR_MULHI_A },
242a5a4af3bSchristos     { M32R2F_INSN_WRITE_MULHI_A, && case_sem_INSN_WRITE_MULHI_A },
243a5a4af3bSchristos     { M32R2F_INSN_PAR_MULLO_A, && case_sem_INSN_PAR_MULLO_A },
244a5a4af3bSchristos     { M32R2F_INSN_WRITE_MULLO_A, && case_sem_INSN_WRITE_MULLO_A },
245a5a4af3bSchristos     { M32R2F_INSN_PAR_MULWHI_A, && case_sem_INSN_PAR_MULWHI_A },
246a5a4af3bSchristos     { M32R2F_INSN_WRITE_MULWHI_A, && case_sem_INSN_WRITE_MULWHI_A },
247a5a4af3bSchristos     { M32R2F_INSN_PAR_MULWLO_A, && case_sem_INSN_PAR_MULWLO_A },
248a5a4af3bSchristos     { M32R2F_INSN_WRITE_MULWLO_A, && case_sem_INSN_WRITE_MULWLO_A },
249a5a4af3bSchristos     { M32R2F_INSN_PAR_MV, && case_sem_INSN_PAR_MV },
250a5a4af3bSchristos     { M32R2F_INSN_WRITE_MV, && case_sem_INSN_WRITE_MV },
251a5a4af3bSchristos     { M32R2F_INSN_PAR_MVFACHI_A, && case_sem_INSN_PAR_MVFACHI_A },
252a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVFACHI_A, && case_sem_INSN_WRITE_MVFACHI_A },
253a5a4af3bSchristos     { M32R2F_INSN_PAR_MVFACLO_A, && case_sem_INSN_PAR_MVFACLO_A },
254a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVFACLO_A, && case_sem_INSN_WRITE_MVFACLO_A },
255a5a4af3bSchristos     { M32R2F_INSN_PAR_MVFACMI_A, && case_sem_INSN_PAR_MVFACMI_A },
256a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVFACMI_A, && case_sem_INSN_WRITE_MVFACMI_A },
257a5a4af3bSchristos     { M32R2F_INSN_PAR_MVFC, && case_sem_INSN_PAR_MVFC },
258a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVFC, && case_sem_INSN_WRITE_MVFC },
259a5a4af3bSchristos     { M32R2F_INSN_PAR_MVTACHI_A, && case_sem_INSN_PAR_MVTACHI_A },
260a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVTACHI_A, && case_sem_INSN_WRITE_MVTACHI_A },
261a5a4af3bSchristos     { M32R2F_INSN_PAR_MVTACLO_A, && case_sem_INSN_PAR_MVTACLO_A },
262a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVTACLO_A, && case_sem_INSN_WRITE_MVTACLO_A },
263a5a4af3bSchristos     { M32R2F_INSN_PAR_MVTC, && case_sem_INSN_PAR_MVTC },
264a5a4af3bSchristos     { M32R2F_INSN_WRITE_MVTC, && case_sem_INSN_WRITE_MVTC },
265a5a4af3bSchristos     { M32R2F_INSN_PAR_NEG, && case_sem_INSN_PAR_NEG },
266a5a4af3bSchristos     { M32R2F_INSN_WRITE_NEG, && case_sem_INSN_WRITE_NEG },
267a5a4af3bSchristos     { M32R2F_INSN_PAR_NOP, && case_sem_INSN_PAR_NOP },
268a5a4af3bSchristos     { M32R2F_INSN_WRITE_NOP, && case_sem_INSN_WRITE_NOP },
269a5a4af3bSchristos     { M32R2F_INSN_PAR_NOT, && case_sem_INSN_PAR_NOT },
270a5a4af3bSchristos     { M32R2F_INSN_WRITE_NOT, && case_sem_INSN_WRITE_NOT },
271a5a4af3bSchristos     { M32R2F_INSN_PAR_RAC_DSI, && case_sem_INSN_PAR_RAC_DSI },
272a5a4af3bSchristos     { M32R2F_INSN_WRITE_RAC_DSI, && case_sem_INSN_WRITE_RAC_DSI },
273a5a4af3bSchristos     { M32R2F_INSN_PAR_RACH_DSI, && case_sem_INSN_PAR_RACH_DSI },
274a5a4af3bSchristos     { M32R2F_INSN_WRITE_RACH_DSI, && case_sem_INSN_WRITE_RACH_DSI },
275a5a4af3bSchristos     { M32R2F_INSN_PAR_RTE, && case_sem_INSN_PAR_RTE },
276a5a4af3bSchristos     { M32R2F_INSN_WRITE_RTE, && case_sem_INSN_WRITE_RTE },
277a5a4af3bSchristos     { M32R2F_INSN_PAR_SLL, && case_sem_INSN_PAR_SLL },
278a5a4af3bSchristos     { M32R2F_INSN_WRITE_SLL, && case_sem_INSN_WRITE_SLL },
279a5a4af3bSchristos     { M32R2F_INSN_PAR_SLLI, && case_sem_INSN_PAR_SLLI },
280a5a4af3bSchristos     { M32R2F_INSN_WRITE_SLLI, && case_sem_INSN_WRITE_SLLI },
281a5a4af3bSchristos     { M32R2F_INSN_PAR_SRA, && case_sem_INSN_PAR_SRA },
282a5a4af3bSchristos     { M32R2F_INSN_WRITE_SRA, && case_sem_INSN_WRITE_SRA },
283a5a4af3bSchristos     { M32R2F_INSN_PAR_SRAI, && case_sem_INSN_PAR_SRAI },
284a5a4af3bSchristos     { M32R2F_INSN_WRITE_SRAI, && case_sem_INSN_WRITE_SRAI },
285a5a4af3bSchristos     { M32R2F_INSN_PAR_SRL, && case_sem_INSN_PAR_SRL },
286a5a4af3bSchristos     { M32R2F_INSN_WRITE_SRL, && case_sem_INSN_WRITE_SRL },
287a5a4af3bSchristos     { M32R2F_INSN_PAR_SRLI, && case_sem_INSN_PAR_SRLI },
288a5a4af3bSchristos     { M32R2F_INSN_WRITE_SRLI, && case_sem_INSN_WRITE_SRLI },
289a5a4af3bSchristos     { M32R2F_INSN_PAR_ST, && case_sem_INSN_PAR_ST },
290a5a4af3bSchristos     { M32R2F_INSN_WRITE_ST, && case_sem_INSN_WRITE_ST },
291a5a4af3bSchristos     { M32R2F_INSN_PAR_STB, && case_sem_INSN_PAR_STB },
292a5a4af3bSchristos     { M32R2F_INSN_WRITE_STB, && case_sem_INSN_WRITE_STB },
293a5a4af3bSchristos     { M32R2F_INSN_PAR_STH, && case_sem_INSN_PAR_STH },
294a5a4af3bSchristos     { M32R2F_INSN_WRITE_STH, && case_sem_INSN_WRITE_STH },
295a5a4af3bSchristos     { M32R2F_INSN_PAR_ST_PLUS, && case_sem_INSN_PAR_ST_PLUS },
296a5a4af3bSchristos     { M32R2F_INSN_WRITE_ST_PLUS, && case_sem_INSN_WRITE_ST_PLUS },
297a5a4af3bSchristos     { M32R2F_INSN_PAR_STH_PLUS, && case_sem_INSN_PAR_STH_PLUS },
298a5a4af3bSchristos     { M32R2F_INSN_WRITE_STH_PLUS, && case_sem_INSN_WRITE_STH_PLUS },
299a5a4af3bSchristos     { M32R2F_INSN_PAR_STB_PLUS, && case_sem_INSN_PAR_STB_PLUS },
300a5a4af3bSchristos     { M32R2F_INSN_WRITE_STB_PLUS, && case_sem_INSN_WRITE_STB_PLUS },
301a5a4af3bSchristos     { M32R2F_INSN_PAR_ST_MINUS, && case_sem_INSN_PAR_ST_MINUS },
302a5a4af3bSchristos     { M32R2F_INSN_WRITE_ST_MINUS, && case_sem_INSN_WRITE_ST_MINUS },
303a5a4af3bSchristos     { M32R2F_INSN_PAR_SUB, && case_sem_INSN_PAR_SUB },
304a5a4af3bSchristos     { M32R2F_INSN_WRITE_SUB, && case_sem_INSN_WRITE_SUB },
305a5a4af3bSchristos     { M32R2F_INSN_PAR_SUBV, && case_sem_INSN_PAR_SUBV },
306a5a4af3bSchristos     { M32R2F_INSN_WRITE_SUBV, && case_sem_INSN_WRITE_SUBV },
307a5a4af3bSchristos     { M32R2F_INSN_PAR_SUBX, && case_sem_INSN_PAR_SUBX },
308a5a4af3bSchristos     { M32R2F_INSN_WRITE_SUBX, && case_sem_INSN_WRITE_SUBX },
309a5a4af3bSchristos     { M32R2F_INSN_PAR_TRAP, && case_sem_INSN_PAR_TRAP },
310a5a4af3bSchristos     { M32R2F_INSN_WRITE_TRAP, && case_sem_INSN_WRITE_TRAP },
311a5a4af3bSchristos     { M32R2F_INSN_PAR_UNLOCK, && case_sem_INSN_PAR_UNLOCK },
312a5a4af3bSchristos     { M32R2F_INSN_WRITE_UNLOCK, && case_sem_INSN_WRITE_UNLOCK },
313a5a4af3bSchristos     { M32R2F_INSN_PAR_PCMPBZ, && case_sem_INSN_PAR_PCMPBZ },
314a5a4af3bSchristos     { M32R2F_INSN_WRITE_PCMPBZ, && case_sem_INSN_WRITE_PCMPBZ },
315a5a4af3bSchristos     { M32R2F_INSN_PAR_SADD, && case_sem_INSN_PAR_SADD },
316a5a4af3bSchristos     { M32R2F_INSN_WRITE_SADD, && case_sem_INSN_WRITE_SADD },
317a5a4af3bSchristos     { M32R2F_INSN_PAR_MACWU1, && case_sem_INSN_PAR_MACWU1 },
318a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACWU1, && case_sem_INSN_WRITE_MACWU1 },
319a5a4af3bSchristos     { M32R2F_INSN_PAR_MSBLO, && case_sem_INSN_PAR_MSBLO },
320a5a4af3bSchristos     { M32R2F_INSN_WRITE_MSBLO, && case_sem_INSN_WRITE_MSBLO },
321a5a4af3bSchristos     { M32R2F_INSN_PAR_MULWU1, && case_sem_INSN_PAR_MULWU1 },
322a5a4af3bSchristos     { M32R2F_INSN_WRITE_MULWU1, && case_sem_INSN_WRITE_MULWU1 },
323a5a4af3bSchristos     { M32R2F_INSN_PAR_MACLH1, && case_sem_INSN_PAR_MACLH1 },
324a5a4af3bSchristos     { M32R2F_INSN_WRITE_MACLH1, && case_sem_INSN_WRITE_MACLH1 },
325a5a4af3bSchristos     { M32R2F_INSN_PAR_SC, && case_sem_INSN_PAR_SC },
326a5a4af3bSchristos     { M32R2F_INSN_WRITE_SC, && case_sem_INSN_WRITE_SC },
327a5a4af3bSchristos     { M32R2F_INSN_PAR_SNC, && case_sem_INSN_PAR_SNC },
328a5a4af3bSchristos     { M32R2F_INSN_WRITE_SNC, && case_sem_INSN_WRITE_SNC },
329a5a4af3bSchristos     { M32R2F_INSN_PAR_CLRPSW, && case_sem_INSN_PAR_CLRPSW },
330a5a4af3bSchristos     { M32R2F_INSN_WRITE_CLRPSW, && case_sem_INSN_WRITE_CLRPSW },
331a5a4af3bSchristos     { M32R2F_INSN_PAR_SETPSW, && case_sem_INSN_PAR_SETPSW },
332a5a4af3bSchristos     { M32R2F_INSN_WRITE_SETPSW, && case_sem_INSN_WRITE_SETPSW },
333a5a4af3bSchristos     { M32R2F_INSN_PAR_BTST, && case_sem_INSN_PAR_BTST },
334a5a4af3bSchristos     { M32R2F_INSN_WRITE_BTST, && case_sem_INSN_WRITE_BTST },
335a5a4af3bSchristos     { 0, 0 }
336a5a4af3bSchristos   };
337a5a4af3bSchristos   int i;
338a5a4af3bSchristos 
339a5a4af3bSchristos   for (i = 0; labels[i].label != 0; ++i)
340a5a4af3bSchristos     {
341a5a4af3bSchristos #if FAST_P
342a5a4af3bSchristos       CPU_IDESC (current_cpu) [labels[i].index].sem_fast_lab = labels[i].label;
343a5a4af3bSchristos #else
344a5a4af3bSchristos       CPU_IDESC (current_cpu) [labels[i].index].sem_full_lab = labels[i].label;
345a5a4af3bSchristos #endif
346a5a4af3bSchristos     }
347a5a4af3bSchristos 
348a5a4af3bSchristos #undef DEFINE_LABELS
349a5a4af3bSchristos #endif /* DEFINE_LABELS */
350a5a4af3bSchristos 
351a5a4af3bSchristos #ifdef DEFINE_SWITCH
352a5a4af3bSchristos 
353a5a4af3bSchristos /* If hyper-fast [well not unnecessarily slow] execution is selected, turn
354a5a4af3bSchristos    off frills like tracing and profiling.  */
355a5a4af3bSchristos /* FIXME: A better way would be to have CGEN_TRACE_RESULT check for something
356a5a4af3bSchristos    that can cause it to be optimized out.  Another way would be to emit
357a5a4af3bSchristos    special handlers into the instruction "stream".  */
358a5a4af3bSchristos 
359a5a4af3bSchristos #if FAST_P
360a5a4af3bSchristos #undef CGEN_TRACE_RESULT
361a5a4af3bSchristos #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val)
362a5a4af3bSchristos #endif
363a5a4af3bSchristos 
364a5a4af3bSchristos #undef GET_ATTR
365a5a4af3bSchristos #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr)
366a5a4af3bSchristos 
367a5a4af3bSchristos {
368a5a4af3bSchristos 
369a5a4af3bSchristos #if WITH_SCACHE_PBB
370a5a4af3bSchristos 
371a5a4af3bSchristos /* Branch to next handler without going around main loop.  */
372a5a4af3bSchristos #define NEXT(vpc) goto * SEM_ARGBUF (vpc) -> semantic.sem_case
373a5a4af3bSchristos SWITCH (sem, SEM_ARGBUF (vpc) -> semantic.sem_case)
374a5a4af3bSchristos 
375a5a4af3bSchristos #else /* ! WITH_SCACHE_PBB */
376a5a4af3bSchristos 
377a5a4af3bSchristos #define NEXT(vpc) BREAK (sem)
378a5a4af3bSchristos #ifdef __GNUC__
379a5a4af3bSchristos #if FAST_P
380a5a4af3bSchristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_fast_lab)
381a5a4af3bSchristos #else
382a5a4af3bSchristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->sem_full_lab)
383a5a4af3bSchristos #endif
384a5a4af3bSchristos #else
385a5a4af3bSchristos   SWITCH (sem, SEM_ARGBUF (sc) -> idesc->num)
386a5a4af3bSchristos #endif
387a5a4af3bSchristos 
388a5a4af3bSchristos #endif /* ! WITH_SCACHE_PBB */
389a5a4af3bSchristos 
390a5a4af3bSchristos     {
391a5a4af3bSchristos 
392a5a4af3bSchristos   CASE (sem, INSN_X_INVALID) : /* --invalid-- */
393a5a4af3bSchristos {
394a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
395a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
396a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
397a5a4af3bSchristos   int UNUSED written = 0;
398a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
399a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
400a5a4af3bSchristos 
401a5a4af3bSchristos   {
402a5a4af3bSchristos     /* Update the recorded pc in the cpu state struct.
403a5a4af3bSchristos        Only necessary for WITH_SCACHE case, but to avoid the
404a5a4af3bSchristos        conditional compilation ....  */
405a5a4af3bSchristos     SET_H_PC (pc);
406a5a4af3bSchristos     /* Virtual insns have zero size.  Overwrite vpc with address of next insn
407a5a4af3bSchristos        using the default-insn-bitsize spec.  When executing insns in parallel
408a5a4af3bSchristos        we may want to queue the fault and continue execution.  */
409a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
410a5a4af3bSchristos     vpc = sim_engine_invalid_insn (current_cpu, pc, vpc);
411a5a4af3bSchristos   }
412a5a4af3bSchristos 
413a5a4af3bSchristos #undef FLD
414a5a4af3bSchristos }
415a5a4af3bSchristos   NEXT (vpc);
416a5a4af3bSchristos 
417a5a4af3bSchristos   CASE (sem, INSN_X_AFTER) : /* --after-- */
418a5a4af3bSchristos {
419a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
420a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
421a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
422a5a4af3bSchristos   int UNUSED written = 0;
423a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
424a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
425a5a4af3bSchristos 
426a5a4af3bSchristos   {
427a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F
428a5a4af3bSchristos     m32r2f_pbb_after (current_cpu, sem_arg);
429a5a4af3bSchristos #endif
430a5a4af3bSchristos   }
431a5a4af3bSchristos 
432a5a4af3bSchristos #undef FLD
433a5a4af3bSchristos }
434a5a4af3bSchristos   NEXT (vpc);
435a5a4af3bSchristos 
436a5a4af3bSchristos   CASE (sem, INSN_X_BEFORE) : /* --before-- */
437a5a4af3bSchristos {
438a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
439a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
440a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
441a5a4af3bSchristos   int UNUSED written = 0;
442a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
443a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
444a5a4af3bSchristos 
445a5a4af3bSchristos   {
446a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F
447a5a4af3bSchristos     m32r2f_pbb_before (current_cpu, sem_arg);
448a5a4af3bSchristos #endif
449a5a4af3bSchristos   }
450a5a4af3bSchristos 
451a5a4af3bSchristos #undef FLD
452a5a4af3bSchristos }
453a5a4af3bSchristos   NEXT (vpc);
454a5a4af3bSchristos 
455a5a4af3bSchristos   CASE (sem, INSN_X_CTI_CHAIN) : /* --cti-chain-- */
456a5a4af3bSchristos {
457a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
458a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
459a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
460a5a4af3bSchristos   int UNUSED written = 0;
461a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
462a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
463a5a4af3bSchristos 
464a5a4af3bSchristos   {
465a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F
466a5a4af3bSchristos #ifdef DEFINE_SWITCH
467a5a4af3bSchristos     vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg,
468a5a4af3bSchristos 			       pbb_br_type, pbb_br_npc);
469a5a4af3bSchristos     BREAK (sem);
470a5a4af3bSchristos #else
471a5a4af3bSchristos     /* FIXME: Allow provision of explicit ifmt spec in insn spec.  */
472a5a4af3bSchristos     vpc = m32r2f_pbb_cti_chain (current_cpu, sem_arg,
473a5a4af3bSchristos 			       CPU_PBB_BR_TYPE (current_cpu),
474a5a4af3bSchristos 			       CPU_PBB_BR_NPC (current_cpu));
475a5a4af3bSchristos #endif
476a5a4af3bSchristos #endif
477a5a4af3bSchristos   }
478a5a4af3bSchristos 
479a5a4af3bSchristos #undef FLD
480a5a4af3bSchristos }
481a5a4af3bSchristos   NEXT (vpc);
482a5a4af3bSchristos 
483a5a4af3bSchristos   CASE (sem, INSN_X_CHAIN) : /* --chain-- */
484a5a4af3bSchristos {
485a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
486a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
487a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
488a5a4af3bSchristos   int UNUSED written = 0;
489a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
490a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
491a5a4af3bSchristos 
492a5a4af3bSchristos   {
493a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F
494a5a4af3bSchristos     vpc = m32r2f_pbb_chain (current_cpu, sem_arg);
495a5a4af3bSchristos #ifdef DEFINE_SWITCH
496a5a4af3bSchristos     BREAK (sem);
497a5a4af3bSchristos #endif
498a5a4af3bSchristos #endif
499a5a4af3bSchristos   }
500a5a4af3bSchristos 
501a5a4af3bSchristos #undef FLD
502a5a4af3bSchristos }
503a5a4af3bSchristos   NEXT (vpc);
504a5a4af3bSchristos 
505a5a4af3bSchristos   CASE (sem, INSN_X_BEGIN) : /* --begin-- */
506a5a4af3bSchristos {
507a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
508a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
509a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
510a5a4af3bSchristos   int UNUSED written = 0;
511a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
512a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
513a5a4af3bSchristos 
514a5a4af3bSchristos   {
515a5a4af3bSchristos #if WITH_SCACHE_PBB_M32R2F
516a5a4af3bSchristos #if defined DEFINE_SWITCH || defined FAST_P
517a5a4af3bSchristos     /* In the switch case FAST_P is a constant, allowing several optimizations
518a5a4af3bSchristos        in any called inline functions.  */
519a5a4af3bSchristos     vpc = m32r2f_pbb_begin (current_cpu, FAST_P);
520a5a4af3bSchristos #else
521a5a4af3bSchristos #if 0 /* cgen engine can't handle dynamic fast/full switching yet.  */
522a5a4af3bSchristos     vpc = m32r2f_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu)));
523a5a4af3bSchristos #else
524a5a4af3bSchristos     vpc = m32r2f_pbb_begin (current_cpu, 0);
525a5a4af3bSchristos #endif
526a5a4af3bSchristos #endif
527a5a4af3bSchristos #endif
528a5a4af3bSchristos   }
529a5a4af3bSchristos 
530a5a4af3bSchristos #undef FLD
531a5a4af3bSchristos }
532a5a4af3bSchristos   NEXT (vpc);
533a5a4af3bSchristos 
534a5a4af3bSchristos   CASE (sem, INSN_ADD) : /* add $dr,$sr */
535a5a4af3bSchristos {
536a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
537a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
538a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
539a5a4af3bSchristos   int UNUSED written = 0;
540a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
541a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
542a5a4af3bSchristos 
543a5a4af3bSchristos   {
544a5a4af3bSchristos     SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
545a5a4af3bSchristos     * FLD (i_dr) = opval;
546a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
547a5a4af3bSchristos   }
548a5a4af3bSchristos 
549a5a4af3bSchristos #undef FLD
550a5a4af3bSchristos }
551a5a4af3bSchristos   NEXT (vpc);
552a5a4af3bSchristos 
553a5a4af3bSchristos   CASE (sem, INSN_ADD3) : /* add3 $dr,$sr,$hash$slo16 */
554a5a4af3bSchristos {
555a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
556a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
557a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
558a5a4af3bSchristos   int UNUSED written = 0;
559a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
560a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
561a5a4af3bSchristos 
562a5a4af3bSchristos   {
563a5a4af3bSchristos     SI opval = ADDSI (* FLD (i_sr), FLD (f_simm16));
564a5a4af3bSchristos     * FLD (i_dr) = opval;
565a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
566a5a4af3bSchristos   }
567a5a4af3bSchristos 
568a5a4af3bSchristos #undef FLD
569a5a4af3bSchristos }
570a5a4af3bSchristos   NEXT (vpc);
571a5a4af3bSchristos 
572a5a4af3bSchristos   CASE (sem, INSN_AND) : /* and $dr,$sr */
573a5a4af3bSchristos {
574a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
575a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
576a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
577a5a4af3bSchristos   int UNUSED written = 0;
578a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
579a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
580a5a4af3bSchristos 
581a5a4af3bSchristos   {
582a5a4af3bSchristos     SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
583a5a4af3bSchristos     * FLD (i_dr) = opval;
584a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
585a5a4af3bSchristos   }
586a5a4af3bSchristos 
587a5a4af3bSchristos #undef FLD
588a5a4af3bSchristos }
589a5a4af3bSchristos   NEXT (vpc);
590a5a4af3bSchristos 
591a5a4af3bSchristos   CASE (sem, INSN_AND3) : /* and3 $dr,$sr,$uimm16 */
592a5a4af3bSchristos {
593a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
594a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
595a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f
596a5a4af3bSchristos   int UNUSED written = 0;
597a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
598a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
599a5a4af3bSchristos 
600a5a4af3bSchristos   {
601a5a4af3bSchristos     SI opval = ANDSI (* FLD (i_sr), FLD (f_uimm16));
602a5a4af3bSchristos     * FLD (i_dr) = opval;
603a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
604a5a4af3bSchristos   }
605a5a4af3bSchristos 
606a5a4af3bSchristos #undef FLD
607a5a4af3bSchristos }
608a5a4af3bSchristos   NEXT (vpc);
609a5a4af3bSchristos 
610a5a4af3bSchristos   CASE (sem, INSN_OR) : /* or $dr,$sr */
611a5a4af3bSchristos {
612a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
613a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
614a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
615a5a4af3bSchristos   int UNUSED written = 0;
616a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
617a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
618a5a4af3bSchristos 
619a5a4af3bSchristos   {
620a5a4af3bSchristos     SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
621a5a4af3bSchristos     * FLD (i_dr) = opval;
622a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
623a5a4af3bSchristos   }
624a5a4af3bSchristos 
625a5a4af3bSchristos #undef FLD
626a5a4af3bSchristos }
627a5a4af3bSchristos   NEXT (vpc);
628a5a4af3bSchristos 
629a5a4af3bSchristos   CASE (sem, INSN_OR3) : /* or3 $dr,$sr,$hash$ulo16 */
630a5a4af3bSchristos {
631a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
632a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
633a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f
634a5a4af3bSchristos   int UNUSED written = 0;
635a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
636a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
637a5a4af3bSchristos 
638a5a4af3bSchristos   {
639a5a4af3bSchristos     SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16));
640a5a4af3bSchristos     * FLD (i_dr) = opval;
641a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
642a5a4af3bSchristos   }
643a5a4af3bSchristos 
644a5a4af3bSchristos #undef FLD
645a5a4af3bSchristos }
646a5a4af3bSchristos   NEXT (vpc);
647a5a4af3bSchristos 
648a5a4af3bSchristos   CASE (sem, INSN_XOR) : /* xor $dr,$sr */
649a5a4af3bSchristos {
650a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
651a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
652a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
653a5a4af3bSchristos   int UNUSED written = 0;
654a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
655a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
656a5a4af3bSchristos 
657a5a4af3bSchristos   {
658a5a4af3bSchristos     SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
659a5a4af3bSchristos     * FLD (i_dr) = opval;
660a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
661a5a4af3bSchristos   }
662a5a4af3bSchristos 
663a5a4af3bSchristos #undef FLD
664a5a4af3bSchristos }
665a5a4af3bSchristos   NEXT (vpc);
666a5a4af3bSchristos 
667a5a4af3bSchristos   CASE (sem, INSN_XOR3) : /* xor3 $dr,$sr,$uimm16 */
668a5a4af3bSchristos {
669a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
670a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
671a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_and3.f
672a5a4af3bSchristos   int UNUSED written = 0;
673a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
674a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
675a5a4af3bSchristos 
676a5a4af3bSchristos   {
677a5a4af3bSchristos     SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16));
678a5a4af3bSchristos     * FLD (i_dr) = opval;
679a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
680a5a4af3bSchristos   }
681a5a4af3bSchristos 
682a5a4af3bSchristos #undef FLD
683a5a4af3bSchristos }
684a5a4af3bSchristos   NEXT (vpc);
685a5a4af3bSchristos 
686a5a4af3bSchristos   CASE (sem, INSN_ADDI) : /* addi $dr,$simm8 */
687a5a4af3bSchristos {
688a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
689a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
690a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
691a5a4af3bSchristos   int UNUSED written = 0;
692a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
693a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
694a5a4af3bSchristos 
695a5a4af3bSchristos   {
696a5a4af3bSchristos     SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
697a5a4af3bSchristos     * FLD (i_dr) = opval;
698a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
699a5a4af3bSchristos   }
700a5a4af3bSchristos 
701a5a4af3bSchristos #undef FLD
702a5a4af3bSchristos }
703a5a4af3bSchristos   NEXT (vpc);
704a5a4af3bSchristos 
705a5a4af3bSchristos   CASE (sem, INSN_ADDV) : /* addv $dr,$sr */
706a5a4af3bSchristos {
707a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
708a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
709a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
710a5a4af3bSchristos   int UNUSED written = 0;
711a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
712a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
713a5a4af3bSchristos 
714a5a4af3bSchristos {
715a5a4af3bSchristos   SI temp0;BI temp1;
716a5a4af3bSchristos   temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
717a5a4af3bSchristos   temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
718a5a4af3bSchristos   {
719a5a4af3bSchristos     SI opval = temp0;
720a5a4af3bSchristos     * FLD (i_dr) = opval;
721a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
722a5a4af3bSchristos   }
723a5a4af3bSchristos   {
724a5a4af3bSchristos     BI opval = temp1;
725a5a4af3bSchristos     CPU (h_cond) = opval;
726a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
727a5a4af3bSchristos   }
728a5a4af3bSchristos }
729a5a4af3bSchristos 
730a5a4af3bSchristos #undef FLD
731a5a4af3bSchristos }
732a5a4af3bSchristos   NEXT (vpc);
733a5a4af3bSchristos 
734a5a4af3bSchristos   CASE (sem, INSN_ADDV3) : /* addv3 $dr,$sr,$simm16 */
735a5a4af3bSchristos {
736a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
737a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
738a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
739a5a4af3bSchristos   int UNUSED written = 0;
740a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
741a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
742a5a4af3bSchristos 
743a5a4af3bSchristos {
744a5a4af3bSchristos   SI temp0;BI temp1;
745a5a4af3bSchristos   temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16));
746a5a4af3bSchristos   temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0);
747a5a4af3bSchristos   {
748a5a4af3bSchristos     SI opval = temp0;
749a5a4af3bSchristos     * FLD (i_dr) = opval;
750a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
751a5a4af3bSchristos   }
752a5a4af3bSchristos   {
753a5a4af3bSchristos     BI opval = temp1;
754a5a4af3bSchristos     CPU (h_cond) = opval;
755a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
756a5a4af3bSchristos   }
757a5a4af3bSchristos }
758a5a4af3bSchristos 
759a5a4af3bSchristos #undef FLD
760a5a4af3bSchristos }
761a5a4af3bSchristos   NEXT (vpc);
762a5a4af3bSchristos 
763a5a4af3bSchristos   CASE (sem, INSN_ADDX) : /* addx $dr,$sr */
764a5a4af3bSchristos {
765a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
766a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
767a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
768a5a4af3bSchristos   int UNUSED written = 0;
769a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
770a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
771a5a4af3bSchristos 
772a5a4af3bSchristos {
773a5a4af3bSchristos   SI temp0;BI temp1;
774a5a4af3bSchristos   temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
775a5a4af3bSchristos   temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
776a5a4af3bSchristos   {
777a5a4af3bSchristos     SI opval = temp0;
778a5a4af3bSchristos     * FLD (i_dr) = opval;
779a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
780a5a4af3bSchristos   }
781a5a4af3bSchristos   {
782a5a4af3bSchristos     BI opval = temp1;
783a5a4af3bSchristos     CPU (h_cond) = opval;
784a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
785a5a4af3bSchristos   }
786a5a4af3bSchristos }
787a5a4af3bSchristos 
788a5a4af3bSchristos #undef FLD
789a5a4af3bSchristos }
790a5a4af3bSchristos   NEXT (vpc);
791a5a4af3bSchristos 
792a5a4af3bSchristos   CASE (sem, INSN_BC8) : /* bc.s $disp8 */
793a5a4af3bSchristos {
794a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
795a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
797a5a4af3bSchristos   int UNUSED written = 0;
798a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
799a5a4af3bSchristos   SEM_BRANCH_INIT
800a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
801a5a4af3bSchristos 
802a5a4af3bSchristos if (CPU (h_cond)) {
803a5a4af3bSchristos   {
804a5a4af3bSchristos     USI opval = FLD (i_disp8);
805a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
806a5a4af3bSchristos     written |= (1 << 2);
807a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
808a5a4af3bSchristos   }
809a5a4af3bSchristos }
810a5a4af3bSchristos 
811a5a4af3bSchristos   abuf->written = written;
812a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
813a5a4af3bSchristos #undef FLD
814a5a4af3bSchristos }
815a5a4af3bSchristos   NEXT (vpc);
816a5a4af3bSchristos 
817a5a4af3bSchristos   CASE (sem, INSN_BC24) : /* bc.l $disp24 */
818a5a4af3bSchristos {
819a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
820a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
821a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
822a5a4af3bSchristos   int UNUSED written = 0;
823a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
824a5a4af3bSchristos   SEM_BRANCH_INIT
825a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
826a5a4af3bSchristos 
827a5a4af3bSchristos if (CPU (h_cond)) {
828a5a4af3bSchristos   {
829a5a4af3bSchristos     USI opval = FLD (i_disp24);
830a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
831a5a4af3bSchristos     written |= (1 << 2);
832a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
833a5a4af3bSchristos   }
834a5a4af3bSchristos }
835a5a4af3bSchristos 
836a5a4af3bSchristos   abuf->written = written;
837a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
838a5a4af3bSchristos #undef FLD
839a5a4af3bSchristos }
840a5a4af3bSchristos   NEXT (vpc);
841a5a4af3bSchristos 
842a5a4af3bSchristos   CASE (sem, INSN_BEQ) : /* beq $src1,$src2,$disp16 */
843a5a4af3bSchristos {
844a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
845a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
846a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
847a5a4af3bSchristos   int UNUSED written = 0;
848a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
849a5a4af3bSchristos   SEM_BRANCH_INIT
850a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
851a5a4af3bSchristos 
852a5a4af3bSchristos if (EQSI (* FLD (i_src1), * FLD (i_src2))) {
853a5a4af3bSchristos   {
854a5a4af3bSchristos     USI opval = FLD (i_disp16);
855a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
856a5a4af3bSchristos     written |= (1 << 3);
857a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
858a5a4af3bSchristos   }
859a5a4af3bSchristos }
860a5a4af3bSchristos 
861a5a4af3bSchristos   abuf->written = written;
862a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
863a5a4af3bSchristos #undef FLD
864a5a4af3bSchristos }
865a5a4af3bSchristos   NEXT (vpc);
866a5a4af3bSchristos 
867a5a4af3bSchristos   CASE (sem, INSN_BEQZ) : /* beqz $src2,$disp16 */
868a5a4af3bSchristos {
869a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
870a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
871a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
872a5a4af3bSchristos   int UNUSED written = 0;
873a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
874a5a4af3bSchristos   SEM_BRANCH_INIT
875a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
876a5a4af3bSchristos 
877a5a4af3bSchristos if (EQSI (* FLD (i_src2), 0)) {
878a5a4af3bSchristos   {
879a5a4af3bSchristos     USI opval = FLD (i_disp16);
880a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
881a5a4af3bSchristos     written |= (1 << 2);
882a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
883a5a4af3bSchristos   }
884a5a4af3bSchristos }
885a5a4af3bSchristos 
886a5a4af3bSchristos   abuf->written = written;
887a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
888a5a4af3bSchristos #undef FLD
889a5a4af3bSchristos }
890a5a4af3bSchristos   NEXT (vpc);
891a5a4af3bSchristos 
892a5a4af3bSchristos   CASE (sem, INSN_BGEZ) : /* bgez $src2,$disp16 */
893a5a4af3bSchristos {
894a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
895a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
896a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
897a5a4af3bSchristos   int UNUSED written = 0;
898a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
899a5a4af3bSchristos   SEM_BRANCH_INIT
900a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
901a5a4af3bSchristos 
902a5a4af3bSchristos if (GESI (* FLD (i_src2), 0)) {
903a5a4af3bSchristos   {
904a5a4af3bSchristos     USI opval = FLD (i_disp16);
905a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
906a5a4af3bSchristos     written |= (1 << 2);
907a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
908a5a4af3bSchristos   }
909a5a4af3bSchristos }
910a5a4af3bSchristos 
911a5a4af3bSchristos   abuf->written = written;
912a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
913a5a4af3bSchristos #undef FLD
914a5a4af3bSchristos }
915a5a4af3bSchristos   NEXT (vpc);
916a5a4af3bSchristos 
917a5a4af3bSchristos   CASE (sem, INSN_BGTZ) : /* bgtz $src2,$disp16 */
918a5a4af3bSchristos {
919a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
920a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
921a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
922a5a4af3bSchristos   int UNUSED written = 0;
923a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
924a5a4af3bSchristos   SEM_BRANCH_INIT
925a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
926a5a4af3bSchristos 
927a5a4af3bSchristos if (GTSI (* FLD (i_src2), 0)) {
928a5a4af3bSchristos   {
929a5a4af3bSchristos     USI opval = FLD (i_disp16);
930a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
931a5a4af3bSchristos     written |= (1 << 2);
932a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
933a5a4af3bSchristos   }
934a5a4af3bSchristos }
935a5a4af3bSchristos 
936a5a4af3bSchristos   abuf->written = written;
937a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
938a5a4af3bSchristos #undef FLD
939a5a4af3bSchristos }
940a5a4af3bSchristos   NEXT (vpc);
941a5a4af3bSchristos 
942a5a4af3bSchristos   CASE (sem, INSN_BLEZ) : /* blez $src2,$disp16 */
943a5a4af3bSchristos {
944a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
945a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
946a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
947a5a4af3bSchristos   int UNUSED written = 0;
948a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
949a5a4af3bSchristos   SEM_BRANCH_INIT
950a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
951a5a4af3bSchristos 
952a5a4af3bSchristos if (LESI (* FLD (i_src2), 0)) {
953a5a4af3bSchristos   {
954a5a4af3bSchristos     USI opval = FLD (i_disp16);
955a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
956a5a4af3bSchristos     written |= (1 << 2);
957a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
958a5a4af3bSchristos   }
959a5a4af3bSchristos }
960a5a4af3bSchristos 
961a5a4af3bSchristos   abuf->written = written;
962a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
963a5a4af3bSchristos #undef FLD
964a5a4af3bSchristos }
965a5a4af3bSchristos   NEXT (vpc);
966a5a4af3bSchristos 
967a5a4af3bSchristos   CASE (sem, INSN_BLTZ) : /* bltz $src2,$disp16 */
968a5a4af3bSchristos {
969a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
970a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
971a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
972a5a4af3bSchristos   int UNUSED written = 0;
973a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
974a5a4af3bSchristos   SEM_BRANCH_INIT
975a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
976a5a4af3bSchristos 
977a5a4af3bSchristos if (LTSI (* FLD (i_src2), 0)) {
978a5a4af3bSchristos   {
979a5a4af3bSchristos     USI opval = FLD (i_disp16);
980a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
981a5a4af3bSchristos     written |= (1 << 2);
982a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
983a5a4af3bSchristos   }
984a5a4af3bSchristos }
985a5a4af3bSchristos 
986a5a4af3bSchristos   abuf->written = written;
987a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
988a5a4af3bSchristos #undef FLD
989a5a4af3bSchristos }
990a5a4af3bSchristos   NEXT (vpc);
991a5a4af3bSchristos 
992a5a4af3bSchristos   CASE (sem, INSN_BNEZ) : /* bnez $src2,$disp16 */
993a5a4af3bSchristos {
994a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
995a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
996a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
997a5a4af3bSchristos   int UNUSED written = 0;
998a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
999a5a4af3bSchristos   SEM_BRANCH_INIT
1000a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1001a5a4af3bSchristos 
1002a5a4af3bSchristos if (NESI (* FLD (i_src2), 0)) {
1003a5a4af3bSchristos   {
1004a5a4af3bSchristos     USI opval = FLD (i_disp16);
1005a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1006a5a4af3bSchristos     written |= (1 << 2);
1007a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1008a5a4af3bSchristos   }
1009a5a4af3bSchristos }
1010a5a4af3bSchristos 
1011a5a4af3bSchristos   abuf->written = written;
1012a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1013a5a4af3bSchristos #undef FLD
1014a5a4af3bSchristos }
1015a5a4af3bSchristos   NEXT (vpc);
1016a5a4af3bSchristos 
1017a5a4af3bSchristos   CASE (sem, INSN_BL8) : /* bl.s $disp8 */
1018a5a4af3bSchristos {
1019a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1020a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1021a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
1022a5a4af3bSchristos   int UNUSED written = 0;
1023a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1024a5a4af3bSchristos   SEM_BRANCH_INIT
1025a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1026a5a4af3bSchristos 
1027a5a4af3bSchristos {
1028a5a4af3bSchristos   {
1029a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
1030a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1031a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1032a5a4af3bSchristos   }
1033a5a4af3bSchristos   {
1034a5a4af3bSchristos     USI opval = FLD (i_disp8);
1035a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1036a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1037a5a4af3bSchristos   }
1038a5a4af3bSchristos }
1039a5a4af3bSchristos 
1040a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1041a5a4af3bSchristos #undef FLD
1042a5a4af3bSchristos }
1043a5a4af3bSchristos   NEXT (vpc);
1044a5a4af3bSchristos 
1045a5a4af3bSchristos   CASE (sem, INSN_BL24) : /* bl.l $disp24 */
1046a5a4af3bSchristos {
1047a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1048a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1049a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
1050a5a4af3bSchristos   int UNUSED written = 0;
1051a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1052a5a4af3bSchristos   SEM_BRANCH_INIT
1053a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1054a5a4af3bSchristos 
1055a5a4af3bSchristos {
1056a5a4af3bSchristos   {
1057a5a4af3bSchristos     SI opval = ADDSI (pc, 4);
1058a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1059a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1060a5a4af3bSchristos   }
1061a5a4af3bSchristos   {
1062a5a4af3bSchristos     USI opval = FLD (i_disp24);
1063a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1064a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1065a5a4af3bSchristos   }
1066a5a4af3bSchristos }
1067a5a4af3bSchristos 
1068a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1069a5a4af3bSchristos #undef FLD
1070a5a4af3bSchristos }
1071a5a4af3bSchristos   NEXT (vpc);
1072a5a4af3bSchristos 
1073a5a4af3bSchristos   CASE (sem, INSN_BCL8) : /* bcl.s $disp8 */
1074a5a4af3bSchristos {
1075a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1076a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1077a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
1078a5a4af3bSchristos   int UNUSED written = 0;
1079a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1080a5a4af3bSchristos   SEM_BRANCH_INIT
1081a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1082a5a4af3bSchristos 
1083a5a4af3bSchristos if (CPU (h_cond)) {
1084a5a4af3bSchristos {
1085a5a4af3bSchristos   {
1086a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
1087a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1088a5a4af3bSchristos     written |= (1 << 3);
1089a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1090a5a4af3bSchristos   }
1091a5a4af3bSchristos   {
1092a5a4af3bSchristos     USI opval = FLD (i_disp8);
1093a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1094a5a4af3bSchristos     written |= (1 << 4);
1095a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1096a5a4af3bSchristos   }
1097a5a4af3bSchristos }
1098a5a4af3bSchristos }
1099a5a4af3bSchristos 
1100a5a4af3bSchristos   abuf->written = written;
1101a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1102a5a4af3bSchristos #undef FLD
1103a5a4af3bSchristos }
1104a5a4af3bSchristos   NEXT (vpc);
1105a5a4af3bSchristos 
1106a5a4af3bSchristos   CASE (sem, INSN_BCL24) : /* bcl.l $disp24 */
1107a5a4af3bSchristos {
1108a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1109a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1110a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
1111a5a4af3bSchristos   int UNUSED written = 0;
1112a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1113a5a4af3bSchristos   SEM_BRANCH_INIT
1114a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1115a5a4af3bSchristos 
1116a5a4af3bSchristos if (CPU (h_cond)) {
1117a5a4af3bSchristos {
1118a5a4af3bSchristos   {
1119a5a4af3bSchristos     SI opval = ADDSI (pc, 4);
1120a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1121a5a4af3bSchristos     written |= (1 << 3);
1122a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1123a5a4af3bSchristos   }
1124a5a4af3bSchristos   {
1125a5a4af3bSchristos     USI opval = FLD (i_disp24);
1126a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1127a5a4af3bSchristos     written |= (1 << 4);
1128a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1129a5a4af3bSchristos   }
1130a5a4af3bSchristos }
1131a5a4af3bSchristos }
1132a5a4af3bSchristos 
1133a5a4af3bSchristos   abuf->written = written;
1134a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1135a5a4af3bSchristos #undef FLD
1136a5a4af3bSchristos }
1137a5a4af3bSchristos   NEXT (vpc);
1138a5a4af3bSchristos 
1139a5a4af3bSchristos   CASE (sem, INSN_BNC8) : /* bnc.s $disp8 */
1140a5a4af3bSchristos {
1141a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1142a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1143a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
1144a5a4af3bSchristos   int UNUSED written = 0;
1145a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1146a5a4af3bSchristos   SEM_BRANCH_INIT
1147a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1148a5a4af3bSchristos 
1149a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
1150a5a4af3bSchristos   {
1151a5a4af3bSchristos     USI opval = FLD (i_disp8);
1152a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1153a5a4af3bSchristos     written |= (1 << 2);
1154a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1155a5a4af3bSchristos   }
1156a5a4af3bSchristos }
1157a5a4af3bSchristos 
1158a5a4af3bSchristos   abuf->written = written;
1159a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1160a5a4af3bSchristos #undef FLD
1161a5a4af3bSchristos }
1162a5a4af3bSchristos   NEXT (vpc);
1163a5a4af3bSchristos 
1164a5a4af3bSchristos   CASE (sem, INSN_BNC24) : /* bnc.l $disp24 */
1165a5a4af3bSchristos {
1166a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1167a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1168a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
1169a5a4af3bSchristos   int UNUSED written = 0;
1170a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1171a5a4af3bSchristos   SEM_BRANCH_INIT
1172a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1173a5a4af3bSchristos 
1174a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
1175a5a4af3bSchristos   {
1176a5a4af3bSchristos     USI opval = FLD (i_disp24);
1177a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1178a5a4af3bSchristos     written |= (1 << 2);
1179a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1180a5a4af3bSchristos   }
1181a5a4af3bSchristos }
1182a5a4af3bSchristos 
1183a5a4af3bSchristos   abuf->written = written;
1184a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1185a5a4af3bSchristos #undef FLD
1186a5a4af3bSchristos }
1187a5a4af3bSchristos   NEXT (vpc);
1188a5a4af3bSchristos 
1189a5a4af3bSchristos   CASE (sem, INSN_BNE) : /* bne $src1,$src2,$disp16 */
1190a5a4af3bSchristos {
1191a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1192a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1193a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_beq.f
1194a5a4af3bSchristos   int UNUSED written = 0;
1195a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1196a5a4af3bSchristos   SEM_BRANCH_INIT
1197a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1198a5a4af3bSchristos 
1199a5a4af3bSchristos if (NESI (* FLD (i_src1), * FLD (i_src2))) {
1200a5a4af3bSchristos   {
1201a5a4af3bSchristos     USI opval = FLD (i_disp16);
1202a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1203a5a4af3bSchristos     written |= (1 << 3);
1204a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1205a5a4af3bSchristos   }
1206a5a4af3bSchristos }
1207a5a4af3bSchristos 
1208a5a4af3bSchristos   abuf->written = written;
1209a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1210a5a4af3bSchristos #undef FLD
1211a5a4af3bSchristos }
1212a5a4af3bSchristos   NEXT (vpc);
1213a5a4af3bSchristos 
1214a5a4af3bSchristos   CASE (sem, INSN_BRA8) : /* bra.s $disp8 */
1215a5a4af3bSchristos {
1216a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1217a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1218a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
1219a5a4af3bSchristos   int UNUSED written = 0;
1220a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1221a5a4af3bSchristos   SEM_BRANCH_INIT
1222a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1223a5a4af3bSchristos 
1224a5a4af3bSchristos   {
1225a5a4af3bSchristos     USI opval = FLD (i_disp8);
1226a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1227a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1228a5a4af3bSchristos   }
1229a5a4af3bSchristos 
1230a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1231a5a4af3bSchristos #undef FLD
1232a5a4af3bSchristos }
1233a5a4af3bSchristos   NEXT (vpc);
1234a5a4af3bSchristos 
1235a5a4af3bSchristos   CASE (sem, INSN_BRA24) : /* bra.l $disp24 */
1236a5a4af3bSchristos {
1237a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1238a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1239a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
1240a5a4af3bSchristos   int UNUSED written = 0;
1241a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1242a5a4af3bSchristos   SEM_BRANCH_INIT
1243a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1244a5a4af3bSchristos 
1245a5a4af3bSchristos   {
1246a5a4af3bSchristos     USI opval = FLD (i_disp24);
1247a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1248a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1249a5a4af3bSchristos   }
1250a5a4af3bSchristos 
1251a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1252a5a4af3bSchristos #undef FLD
1253a5a4af3bSchristos }
1254a5a4af3bSchristos   NEXT (vpc);
1255a5a4af3bSchristos 
1256a5a4af3bSchristos   CASE (sem, INSN_BNCL8) : /* bncl.s $disp8 */
1257a5a4af3bSchristos {
1258a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1259a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1260a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
1261a5a4af3bSchristos   int UNUSED written = 0;
1262a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1263a5a4af3bSchristos   SEM_BRANCH_INIT
1264a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1265a5a4af3bSchristos 
1266a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
1267a5a4af3bSchristos {
1268a5a4af3bSchristos   {
1269a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
1270a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1271a5a4af3bSchristos     written |= (1 << 3);
1272a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1273a5a4af3bSchristos   }
1274a5a4af3bSchristos   {
1275a5a4af3bSchristos     USI opval = FLD (i_disp8);
1276a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1277a5a4af3bSchristos     written |= (1 << 4);
1278a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1279a5a4af3bSchristos   }
1280a5a4af3bSchristos }
1281a5a4af3bSchristos }
1282a5a4af3bSchristos 
1283a5a4af3bSchristos   abuf->written = written;
1284a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1285a5a4af3bSchristos #undef FLD
1286a5a4af3bSchristos }
1287a5a4af3bSchristos   NEXT (vpc);
1288a5a4af3bSchristos 
1289a5a4af3bSchristos   CASE (sem, INSN_BNCL24) : /* bncl.l $disp24 */
1290a5a4af3bSchristos {
1291a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1292a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1293a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl24.f
1294a5a4af3bSchristos   int UNUSED written = 0;
1295a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1296a5a4af3bSchristos   SEM_BRANCH_INIT
1297a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1298a5a4af3bSchristos 
1299a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
1300a5a4af3bSchristos {
1301a5a4af3bSchristos   {
1302a5a4af3bSchristos     SI opval = ADDSI (pc, 4);
1303a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1304a5a4af3bSchristos     written |= (1 << 3);
1305a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1306a5a4af3bSchristos   }
1307a5a4af3bSchristos   {
1308a5a4af3bSchristos     USI opval = FLD (i_disp24);
1309a5a4af3bSchristos     SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc);
1310a5a4af3bSchristos     written |= (1 << 4);
1311a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1312a5a4af3bSchristos   }
1313a5a4af3bSchristos }
1314a5a4af3bSchristos }
1315a5a4af3bSchristos 
1316a5a4af3bSchristos   abuf->written = written;
1317a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1318a5a4af3bSchristos #undef FLD
1319a5a4af3bSchristos }
1320a5a4af3bSchristos   NEXT (vpc);
1321a5a4af3bSchristos 
1322a5a4af3bSchristos   CASE (sem, INSN_CMP) : /* cmp $src1,$src2 */
1323a5a4af3bSchristos {
1324a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1325a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1326a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
1327a5a4af3bSchristos   int UNUSED written = 0;
1328a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1329a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1330a5a4af3bSchristos 
1331a5a4af3bSchristos   {
1332a5a4af3bSchristos     BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
1333a5a4af3bSchristos     CPU (h_cond) = opval;
1334a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1335a5a4af3bSchristos   }
1336a5a4af3bSchristos 
1337a5a4af3bSchristos #undef FLD
1338a5a4af3bSchristos }
1339a5a4af3bSchristos   NEXT (vpc);
1340a5a4af3bSchristos 
1341a5a4af3bSchristos   CASE (sem, INSN_CMPI) : /* cmpi $src2,$simm16 */
1342a5a4af3bSchristos {
1343a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1344a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1345a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f
1346a5a4af3bSchristos   int UNUSED written = 0;
1347a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1348a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1349a5a4af3bSchristos 
1350a5a4af3bSchristos   {
1351a5a4af3bSchristos     BI opval = LTSI (* FLD (i_src2), FLD (f_simm16));
1352a5a4af3bSchristos     CPU (h_cond) = opval;
1353a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1354a5a4af3bSchristos   }
1355a5a4af3bSchristos 
1356a5a4af3bSchristos #undef FLD
1357a5a4af3bSchristos }
1358a5a4af3bSchristos   NEXT (vpc);
1359a5a4af3bSchristos 
1360a5a4af3bSchristos   CASE (sem, INSN_CMPU) : /* cmpu $src1,$src2 */
1361a5a4af3bSchristos {
1362a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1363a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1364a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
1365a5a4af3bSchristos   int UNUSED written = 0;
1366a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1367a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1368a5a4af3bSchristos 
1369a5a4af3bSchristos   {
1370a5a4af3bSchristos     BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
1371a5a4af3bSchristos     CPU (h_cond) = opval;
1372a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1373a5a4af3bSchristos   }
1374a5a4af3bSchristos 
1375a5a4af3bSchristos #undef FLD
1376a5a4af3bSchristos }
1377a5a4af3bSchristos   NEXT (vpc);
1378a5a4af3bSchristos 
1379a5a4af3bSchristos   CASE (sem, INSN_CMPUI) : /* cmpui $src2,$simm16 */
1380a5a4af3bSchristos {
1381a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1382a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1383a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f
1384a5a4af3bSchristos   int UNUSED written = 0;
1385a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1386a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1387a5a4af3bSchristos 
1388a5a4af3bSchristos   {
1389a5a4af3bSchristos     BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16));
1390a5a4af3bSchristos     CPU (h_cond) = opval;
1391a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1392a5a4af3bSchristos   }
1393a5a4af3bSchristos 
1394a5a4af3bSchristos #undef FLD
1395a5a4af3bSchristos }
1396a5a4af3bSchristos   NEXT (vpc);
1397a5a4af3bSchristos 
1398a5a4af3bSchristos   CASE (sem, INSN_CMPEQ) : /* cmpeq $src1,$src2 */
1399a5a4af3bSchristos {
1400a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1401a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1402a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
1403a5a4af3bSchristos   int UNUSED written = 0;
1404a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1405a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1406a5a4af3bSchristos 
1407a5a4af3bSchristos   {
1408a5a4af3bSchristos     BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
1409a5a4af3bSchristos     CPU (h_cond) = opval;
1410a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1411a5a4af3bSchristos   }
1412a5a4af3bSchristos 
1413a5a4af3bSchristos #undef FLD
1414a5a4af3bSchristos }
1415a5a4af3bSchristos   NEXT (vpc);
1416a5a4af3bSchristos 
1417a5a4af3bSchristos   CASE (sem, INSN_CMPZ) : /* cmpz $src2 */
1418a5a4af3bSchristos {
1419a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1420a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1421a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
1422a5a4af3bSchristos   int UNUSED written = 0;
1423a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1424a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1425a5a4af3bSchristos 
1426a5a4af3bSchristos   {
1427a5a4af3bSchristos     BI opval = EQSI (* FLD (i_src2), 0);
1428a5a4af3bSchristos     CPU (h_cond) = opval;
1429a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
1430a5a4af3bSchristos   }
1431a5a4af3bSchristos 
1432a5a4af3bSchristos #undef FLD
1433a5a4af3bSchristos }
1434a5a4af3bSchristos   NEXT (vpc);
1435a5a4af3bSchristos 
1436a5a4af3bSchristos   CASE (sem, INSN_DIV) : /* div $dr,$sr */
1437a5a4af3bSchristos {
1438a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1439a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1440a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1441a5a4af3bSchristos   int UNUSED written = 0;
1442a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1443a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1444a5a4af3bSchristos 
1445a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1446a5a4af3bSchristos   {
1447a5a4af3bSchristos     SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr));
1448a5a4af3bSchristos     * FLD (i_dr) = opval;
1449a5a4af3bSchristos     written |= (1 << 2);
1450a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1451a5a4af3bSchristos   }
1452a5a4af3bSchristos }
1453a5a4af3bSchristos 
1454a5a4af3bSchristos   abuf->written = written;
1455a5a4af3bSchristos #undef FLD
1456a5a4af3bSchristos }
1457a5a4af3bSchristos   NEXT (vpc);
1458a5a4af3bSchristos 
1459a5a4af3bSchristos   CASE (sem, INSN_DIVU) : /* divu $dr,$sr */
1460a5a4af3bSchristos {
1461a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1462a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1463a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1464a5a4af3bSchristos   int UNUSED written = 0;
1465a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1466a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1467a5a4af3bSchristos 
1468a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1469a5a4af3bSchristos   {
1470a5a4af3bSchristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
1471a5a4af3bSchristos     * FLD (i_dr) = opval;
1472a5a4af3bSchristos     written |= (1 << 2);
1473a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1474a5a4af3bSchristos   }
1475a5a4af3bSchristos }
1476a5a4af3bSchristos 
1477a5a4af3bSchristos   abuf->written = written;
1478a5a4af3bSchristos #undef FLD
1479a5a4af3bSchristos }
1480a5a4af3bSchristos   NEXT (vpc);
1481a5a4af3bSchristos 
1482a5a4af3bSchristos   CASE (sem, INSN_REM) : /* rem $dr,$sr */
1483a5a4af3bSchristos {
1484a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1485a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1486a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1487a5a4af3bSchristos   int UNUSED written = 0;
1488a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1489a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1490a5a4af3bSchristos 
1491a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1492a5a4af3bSchristos   {
1493a5a4af3bSchristos     SI opval = MODSI (* FLD (i_dr), * FLD (i_sr));
1494a5a4af3bSchristos     * FLD (i_dr) = opval;
1495a5a4af3bSchristos     written |= (1 << 2);
1496a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1497a5a4af3bSchristos   }
1498a5a4af3bSchristos }
1499a5a4af3bSchristos 
1500a5a4af3bSchristos   abuf->written = written;
1501a5a4af3bSchristos #undef FLD
1502a5a4af3bSchristos }
1503a5a4af3bSchristos   NEXT (vpc);
1504a5a4af3bSchristos 
1505a5a4af3bSchristos   CASE (sem, INSN_REMU) : /* remu $dr,$sr */
1506a5a4af3bSchristos {
1507a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1508a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1509a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1510a5a4af3bSchristos   int UNUSED written = 0;
1511a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1512a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1513a5a4af3bSchristos 
1514a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1515a5a4af3bSchristos   {
1516a5a4af3bSchristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
1517a5a4af3bSchristos     * FLD (i_dr) = opval;
1518a5a4af3bSchristos     written |= (1 << 2);
1519a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1520a5a4af3bSchristos   }
1521a5a4af3bSchristos }
1522a5a4af3bSchristos 
1523a5a4af3bSchristos   abuf->written = written;
1524a5a4af3bSchristos #undef FLD
1525a5a4af3bSchristos }
1526a5a4af3bSchristos   NEXT (vpc);
1527a5a4af3bSchristos 
1528a5a4af3bSchristos   CASE (sem, INSN_REMH) : /* remh $dr,$sr */
1529a5a4af3bSchristos {
1530a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1531a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1532a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1533a5a4af3bSchristos   int UNUSED written = 0;
1534a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1535a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1536a5a4af3bSchristos 
1537a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1538a5a4af3bSchristos   {
1539a5a4af3bSchristos     SI opval = MODSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr));
1540a5a4af3bSchristos     * FLD (i_dr) = opval;
1541a5a4af3bSchristos     written |= (1 << 2);
1542a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1543a5a4af3bSchristos   }
1544a5a4af3bSchristos }
1545a5a4af3bSchristos 
1546a5a4af3bSchristos   abuf->written = written;
1547a5a4af3bSchristos #undef FLD
1548a5a4af3bSchristos }
1549a5a4af3bSchristos   NEXT (vpc);
1550a5a4af3bSchristos 
1551a5a4af3bSchristos   CASE (sem, INSN_REMUH) : /* remuh $dr,$sr */
1552a5a4af3bSchristos {
1553a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1554a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1555a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1556a5a4af3bSchristos   int UNUSED written = 0;
1557a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1558a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1559a5a4af3bSchristos 
1560a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1561a5a4af3bSchristos   {
1562a5a4af3bSchristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
1563a5a4af3bSchristos     * FLD (i_dr) = opval;
1564a5a4af3bSchristos     written |= (1 << 2);
1565a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1566a5a4af3bSchristos   }
1567a5a4af3bSchristos }
1568a5a4af3bSchristos 
1569a5a4af3bSchristos   abuf->written = written;
1570a5a4af3bSchristos #undef FLD
1571a5a4af3bSchristos }
1572a5a4af3bSchristos   NEXT (vpc);
1573a5a4af3bSchristos 
1574a5a4af3bSchristos   CASE (sem, INSN_REMB) : /* remb $dr,$sr */
1575a5a4af3bSchristos {
1576a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1577a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1578a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1579a5a4af3bSchristos   int UNUSED written = 0;
1580a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1581a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1582a5a4af3bSchristos 
1583a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1584a5a4af3bSchristos   {
1585a5a4af3bSchristos     SI opval = MODSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr));
1586a5a4af3bSchristos     * FLD (i_dr) = opval;
1587a5a4af3bSchristos     written |= (1 << 2);
1588a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1589a5a4af3bSchristos   }
1590a5a4af3bSchristos }
1591a5a4af3bSchristos 
1592a5a4af3bSchristos   abuf->written = written;
1593a5a4af3bSchristos #undef FLD
1594a5a4af3bSchristos }
1595a5a4af3bSchristos   NEXT (vpc);
1596a5a4af3bSchristos 
1597a5a4af3bSchristos   CASE (sem, INSN_REMUB) : /* remub $dr,$sr */
1598a5a4af3bSchristos {
1599a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1600a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1601a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1602a5a4af3bSchristos   int UNUSED written = 0;
1603a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1604a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1605a5a4af3bSchristos 
1606a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1607a5a4af3bSchristos   {
1608a5a4af3bSchristos     SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr));
1609a5a4af3bSchristos     * FLD (i_dr) = opval;
1610a5a4af3bSchristos     written |= (1 << 2);
1611a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1612a5a4af3bSchristos   }
1613a5a4af3bSchristos }
1614a5a4af3bSchristos 
1615a5a4af3bSchristos   abuf->written = written;
1616a5a4af3bSchristos #undef FLD
1617a5a4af3bSchristos }
1618a5a4af3bSchristos   NEXT (vpc);
1619a5a4af3bSchristos 
1620a5a4af3bSchristos   CASE (sem, INSN_DIVUH) : /* divuh $dr,$sr */
1621a5a4af3bSchristos {
1622a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1623a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1624a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1625a5a4af3bSchristos   int UNUSED written = 0;
1626a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1627a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1628a5a4af3bSchristos 
1629a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1630a5a4af3bSchristos   {
1631a5a4af3bSchristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
1632a5a4af3bSchristos     * FLD (i_dr) = opval;
1633a5a4af3bSchristos     written |= (1 << 2);
1634a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1635a5a4af3bSchristos   }
1636a5a4af3bSchristos }
1637a5a4af3bSchristos 
1638a5a4af3bSchristos   abuf->written = written;
1639a5a4af3bSchristos #undef FLD
1640a5a4af3bSchristos }
1641a5a4af3bSchristos   NEXT (vpc);
1642a5a4af3bSchristos 
1643a5a4af3bSchristos   CASE (sem, INSN_DIVB) : /* divb $dr,$sr */
1644a5a4af3bSchristos {
1645a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1646a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1647a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1648a5a4af3bSchristos   int UNUSED written = 0;
1649a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1650a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1651a5a4af3bSchristos 
1652a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1653a5a4af3bSchristos   {
1654a5a4af3bSchristos     SI opval = DIVSI (EXTBISI (TRUNCSIBI (* FLD (i_dr))), * FLD (i_sr));
1655a5a4af3bSchristos     * FLD (i_dr) = opval;
1656a5a4af3bSchristos     written |= (1 << 2);
1657a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1658a5a4af3bSchristos   }
1659a5a4af3bSchristos }
1660a5a4af3bSchristos 
1661a5a4af3bSchristos   abuf->written = written;
1662a5a4af3bSchristos #undef FLD
1663a5a4af3bSchristos }
1664a5a4af3bSchristos   NEXT (vpc);
1665a5a4af3bSchristos 
1666a5a4af3bSchristos   CASE (sem, INSN_DIVUB) : /* divub $dr,$sr */
1667a5a4af3bSchristos {
1668a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1669a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1670a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1671a5a4af3bSchristos   int UNUSED written = 0;
1672a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1673a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1674a5a4af3bSchristos 
1675a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1676a5a4af3bSchristos   {
1677a5a4af3bSchristos     SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr));
1678a5a4af3bSchristos     * FLD (i_dr) = opval;
1679a5a4af3bSchristos     written |= (1 << 2);
1680a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1681a5a4af3bSchristos   }
1682a5a4af3bSchristos }
1683a5a4af3bSchristos 
1684a5a4af3bSchristos   abuf->written = written;
1685a5a4af3bSchristos #undef FLD
1686a5a4af3bSchristos }
1687a5a4af3bSchristos   NEXT (vpc);
1688a5a4af3bSchristos 
1689a5a4af3bSchristos   CASE (sem, INSN_DIVH) : /* divh $dr,$sr */
1690a5a4af3bSchristos {
1691a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1692a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1693a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
1694a5a4af3bSchristos   int UNUSED written = 0;
1695a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1696a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1697a5a4af3bSchristos 
1698a5a4af3bSchristos if (NESI (* FLD (i_sr), 0)) {
1699a5a4af3bSchristos   {
1700a5a4af3bSchristos     SI opval = DIVSI (EXTHISI (TRUNCSIHI (* FLD (i_dr))), * FLD (i_sr));
1701a5a4af3bSchristos     * FLD (i_dr) = opval;
1702a5a4af3bSchristos     written |= (1 << 2);
1703a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1704a5a4af3bSchristos   }
1705a5a4af3bSchristos }
1706a5a4af3bSchristos 
1707a5a4af3bSchristos   abuf->written = written;
1708a5a4af3bSchristos #undef FLD
1709a5a4af3bSchristos }
1710a5a4af3bSchristos   NEXT (vpc);
1711a5a4af3bSchristos 
1712a5a4af3bSchristos   CASE (sem, INSN_JC) : /* jc $sr */
1713a5a4af3bSchristos {
1714a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1715a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1716a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
1717a5a4af3bSchristos   int UNUSED written = 0;
1718a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1719a5a4af3bSchristos   SEM_BRANCH_INIT
1720a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1721a5a4af3bSchristos 
1722a5a4af3bSchristos if (CPU (h_cond)) {
1723a5a4af3bSchristos   {
1724a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
1725a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1726a5a4af3bSchristos     written |= (1 << 2);
1727a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1728a5a4af3bSchristos   }
1729a5a4af3bSchristos }
1730a5a4af3bSchristos 
1731a5a4af3bSchristos   abuf->written = written;
1732a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1733a5a4af3bSchristos #undef FLD
1734a5a4af3bSchristos }
1735a5a4af3bSchristos   NEXT (vpc);
1736a5a4af3bSchristos 
1737a5a4af3bSchristos   CASE (sem, INSN_JNC) : /* jnc $sr */
1738a5a4af3bSchristos {
1739a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1740a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1741a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
1742a5a4af3bSchristos   int UNUSED written = 0;
1743a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1744a5a4af3bSchristos   SEM_BRANCH_INIT
1745a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1746a5a4af3bSchristos 
1747a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
1748a5a4af3bSchristos   {
1749a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
1750a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1751a5a4af3bSchristos     written |= (1 << 2);
1752a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1753a5a4af3bSchristos   }
1754a5a4af3bSchristos }
1755a5a4af3bSchristos 
1756a5a4af3bSchristos   abuf->written = written;
1757a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1758a5a4af3bSchristos #undef FLD
1759a5a4af3bSchristos }
1760a5a4af3bSchristos   NEXT (vpc);
1761a5a4af3bSchristos 
1762a5a4af3bSchristos   CASE (sem, INSN_JL) : /* jl $sr */
1763a5a4af3bSchristos {
1764a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1765a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1766a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
1767a5a4af3bSchristos   int UNUSED written = 0;
1768a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1769a5a4af3bSchristos   SEM_BRANCH_INIT
1770a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1771a5a4af3bSchristos 
1772a5a4af3bSchristos {
1773a5a4af3bSchristos   SI temp0;USI temp1;
1774a5a4af3bSchristos   temp0 = ADDSI (ANDSI (pc, -4), 4);
1775a5a4af3bSchristos   temp1 = ANDSI (* FLD (i_sr), -4);
1776a5a4af3bSchristos   {
1777a5a4af3bSchristos     SI opval = temp0;
1778a5a4af3bSchristos     CPU (h_gr[((UINT) 14)]) = opval;
1779a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1780a5a4af3bSchristos   }
1781a5a4af3bSchristos   {
1782a5a4af3bSchristos     USI opval = temp1;
1783a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1784a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1785a5a4af3bSchristos   }
1786a5a4af3bSchristos }
1787a5a4af3bSchristos 
1788a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1789a5a4af3bSchristos #undef FLD
1790a5a4af3bSchristos }
1791a5a4af3bSchristos   NEXT (vpc);
1792a5a4af3bSchristos 
1793a5a4af3bSchristos   CASE (sem, INSN_JMP) : /* jmp $sr */
1794a5a4af3bSchristos {
1795a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1796a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1797a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
1798a5a4af3bSchristos   int UNUSED written = 0;
1799a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1800a5a4af3bSchristos   SEM_BRANCH_INIT
1801a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1802a5a4af3bSchristos 
1803a5a4af3bSchristos   {
1804a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
1805a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
1806a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
1807a5a4af3bSchristos   }
1808a5a4af3bSchristos 
1809a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
1810a5a4af3bSchristos #undef FLD
1811a5a4af3bSchristos }
1812a5a4af3bSchristos   NEXT (vpc);
1813a5a4af3bSchristos 
1814a5a4af3bSchristos   CASE (sem, INSN_LD) : /* ld $dr,@$sr */
1815a5a4af3bSchristos {
1816a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1817a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1818a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1819a5a4af3bSchristos   int UNUSED written = 0;
1820a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1821a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1822a5a4af3bSchristos 
1823a5a4af3bSchristos   {
1824a5a4af3bSchristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
1825a5a4af3bSchristos     * FLD (i_dr) = opval;
1826a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1827a5a4af3bSchristos   }
1828a5a4af3bSchristos 
1829a5a4af3bSchristos #undef FLD
1830a5a4af3bSchristos }
1831a5a4af3bSchristos   NEXT (vpc);
1832a5a4af3bSchristos 
1833a5a4af3bSchristos   CASE (sem, INSN_LD_D) : /* ld $dr,@($slo16,$sr) */
1834a5a4af3bSchristos {
1835a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1836a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1837a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
1838a5a4af3bSchristos   int UNUSED written = 0;
1839a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1840a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1841a5a4af3bSchristos 
1842a5a4af3bSchristos   {
1843a5a4af3bSchristos     SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)));
1844a5a4af3bSchristos     * FLD (i_dr) = opval;
1845a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1846a5a4af3bSchristos   }
1847a5a4af3bSchristos 
1848a5a4af3bSchristos #undef FLD
1849a5a4af3bSchristos }
1850a5a4af3bSchristos   NEXT (vpc);
1851a5a4af3bSchristos 
1852a5a4af3bSchristos   CASE (sem, INSN_LDB) : /* ldb $dr,@$sr */
1853a5a4af3bSchristos {
1854a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1855a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1856a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1857a5a4af3bSchristos   int UNUSED written = 0;
1858a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1859a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1860a5a4af3bSchristos 
1861a5a4af3bSchristos   {
1862a5a4af3bSchristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1863a5a4af3bSchristos     * FLD (i_dr) = opval;
1864a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1865a5a4af3bSchristos   }
1866a5a4af3bSchristos 
1867a5a4af3bSchristos #undef FLD
1868a5a4af3bSchristos }
1869a5a4af3bSchristos   NEXT (vpc);
1870a5a4af3bSchristos 
1871a5a4af3bSchristos   CASE (sem, INSN_LDB_D) : /* ldb $dr,@($slo16,$sr) */
1872a5a4af3bSchristos {
1873a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1874a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1875a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
1876a5a4af3bSchristos   int UNUSED written = 0;
1877a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1878a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1879a5a4af3bSchristos 
1880a5a4af3bSchristos   {
1881a5a4af3bSchristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1882a5a4af3bSchristos     * FLD (i_dr) = opval;
1883a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1884a5a4af3bSchristos   }
1885a5a4af3bSchristos 
1886a5a4af3bSchristos #undef FLD
1887a5a4af3bSchristos }
1888a5a4af3bSchristos   NEXT (vpc);
1889a5a4af3bSchristos 
1890a5a4af3bSchristos   CASE (sem, INSN_LDH) : /* ldh $dr,@$sr */
1891a5a4af3bSchristos {
1892a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1893a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1894a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1895a5a4af3bSchristos   int UNUSED written = 0;
1896a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1897a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1898a5a4af3bSchristos 
1899a5a4af3bSchristos   {
1900a5a4af3bSchristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1901a5a4af3bSchristos     * FLD (i_dr) = opval;
1902a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1903a5a4af3bSchristos   }
1904a5a4af3bSchristos 
1905a5a4af3bSchristos #undef FLD
1906a5a4af3bSchristos }
1907a5a4af3bSchristos   NEXT (vpc);
1908a5a4af3bSchristos 
1909a5a4af3bSchristos   CASE (sem, INSN_LDH_D) : /* ldh $dr,@($slo16,$sr) */
1910a5a4af3bSchristos {
1911a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1912a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1913a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
1914a5a4af3bSchristos   int UNUSED written = 0;
1915a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1916a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1917a5a4af3bSchristos 
1918a5a4af3bSchristos   {
1919a5a4af3bSchristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1920a5a4af3bSchristos     * FLD (i_dr) = opval;
1921a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1922a5a4af3bSchristos   }
1923a5a4af3bSchristos 
1924a5a4af3bSchristos #undef FLD
1925a5a4af3bSchristos }
1926a5a4af3bSchristos   NEXT (vpc);
1927a5a4af3bSchristos 
1928a5a4af3bSchristos   CASE (sem, INSN_LDUB) : /* ldub $dr,@$sr */
1929a5a4af3bSchristos {
1930a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1931a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1932a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1933a5a4af3bSchristos   int UNUSED written = 0;
1934a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1935a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1936a5a4af3bSchristos 
1937a5a4af3bSchristos   {
1938a5a4af3bSchristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
1939a5a4af3bSchristos     * FLD (i_dr) = opval;
1940a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1941a5a4af3bSchristos   }
1942a5a4af3bSchristos 
1943a5a4af3bSchristos #undef FLD
1944a5a4af3bSchristos }
1945a5a4af3bSchristos   NEXT (vpc);
1946a5a4af3bSchristos 
1947a5a4af3bSchristos   CASE (sem, INSN_LDUB_D) : /* ldub $dr,@($slo16,$sr) */
1948a5a4af3bSchristos {
1949a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1950a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1951a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
1952a5a4af3bSchristos   int UNUSED written = 0;
1953a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1954a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1955a5a4af3bSchristos 
1956a5a4af3bSchristos   {
1957a5a4af3bSchristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1958a5a4af3bSchristos     * FLD (i_dr) = opval;
1959a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1960a5a4af3bSchristos   }
1961a5a4af3bSchristos 
1962a5a4af3bSchristos #undef FLD
1963a5a4af3bSchristos }
1964a5a4af3bSchristos   NEXT (vpc);
1965a5a4af3bSchristos 
1966a5a4af3bSchristos   CASE (sem, INSN_LDUH) : /* lduh $dr,@$sr */
1967a5a4af3bSchristos {
1968a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1969a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1970a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1971a5a4af3bSchristos   int UNUSED written = 0;
1972a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1973a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
1974a5a4af3bSchristos 
1975a5a4af3bSchristos   {
1976a5a4af3bSchristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
1977a5a4af3bSchristos     * FLD (i_dr) = opval;
1978a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1979a5a4af3bSchristos   }
1980a5a4af3bSchristos 
1981a5a4af3bSchristos #undef FLD
1982a5a4af3bSchristos }
1983a5a4af3bSchristos   NEXT (vpc);
1984a5a4af3bSchristos 
1985a5a4af3bSchristos   CASE (sem, INSN_LDUH_D) : /* lduh $dr,@($slo16,$sr) */
1986a5a4af3bSchristos {
1987a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
1988a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
1989a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
1990a5a4af3bSchristos   int UNUSED written = 0;
1991a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
1992a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
1993a5a4af3bSchristos 
1994a5a4af3bSchristos   {
1995a5a4af3bSchristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))));
1996a5a4af3bSchristos     * FLD (i_dr) = opval;
1997a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
1998a5a4af3bSchristos   }
1999a5a4af3bSchristos 
2000a5a4af3bSchristos #undef FLD
2001a5a4af3bSchristos }
2002a5a4af3bSchristos   NEXT (vpc);
2003a5a4af3bSchristos 
2004a5a4af3bSchristos   CASE (sem, INSN_LD_PLUS) : /* ld $dr,@$sr+ */
2005a5a4af3bSchristos {
2006a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2007a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2008a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2009a5a4af3bSchristos   int UNUSED written = 0;
2010a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2011a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2012a5a4af3bSchristos 
2013a5a4af3bSchristos {
2014a5a4af3bSchristos   SI temp0;SI temp1;
2015a5a4af3bSchristos   temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
2016a5a4af3bSchristos   temp1 = ADDSI (* FLD (i_sr), 4);
2017a5a4af3bSchristos   {
2018a5a4af3bSchristos     SI opval = temp0;
2019a5a4af3bSchristos     * FLD (i_dr) = opval;
2020a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2021a5a4af3bSchristos   }
2022a5a4af3bSchristos   {
2023a5a4af3bSchristos     SI opval = temp1;
2024a5a4af3bSchristos     * FLD (i_sr) = opval;
2025a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2026a5a4af3bSchristos   }
2027a5a4af3bSchristos }
2028a5a4af3bSchristos 
2029a5a4af3bSchristos #undef FLD
2030a5a4af3bSchristos }
2031a5a4af3bSchristos   NEXT (vpc);
2032a5a4af3bSchristos 
2033a5a4af3bSchristos   CASE (sem, INSN_LD24) : /* ld24 $dr,$uimm24 */
2034a5a4af3bSchristos {
2035a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2036a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2037a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld24.f
2038a5a4af3bSchristos   int UNUSED written = 0;
2039a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2040a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2041a5a4af3bSchristos 
2042a5a4af3bSchristos   {
2043a5a4af3bSchristos     SI opval = FLD (i_uimm24);
2044a5a4af3bSchristos     * FLD (i_dr) = opval;
2045a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2046a5a4af3bSchristos   }
2047a5a4af3bSchristos 
2048a5a4af3bSchristos #undef FLD
2049a5a4af3bSchristos }
2050a5a4af3bSchristos   NEXT (vpc);
2051a5a4af3bSchristos 
2052a5a4af3bSchristos   CASE (sem, INSN_LDI8) : /* ldi8 $dr,$simm8 */
2053a5a4af3bSchristos {
2054a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2055a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2056a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
2057a5a4af3bSchristos   int UNUSED written = 0;
2058a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2059a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2060a5a4af3bSchristos 
2061a5a4af3bSchristos   {
2062a5a4af3bSchristos     SI opval = FLD (f_simm8);
2063a5a4af3bSchristos     * FLD (i_dr) = opval;
2064a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2065a5a4af3bSchristos   }
2066a5a4af3bSchristos 
2067a5a4af3bSchristos #undef FLD
2068a5a4af3bSchristos }
2069a5a4af3bSchristos   NEXT (vpc);
2070a5a4af3bSchristos 
2071a5a4af3bSchristos   CASE (sem, INSN_LDI16) : /* ldi16 $dr,$hash$slo16 */
2072a5a4af3bSchristos {
2073a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2074a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2075a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
2076a5a4af3bSchristos   int UNUSED written = 0;
2077a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2078a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2079a5a4af3bSchristos 
2080a5a4af3bSchristos   {
2081a5a4af3bSchristos     SI opval = FLD (f_simm16);
2082a5a4af3bSchristos     * FLD (i_dr) = opval;
2083a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2084a5a4af3bSchristos   }
2085a5a4af3bSchristos 
2086a5a4af3bSchristos #undef FLD
2087a5a4af3bSchristos }
2088a5a4af3bSchristos   NEXT (vpc);
2089a5a4af3bSchristos 
2090a5a4af3bSchristos   CASE (sem, INSN_LOCK) : /* lock $dr,@$sr */
2091a5a4af3bSchristos {
2092a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2093a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2094a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2095a5a4af3bSchristos   int UNUSED written = 0;
2096a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2097a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2098a5a4af3bSchristos 
2099a5a4af3bSchristos {
2100a5a4af3bSchristos   {
2101a5a4af3bSchristos     BI opval = 1;
2102a5a4af3bSchristos     CPU (h_lock) = opval;
2103a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
2104a5a4af3bSchristos   }
2105a5a4af3bSchristos   {
2106a5a4af3bSchristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
2107a5a4af3bSchristos     * FLD (i_dr) = opval;
2108a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2109a5a4af3bSchristos   }
2110a5a4af3bSchristos }
2111a5a4af3bSchristos 
2112a5a4af3bSchristos #undef FLD
2113a5a4af3bSchristos }
2114a5a4af3bSchristos   NEXT (vpc);
2115a5a4af3bSchristos 
2116a5a4af3bSchristos   CASE (sem, INSN_MACHI_A) : /* machi $src1,$src2,$acc */
2117a5a4af3bSchristos {
2118a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2119a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2120a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2121a5a4af3bSchristos   int UNUSED written = 0;
2122a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2123a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2124a5a4af3bSchristos 
2125a5a4af3bSchristos   {
2126a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
2127a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2128a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2129a5a4af3bSchristos   }
2130a5a4af3bSchristos 
2131a5a4af3bSchristos #undef FLD
2132a5a4af3bSchristos }
2133a5a4af3bSchristos   NEXT (vpc);
2134a5a4af3bSchristos 
2135a5a4af3bSchristos   CASE (sem, INSN_MACLO_A) : /* maclo $src1,$src2,$acc */
2136a5a4af3bSchristos {
2137a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2138a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2139a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2140a5a4af3bSchristos   int UNUSED written = 0;
2141a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2142a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2143a5a4af3bSchristos 
2144a5a4af3bSchristos   {
2145a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
2146a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2147a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2148a5a4af3bSchristos   }
2149a5a4af3bSchristos 
2150a5a4af3bSchristos #undef FLD
2151a5a4af3bSchristos }
2152a5a4af3bSchristos   NEXT (vpc);
2153a5a4af3bSchristos 
2154a5a4af3bSchristos   CASE (sem, INSN_MACWHI_A) : /* macwhi $src1,$src2,$acc */
2155a5a4af3bSchristos {
2156a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2157a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2158a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2159a5a4af3bSchristos   int UNUSED written = 0;
2160a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2161a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2162a5a4af3bSchristos 
2163a5a4af3bSchristos   {
2164a5a4af3bSchristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
2165a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2166a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2167a5a4af3bSchristos   }
2168a5a4af3bSchristos 
2169a5a4af3bSchristos #undef FLD
2170a5a4af3bSchristos }
2171a5a4af3bSchristos   NEXT (vpc);
2172a5a4af3bSchristos 
2173a5a4af3bSchristos   CASE (sem, INSN_MACWLO_A) : /* macwlo $src1,$src2,$acc */
2174a5a4af3bSchristos {
2175a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2176a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2177a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2178a5a4af3bSchristos   int UNUSED written = 0;
2179a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2180a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2181a5a4af3bSchristos 
2182a5a4af3bSchristos   {
2183a5a4af3bSchristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
2184a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2185a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2186a5a4af3bSchristos   }
2187a5a4af3bSchristos 
2188a5a4af3bSchristos #undef FLD
2189a5a4af3bSchristos }
2190a5a4af3bSchristos   NEXT (vpc);
2191a5a4af3bSchristos 
2192a5a4af3bSchristos   CASE (sem, INSN_MUL) : /* mul $dr,$sr */
2193a5a4af3bSchristos {
2194a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2195a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2196a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
2197a5a4af3bSchristos   int UNUSED written = 0;
2198a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2199a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2200a5a4af3bSchristos 
2201a5a4af3bSchristos   {
2202a5a4af3bSchristos     SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
2203a5a4af3bSchristos     * FLD (i_dr) = opval;
2204a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2205a5a4af3bSchristos   }
2206a5a4af3bSchristos 
2207a5a4af3bSchristos #undef FLD
2208a5a4af3bSchristos }
2209a5a4af3bSchristos   NEXT (vpc);
2210a5a4af3bSchristos 
2211a5a4af3bSchristos   CASE (sem, INSN_MULHI_A) : /* mulhi $src1,$src2,$acc */
2212a5a4af3bSchristos {
2213a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2214a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2215a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2216a5a4af3bSchristos   int UNUSED written = 0;
2217a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2218a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2219a5a4af3bSchristos 
2220a5a4af3bSchristos   {
2221a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
2222a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2223a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2224a5a4af3bSchristos   }
2225a5a4af3bSchristos 
2226a5a4af3bSchristos #undef FLD
2227a5a4af3bSchristos }
2228a5a4af3bSchristos   NEXT (vpc);
2229a5a4af3bSchristos 
2230a5a4af3bSchristos   CASE (sem, INSN_MULLO_A) : /* mullo $src1,$src2,$acc */
2231a5a4af3bSchristos {
2232a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2233a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2234a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2235a5a4af3bSchristos   int UNUSED written = 0;
2236a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2237a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2238a5a4af3bSchristos 
2239a5a4af3bSchristos   {
2240a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
2241a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2242a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2243a5a4af3bSchristos   }
2244a5a4af3bSchristos 
2245a5a4af3bSchristos #undef FLD
2246a5a4af3bSchristos }
2247a5a4af3bSchristos   NEXT (vpc);
2248a5a4af3bSchristos 
2249a5a4af3bSchristos   CASE (sem, INSN_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
2250a5a4af3bSchristos {
2251a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2252a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2253a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2254a5a4af3bSchristos   int UNUSED written = 0;
2255a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2256a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2257a5a4af3bSchristos 
2258a5a4af3bSchristos   {
2259a5a4af3bSchristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
2260a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2261a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2262a5a4af3bSchristos   }
2263a5a4af3bSchristos 
2264a5a4af3bSchristos #undef FLD
2265a5a4af3bSchristos }
2266a5a4af3bSchristos   NEXT (vpc);
2267a5a4af3bSchristos 
2268a5a4af3bSchristos   CASE (sem, INSN_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
2269a5a4af3bSchristos {
2270a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2271a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2272a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
2273a5a4af3bSchristos   int UNUSED written = 0;
2274a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2275a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2276a5a4af3bSchristos 
2277a5a4af3bSchristos   {
2278a5a4af3bSchristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
2279a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_acc), opval);
2280a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2281a5a4af3bSchristos   }
2282a5a4af3bSchristos 
2283a5a4af3bSchristos #undef FLD
2284a5a4af3bSchristos }
2285a5a4af3bSchristos   NEXT (vpc);
2286a5a4af3bSchristos 
2287a5a4af3bSchristos   CASE (sem, INSN_MV) : /* mv $dr,$sr */
2288a5a4af3bSchristos {
2289a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2290a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2291a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2292a5a4af3bSchristos   int UNUSED written = 0;
2293a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2294a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2295a5a4af3bSchristos 
2296a5a4af3bSchristos   {
2297a5a4af3bSchristos     SI opval = * FLD (i_sr);
2298a5a4af3bSchristos     * FLD (i_dr) = opval;
2299a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2300a5a4af3bSchristos   }
2301a5a4af3bSchristos 
2302a5a4af3bSchristos #undef FLD
2303a5a4af3bSchristos }
2304a5a4af3bSchristos   NEXT (vpc);
2305a5a4af3bSchristos 
2306a5a4af3bSchristos   CASE (sem, INSN_MVFACHI_A) : /* mvfachi $dr,$accs */
2307a5a4af3bSchristos {
2308a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2309a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2310a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2311a5a4af3bSchristos   int UNUSED written = 0;
2312a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2313a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2314a5a4af3bSchristos 
2315a5a4af3bSchristos   {
2316a5a4af3bSchristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
2317a5a4af3bSchristos     * FLD (i_dr) = opval;
2318a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2319a5a4af3bSchristos   }
2320a5a4af3bSchristos 
2321a5a4af3bSchristos #undef FLD
2322a5a4af3bSchristos }
2323a5a4af3bSchristos   NEXT (vpc);
2324a5a4af3bSchristos 
2325a5a4af3bSchristos   CASE (sem, INSN_MVFACLO_A) : /* mvfaclo $dr,$accs */
2326a5a4af3bSchristos {
2327a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2328a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2329a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2330a5a4af3bSchristos   int UNUSED written = 0;
2331a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2332a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2333a5a4af3bSchristos 
2334a5a4af3bSchristos   {
2335a5a4af3bSchristos     SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
2336a5a4af3bSchristos     * FLD (i_dr) = opval;
2337a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2338a5a4af3bSchristos   }
2339a5a4af3bSchristos 
2340a5a4af3bSchristos #undef FLD
2341a5a4af3bSchristos }
2342a5a4af3bSchristos   NEXT (vpc);
2343a5a4af3bSchristos 
2344a5a4af3bSchristos   CASE (sem, INSN_MVFACMI_A) : /* mvfacmi $dr,$accs */
2345a5a4af3bSchristos {
2346a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2347a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2348a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
2349a5a4af3bSchristos   int UNUSED written = 0;
2350a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2351a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2352a5a4af3bSchristos 
2353a5a4af3bSchristos   {
2354a5a4af3bSchristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
2355a5a4af3bSchristos     * FLD (i_dr) = opval;
2356a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2357a5a4af3bSchristos   }
2358a5a4af3bSchristos 
2359a5a4af3bSchristos #undef FLD
2360a5a4af3bSchristos }
2361a5a4af3bSchristos   NEXT (vpc);
2362a5a4af3bSchristos 
2363a5a4af3bSchristos   CASE (sem, INSN_MVFC) : /* mvfc $dr,$scr */
2364a5a4af3bSchristos {
2365a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2366a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2367a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2368a5a4af3bSchristos   int UNUSED written = 0;
2369a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2370a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2371a5a4af3bSchristos 
2372a5a4af3bSchristos   {
2373a5a4af3bSchristos     SI opval = GET_H_CR (FLD (f_r2));
2374a5a4af3bSchristos     * FLD (i_dr) = opval;
2375a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2376a5a4af3bSchristos   }
2377a5a4af3bSchristos 
2378a5a4af3bSchristos #undef FLD
2379a5a4af3bSchristos }
2380a5a4af3bSchristos   NEXT (vpc);
2381a5a4af3bSchristos 
2382a5a4af3bSchristos   CASE (sem, INSN_MVTACHI_A) : /* mvtachi $src1,$accs */
2383a5a4af3bSchristos {
2384a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2385a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2386a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
2387a5a4af3bSchristos   int UNUSED written = 0;
2388a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2389a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2390a5a4af3bSchristos 
2391a5a4af3bSchristos   {
2392a5a4af3bSchristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
2393a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_accs), opval);
2394a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2395a5a4af3bSchristos   }
2396a5a4af3bSchristos 
2397a5a4af3bSchristos #undef FLD
2398a5a4af3bSchristos }
2399a5a4af3bSchristos   NEXT (vpc);
2400a5a4af3bSchristos 
2401a5a4af3bSchristos   CASE (sem, INSN_MVTACLO_A) : /* mvtaclo $src1,$accs */
2402a5a4af3bSchristos {
2403a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2404a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2405a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
2406a5a4af3bSchristos   int UNUSED written = 0;
2407a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2408a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2409a5a4af3bSchristos 
2410a5a4af3bSchristos   {
2411a5a4af3bSchristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
2412a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_accs), opval);
2413a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2414a5a4af3bSchristos   }
2415a5a4af3bSchristos 
2416a5a4af3bSchristos #undef FLD
2417a5a4af3bSchristos }
2418a5a4af3bSchristos   NEXT (vpc);
2419a5a4af3bSchristos 
2420a5a4af3bSchristos   CASE (sem, INSN_MVTC) : /* mvtc $sr,$dcr */
2421a5a4af3bSchristos {
2422a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2423a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2424a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2425a5a4af3bSchristos   int UNUSED written = 0;
2426a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2427a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2428a5a4af3bSchristos 
2429a5a4af3bSchristos   {
2430a5a4af3bSchristos     USI opval = * FLD (i_sr);
2431a5a4af3bSchristos     SET_H_CR (FLD (f_r1), opval);
2432a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2433a5a4af3bSchristos   }
2434a5a4af3bSchristos 
2435a5a4af3bSchristos #undef FLD
2436a5a4af3bSchristos }
2437a5a4af3bSchristos   NEXT (vpc);
2438a5a4af3bSchristos 
2439a5a4af3bSchristos   CASE (sem, INSN_NEG) : /* neg $dr,$sr */
2440a5a4af3bSchristos {
2441a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2442a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2443a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2444a5a4af3bSchristos   int UNUSED written = 0;
2445a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2446a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2447a5a4af3bSchristos 
2448a5a4af3bSchristos   {
2449a5a4af3bSchristos     SI opval = NEGSI (* FLD (i_sr));
2450a5a4af3bSchristos     * FLD (i_dr) = opval;
2451a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2452a5a4af3bSchristos   }
2453a5a4af3bSchristos 
2454a5a4af3bSchristos #undef FLD
2455a5a4af3bSchristos }
2456a5a4af3bSchristos   NEXT (vpc);
2457a5a4af3bSchristos 
2458a5a4af3bSchristos   CASE (sem, INSN_NOP) : /* nop */
2459a5a4af3bSchristos {
2460a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2461a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2462a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
2463a5a4af3bSchristos   int UNUSED written = 0;
2464a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2465a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2466a5a4af3bSchristos 
2467a5a4af3bSchristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
2468a5a4af3bSchristos 
2469a5a4af3bSchristos #undef FLD
2470a5a4af3bSchristos }
2471a5a4af3bSchristos   NEXT (vpc);
2472a5a4af3bSchristos 
2473a5a4af3bSchristos   CASE (sem, INSN_NOT) : /* not $dr,$sr */
2474a5a4af3bSchristos {
2475a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2476a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2477a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2478a5a4af3bSchristos   int UNUSED written = 0;
2479a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2480a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2481a5a4af3bSchristos 
2482a5a4af3bSchristos   {
2483a5a4af3bSchristos     SI opval = INVSI (* FLD (i_sr));
2484a5a4af3bSchristos     * FLD (i_dr) = opval;
2485a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2486a5a4af3bSchristos   }
2487a5a4af3bSchristos 
2488a5a4af3bSchristos #undef FLD
2489a5a4af3bSchristos }
2490a5a4af3bSchristos   NEXT (vpc);
2491a5a4af3bSchristos 
2492a5a4af3bSchristos   CASE (sem, INSN_RAC_DSI) : /* rac $accd,$accs,$imm1 */
2493a5a4af3bSchristos {
2494a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2495a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2496a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
2497a5a4af3bSchristos   int UNUSED written = 0;
2498a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2499a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2500a5a4af3bSchristos 
2501a5a4af3bSchristos {
2502a5a4af3bSchristos   DI tmp_tmp1;
2503a5a4af3bSchristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2504a5a4af3bSchristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
2505a5a4af3bSchristos   {
2506a5a4af3bSchristos     DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
2507a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_accd), opval);
2508a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2509a5a4af3bSchristos   }
2510a5a4af3bSchristos }
2511a5a4af3bSchristos 
2512a5a4af3bSchristos #undef FLD
2513a5a4af3bSchristos }
2514a5a4af3bSchristos   NEXT (vpc);
2515a5a4af3bSchristos 
2516a5a4af3bSchristos   CASE (sem, INSN_RACH_DSI) : /* rach $accd,$accs,$imm1 */
2517a5a4af3bSchristos {
2518a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2519a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2520a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
2521a5a4af3bSchristos   int UNUSED written = 0;
2522a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2523a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2524a5a4af3bSchristos 
2525a5a4af3bSchristos {
2526a5a4af3bSchristos   DI tmp_tmp1;
2527a5a4af3bSchristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
2528a5a4af3bSchristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
2529a5a4af3bSchristos   {
2530a5a4af3bSchristos     DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0)));
2531a5a4af3bSchristos     SET_H_ACCUMS (FLD (f_accd), opval);
2532a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
2533a5a4af3bSchristos   }
2534a5a4af3bSchristos }
2535a5a4af3bSchristos 
2536a5a4af3bSchristos #undef FLD
2537a5a4af3bSchristos }
2538a5a4af3bSchristos   NEXT (vpc);
2539a5a4af3bSchristos 
2540a5a4af3bSchristos   CASE (sem, INSN_RTE) : /* rte */
2541a5a4af3bSchristos {
2542a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2543a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2544a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
2545a5a4af3bSchristos   int UNUSED written = 0;
2546a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2547a5a4af3bSchristos   SEM_BRANCH_INIT
2548a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2549a5a4af3bSchristos 
2550a5a4af3bSchristos {
2551a5a4af3bSchristos   {
2552a5a4af3bSchristos     USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
2553a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
2554a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
2555a5a4af3bSchristos   }
2556a5a4af3bSchristos   {
2557a5a4af3bSchristos     USI opval = GET_H_CR (((UINT) 14));
2558a5a4af3bSchristos     SET_H_CR (((UINT) 6), opval);
2559a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
2560a5a4af3bSchristos   }
2561a5a4af3bSchristos   {
2562a5a4af3bSchristos     UQI opval = CPU (h_bpsw);
2563a5a4af3bSchristos     SET_H_PSW (opval);
2564a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
2565a5a4af3bSchristos   }
2566a5a4af3bSchristos   {
2567a5a4af3bSchristos     UQI opval = CPU (h_bbpsw);
2568a5a4af3bSchristos     CPU (h_bpsw) = opval;
2569a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
2570a5a4af3bSchristos   }
2571a5a4af3bSchristos }
2572a5a4af3bSchristos 
2573a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
2574a5a4af3bSchristos #undef FLD
2575a5a4af3bSchristos }
2576a5a4af3bSchristos   NEXT (vpc);
2577a5a4af3bSchristos 
2578a5a4af3bSchristos   CASE (sem, INSN_SETH) : /* seth $dr,$hash$hi16 */
2579a5a4af3bSchristos {
2580a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2581a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2582a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_seth.f
2583a5a4af3bSchristos   int UNUSED written = 0;
2584a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2585a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2586a5a4af3bSchristos 
2587a5a4af3bSchristos   {
2588a5a4af3bSchristos     SI opval = SLLSI (FLD (f_hi16), 16);
2589a5a4af3bSchristos     * FLD (i_dr) = opval;
2590a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2591a5a4af3bSchristos   }
2592a5a4af3bSchristos 
2593a5a4af3bSchristos #undef FLD
2594a5a4af3bSchristos }
2595a5a4af3bSchristos   NEXT (vpc);
2596a5a4af3bSchristos 
2597a5a4af3bSchristos   CASE (sem, INSN_SLL) : /* sll $dr,$sr */
2598a5a4af3bSchristos {
2599a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2600a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2601a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
2602a5a4af3bSchristos   int UNUSED written = 0;
2603a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2604a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2605a5a4af3bSchristos 
2606a5a4af3bSchristos   {
2607a5a4af3bSchristos     SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2608a5a4af3bSchristos     * FLD (i_dr) = opval;
2609a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2610a5a4af3bSchristos   }
2611a5a4af3bSchristos 
2612a5a4af3bSchristos #undef FLD
2613a5a4af3bSchristos }
2614a5a4af3bSchristos   NEXT (vpc);
2615a5a4af3bSchristos 
2616a5a4af3bSchristos   CASE (sem, INSN_SLL3) : /* sll3 $dr,$sr,$simm16 */
2617a5a4af3bSchristos {
2618a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2619a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2620a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
2621a5a4af3bSchristos   int UNUSED written = 0;
2622a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2623a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2624a5a4af3bSchristos 
2625a5a4af3bSchristos   {
2626a5a4af3bSchristos     SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2627a5a4af3bSchristos     * FLD (i_dr) = opval;
2628a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2629a5a4af3bSchristos   }
2630a5a4af3bSchristos 
2631a5a4af3bSchristos #undef FLD
2632a5a4af3bSchristos }
2633a5a4af3bSchristos   NEXT (vpc);
2634a5a4af3bSchristos 
2635a5a4af3bSchristos   CASE (sem, INSN_SLLI) : /* slli $dr,$uimm5 */
2636a5a4af3bSchristos {
2637a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2638a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2639a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
2640a5a4af3bSchristos   int UNUSED written = 0;
2641a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2642a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2643a5a4af3bSchristos 
2644a5a4af3bSchristos   {
2645a5a4af3bSchristos     SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
2646a5a4af3bSchristos     * FLD (i_dr) = opval;
2647a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2648a5a4af3bSchristos   }
2649a5a4af3bSchristos 
2650a5a4af3bSchristos #undef FLD
2651a5a4af3bSchristos }
2652a5a4af3bSchristos   NEXT (vpc);
2653a5a4af3bSchristos 
2654a5a4af3bSchristos   CASE (sem, INSN_SRA) : /* sra $dr,$sr */
2655a5a4af3bSchristos {
2656a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2657a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2658a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
2659a5a4af3bSchristos   int UNUSED written = 0;
2660a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2661a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2662a5a4af3bSchristos 
2663a5a4af3bSchristos   {
2664a5a4af3bSchristos     SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2665a5a4af3bSchristos     * FLD (i_dr) = opval;
2666a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2667a5a4af3bSchristos   }
2668a5a4af3bSchristos 
2669a5a4af3bSchristos #undef FLD
2670a5a4af3bSchristos }
2671a5a4af3bSchristos   NEXT (vpc);
2672a5a4af3bSchristos 
2673a5a4af3bSchristos   CASE (sem, INSN_SRA3) : /* sra3 $dr,$sr,$simm16 */
2674a5a4af3bSchristos {
2675a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2676a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2677a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
2678a5a4af3bSchristos   int UNUSED written = 0;
2679a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2680a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2681a5a4af3bSchristos 
2682a5a4af3bSchristos   {
2683a5a4af3bSchristos     SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2684a5a4af3bSchristos     * FLD (i_dr) = opval;
2685a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2686a5a4af3bSchristos   }
2687a5a4af3bSchristos 
2688a5a4af3bSchristos #undef FLD
2689a5a4af3bSchristos }
2690a5a4af3bSchristos   NEXT (vpc);
2691a5a4af3bSchristos 
2692a5a4af3bSchristos   CASE (sem, INSN_SRAI) : /* srai $dr,$uimm5 */
2693a5a4af3bSchristos {
2694a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2695a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2696a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
2697a5a4af3bSchristos   int UNUSED written = 0;
2698a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2699a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2700a5a4af3bSchristos 
2701a5a4af3bSchristos   {
2702a5a4af3bSchristos     SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
2703a5a4af3bSchristos     * FLD (i_dr) = opval;
2704a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2705a5a4af3bSchristos   }
2706a5a4af3bSchristos 
2707a5a4af3bSchristos #undef FLD
2708a5a4af3bSchristos }
2709a5a4af3bSchristos   NEXT (vpc);
2710a5a4af3bSchristos 
2711a5a4af3bSchristos   CASE (sem, INSN_SRL) : /* srl $dr,$sr */
2712a5a4af3bSchristos {
2713a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2714a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2715a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
2716a5a4af3bSchristos   int UNUSED written = 0;
2717a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2718a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2719a5a4af3bSchristos 
2720a5a4af3bSchristos   {
2721a5a4af3bSchristos     SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
2722a5a4af3bSchristos     * FLD (i_dr) = opval;
2723a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2724a5a4af3bSchristos   }
2725a5a4af3bSchristos 
2726a5a4af3bSchristos #undef FLD
2727a5a4af3bSchristos }
2728a5a4af3bSchristos   NEXT (vpc);
2729a5a4af3bSchristos 
2730a5a4af3bSchristos   CASE (sem, INSN_SRL3) : /* srl3 $dr,$sr,$simm16 */
2731a5a4af3bSchristos {
2732a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2733a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2734a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add3.f
2735a5a4af3bSchristos   int UNUSED written = 0;
2736a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2737a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2738a5a4af3bSchristos 
2739a5a4af3bSchristos   {
2740a5a4af3bSchristos     SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31));
2741a5a4af3bSchristos     * FLD (i_dr) = opval;
2742a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2743a5a4af3bSchristos   }
2744a5a4af3bSchristos 
2745a5a4af3bSchristos #undef FLD
2746a5a4af3bSchristos }
2747a5a4af3bSchristos   NEXT (vpc);
2748a5a4af3bSchristos 
2749a5a4af3bSchristos   CASE (sem, INSN_SRLI) : /* srli $dr,$uimm5 */
2750a5a4af3bSchristos {
2751a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2752a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2753a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
2754a5a4af3bSchristos   int UNUSED written = 0;
2755a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2756a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2757a5a4af3bSchristos 
2758a5a4af3bSchristos   {
2759a5a4af3bSchristos     SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
2760a5a4af3bSchristos     * FLD (i_dr) = opval;
2761a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2762a5a4af3bSchristos   }
2763a5a4af3bSchristos 
2764a5a4af3bSchristos #undef FLD
2765a5a4af3bSchristos }
2766a5a4af3bSchristos   NEXT (vpc);
2767a5a4af3bSchristos 
2768a5a4af3bSchristos   CASE (sem, INSN_ST) : /* st $src1,@$src2 */
2769a5a4af3bSchristos {
2770a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2771a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2772a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2773a5a4af3bSchristos   int UNUSED written = 0;
2774a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2775a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2776a5a4af3bSchristos 
2777a5a4af3bSchristos   {
2778a5a4af3bSchristos     SI opval = * FLD (i_src1);
2779a5a4af3bSchristos     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
2780a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2781a5a4af3bSchristos   }
2782a5a4af3bSchristos 
2783a5a4af3bSchristos #undef FLD
2784a5a4af3bSchristos }
2785a5a4af3bSchristos   NEXT (vpc);
2786a5a4af3bSchristos 
2787a5a4af3bSchristos   CASE (sem, INSN_ST_D) : /* st $src1,@($slo16,$src2) */
2788a5a4af3bSchristos {
2789a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2790a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2791a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f
2792a5a4af3bSchristos   int UNUSED written = 0;
2793a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2794a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2795a5a4af3bSchristos 
2796a5a4af3bSchristos   {
2797a5a4af3bSchristos     SI opval = * FLD (i_src1);
2798a5a4af3bSchristos     SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2799a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2800a5a4af3bSchristos   }
2801a5a4af3bSchristos 
2802a5a4af3bSchristos #undef FLD
2803a5a4af3bSchristos }
2804a5a4af3bSchristos   NEXT (vpc);
2805a5a4af3bSchristos 
2806a5a4af3bSchristos   CASE (sem, INSN_STB) : /* stb $src1,@$src2 */
2807a5a4af3bSchristos {
2808a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2809a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2810a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2811a5a4af3bSchristos   int UNUSED written = 0;
2812a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2813a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2814a5a4af3bSchristos 
2815a5a4af3bSchristos   {
2816a5a4af3bSchristos     QI opval = * FLD (i_src1);
2817a5a4af3bSchristos     SETMEMQI (current_cpu, pc, * FLD (i_src2), opval);
2818a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2819a5a4af3bSchristos   }
2820a5a4af3bSchristos 
2821a5a4af3bSchristos #undef FLD
2822a5a4af3bSchristos }
2823a5a4af3bSchristos   NEXT (vpc);
2824a5a4af3bSchristos 
2825a5a4af3bSchristos   CASE (sem, INSN_STB_D) : /* stb $src1,@($slo16,$src2) */
2826a5a4af3bSchristos {
2827a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2828a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2829a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f
2830a5a4af3bSchristos   int UNUSED written = 0;
2831a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2832a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2833a5a4af3bSchristos 
2834a5a4af3bSchristos   {
2835a5a4af3bSchristos     QI opval = * FLD (i_src1);
2836a5a4af3bSchristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2837a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2838a5a4af3bSchristos   }
2839a5a4af3bSchristos 
2840a5a4af3bSchristos #undef FLD
2841a5a4af3bSchristos }
2842a5a4af3bSchristos   NEXT (vpc);
2843a5a4af3bSchristos 
2844a5a4af3bSchristos   CASE (sem, INSN_STH) : /* sth $src1,@$src2 */
2845a5a4af3bSchristos {
2846a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2847a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2848a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2849a5a4af3bSchristos   int UNUSED written = 0;
2850a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2851a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2852a5a4af3bSchristos 
2853a5a4af3bSchristos   {
2854a5a4af3bSchristos     HI opval = * FLD (i_src1);
2855a5a4af3bSchristos     SETMEMHI (current_cpu, pc, * FLD (i_src2), opval);
2856a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2857a5a4af3bSchristos   }
2858a5a4af3bSchristos 
2859a5a4af3bSchristos #undef FLD
2860a5a4af3bSchristos }
2861a5a4af3bSchristos   NEXT (vpc);
2862a5a4af3bSchristos 
2863a5a4af3bSchristos   CASE (sem, INSN_STH_D) : /* sth $src1,@($slo16,$src2) */
2864a5a4af3bSchristos {
2865a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2866a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_d.f
2868a5a4af3bSchristos   int UNUSED written = 0;
2869a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2870a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
2871a5a4af3bSchristos 
2872a5a4af3bSchristos   {
2873a5a4af3bSchristos     HI opval = * FLD (i_src1);
2874a5a4af3bSchristos     SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval);
2875a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2876a5a4af3bSchristos   }
2877a5a4af3bSchristos 
2878a5a4af3bSchristos #undef FLD
2879a5a4af3bSchristos }
2880a5a4af3bSchristos   NEXT (vpc);
2881a5a4af3bSchristos 
2882a5a4af3bSchristos   CASE (sem, INSN_ST_PLUS) : /* st $src1,@+$src2 */
2883a5a4af3bSchristos {
2884a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2885a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2886a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2887a5a4af3bSchristos   int UNUSED written = 0;
2888a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2889a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2890a5a4af3bSchristos 
2891a5a4af3bSchristos {
2892a5a4af3bSchristos   SI tmp_new_src2;
2893a5a4af3bSchristos   tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
2894a5a4af3bSchristos   {
2895a5a4af3bSchristos     SI opval = * FLD (i_src1);
2896a5a4af3bSchristos     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2897a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2898a5a4af3bSchristos   }
2899a5a4af3bSchristos   {
2900a5a4af3bSchristos     SI opval = tmp_new_src2;
2901a5a4af3bSchristos     * FLD (i_src2) = opval;
2902a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2903a5a4af3bSchristos   }
2904a5a4af3bSchristos }
2905a5a4af3bSchristos 
2906a5a4af3bSchristos #undef FLD
2907a5a4af3bSchristos }
2908a5a4af3bSchristos   NEXT (vpc);
2909a5a4af3bSchristos 
2910a5a4af3bSchristos   CASE (sem, INSN_STH_PLUS) : /* sth $src1,@$src2+ */
2911a5a4af3bSchristos {
2912a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2913a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2914a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2915a5a4af3bSchristos   int UNUSED written = 0;
2916a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2917a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2918a5a4af3bSchristos 
2919a5a4af3bSchristos {
2920a5a4af3bSchristos   SI tmp_new_src2;
2921a5a4af3bSchristos   tmp_new_src2 = * FLD (i_src2);
2922a5a4af3bSchristos   {
2923a5a4af3bSchristos     HI opval = * FLD (i_src1);
2924a5a4af3bSchristos     SETMEMHI (current_cpu, pc, tmp_new_src2, opval);
2925a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2926a5a4af3bSchristos   }
2927a5a4af3bSchristos   {
2928a5a4af3bSchristos     SI opval = ADDSI (tmp_new_src2, 2);
2929a5a4af3bSchristos     * FLD (i_src2) = opval;
2930a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2931a5a4af3bSchristos   }
2932a5a4af3bSchristos }
2933a5a4af3bSchristos 
2934a5a4af3bSchristos #undef FLD
2935a5a4af3bSchristos }
2936a5a4af3bSchristos   NEXT (vpc);
2937a5a4af3bSchristos 
2938a5a4af3bSchristos   CASE (sem, INSN_STB_PLUS) : /* stb $src1,@$src2+ */
2939a5a4af3bSchristos {
2940a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2941a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2942a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2943a5a4af3bSchristos   int UNUSED written = 0;
2944a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2945a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2946a5a4af3bSchristos 
2947a5a4af3bSchristos {
2948a5a4af3bSchristos   SI tmp_new_src2;
2949a5a4af3bSchristos   tmp_new_src2 = * FLD (i_src2);
2950a5a4af3bSchristos   {
2951a5a4af3bSchristos     QI opval = * FLD (i_src1);
2952a5a4af3bSchristos     SETMEMQI (current_cpu, pc, tmp_new_src2, opval);
2953a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2954a5a4af3bSchristos   }
2955a5a4af3bSchristos   {
2956a5a4af3bSchristos     SI opval = ADDSI (tmp_new_src2, 1);
2957a5a4af3bSchristos     * FLD (i_src2) = opval;
2958a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2959a5a4af3bSchristos   }
2960a5a4af3bSchristos }
2961a5a4af3bSchristos 
2962a5a4af3bSchristos #undef FLD
2963a5a4af3bSchristos }
2964a5a4af3bSchristos   NEXT (vpc);
2965a5a4af3bSchristos 
2966a5a4af3bSchristos   CASE (sem, INSN_ST_MINUS) : /* st $src1,@-$src2 */
2967a5a4af3bSchristos {
2968a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2969a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2970a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
2971a5a4af3bSchristos   int UNUSED written = 0;
2972a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
2973a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
2974a5a4af3bSchristos 
2975a5a4af3bSchristos {
2976a5a4af3bSchristos   SI tmp_new_src2;
2977a5a4af3bSchristos   tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
2978a5a4af3bSchristos   {
2979a5a4af3bSchristos     SI opval = * FLD (i_src1);
2980a5a4af3bSchristos     SETMEMSI (current_cpu, pc, tmp_new_src2, opval);
2981a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
2982a5a4af3bSchristos   }
2983a5a4af3bSchristos   {
2984a5a4af3bSchristos     SI opval = tmp_new_src2;
2985a5a4af3bSchristos     * FLD (i_src2) = opval;
2986a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
2987a5a4af3bSchristos   }
2988a5a4af3bSchristos }
2989a5a4af3bSchristos 
2990a5a4af3bSchristos #undef FLD
2991a5a4af3bSchristos }
2992a5a4af3bSchristos   NEXT (vpc);
2993a5a4af3bSchristos 
2994a5a4af3bSchristos   CASE (sem, INSN_SUB) : /* sub $dr,$sr */
2995a5a4af3bSchristos {
2996a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
2997a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
2998a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
2999a5a4af3bSchristos   int UNUSED written = 0;
3000a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3001a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3002a5a4af3bSchristos 
3003a5a4af3bSchristos   {
3004a5a4af3bSchristos     SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
3005a5a4af3bSchristos     * FLD (i_dr) = opval;
3006a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3007a5a4af3bSchristos   }
3008a5a4af3bSchristos 
3009a5a4af3bSchristos #undef FLD
3010a5a4af3bSchristos }
3011a5a4af3bSchristos   NEXT (vpc);
3012a5a4af3bSchristos 
3013a5a4af3bSchristos   CASE (sem, INSN_SUBV) : /* subv $dr,$sr */
3014a5a4af3bSchristos {
3015a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3016a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3017a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3018a5a4af3bSchristos   int UNUSED written = 0;
3019a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3020a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3021a5a4af3bSchristos 
3022a5a4af3bSchristos {
3023a5a4af3bSchristos   SI temp0;BI temp1;
3024a5a4af3bSchristos   temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
3025a5a4af3bSchristos   temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
3026a5a4af3bSchristos   {
3027a5a4af3bSchristos     SI opval = temp0;
3028a5a4af3bSchristos     * FLD (i_dr) = opval;
3029a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3030a5a4af3bSchristos   }
3031a5a4af3bSchristos   {
3032a5a4af3bSchristos     BI opval = temp1;
3033a5a4af3bSchristos     CPU (h_cond) = opval;
3034a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3035a5a4af3bSchristos   }
3036a5a4af3bSchristos }
3037a5a4af3bSchristos 
3038a5a4af3bSchristos #undef FLD
3039a5a4af3bSchristos }
3040a5a4af3bSchristos   NEXT (vpc);
3041a5a4af3bSchristos 
3042a5a4af3bSchristos   CASE (sem, INSN_SUBX) : /* subx $dr,$sr */
3043a5a4af3bSchristos {
3044a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3045a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3046a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3047a5a4af3bSchristos   int UNUSED written = 0;
3048a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3049a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3050a5a4af3bSchristos 
3051a5a4af3bSchristos {
3052a5a4af3bSchristos   SI temp0;BI temp1;
3053a5a4af3bSchristos   temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3054a5a4af3bSchristos   temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3055a5a4af3bSchristos   {
3056a5a4af3bSchristos     SI opval = temp0;
3057a5a4af3bSchristos     * FLD (i_dr) = opval;
3058a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3059a5a4af3bSchristos   }
3060a5a4af3bSchristos   {
3061a5a4af3bSchristos     BI opval = temp1;
3062a5a4af3bSchristos     CPU (h_cond) = opval;
3063a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3064a5a4af3bSchristos   }
3065a5a4af3bSchristos }
3066a5a4af3bSchristos 
3067a5a4af3bSchristos #undef FLD
3068a5a4af3bSchristos }
3069a5a4af3bSchristos   NEXT (vpc);
3070a5a4af3bSchristos 
3071a5a4af3bSchristos   CASE (sem, INSN_TRAP) : /* trap $uimm4 */
3072a5a4af3bSchristos {
3073a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3074a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3075a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f
3076a5a4af3bSchristos   int UNUSED written = 0;
3077a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3078a5a4af3bSchristos   SEM_BRANCH_INIT
3079a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3080a5a4af3bSchristos 
3081a5a4af3bSchristos {
3082a5a4af3bSchristos   {
3083a5a4af3bSchristos     USI opval = GET_H_CR (((UINT) 6));
3084a5a4af3bSchristos     SET_H_CR (((UINT) 14), opval);
3085a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
3086a5a4af3bSchristos   }
3087a5a4af3bSchristos   {
3088a5a4af3bSchristos     USI opval = ADDSI (pc, 4);
3089a5a4af3bSchristos     SET_H_CR (((UINT) 6), opval);
3090a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
3091a5a4af3bSchristos   }
3092a5a4af3bSchristos   {
3093a5a4af3bSchristos     UQI opval = CPU (h_bpsw);
3094a5a4af3bSchristos     CPU (h_bbpsw) = opval;
3095a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
3096a5a4af3bSchristos   }
3097a5a4af3bSchristos   {
3098a5a4af3bSchristos     UQI opval = GET_H_PSW ();
3099a5a4af3bSchristos     CPU (h_bpsw) = opval;
3100a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
3101a5a4af3bSchristos   }
3102a5a4af3bSchristos   {
3103a5a4af3bSchristos     UQI opval = ANDQI (GET_H_PSW (), 128);
3104a5a4af3bSchristos     SET_H_PSW (opval);
3105a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
3106a5a4af3bSchristos   }
3107a5a4af3bSchristos   {
3108a5a4af3bSchristos     SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
3109a5a4af3bSchristos     SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc);
3110a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3111a5a4af3bSchristos   }
3112a5a4af3bSchristos }
3113a5a4af3bSchristos 
3114a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3115a5a4af3bSchristos #undef FLD
3116a5a4af3bSchristos }
3117a5a4af3bSchristos   NEXT (vpc);
3118a5a4af3bSchristos 
3119a5a4af3bSchristos   CASE (sem, INSN_UNLOCK) : /* unlock $src1,@$src2 */
3120a5a4af3bSchristos {
3121a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3122a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3123a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3124a5a4af3bSchristos   int UNUSED written = 0;
3125a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3126a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3127a5a4af3bSchristos 
3128a5a4af3bSchristos {
3129a5a4af3bSchristos if (CPU (h_lock)) {
3130a5a4af3bSchristos   {
3131a5a4af3bSchristos     SI opval = * FLD (i_src1);
3132a5a4af3bSchristos     SETMEMSI (current_cpu, pc, * FLD (i_src2), opval);
3133a5a4af3bSchristos     written |= (1 << 4);
3134a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3135a5a4af3bSchristos   }
3136a5a4af3bSchristos }
3137a5a4af3bSchristos   {
3138a5a4af3bSchristos     BI opval = 0;
3139a5a4af3bSchristos     CPU (h_lock) = opval;
3140a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
3141a5a4af3bSchristos   }
3142a5a4af3bSchristos }
3143a5a4af3bSchristos 
3144a5a4af3bSchristos   abuf->written = written;
3145a5a4af3bSchristos #undef FLD
3146a5a4af3bSchristos }
3147a5a4af3bSchristos   NEXT (vpc);
3148a5a4af3bSchristos 
3149a5a4af3bSchristos   CASE (sem, INSN_SATB) : /* satb $dr,$sr */
3150a5a4af3bSchristos {
3151a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3152a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3153a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
3154a5a4af3bSchristos   int UNUSED written = 0;
3155a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3156a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3157a5a4af3bSchristos 
3158a5a4af3bSchristos   {
3159a5a4af3bSchristos     SI opval = (GESI (* FLD (i_sr), 127)) ? (127) : (LESI (* FLD (i_sr), -128)) ? (-128) : (* FLD (i_sr));
3160a5a4af3bSchristos     * FLD (i_dr) = opval;
3161a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3162a5a4af3bSchristos   }
3163a5a4af3bSchristos 
3164a5a4af3bSchristos #undef FLD
3165a5a4af3bSchristos }
3166a5a4af3bSchristos   NEXT (vpc);
3167a5a4af3bSchristos 
3168a5a4af3bSchristos   CASE (sem, INSN_SATH) : /* sath $dr,$sr */
3169a5a4af3bSchristos {
3170a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3171a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3172a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
3173a5a4af3bSchristos   int UNUSED written = 0;
3174a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3175a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3176a5a4af3bSchristos 
3177a5a4af3bSchristos   {
3178a5a4af3bSchristos     SI opval = (GESI (* FLD (i_sr), 32767)) ? (32767) : (LESI (* FLD (i_sr), -32768)) ? (-32768) : (* FLD (i_sr));
3179a5a4af3bSchristos     * FLD (i_dr) = opval;
3180a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3181a5a4af3bSchristos   }
3182a5a4af3bSchristos 
3183a5a4af3bSchristos #undef FLD
3184a5a4af3bSchristos }
3185a5a4af3bSchristos   NEXT (vpc);
3186a5a4af3bSchristos 
3187a5a4af3bSchristos   CASE (sem, INSN_SAT) : /* sat $dr,$sr */
3188a5a4af3bSchristos {
3189a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3190a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3191a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
3192a5a4af3bSchristos   int UNUSED written = 0;
3193a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3194a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3195a5a4af3bSchristos 
3196a5a4af3bSchristos   {
3197a5a4af3bSchristos     SI opval = ((CPU (h_cond)) ? (((LTSI (* FLD (i_sr), 0)) ? (2147483647) : (0x80000000))) : (* FLD (i_sr)));
3198a5a4af3bSchristos     * FLD (i_dr) = opval;
3199a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3200a5a4af3bSchristos   }
3201a5a4af3bSchristos 
3202a5a4af3bSchristos #undef FLD
3203a5a4af3bSchristos }
3204a5a4af3bSchristos   NEXT (vpc);
3205a5a4af3bSchristos 
3206a5a4af3bSchristos   CASE (sem, INSN_PCMPBZ) : /* pcmpbz $src2 */
3207a5a4af3bSchristos {
3208a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3209a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3210a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3211a5a4af3bSchristos   int UNUSED written = 0;
3212a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3213a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3214a5a4af3bSchristos 
3215a5a4af3bSchristos   {
3216a5a4af3bSchristos     BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0);
3217a5a4af3bSchristos     CPU (h_cond) = opval;
3218a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3219a5a4af3bSchristos   }
3220a5a4af3bSchristos 
3221a5a4af3bSchristos #undef FLD
3222a5a4af3bSchristos }
3223a5a4af3bSchristos   NEXT (vpc);
3224a5a4af3bSchristos 
3225a5a4af3bSchristos   CASE (sem, INSN_SADD) : /* sadd */
3226a5a4af3bSchristos {
3227a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3228a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3229a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
3230a5a4af3bSchristos   int UNUSED written = 0;
3231a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3232a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3233a5a4af3bSchristos 
3234a5a4af3bSchristos   {
3235a5a4af3bSchristos     DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
3236a5a4af3bSchristos     SET_H_ACCUMS (((UINT) 0), opval);
3237a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
3238a5a4af3bSchristos   }
3239a5a4af3bSchristos 
3240a5a4af3bSchristos #undef FLD
3241a5a4af3bSchristos }
3242a5a4af3bSchristos   NEXT (vpc);
3243a5a4af3bSchristos 
3244a5a4af3bSchristos   CASE (sem, INSN_MACWU1) : /* macwu1 $src1,$src2 */
3245a5a4af3bSchristos {
3246a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3247a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3248a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3249a5a4af3bSchristos   int UNUSED written = 0;
3250a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3251a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3252a5a4af3bSchristos 
3253a5a4af3bSchristos   {
3254a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
3255a5a4af3bSchristos     SET_H_ACCUMS (((UINT) 1), opval);
3256a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
3257a5a4af3bSchristos   }
3258a5a4af3bSchristos 
3259a5a4af3bSchristos #undef FLD
3260a5a4af3bSchristos }
3261a5a4af3bSchristos   NEXT (vpc);
3262a5a4af3bSchristos 
3263a5a4af3bSchristos   CASE (sem, INSN_MSBLO) : /* msblo $src1,$src2 */
3264a5a4af3bSchristos {
3265a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3266a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3267a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3268a5a4af3bSchristos   int UNUSED written = 0;
3269a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3270a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3271a5a4af3bSchristos 
3272a5a4af3bSchristos   {
3273a5a4af3bSchristos     DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8);
3274a5a4af3bSchristos     SET_H_ACCUM (opval);
3275a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
3276a5a4af3bSchristos   }
3277a5a4af3bSchristos 
3278a5a4af3bSchristos #undef FLD
3279a5a4af3bSchristos }
3280a5a4af3bSchristos   NEXT (vpc);
3281a5a4af3bSchristos 
3282a5a4af3bSchristos   CASE (sem, INSN_MULWU1) : /* mulwu1 $src1,$src2 */
3283a5a4af3bSchristos {
3284a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3285a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3286a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3287a5a4af3bSchristos   int UNUSED written = 0;
3288a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3289a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3290a5a4af3bSchristos 
3291a5a4af3bSchristos   {
3292a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
3293a5a4af3bSchristos     SET_H_ACCUMS (((UINT) 1), opval);
3294a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
3295a5a4af3bSchristos   }
3296a5a4af3bSchristos 
3297a5a4af3bSchristos #undef FLD
3298a5a4af3bSchristos }
3299a5a4af3bSchristos   NEXT (vpc);
3300a5a4af3bSchristos 
3301a5a4af3bSchristos   CASE (sem, INSN_MACLH1) : /* maclh1 $src1,$src2 */
3302a5a4af3bSchristos {
3303a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3304a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3305a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
3306a5a4af3bSchristos   int UNUSED written = 0;
3307a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3308a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3309a5a4af3bSchristos 
3310a5a4af3bSchristos   {
3311a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8);
3312a5a4af3bSchristos     SET_H_ACCUMS (((UINT) 1), opval);
3313a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
3314a5a4af3bSchristos   }
3315a5a4af3bSchristos 
3316a5a4af3bSchristos #undef FLD
3317a5a4af3bSchristos }
3318a5a4af3bSchristos   NEXT (vpc);
3319a5a4af3bSchristos 
3320a5a4af3bSchristos   CASE (sem, INSN_SC) : /* sc */
3321a5a4af3bSchristos {
3322a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3323a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3324a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
3325a5a4af3bSchristos   int UNUSED written = 0;
3326a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3327a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3328a5a4af3bSchristos 
3329a5a4af3bSchristos if (ZEXTBISI (CPU (h_cond)))
3330a5a4af3bSchristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3331a5a4af3bSchristos 
3332a5a4af3bSchristos #undef FLD
3333a5a4af3bSchristos }
3334a5a4af3bSchristos   NEXT (vpc);
3335a5a4af3bSchristos 
3336a5a4af3bSchristos   CASE (sem, INSN_SNC) : /* snc */
3337a5a4af3bSchristos {
3338a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3339a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3340a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
3341a5a4af3bSchristos   int UNUSED written = 0;
3342a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3343a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3344a5a4af3bSchristos 
3345a5a4af3bSchristos if (ZEXTBISI (NOTBI (CPU (h_cond))))
3346a5a4af3bSchristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
3347a5a4af3bSchristos 
3348a5a4af3bSchristos #undef FLD
3349a5a4af3bSchristos }
3350a5a4af3bSchristos   NEXT (vpc);
3351a5a4af3bSchristos 
3352a5a4af3bSchristos   CASE (sem, INSN_CLRPSW) : /* clrpsw $uimm8 */
3353a5a4af3bSchristos {
3354a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3355a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3356a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
3357a5a4af3bSchristos   int UNUSED written = 0;
3358a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3359a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3360a5a4af3bSchristos 
3361a5a4af3bSchristos   {
3362a5a4af3bSchristos     USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
3363a5a4af3bSchristos     SET_H_CR (((UINT) 0), opval);
3364a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
3365a5a4af3bSchristos   }
3366a5a4af3bSchristos 
3367a5a4af3bSchristos #undef FLD
3368a5a4af3bSchristos }
3369a5a4af3bSchristos   NEXT (vpc);
3370a5a4af3bSchristos 
3371a5a4af3bSchristos   CASE (sem, INSN_SETPSW) : /* setpsw $uimm8 */
3372a5a4af3bSchristos {
3373a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3374a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3375a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
3376a5a4af3bSchristos   int UNUSED written = 0;
3377a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3378a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3379a5a4af3bSchristos 
3380a5a4af3bSchristos   {
3381a5a4af3bSchristos     USI opval = FLD (f_uimm8);
3382a5a4af3bSchristos     SET_H_CR (((UINT) 0), opval);
3383a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
3384a5a4af3bSchristos   }
3385a5a4af3bSchristos 
3386a5a4af3bSchristos #undef FLD
3387a5a4af3bSchristos }
3388a5a4af3bSchristos   NEXT (vpc);
3389a5a4af3bSchristos 
3390a5a4af3bSchristos   CASE (sem, INSN_BSET) : /* bset $uimm3,@($slo16,$sr) */
3391a5a4af3bSchristos {
3392a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3393a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3394a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f
3395a5a4af3bSchristos   int UNUSED written = 0;
3396a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3397a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3398a5a4af3bSchristos 
3399a5a4af3bSchristos   {
3400a5a4af3bSchristos     QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3))));
3401a5a4af3bSchristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
3402a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3403a5a4af3bSchristos   }
3404a5a4af3bSchristos 
3405a5a4af3bSchristos #undef FLD
3406a5a4af3bSchristos }
3407a5a4af3bSchristos   NEXT (vpc);
3408a5a4af3bSchristos 
3409a5a4af3bSchristos   CASE (sem, INSN_BCLR) : /* bclr $uimm3,@($slo16,$sr) */
3410a5a4af3bSchristos {
3411a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3412a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3413a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f
3414a5a4af3bSchristos   int UNUSED written = 0;
3415a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3416a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 4);
3417a5a4af3bSchristos 
3418a5a4af3bSchristos   {
3419a5a4af3bSchristos     QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3)))));
3420a5a4af3bSchristos     SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval);
3421a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
3422a5a4af3bSchristos   }
3423a5a4af3bSchristos 
3424a5a4af3bSchristos #undef FLD
3425a5a4af3bSchristos }
3426a5a4af3bSchristos   NEXT (vpc);
3427a5a4af3bSchristos 
3428a5a4af3bSchristos   CASE (sem, INSN_BTST) : /* btst $uimm3,$sr */
3429a5a4af3bSchristos {
3430a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3431a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3432a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f
3433a5a4af3bSchristos   int UNUSED written = 0;
3434a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3435a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3436a5a4af3bSchristos 
3437a5a4af3bSchristos   {
3438a5a4af3bSchristos     BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
3439a5a4af3bSchristos     CPU (h_cond) = opval;
3440a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3441a5a4af3bSchristos   }
3442a5a4af3bSchristos 
3443a5a4af3bSchristos #undef FLD
3444a5a4af3bSchristos }
3445a5a4af3bSchristos   NEXT (vpc);
3446a5a4af3bSchristos 
3447a5a4af3bSchristos   CASE (sem, INSN_PAR_ADD) : /* add $dr,$sr */
3448a5a4af3bSchristos {
3449a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3450a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3451a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3452a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3453a5a4af3bSchristos   int UNUSED written = 0;
3454a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3455a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3456a5a4af3bSchristos 
3457a5a4af3bSchristos   {
3458a5a4af3bSchristos     SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr));
3459a5a4af3bSchristos     OPRND (dr) = opval;
3460a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3461a5a4af3bSchristos   }
3462a5a4af3bSchristos 
3463a5a4af3bSchristos #undef OPRND
3464a5a4af3bSchristos #undef FLD
3465a5a4af3bSchristos }
3466a5a4af3bSchristos   NEXT (vpc);
3467a5a4af3bSchristos 
3468a5a4af3bSchristos CASE (sem, INSN_WRITE_ADD) : /* add $dr,$sr */
3469a5a4af3bSchristos   {
3470a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3471a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3472a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3473a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3474a5a4af3bSchristos     int UNUSED written = abuf->written;
3475a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3476a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3477a5a4af3bSchristos 
3478a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3479a5a4af3bSchristos 
3480a5a4af3bSchristos #undef OPRND
3481a5a4af3bSchristos #undef FLD
3482a5a4af3bSchristos   }
3483a5a4af3bSchristos   NEXT (vpc);
3484a5a4af3bSchristos 
3485a5a4af3bSchristos   CASE (sem, INSN_PAR_AND) : /* and $dr,$sr */
3486a5a4af3bSchristos {
3487a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3488a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3489a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3490a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3491a5a4af3bSchristos   int UNUSED written = 0;
3492a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3493a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3494a5a4af3bSchristos 
3495a5a4af3bSchristos   {
3496a5a4af3bSchristos     SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr));
3497a5a4af3bSchristos     OPRND (dr) = opval;
3498a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3499a5a4af3bSchristos   }
3500a5a4af3bSchristos 
3501a5a4af3bSchristos #undef OPRND
3502a5a4af3bSchristos #undef FLD
3503a5a4af3bSchristos }
3504a5a4af3bSchristos   NEXT (vpc);
3505a5a4af3bSchristos 
3506a5a4af3bSchristos CASE (sem, INSN_WRITE_AND) : /* and $dr,$sr */
3507a5a4af3bSchristos   {
3508a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3509a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3510a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3511a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3512a5a4af3bSchristos     int UNUSED written = abuf->written;
3513a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3514a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3515a5a4af3bSchristos 
3516a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3517a5a4af3bSchristos 
3518a5a4af3bSchristos #undef OPRND
3519a5a4af3bSchristos #undef FLD
3520a5a4af3bSchristos   }
3521a5a4af3bSchristos   NEXT (vpc);
3522a5a4af3bSchristos 
3523a5a4af3bSchristos   CASE (sem, INSN_PAR_OR) : /* or $dr,$sr */
3524a5a4af3bSchristos {
3525a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3526a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3527a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3528a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3529a5a4af3bSchristos   int UNUSED written = 0;
3530a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3531a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3532a5a4af3bSchristos 
3533a5a4af3bSchristos   {
3534a5a4af3bSchristos     SI opval = ORSI (* FLD (i_dr), * FLD (i_sr));
3535a5a4af3bSchristos     OPRND (dr) = opval;
3536a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3537a5a4af3bSchristos   }
3538a5a4af3bSchristos 
3539a5a4af3bSchristos #undef OPRND
3540a5a4af3bSchristos #undef FLD
3541a5a4af3bSchristos }
3542a5a4af3bSchristos   NEXT (vpc);
3543a5a4af3bSchristos 
3544a5a4af3bSchristos CASE (sem, INSN_WRITE_OR) : /* or $dr,$sr */
3545a5a4af3bSchristos   {
3546a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3547a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3548a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3549a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3550a5a4af3bSchristos     int UNUSED written = abuf->written;
3551a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3552a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3553a5a4af3bSchristos 
3554a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3555a5a4af3bSchristos 
3556a5a4af3bSchristos #undef OPRND
3557a5a4af3bSchristos #undef FLD
3558a5a4af3bSchristos   }
3559a5a4af3bSchristos   NEXT (vpc);
3560a5a4af3bSchristos 
3561a5a4af3bSchristos   CASE (sem, INSN_PAR_XOR) : /* xor $dr,$sr */
3562a5a4af3bSchristos {
3563a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3564a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3565a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3566a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3567a5a4af3bSchristos   int UNUSED written = 0;
3568a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3569a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3570a5a4af3bSchristos 
3571a5a4af3bSchristos   {
3572a5a4af3bSchristos     SI opval = XORSI (* FLD (i_dr), * FLD (i_sr));
3573a5a4af3bSchristos     OPRND (dr) = opval;
3574a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3575a5a4af3bSchristos   }
3576a5a4af3bSchristos 
3577a5a4af3bSchristos #undef OPRND
3578a5a4af3bSchristos #undef FLD
3579a5a4af3bSchristos }
3580a5a4af3bSchristos   NEXT (vpc);
3581a5a4af3bSchristos 
3582a5a4af3bSchristos CASE (sem, INSN_WRITE_XOR) : /* xor $dr,$sr */
3583a5a4af3bSchristos   {
3584a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3585a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3586a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3587a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
3588a5a4af3bSchristos     int UNUSED written = abuf->written;
3589a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3590a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3591a5a4af3bSchristos 
3592a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3593a5a4af3bSchristos 
3594a5a4af3bSchristos #undef OPRND
3595a5a4af3bSchristos #undef FLD
3596a5a4af3bSchristos   }
3597a5a4af3bSchristos   NEXT (vpc);
3598a5a4af3bSchristos 
3599a5a4af3bSchristos   CASE (sem, INSN_PAR_ADDI) : /* addi $dr,$simm8 */
3600a5a4af3bSchristos {
3601a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3602a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3603a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
3604a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addi.f
3605a5a4af3bSchristos   int UNUSED written = 0;
3606a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3607a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3608a5a4af3bSchristos 
3609a5a4af3bSchristos   {
3610a5a4af3bSchristos     SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8));
3611a5a4af3bSchristos     OPRND (dr) = opval;
3612a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3613a5a4af3bSchristos   }
3614a5a4af3bSchristos 
3615a5a4af3bSchristos #undef OPRND
3616a5a4af3bSchristos #undef FLD
3617a5a4af3bSchristos }
3618a5a4af3bSchristos   NEXT (vpc);
3619a5a4af3bSchristos 
3620a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDI) : /* addi $dr,$simm8 */
3621a5a4af3bSchristos   {
3622a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3623a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3624a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
3625a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addi.f
3626a5a4af3bSchristos     int UNUSED written = abuf->written;
3627a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3628a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3629a5a4af3bSchristos 
3630a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3631a5a4af3bSchristos 
3632a5a4af3bSchristos #undef OPRND
3633a5a4af3bSchristos #undef FLD
3634a5a4af3bSchristos   }
3635a5a4af3bSchristos   NEXT (vpc);
3636a5a4af3bSchristos 
3637a5a4af3bSchristos   CASE (sem, INSN_PAR_ADDV) : /* addv $dr,$sr */
3638a5a4af3bSchristos {
3639a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3640a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3641a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3642a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f
3643a5a4af3bSchristos   int UNUSED written = 0;
3644a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3645a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3646a5a4af3bSchristos 
3647a5a4af3bSchristos {
3648a5a4af3bSchristos   SI temp0;BI temp1;
3649a5a4af3bSchristos   temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr));
3650a5a4af3bSchristos   temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0);
3651a5a4af3bSchristos   {
3652a5a4af3bSchristos     SI opval = temp0;
3653a5a4af3bSchristos     OPRND (dr) = opval;
3654a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3655a5a4af3bSchristos   }
3656a5a4af3bSchristos   {
3657a5a4af3bSchristos     BI opval = temp1;
3658a5a4af3bSchristos     OPRND (condbit) = opval;
3659a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3660a5a4af3bSchristos   }
3661a5a4af3bSchristos }
3662a5a4af3bSchristos 
3663a5a4af3bSchristos #undef OPRND
3664a5a4af3bSchristos #undef FLD
3665a5a4af3bSchristos }
3666a5a4af3bSchristos   NEXT (vpc);
3667a5a4af3bSchristos 
3668a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDV) : /* addv $dr,$sr */
3669a5a4af3bSchristos   {
3670a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3671a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3672a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3673a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f
3674a5a4af3bSchristos     int UNUSED written = abuf->written;
3675a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3676a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3677a5a4af3bSchristos 
3678a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
3679a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3680a5a4af3bSchristos 
3681a5a4af3bSchristos #undef OPRND
3682a5a4af3bSchristos #undef FLD
3683a5a4af3bSchristos   }
3684a5a4af3bSchristos   NEXT (vpc);
3685a5a4af3bSchristos 
3686a5a4af3bSchristos   CASE (sem, INSN_PAR_ADDX) : /* addx $dr,$sr */
3687a5a4af3bSchristos {
3688a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3689a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3690a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3691a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f
3692a5a4af3bSchristos   int UNUSED written = 0;
3693a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3694a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3695a5a4af3bSchristos 
3696a5a4af3bSchristos {
3697a5a4af3bSchristos   SI temp0;BI temp1;
3698a5a4af3bSchristos   temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3699a5a4af3bSchristos   temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
3700a5a4af3bSchristos   {
3701a5a4af3bSchristos     SI opval = temp0;
3702a5a4af3bSchristos     OPRND (dr) = opval;
3703a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3704a5a4af3bSchristos   }
3705a5a4af3bSchristos   {
3706a5a4af3bSchristos     BI opval = temp1;
3707a5a4af3bSchristos     OPRND (condbit) = opval;
3708a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
3709a5a4af3bSchristos   }
3710a5a4af3bSchristos }
3711a5a4af3bSchristos 
3712a5a4af3bSchristos #undef OPRND
3713a5a4af3bSchristos #undef FLD
3714a5a4af3bSchristos }
3715a5a4af3bSchristos   NEXT (vpc);
3716a5a4af3bSchristos 
3717a5a4af3bSchristos CASE (sem, INSN_WRITE_ADDX) : /* addx $dr,$sr */
3718a5a4af3bSchristos   {
3719a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3720a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3721a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
3722a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f
3723a5a4af3bSchristos     int UNUSED written = abuf->written;
3724a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3725a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3726a5a4af3bSchristos 
3727a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
3728a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
3729a5a4af3bSchristos 
3730a5a4af3bSchristos #undef OPRND
3731a5a4af3bSchristos #undef FLD
3732a5a4af3bSchristos   }
3733a5a4af3bSchristos   NEXT (vpc);
3734a5a4af3bSchristos 
3735a5a4af3bSchristos   CASE (sem, INSN_PAR_BC8) : /* bc.s $disp8 */
3736a5a4af3bSchristos {
3737a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3738a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3739a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3740a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
3741a5a4af3bSchristos   int UNUSED written = 0;
3742a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3743a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3744a5a4af3bSchristos 
3745a5a4af3bSchristos if (CPU (h_cond)) {
3746a5a4af3bSchristos   {
3747a5a4af3bSchristos     USI opval = FLD (i_disp8);
3748a5a4af3bSchristos     OPRND (pc) = opval;
3749a5a4af3bSchristos     written |= (1 << 2);
3750a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3751a5a4af3bSchristos   }
3752a5a4af3bSchristos }
3753a5a4af3bSchristos 
3754a5a4af3bSchristos   abuf->written = written;
3755a5a4af3bSchristos #undef OPRND
3756a5a4af3bSchristos #undef FLD
3757a5a4af3bSchristos }
3758a5a4af3bSchristos   NEXT (vpc);
3759a5a4af3bSchristos 
3760a5a4af3bSchristos CASE (sem, INSN_WRITE_BC8) : /* bc.s $disp8 */
3761a5a4af3bSchristos   {
3762a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3763a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3764a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3765a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
3766a5a4af3bSchristos     int UNUSED written = abuf->written;
3767a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3768a5a4af3bSchristos     SEM_BRANCH_INIT
3769a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3770a5a4af3bSchristos 
3771a5a4af3bSchristos   if (written & (1 << 2))
3772a5a4af3bSchristos     {
3773a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3774a5a4af3bSchristos     }
3775a5a4af3bSchristos 
3776a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3777a5a4af3bSchristos #undef OPRND
3778a5a4af3bSchristos #undef FLD
3779a5a4af3bSchristos   }
3780a5a4af3bSchristos   NEXT (vpc);
3781a5a4af3bSchristos 
3782a5a4af3bSchristos   CASE (sem, INSN_PAR_BL8) : /* bl.s $disp8 */
3783a5a4af3bSchristos {
3784a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3785a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3786a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3787a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bl8.f
3788a5a4af3bSchristos   int UNUSED written = 0;
3789a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3790a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3791a5a4af3bSchristos 
3792a5a4af3bSchristos {
3793a5a4af3bSchristos   {
3794a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
3795a5a4af3bSchristos     OPRND (h_gr_SI_14) = opval;
3796a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3797a5a4af3bSchristos   }
3798a5a4af3bSchristos   {
3799a5a4af3bSchristos     USI opval = FLD (i_disp8);
3800a5a4af3bSchristos     OPRND (pc) = opval;
3801a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3802a5a4af3bSchristos   }
3803a5a4af3bSchristos }
3804a5a4af3bSchristos 
3805a5a4af3bSchristos #undef OPRND
3806a5a4af3bSchristos #undef FLD
3807a5a4af3bSchristos }
3808a5a4af3bSchristos   NEXT (vpc);
3809a5a4af3bSchristos 
3810a5a4af3bSchristos CASE (sem, INSN_WRITE_BL8) : /* bl.s $disp8 */
3811a5a4af3bSchristos   {
3812a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3813a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3814a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3815a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bl8.f
3816a5a4af3bSchristos     int UNUSED written = abuf->written;
3817a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3818a5a4af3bSchristos     SEM_BRANCH_INIT
3819a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3820a5a4af3bSchristos 
3821a5a4af3bSchristos   CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
3822a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3823a5a4af3bSchristos 
3824a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3825a5a4af3bSchristos #undef OPRND
3826a5a4af3bSchristos #undef FLD
3827a5a4af3bSchristos   }
3828a5a4af3bSchristos   NEXT (vpc);
3829a5a4af3bSchristos 
3830a5a4af3bSchristos   CASE (sem, INSN_PAR_BCL8) : /* bcl.s $disp8 */
3831a5a4af3bSchristos {
3832a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3833a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3834a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3835a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3836a5a4af3bSchristos   int UNUSED written = 0;
3837a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3838a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3839a5a4af3bSchristos 
3840a5a4af3bSchristos if (CPU (h_cond)) {
3841a5a4af3bSchristos {
3842a5a4af3bSchristos   {
3843a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
3844a5a4af3bSchristos     OPRND (h_gr_SI_14) = opval;
3845a5a4af3bSchristos     written |= (1 << 3);
3846a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3847a5a4af3bSchristos   }
3848a5a4af3bSchristos   {
3849a5a4af3bSchristos     USI opval = FLD (i_disp8);
3850a5a4af3bSchristos     OPRND (pc) = opval;
3851a5a4af3bSchristos     written |= (1 << 4);
3852a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3853a5a4af3bSchristos   }
3854a5a4af3bSchristos }
3855a5a4af3bSchristos }
3856a5a4af3bSchristos 
3857a5a4af3bSchristos   abuf->written = written;
3858a5a4af3bSchristos #undef OPRND
3859a5a4af3bSchristos #undef FLD
3860a5a4af3bSchristos }
3861a5a4af3bSchristos   NEXT (vpc);
3862a5a4af3bSchristos 
3863a5a4af3bSchristos CASE (sem, INSN_WRITE_BCL8) : /* bcl.s $disp8 */
3864a5a4af3bSchristos   {
3865a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3866a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3868a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3869a5a4af3bSchristos     int UNUSED written = abuf->written;
3870a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3871a5a4af3bSchristos     SEM_BRANCH_INIT
3872a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3873a5a4af3bSchristos 
3874a5a4af3bSchristos   if (written & (1 << 3))
3875a5a4af3bSchristos     {
3876a5a4af3bSchristos       CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
3877a5a4af3bSchristos     }
3878a5a4af3bSchristos   if (written & (1 << 4))
3879a5a4af3bSchristos     {
3880a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3881a5a4af3bSchristos     }
3882a5a4af3bSchristos 
3883a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3884a5a4af3bSchristos #undef OPRND
3885a5a4af3bSchristos #undef FLD
3886a5a4af3bSchristos   }
3887a5a4af3bSchristos   NEXT (vpc);
3888a5a4af3bSchristos 
3889a5a4af3bSchristos   CASE (sem, INSN_PAR_BNC8) : /* bnc.s $disp8 */
3890a5a4af3bSchristos {
3891a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3892a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3893a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3894a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
3895a5a4af3bSchristos   int UNUSED written = 0;
3896a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3897a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3898a5a4af3bSchristos 
3899a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
3900a5a4af3bSchristos   {
3901a5a4af3bSchristos     USI opval = FLD (i_disp8);
3902a5a4af3bSchristos     OPRND (pc) = opval;
3903a5a4af3bSchristos     written |= (1 << 2);
3904a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3905a5a4af3bSchristos   }
3906a5a4af3bSchristos }
3907a5a4af3bSchristos 
3908a5a4af3bSchristos   abuf->written = written;
3909a5a4af3bSchristos #undef OPRND
3910a5a4af3bSchristos #undef FLD
3911a5a4af3bSchristos }
3912a5a4af3bSchristos   NEXT (vpc);
3913a5a4af3bSchristos 
3914a5a4af3bSchristos CASE (sem, INSN_WRITE_BNC8) : /* bnc.s $disp8 */
3915a5a4af3bSchristos   {
3916a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3917a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3918a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3919a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bc8.f
3920a5a4af3bSchristos     int UNUSED written = abuf->written;
3921a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3922a5a4af3bSchristos     SEM_BRANCH_INIT
3923a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3924a5a4af3bSchristos 
3925a5a4af3bSchristos   if (written & (1 << 2))
3926a5a4af3bSchristos     {
3927a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3928a5a4af3bSchristos     }
3929a5a4af3bSchristos 
3930a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3931a5a4af3bSchristos #undef OPRND
3932a5a4af3bSchristos #undef FLD
3933a5a4af3bSchristos   }
3934a5a4af3bSchristos   NEXT (vpc);
3935a5a4af3bSchristos 
3936a5a4af3bSchristos   CASE (sem, INSN_PAR_BRA8) : /* bra.s $disp8 */
3937a5a4af3bSchristos {
3938a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3939a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3940a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3941a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bra8.f
3942a5a4af3bSchristos   int UNUSED written = 0;
3943a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3944a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3945a5a4af3bSchristos 
3946a5a4af3bSchristos   {
3947a5a4af3bSchristos     USI opval = FLD (i_disp8);
3948a5a4af3bSchristos     OPRND (pc) = opval;
3949a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3950a5a4af3bSchristos   }
3951a5a4af3bSchristos 
3952a5a4af3bSchristos #undef OPRND
3953a5a4af3bSchristos #undef FLD
3954a5a4af3bSchristos }
3955a5a4af3bSchristos   NEXT (vpc);
3956a5a4af3bSchristos 
3957a5a4af3bSchristos CASE (sem, INSN_WRITE_BRA8) : /* bra.s $disp8 */
3958a5a4af3bSchristos   {
3959a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3960a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
3961a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3962a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bra8.f
3963a5a4af3bSchristos     int UNUSED written = abuf->written;
3964a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
3965a5a4af3bSchristos     SEM_BRANCH_INIT
3966a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
3967a5a4af3bSchristos 
3968a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
3969a5a4af3bSchristos 
3970a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
3971a5a4af3bSchristos #undef OPRND
3972a5a4af3bSchristos #undef FLD
3973a5a4af3bSchristos   }
3974a5a4af3bSchristos   NEXT (vpc);
3975a5a4af3bSchristos 
3976a5a4af3bSchristos   CASE (sem, INSN_PAR_BNCL8) : /* bncl.s $disp8 */
3977a5a4af3bSchristos {
3978a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
3979a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
3980a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
3981a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
3982a5a4af3bSchristos   int UNUSED written = 0;
3983a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
3984a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
3985a5a4af3bSchristos 
3986a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
3987a5a4af3bSchristos {
3988a5a4af3bSchristos   {
3989a5a4af3bSchristos     SI opval = ADDSI (ANDSI (pc, -4), 4);
3990a5a4af3bSchristos     OPRND (h_gr_SI_14) = opval;
3991a5a4af3bSchristos     written |= (1 << 3);
3992a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
3993a5a4af3bSchristos   }
3994a5a4af3bSchristos   {
3995a5a4af3bSchristos     USI opval = FLD (i_disp8);
3996a5a4af3bSchristos     OPRND (pc) = opval;
3997a5a4af3bSchristos     written |= (1 << 4);
3998a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
3999a5a4af3bSchristos   }
4000a5a4af3bSchristos }
4001a5a4af3bSchristos }
4002a5a4af3bSchristos 
4003a5a4af3bSchristos   abuf->written = written;
4004a5a4af3bSchristos #undef OPRND
4005a5a4af3bSchristos #undef FLD
4006a5a4af3bSchristos }
4007a5a4af3bSchristos   NEXT (vpc);
4008a5a4af3bSchristos 
4009a5a4af3bSchristos CASE (sem, INSN_WRITE_BNCL8) : /* bncl.s $disp8 */
4010a5a4af3bSchristos   {
4011a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4012a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4013a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bl8.f
4014a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_bcl8.f
4015a5a4af3bSchristos     int UNUSED written = abuf->written;
4016a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4017a5a4af3bSchristos     SEM_BRANCH_INIT
4018a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4019a5a4af3bSchristos 
4020a5a4af3bSchristos   if (written & (1 << 3))
4021a5a4af3bSchristos     {
4022a5a4af3bSchristos       CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
4023a5a4af3bSchristos     }
4024a5a4af3bSchristos   if (written & (1 << 4))
4025a5a4af3bSchristos     {
4026a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4027a5a4af3bSchristos     }
4028a5a4af3bSchristos 
4029a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
4030a5a4af3bSchristos #undef OPRND
4031a5a4af3bSchristos #undef FLD
4032a5a4af3bSchristos   }
4033a5a4af3bSchristos   NEXT (vpc);
4034a5a4af3bSchristos 
4035a5a4af3bSchristos   CASE (sem, INSN_PAR_CMP) : /* cmp $src1,$src2 */
4036a5a4af3bSchristos {
4037a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4038a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4039a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4040a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4041a5a4af3bSchristos   int UNUSED written = 0;
4042a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4043a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4044a5a4af3bSchristos 
4045a5a4af3bSchristos   {
4046a5a4af3bSchristos     BI opval = LTSI (* FLD (i_src1), * FLD (i_src2));
4047a5a4af3bSchristos     OPRND (condbit) = opval;
4048a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
4049a5a4af3bSchristos   }
4050a5a4af3bSchristos 
4051a5a4af3bSchristos #undef OPRND
4052a5a4af3bSchristos #undef FLD
4053a5a4af3bSchristos }
4054a5a4af3bSchristos   NEXT (vpc);
4055a5a4af3bSchristos 
4056a5a4af3bSchristos CASE (sem, INSN_WRITE_CMP) : /* cmp $src1,$src2 */
4057a5a4af3bSchristos   {
4058a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4059a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4060a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4061a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4062a5a4af3bSchristos     int UNUSED written = abuf->written;
4063a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4064a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4065a5a4af3bSchristos 
4066a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
4067a5a4af3bSchristos 
4068a5a4af3bSchristos #undef OPRND
4069a5a4af3bSchristos #undef FLD
4070a5a4af3bSchristos   }
4071a5a4af3bSchristos   NEXT (vpc);
4072a5a4af3bSchristos 
4073a5a4af3bSchristos   CASE (sem, INSN_PAR_CMPU) : /* cmpu $src1,$src2 */
4074a5a4af3bSchristos {
4075a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4076a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4077a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4078a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4079a5a4af3bSchristos   int UNUSED written = 0;
4080a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4081a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4082a5a4af3bSchristos 
4083a5a4af3bSchristos   {
4084a5a4af3bSchristos     BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2));
4085a5a4af3bSchristos     OPRND (condbit) = opval;
4086a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
4087a5a4af3bSchristos   }
4088a5a4af3bSchristos 
4089a5a4af3bSchristos #undef OPRND
4090a5a4af3bSchristos #undef FLD
4091a5a4af3bSchristos }
4092a5a4af3bSchristos   NEXT (vpc);
4093a5a4af3bSchristos 
4094a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPU) : /* cmpu $src1,$src2 */
4095a5a4af3bSchristos   {
4096a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4097a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4098a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4099a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4100a5a4af3bSchristos     int UNUSED written = abuf->written;
4101a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4102a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4103a5a4af3bSchristos 
4104a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
4105a5a4af3bSchristos 
4106a5a4af3bSchristos #undef OPRND
4107a5a4af3bSchristos #undef FLD
4108a5a4af3bSchristos   }
4109a5a4af3bSchristos   NEXT (vpc);
4110a5a4af3bSchristos 
4111a5a4af3bSchristos   CASE (sem, INSN_PAR_CMPEQ) : /* cmpeq $src1,$src2 */
4112a5a4af3bSchristos {
4113a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4114a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4115a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4116a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4117a5a4af3bSchristos   int UNUSED written = 0;
4118a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4119a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4120a5a4af3bSchristos 
4121a5a4af3bSchristos   {
4122a5a4af3bSchristos     BI opval = EQSI (* FLD (i_src1), * FLD (i_src2));
4123a5a4af3bSchristos     OPRND (condbit) = opval;
4124a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
4125a5a4af3bSchristos   }
4126a5a4af3bSchristos 
4127a5a4af3bSchristos #undef OPRND
4128a5a4af3bSchristos #undef FLD
4129a5a4af3bSchristos }
4130a5a4af3bSchristos   NEXT (vpc);
4131a5a4af3bSchristos 
4132a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPEQ) : /* cmpeq $src1,$src2 */
4133a5a4af3bSchristos   {
4134a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4135a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4136a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4137a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmp.f
4138a5a4af3bSchristos     int UNUSED written = abuf->written;
4139a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4140a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4141a5a4af3bSchristos 
4142a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
4143a5a4af3bSchristos 
4144a5a4af3bSchristos #undef OPRND
4145a5a4af3bSchristos #undef FLD
4146a5a4af3bSchristos   }
4147a5a4af3bSchristos   NEXT (vpc);
4148a5a4af3bSchristos 
4149a5a4af3bSchristos   CASE (sem, INSN_PAR_CMPZ) : /* cmpz $src2 */
4150a5a4af3bSchristos {
4151a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4152a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4153a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4154a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
4155a5a4af3bSchristos   int UNUSED written = 0;
4156a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4157a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4158a5a4af3bSchristos 
4159a5a4af3bSchristos   {
4160a5a4af3bSchristos     BI opval = EQSI (* FLD (i_src2), 0);
4161a5a4af3bSchristos     OPRND (condbit) = opval;
4162a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
4163a5a4af3bSchristos   }
4164a5a4af3bSchristos 
4165a5a4af3bSchristos #undef OPRND
4166a5a4af3bSchristos #undef FLD
4167a5a4af3bSchristos }
4168a5a4af3bSchristos   NEXT (vpc);
4169a5a4af3bSchristos 
4170a5a4af3bSchristos CASE (sem, INSN_WRITE_CMPZ) : /* cmpz $src2 */
4171a5a4af3bSchristos   {
4172a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4173a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4174a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
4175a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
4176a5a4af3bSchristos     int UNUSED written = abuf->written;
4177a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4178a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4179a5a4af3bSchristos 
4180a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
4181a5a4af3bSchristos 
4182a5a4af3bSchristos #undef OPRND
4183a5a4af3bSchristos #undef FLD
4184a5a4af3bSchristos   }
4185a5a4af3bSchristos   NEXT (vpc);
4186a5a4af3bSchristos 
4187a5a4af3bSchristos   CASE (sem, INSN_PAR_JC) : /* jc $sr */
4188a5a4af3bSchristos {
4189a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4190a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4191a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4192a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f
4193a5a4af3bSchristos   int UNUSED written = 0;
4194a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4195a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4196a5a4af3bSchristos 
4197a5a4af3bSchristos if (CPU (h_cond)) {
4198a5a4af3bSchristos   {
4199a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
4200a5a4af3bSchristos     OPRND (pc) = opval;
4201a5a4af3bSchristos     written |= (1 << 2);
4202a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4203a5a4af3bSchristos   }
4204a5a4af3bSchristos }
4205a5a4af3bSchristos 
4206a5a4af3bSchristos   abuf->written = written;
4207a5a4af3bSchristos #undef OPRND
4208a5a4af3bSchristos #undef FLD
4209a5a4af3bSchristos }
4210a5a4af3bSchristos   NEXT (vpc);
4211a5a4af3bSchristos 
4212a5a4af3bSchristos CASE (sem, INSN_WRITE_JC) : /* jc $sr */
4213a5a4af3bSchristos   {
4214a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4215a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4216a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4217a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f
4218a5a4af3bSchristos     int UNUSED written = abuf->written;
4219a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4220a5a4af3bSchristos     SEM_BRANCH_INIT
4221a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4222a5a4af3bSchristos 
4223a5a4af3bSchristos   if (written & (1 << 2))
4224a5a4af3bSchristos     {
4225a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4226a5a4af3bSchristos     }
4227a5a4af3bSchristos 
4228a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
4229a5a4af3bSchristos #undef OPRND
4230a5a4af3bSchristos #undef FLD
4231a5a4af3bSchristos   }
4232a5a4af3bSchristos   NEXT (vpc);
4233a5a4af3bSchristos 
4234a5a4af3bSchristos   CASE (sem, INSN_PAR_JNC) : /* jnc $sr */
4235a5a4af3bSchristos {
4236a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4237a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4238a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4239a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f
4240a5a4af3bSchristos   int UNUSED written = 0;
4241a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4242a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4243a5a4af3bSchristos 
4244a5a4af3bSchristos if (NOTBI (CPU (h_cond))) {
4245a5a4af3bSchristos   {
4246a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
4247a5a4af3bSchristos     OPRND (pc) = opval;
4248a5a4af3bSchristos     written |= (1 << 2);
4249a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4250a5a4af3bSchristos   }
4251a5a4af3bSchristos }
4252a5a4af3bSchristos 
4253a5a4af3bSchristos   abuf->written = written;
4254a5a4af3bSchristos #undef OPRND
4255a5a4af3bSchristos #undef FLD
4256a5a4af3bSchristos }
4257a5a4af3bSchristos   NEXT (vpc);
4258a5a4af3bSchristos 
4259a5a4af3bSchristos CASE (sem, INSN_WRITE_JNC) : /* jnc $sr */
4260a5a4af3bSchristos   {
4261a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4262a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4263a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4264a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jc.f
4265a5a4af3bSchristos     int UNUSED written = abuf->written;
4266a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4267a5a4af3bSchristos     SEM_BRANCH_INIT
4268a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4269a5a4af3bSchristos 
4270a5a4af3bSchristos   if (written & (1 << 2))
4271a5a4af3bSchristos     {
4272a5a4af3bSchristos       SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4273a5a4af3bSchristos     }
4274a5a4af3bSchristos 
4275a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
4276a5a4af3bSchristos #undef OPRND
4277a5a4af3bSchristos #undef FLD
4278a5a4af3bSchristos   }
4279a5a4af3bSchristos   NEXT (vpc);
4280a5a4af3bSchristos 
4281a5a4af3bSchristos   CASE (sem, INSN_PAR_JL) : /* jl $sr */
4282a5a4af3bSchristos {
4283a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4284a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4285a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4286a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jl.f
4287a5a4af3bSchristos   int UNUSED written = 0;
4288a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4289a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4290a5a4af3bSchristos 
4291a5a4af3bSchristos {
4292a5a4af3bSchristos   SI temp0;USI temp1;
4293a5a4af3bSchristos   temp0 = ADDSI (ANDSI (pc, -4), 4);
4294a5a4af3bSchristos   temp1 = ANDSI (* FLD (i_sr), -4);
4295a5a4af3bSchristos   {
4296a5a4af3bSchristos     SI opval = temp0;
4297a5a4af3bSchristos     OPRND (h_gr_SI_14) = opval;
4298a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4299a5a4af3bSchristos   }
4300a5a4af3bSchristos   {
4301a5a4af3bSchristos     USI opval = temp1;
4302a5a4af3bSchristos     OPRND (pc) = opval;
4303a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4304a5a4af3bSchristos   }
4305a5a4af3bSchristos }
4306a5a4af3bSchristos 
4307a5a4af3bSchristos #undef OPRND
4308a5a4af3bSchristos #undef FLD
4309a5a4af3bSchristos }
4310a5a4af3bSchristos   NEXT (vpc);
4311a5a4af3bSchristos 
4312a5a4af3bSchristos CASE (sem, INSN_WRITE_JL) : /* jl $sr */
4313a5a4af3bSchristos   {
4314a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4315a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4316a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4317a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jl.f
4318a5a4af3bSchristos     int UNUSED written = abuf->written;
4319a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4320a5a4af3bSchristos     SEM_BRANCH_INIT
4321a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4322a5a4af3bSchristos 
4323a5a4af3bSchristos   CPU (h_gr[((UINT) 14)]) = OPRND (h_gr_SI_14);
4324a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4325a5a4af3bSchristos 
4326a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
4327a5a4af3bSchristos #undef OPRND
4328a5a4af3bSchristos #undef FLD
4329a5a4af3bSchristos   }
4330a5a4af3bSchristos   NEXT (vpc);
4331a5a4af3bSchristos 
4332a5a4af3bSchristos   CASE (sem, INSN_PAR_JMP) : /* jmp $sr */
4333a5a4af3bSchristos {
4334a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4335a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4336a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4337a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jmp.f
4338a5a4af3bSchristos   int UNUSED written = 0;
4339a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4340a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4341a5a4af3bSchristos 
4342a5a4af3bSchristos   {
4343a5a4af3bSchristos     USI opval = ANDSI (* FLD (i_sr), -4);
4344a5a4af3bSchristos     OPRND (pc) = opval;
4345a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
4346a5a4af3bSchristos   }
4347a5a4af3bSchristos 
4348a5a4af3bSchristos #undef OPRND
4349a5a4af3bSchristos #undef FLD
4350a5a4af3bSchristos }
4351a5a4af3bSchristos   NEXT (vpc);
4352a5a4af3bSchristos 
4353a5a4af3bSchristos CASE (sem, INSN_WRITE_JMP) : /* jmp $sr */
4354a5a4af3bSchristos   {
4355a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4356a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4357a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_jl.f
4358a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_jmp.f
4359a5a4af3bSchristos     int UNUSED written = abuf->written;
4360a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4361a5a4af3bSchristos     SEM_BRANCH_INIT
4362a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4363a5a4af3bSchristos 
4364a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
4365a5a4af3bSchristos 
4366a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
4367a5a4af3bSchristos #undef OPRND
4368a5a4af3bSchristos #undef FLD
4369a5a4af3bSchristos   }
4370a5a4af3bSchristos   NEXT (vpc);
4371a5a4af3bSchristos 
4372a5a4af3bSchristos   CASE (sem, INSN_PAR_LD) : /* ld $dr,@$sr */
4373a5a4af3bSchristos {
4374a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4375a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4376a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4377a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld.f
4378a5a4af3bSchristos   int UNUSED written = 0;
4379a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4380a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4381a5a4af3bSchristos 
4382a5a4af3bSchristos   {
4383a5a4af3bSchristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4384a5a4af3bSchristos     OPRND (dr) = opval;
4385a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4386a5a4af3bSchristos   }
4387a5a4af3bSchristos 
4388a5a4af3bSchristos #undef OPRND
4389a5a4af3bSchristos #undef FLD
4390a5a4af3bSchristos }
4391a5a4af3bSchristos   NEXT (vpc);
4392a5a4af3bSchristos 
4393a5a4af3bSchristos CASE (sem, INSN_WRITE_LD) : /* ld $dr,@$sr */
4394a5a4af3bSchristos   {
4395a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4396a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4397a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4398a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld.f
4399a5a4af3bSchristos     int UNUSED written = abuf->written;
4400a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4401a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4402a5a4af3bSchristos 
4403a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4404a5a4af3bSchristos 
4405a5a4af3bSchristos #undef OPRND
4406a5a4af3bSchristos #undef FLD
4407a5a4af3bSchristos   }
4408a5a4af3bSchristos   NEXT (vpc);
4409a5a4af3bSchristos 
4410a5a4af3bSchristos   CASE (sem, INSN_PAR_LDB) : /* ldb $dr,@$sr */
4411a5a4af3bSchristos {
4412a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4413a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4414a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4415a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
4416a5a4af3bSchristos   int UNUSED written = 0;
4417a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4418a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4419a5a4af3bSchristos 
4420a5a4af3bSchristos   {
4421a5a4af3bSchristos     SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4422a5a4af3bSchristos     OPRND (dr) = opval;
4423a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4424a5a4af3bSchristos   }
4425a5a4af3bSchristos 
4426a5a4af3bSchristos #undef OPRND
4427a5a4af3bSchristos #undef FLD
4428a5a4af3bSchristos }
4429a5a4af3bSchristos   NEXT (vpc);
4430a5a4af3bSchristos 
4431a5a4af3bSchristos CASE (sem, INSN_WRITE_LDB) : /* ldb $dr,@$sr */
4432a5a4af3bSchristos   {
4433a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4434a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4435a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4436a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
4437a5a4af3bSchristos     int UNUSED written = abuf->written;
4438a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4439a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4440a5a4af3bSchristos 
4441a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4442a5a4af3bSchristos 
4443a5a4af3bSchristos #undef OPRND
4444a5a4af3bSchristos #undef FLD
4445a5a4af3bSchristos   }
4446a5a4af3bSchristos   NEXT (vpc);
4447a5a4af3bSchristos 
4448a5a4af3bSchristos   CASE (sem, INSN_PAR_LDH) : /* ldh $dr,@$sr */
4449a5a4af3bSchristos {
4450a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4451a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4452a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4453a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
4454a5a4af3bSchristos   int UNUSED written = 0;
4455a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4456a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4457a5a4af3bSchristos 
4458a5a4af3bSchristos   {
4459a5a4af3bSchristos     SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4460a5a4af3bSchristos     OPRND (dr) = opval;
4461a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4462a5a4af3bSchristos   }
4463a5a4af3bSchristos 
4464a5a4af3bSchristos #undef OPRND
4465a5a4af3bSchristos #undef FLD
4466a5a4af3bSchristos }
4467a5a4af3bSchristos   NEXT (vpc);
4468a5a4af3bSchristos 
4469a5a4af3bSchristos CASE (sem, INSN_WRITE_LDH) : /* ldh $dr,@$sr */
4470a5a4af3bSchristos   {
4471a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4472a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4473a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4474a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
4475a5a4af3bSchristos     int UNUSED written = abuf->written;
4476a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4477a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4478a5a4af3bSchristos 
4479a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4480a5a4af3bSchristos 
4481a5a4af3bSchristos #undef OPRND
4482a5a4af3bSchristos #undef FLD
4483a5a4af3bSchristos   }
4484a5a4af3bSchristos   NEXT (vpc);
4485a5a4af3bSchristos 
4486a5a4af3bSchristos   CASE (sem, INSN_PAR_LDUB) : /* ldub $dr,@$sr */
4487a5a4af3bSchristos {
4488a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4489a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4490a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4491a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
4492a5a4af3bSchristos   int UNUSED written = 0;
4493a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4494a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4495a5a4af3bSchristos 
4496a5a4af3bSchristos   {
4497a5a4af3bSchristos     SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr)));
4498a5a4af3bSchristos     OPRND (dr) = opval;
4499a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4500a5a4af3bSchristos   }
4501a5a4af3bSchristos 
4502a5a4af3bSchristos #undef OPRND
4503a5a4af3bSchristos #undef FLD
4504a5a4af3bSchristos }
4505a5a4af3bSchristos   NEXT (vpc);
4506a5a4af3bSchristos 
4507a5a4af3bSchristos CASE (sem, INSN_WRITE_LDUB) : /* ldub $dr,@$sr */
4508a5a4af3bSchristos   {
4509a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4510a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4511a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4512a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldb.f
4513a5a4af3bSchristos     int UNUSED written = abuf->written;
4514a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4515a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4516a5a4af3bSchristos 
4517a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4518a5a4af3bSchristos 
4519a5a4af3bSchristos #undef OPRND
4520a5a4af3bSchristos #undef FLD
4521a5a4af3bSchristos   }
4522a5a4af3bSchristos   NEXT (vpc);
4523a5a4af3bSchristos 
4524a5a4af3bSchristos   CASE (sem, INSN_PAR_LDUH) : /* lduh $dr,@$sr */
4525a5a4af3bSchristos {
4526a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4527a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4528a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4529a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
4530a5a4af3bSchristos   int UNUSED written = 0;
4531a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4532a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4533a5a4af3bSchristos 
4534a5a4af3bSchristos   {
4535a5a4af3bSchristos     SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr)));
4536a5a4af3bSchristos     OPRND (dr) = opval;
4537a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4538a5a4af3bSchristos   }
4539a5a4af3bSchristos 
4540a5a4af3bSchristos #undef OPRND
4541a5a4af3bSchristos #undef FLD
4542a5a4af3bSchristos }
4543a5a4af3bSchristos   NEXT (vpc);
4544a5a4af3bSchristos 
4545a5a4af3bSchristos CASE (sem, INSN_WRITE_LDUH) : /* lduh $dr,@$sr */
4546a5a4af3bSchristos   {
4547a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4548a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4549a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4550a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldh.f
4551a5a4af3bSchristos     int UNUSED written = abuf->written;
4552a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4553a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4554a5a4af3bSchristos 
4555a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4556a5a4af3bSchristos 
4557a5a4af3bSchristos #undef OPRND
4558a5a4af3bSchristos #undef FLD
4559a5a4af3bSchristos   }
4560a5a4af3bSchristos   NEXT (vpc);
4561a5a4af3bSchristos 
4562a5a4af3bSchristos   CASE (sem, INSN_PAR_LD_PLUS) : /* ld $dr,@$sr+ */
4563a5a4af3bSchristos {
4564a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4565a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4566a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4567a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
4568a5a4af3bSchristos   int UNUSED written = 0;
4569a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4570a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4571a5a4af3bSchristos 
4572a5a4af3bSchristos {
4573a5a4af3bSchristos   SI temp0;SI temp1;
4574a5a4af3bSchristos   temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4575a5a4af3bSchristos   temp1 = ADDSI (* FLD (i_sr), 4);
4576a5a4af3bSchristos   {
4577a5a4af3bSchristos     SI opval = temp0;
4578a5a4af3bSchristos     OPRND (dr) = opval;
4579a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4580a5a4af3bSchristos   }
4581a5a4af3bSchristos   {
4582a5a4af3bSchristos     SI opval = temp1;
4583a5a4af3bSchristos     OPRND (sr) = opval;
4584a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4585a5a4af3bSchristos   }
4586a5a4af3bSchristos }
4587a5a4af3bSchristos 
4588a5a4af3bSchristos #undef OPRND
4589a5a4af3bSchristos #undef FLD
4590a5a4af3bSchristos }
4591a5a4af3bSchristos   NEXT (vpc);
4592a5a4af3bSchristos 
4593a5a4af3bSchristos CASE (sem, INSN_WRITE_LD_PLUS) : /* ld $dr,@$sr+ */
4594a5a4af3bSchristos   {
4595a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4596a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4597a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4598a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ld_plus.f
4599a5a4af3bSchristos     int UNUSED written = abuf->written;
4600a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4601a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4602a5a4af3bSchristos 
4603a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4604a5a4af3bSchristos   * FLD (i_sr) = OPRND (sr);
4605a5a4af3bSchristos 
4606a5a4af3bSchristos #undef OPRND
4607a5a4af3bSchristos #undef FLD
4608a5a4af3bSchristos   }
4609a5a4af3bSchristos   NEXT (vpc);
4610a5a4af3bSchristos 
4611a5a4af3bSchristos   CASE (sem, INSN_PAR_LDI8) : /* ldi8 $dr,$simm8 */
4612a5a4af3bSchristos {
4613a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4614a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4615a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
4616a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f
4617a5a4af3bSchristos   int UNUSED written = 0;
4618a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4619a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4620a5a4af3bSchristos 
4621a5a4af3bSchristos   {
4622a5a4af3bSchristos     SI opval = FLD (f_simm8);
4623a5a4af3bSchristos     OPRND (dr) = opval;
4624a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4625a5a4af3bSchristos   }
4626a5a4af3bSchristos 
4627a5a4af3bSchristos #undef OPRND
4628a5a4af3bSchristos #undef FLD
4629a5a4af3bSchristos }
4630a5a4af3bSchristos   NEXT (vpc);
4631a5a4af3bSchristos 
4632a5a4af3bSchristos CASE (sem, INSN_WRITE_LDI8) : /* ldi8 $dr,$simm8 */
4633a5a4af3bSchristos   {
4634a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4635a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4636a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_addi.f
4637a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_ldi8.f
4638a5a4af3bSchristos     int UNUSED written = abuf->written;
4639a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4640a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4641a5a4af3bSchristos 
4642a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4643a5a4af3bSchristos 
4644a5a4af3bSchristos #undef OPRND
4645a5a4af3bSchristos #undef FLD
4646a5a4af3bSchristos   }
4647a5a4af3bSchristos   NEXT (vpc);
4648a5a4af3bSchristos 
4649a5a4af3bSchristos   CASE (sem, INSN_PAR_LOCK) : /* lock $dr,@$sr */
4650a5a4af3bSchristos {
4651a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4652a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4653a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4654a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_lock.f
4655a5a4af3bSchristos   int UNUSED written = 0;
4656a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4657a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4658a5a4af3bSchristos 
4659a5a4af3bSchristos {
4660a5a4af3bSchristos   {
4661a5a4af3bSchristos     BI opval = 1;
4662a5a4af3bSchristos     OPRND (h_lock_BI) = opval;
4663a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
4664a5a4af3bSchristos   }
4665a5a4af3bSchristos   {
4666a5a4af3bSchristos     SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr));
4667a5a4af3bSchristos     OPRND (dr) = opval;
4668a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4669a5a4af3bSchristos   }
4670a5a4af3bSchristos }
4671a5a4af3bSchristos 
4672a5a4af3bSchristos #undef OPRND
4673a5a4af3bSchristos #undef FLD
4674a5a4af3bSchristos }
4675a5a4af3bSchristos   NEXT (vpc);
4676a5a4af3bSchristos 
4677a5a4af3bSchristos CASE (sem, INSN_WRITE_LOCK) : /* lock $dr,@$sr */
4678a5a4af3bSchristos   {
4679a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4680a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4681a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
4682a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_lock.f
4683a5a4af3bSchristos     int UNUSED written = abuf->written;
4684a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4685a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4686a5a4af3bSchristos 
4687a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4688a5a4af3bSchristos   CPU (h_lock) = OPRND (h_lock_BI);
4689a5a4af3bSchristos 
4690a5a4af3bSchristos #undef OPRND
4691a5a4af3bSchristos #undef FLD
4692a5a4af3bSchristos   }
4693a5a4af3bSchristos   NEXT (vpc);
4694a5a4af3bSchristos 
4695a5a4af3bSchristos   CASE (sem, INSN_PAR_MACHI_A) : /* machi $src1,$src2,$acc */
4696a5a4af3bSchristos {
4697a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4698a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4699a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4700a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4701a5a4af3bSchristos   int UNUSED written = 0;
4702a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4703a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4704a5a4af3bSchristos 
4705a5a4af3bSchristos   {
4706a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8);
4707a5a4af3bSchristos     OPRND (acc) = opval;
4708a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4709a5a4af3bSchristos   }
4710a5a4af3bSchristos 
4711a5a4af3bSchristos #undef OPRND
4712a5a4af3bSchristos #undef FLD
4713a5a4af3bSchristos }
4714a5a4af3bSchristos   NEXT (vpc);
4715a5a4af3bSchristos 
4716a5a4af3bSchristos CASE (sem, INSN_WRITE_MACHI_A) : /* machi $src1,$src2,$acc */
4717a5a4af3bSchristos   {
4718a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4719a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4720a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4721a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4722a5a4af3bSchristos     int UNUSED written = abuf->written;
4723a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4724a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4725a5a4af3bSchristos 
4726a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4727a5a4af3bSchristos 
4728a5a4af3bSchristos #undef OPRND
4729a5a4af3bSchristos #undef FLD
4730a5a4af3bSchristos   }
4731a5a4af3bSchristos   NEXT (vpc);
4732a5a4af3bSchristos 
4733a5a4af3bSchristos   CASE (sem, INSN_PAR_MACLO_A) : /* maclo $src1,$src2,$acc */
4734a5a4af3bSchristos {
4735a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4736a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4737a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4738a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4739a5a4af3bSchristos   int UNUSED written = 0;
4740a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4741a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4742a5a4af3bSchristos 
4743a5a4af3bSchristos   {
4744a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8);
4745a5a4af3bSchristos     OPRND (acc) = opval;
4746a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4747a5a4af3bSchristos   }
4748a5a4af3bSchristos 
4749a5a4af3bSchristos #undef OPRND
4750a5a4af3bSchristos #undef FLD
4751a5a4af3bSchristos }
4752a5a4af3bSchristos   NEXT (vpc);
4753a5a4af3bSchristos 
4754a5a4af3bSchristos CASE (sem, INSN_WRITE_MACLO_A) : /* maclo $src1,$src2,$acc */
4755a5a4af3bSchristos   {
4756a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4757a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4758a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4759a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4760a5a4af3bSchristos     int UNUSED written = abuf->written;
4761a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4762a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4763a5a4af3bSchristos 
4764a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4765a5a4af3bSchristos 
4766a5a4af3bSchristos #undef OPRND
4767a5a4af3bSchristos #undef FLD
4768a5a4af3bSchristos   }
4769a5a4af3bSchristos   NEXT (vpc);
4770a5a4af3bSchristos 
4771a5a4af3bSchristos   CASE (sem, INSN_PAR_MACWHI_A) : /* macwhi $src1,$src2,$acc */
4772a5a4af3bSchristos {
4773a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4774a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4775a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4776a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4777a5a4af3bSchristos   int UNUSED written = 0;
4778a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4779a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4780a5a4af3bSchristos 
4781a5a4af3bSchristos   {
4782a5a4af3bSchristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))));
4783a5a4af3bSchristos     OPRND (acc) = opval;
4784a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4785a5a4af3bSchristos   }
4786a5a4af3bSchristos 
4787a5a4af3bSchristos #undef OPRND
4788a5a4af3bSchristos #undef FLD
4789a5a4af3bSchristos }
4790a5a4af3bSchristos   NEXT (vpc);
4791a5a4af3bSchristos 
4792a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWHI_A) : /* macwhi $src1,$src2,$acc */
4793a5a4af3bSchristos   {
4794a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4795a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4797a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4798a5a4af3bSchristos     int UNUSED written = abuf->written;
4799a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4800a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4801a5a4af3bSchristos 
4802a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4803a5a4af3bSchristos 
4804a5a4af3bSchristos #undef OPRND
4805a5a4af3bSchristos #undef FLD
4806a5a4af3bSchristos   }
4807a5a4af3bSchristos   NEXT (vpc);
4808a5a4af3bSchristos 
4809a5a4af3bSchristos   CASE (sem, INSN_PAR_MACWLO_A) : /* macwlo $src1,$src2,$acc */
4810a5a4af3bSchristos {
4811a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4812a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4813a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4814a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4815a5a4af3bSchristos   int UNUSED written = 0;
4816a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4817a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4818a5a4af3bSchristos 
4819a5a4af3bSchristos   {
4820a5a4af3bSchristos     DI opval = ADDDI (GET_H_ACCUMS (FLD (f_acc)), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))));
4821a5a4af3bSchristos     OPRND (acc) = opval;
4822a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4823a5a4af3bSchristos   }
4824a5a4af3bSchristos 
4825a5a4af3bSchristos #undef OPRND
4826a5a4af3bSchristos #undef FLD
4827a5a4af3bSchristos }
4828a5a4af3bSchristos   NEXT (vpc);
4829a5a4af3bSchristos 
4830a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWLO_A) : /* macwlo $src1,$src2,$acc */
4831a5a4af3bSchristos   {
4832a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4833a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4834a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4835a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_machi_a.f
4836a5a4af3bSchristos     int UNUSED written = abuf->written;
4837a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4838a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4839a5a4af3bSchristos 
4840a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4841a5a4af3bSchristos 
4842a5a4af3bSchristos #undef OPRND
4843a5a4af3bSchristos #undef FLD
4844a5a4af3bSchristos   }
4845a5a4af3bSchristos   NEXT (vpc);
4846a5a4af3bSchristos 
4847a5a4af3bSchristos   CASE (sem, INSN_PAR_MUL) : /* mul $dr,$sr */
4848a5a4af3bSchristos {
4849a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4850a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4851a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
4852a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
4853a5a4af3bSchristos   int UNUSED written = 0;
4854a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4855a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4856a5a4af3bSchristos 
4857a5a4af3bSchristos   {
4858a5a4af3bSchristos     SI opval = MULSI (* FLD (i_dr), * FLD (i_sr));
4859a5a4af3bSchristos     OPRND (dr) = opval;
4860a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
4861a5a4af3bSchristos   }
4862a5a4af3bSchristos 
4863a5a4af3bSchristos #undef OPRND
4864a5a4af3bSchristos #undef FLD
4865a5a4af3bSchristos }
4866a5a4af3bSchristos   NEXT (vpc);
4867a5a4af3bSchristos 
4868a5a4af3bSchristos CASE (sem, INSN_WRITE_MUL) : /* mul $dr,$sr */
4869a5a4af3bSchristos   {
4870a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4871a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4872a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
4873a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
4874a5a4af3bSchristos     int UNUSED written = abuf->written;
4875a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4876a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4877a5a4af3bSchristos 
4878a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
4879a5a4af3bSchristos 
4880a5a4af3bSchristos #undef OPRND
4881a5a4af3bSchristos #undef FLD
4882a5a4af3bSchristos   }
4883a5a4af3bSchristos   NEXT (vpc);
4884a5a4af3bSchristos 
4885a5a4af3bSchristos   CASE (sem, INSN_PAR_MULHI_A) : /* mulhi $src1,$src2,$acc */
4886a5a4af3bSchristos {
4887a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4888a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4889a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4890a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4891a5a4af3bSchristos   int UNUSED written = 0;
4892a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4893a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4894a5a4af3bSchristos 
4895a5a4af3bSchristos   {
4896a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16);
4897a5a4af3bSchristos     OPRND (acc) = opval;
4898a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4899a5a4af3bSchristos   }
4900a5a4af3bSchristos 
4901a5a4af3bSchristos #undef OPRND
4902a5a4af3bSchristos #undef FLD
4903a5a4af3bSchristos }
4904a5a4af3bSchristos   NEXT (vpc);
4905a5a4af3bSchristos 
4906a5a4af3bSchristos CASE (sem, INSN_WRITE_MULHI_A) : /* mulhi $src1,$src2,$acc */
4907a5a4af3bSchristos   {
4908a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4909a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4910a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4911a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4912a5a4af3bSchristos     int UNUSED written = abuf->written;
4913a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4914a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4915a5a4af3bSchristos 
4916a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4917a5a4af3bSchristos 
4918a5a4af3bSchristos #undef OPRND
4919a5a4af3bSchristos #undef FLD
4920a5a4af3bSchristos   }
4921a5a4af3bSchristos   NEXT (vpc);
4922a5a4af3bSchristos 
4923a5a4af3bSchristos   CASE (sem, INSN_PAR_MULLO_A) : /* mullo $src1,$src2,$acc */
4924a5a4af3bSchristos {
4925a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4926a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4927a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4928a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4929a5a4af3bSchristos   int UNUSED written = 0;
4930a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4931a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4932a5a4af3bSchristos 
4933a5a4af3bSchristos   {
4934a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16);
4935a5a4af3bSchristos     OPRND (acc) = opval;
4936a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4937a5a4af3bSchristos   }
4938a5a4af3bSchristos 
4939a5a4af3bSchristos #undef OPRND
4940a5a4af3bSchristos #undef FLD
4941a5a4af3bSchristos }
4942a5a4af3bSchristos   NEXT (vpc);
4943a5a4af3bSchristos 
4944a5a4af3bSchristos CASE (sem, INSN_WRITE_MULLO_A) : /* mullo $src1,$src2,$acc */
4945a5a4af3bSchristos   {
4946a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4947a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4948a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4949a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4950a5a4af3bSchristos     int UNUSED written = abuf->written;
4951a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4952a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4953a5a4af3bSchristos 
4954a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4955a5a4af3bSchristos 
4956a5a4af3bSchristos #undef OPRND
4957a5a4af3bSchristos #undef FLD
4958a5a4af3bSchristos   }
4959a5a4af3bSchristos   NEXT (vpc);
4960a5a4af3bSchristos 
4961a5a4af3bSchristos   CASE (sem, INSN_PAR_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
4962a5a4af3bSchristos {
4963a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4964a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
4965a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4966a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4967a5a4af3bSchristos   int UNUSED written = 0;
4968a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
4969a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
4970a5a4af3bSchristos 
4971a5a4af3bSchristos   {
4972a5a4af3bSchristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))));
4973a5a4af3bSchristos     OPRND (acc) = opval;
4974a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
4975a5a4af3bSchristos   }
4976a5a4af3bSchristos 
4977a5a4af3bSchristos #undef OPRND
4978a5a4af3bSchristos #undef FLD
4979a5a4af3bSchristos }
4980a5a4af3bSchristos   NEXT (vpc);
4981a5a4af3bSchristos 
4982a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWHI_A) : /* mulwhi $src1,$src2,$acc */
4983a5a4af3bSchristos   {
4984a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
4985a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
4986a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
4987a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
4988a5a4af3bSchristos     int UNUSED written = abuf->written;
4989a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
4990a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
4991a5a4af3bSchristos 
4992a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
4993a5a4af3bSchristos 
4994a5a4af3bSchristos #undef OPRND
4995a5a4af3bSchristos #undef FLD
4996a5a4af3bSchristos   }
4997a5a4af3bSchristos   NEXT (vpc);
4998a5a4af3bSchristos 
4999a5a4af3bSchristos   CASE (sem, INSN_PAR_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
5000a5a4af3bSchristos {
5001a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5002a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5003a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
5004a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
5005a5a4af3bSchristos   int UNUSED written = 0;
5006a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5007a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5008a5a4af3bSchristos 
5009a5a4af3bSchristos   {
5010a5a4af3bSchristos     DI opval = MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))));
5011a5a4af3bSchristos     OPRND (acc) = opval;
5012a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
5013a5a4af3bSchristos   }
5014a5a4af3bSchristos 
5015a5a4af3bSchristos #undef OPRND
5016a5a4af3bSchristos #undef FLD
5017a5a4af3bSchristos }
5018a5a4af3bSchristos   NEXT (vpc);
5019a5a4af3bSchristos 
5020a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWLO_A) : /* mulwlo $src1,$src2,$acc */
5021a5a4af3bSchristos   {
5022a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5023a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5024a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_machi_a.f
5025a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulhi_a.f
5026a5a4af3bSchristos     int UNUSED written = abuf->written;
5027a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5028a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5029a5a4af3bSchristos 
5030a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_acc), OPRND (acc));
5031a5a4af3bSchristos 
5032a5a4af3bSchristos #undef OPRND
5033a5a4af3bSchristos #undef FLD
5034a5a4af3bSchristos   }
5035a5a4af3bSchristos   NEXT (vpc);
5036a5a4af3bSchristos 
5037a5a4af3bSchristos   CASE (sem, INSN_PAR_MV) : /* mv $dr,$sr */
5038a5a4af3bSchristos {
5039a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5040a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5041a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5042a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5043a5a4af3bSchristos   int UNUSED written = 0;
5044a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5045a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5046a5a4af3bSchristos 
5047a5a4af3bSchristos   {
5048a5a4af3bSchristos     SI opval = * FLD (i_sr);
5049a5a4af3bSchristos     OPRND (dr) = opval;
5050a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5051a5a4af3bSchristos   }
5052a5a4af3bSchristos 
5053a5a4af3bSchristos #undef OPRND
5054a5a4af3bSchristos #undef FLD
5055a5a4af3bSchristos }
5056a5a4af3bSchristos   NEXT (vpc);
5057a5a4af3bSchristos 
5058a5a4af3bSchristos CASE (sem, INSN_WRITE_MV) : /* mv $dr,$sr */
5059a5a4af3bSchristos   {
5060a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5061a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5062a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5063a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5064a5a4af3bSchristos     int UNUSED written = abuf->written;
5065a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5066a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5067a5a4af3bSchristos 
5068a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5069a5a4af3bSchristos 
5070a5a4af3bSchristos #undef OPRND
5071a5a4af3bSchristos #undef FLD
5072a5a4af3bSchristos   }
5073a5a4af3bSchristos   NEXT (vpc);
5074a5a4af3bSchristos 
5075a5a4af3bSchristos   CASE (sem, INSN_PAR_MVFACHI_A) : /* mvfachi $dr,$accs */
5076a5a4af3bSchristos {
5077a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5078a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5079a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5080a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5081a5a4af3bSchristos   int UNUSED written = 0;
5082a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5083a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5084a5a4af3bSchristos 
5085a5a4af3bSchristos   {
5086a5a4af3bSchristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 32));
5087a5a4af3bSchristos     OPRND (dr) = opval;
5088a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5089a5a4af3bSchristos   }
5090a5a4af3bSchristos 
5091a5a4af3bSchristos #undef OPRND
5092a5a4af3bSchristos #undef FLD
5093a5a4af3bSchristos }
5094a5a4af3bSchristos   NEXT (vpc);
5095a5a4af3bSchristos 
5096a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACHI_A) : /* mvfachi $dr,$accs */
5097a5a4af3bSchristos   {
5098a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5099a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5100a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5101a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5102a5a4af3bSchristos     int UNUSED written = abuf->written;
5103a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5104a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5105a5a4af3bSchristos 
5106a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5107a5a4af3bSchristos 
5108a5a4af3bSchristos #undef OPRND
5109a5a4af3bSchristos #undef FLD
5110a5a4af3bSchristos   }
5111a5a4af3bSchristos   NEXT (vpc);
5112a5a4af3bSchristos 
5113a5a4af3bSchristos   CASE (sem, INSN_PAR_MVFACLO_A) : /* mvfaclo $dr,$accs */
5114a5a4af3bSchristos {
5115a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5116a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5117a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5118a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5119a5a4af3bSchristos   int UNUSED written = 0;
5120a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5121a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5122a5a4af3bSchristos 
5123a5a4af3bSchristos   {
5124a5a4af3bSchristos     SI opval = TRUNCDISI (GET_H_ACCUMS (FLD (f_accs)));
5125a5a4af3bSchristos     OPRND (dr) = opval;
5126a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5127a5a4af3bSchristos   }
5128a5a4af3bSchristos 
5129a5a4af3bSchristos #undef OPRND
5130a5a4af3bSchristos #undef FLD
5131a5a4af3bSchristos }
5132a5a4af3bSchristos   NEXT (vpc);
5133a5a4af3bSchristos 
5134a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACLO_A) : /* mvfaclo $dr,$accs */
5135a5a4af3bSchristos   {
5136a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5137a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5138a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5139a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5140a5a4af3bSchristos     int UNUSED written = abuf->written;
5141a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5142a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5143a5a4af3bSchristos 
5144a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5145a5a4af3bSchristos 
5146a5a4af3bSchristos #undef OPRND
5147a5a4af3bSchristos #undef FLD
5148a5a4af3bSchristos   }
5149a5a4af3bSchristos   NEXT (vpc);
5150a5a4af3bSchristos 
5151a5a4af3bSchristos   CASE (sem, INSN_PAR_MVFACMI_A) : /* mvfacmi $dr,$accs */
5152a5a4af3bSchristos {
5153a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5154a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5155a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5156a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5157a5a4af3bSchristos   int UNUSED written = 0;
5158a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5159a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5160a5a4af3bSchristos 
5161a5a4af3bSchristos   {
5162a5a4af3bSchristos     SI opval = TRUNCDISI (SRADI (GET_H_ACCUMS (FLD (f_accs)), 16));
5163a5a4af3bSchristos     OPRND (dr) = opval;
5164a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5165a5a4af3bSchristos   }
5166a5a4af3bSchristos 
5167a5a4af3bSchristos #undef OPRND
5168a5a4af3bSchristos #undef FLD
5169a5a4af3bSchristos }
5170a5a4af3bSchristos   NEXT (vpc);
5171a5a4af3bSchristos 
5172a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFACMI_A) : /* mvfacmi $dr,$accs */
5173a5a4af3bSchristos   {
5174a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5175a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5176a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
5177a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfachi_a.f
5178a5a4af3bSchristos     int UNUSED written = abuf->written;
5179a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5180a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5181a5a4af3bSchristos 
5182a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5183a5a4af3bSchristos 
5184a5a4af3bSchristos #undef OPRND
5185a5a4af3bSchristos #undef FLD
5186a5a4af3bSchristos   }
5187a5a4af3bSchristos   NEXT (vpc);
5188a5a4af3bSchristos 
5189a5a4af3bSchristos   CASE (sem, INSN_PAR_MVFC) : /* mvfc $dr,$scr */
5190a5a4af3bSchristos {
5191a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5192a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5193a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5194a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f
5195a5a4af3bSchristos   int UNUSED written = 0;
5196a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5197a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5198a5a4af3bSchristos 
5199a5a4af3bSchristos   {
5200a5a4af3bSchristos     SI opval = GET_H_CR (FLD (f_r2));
5201a5a4af3bSchristos     OPRND (dr) = opval;
5202a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5203a5a4af3bSchristos   }
5204a5a4af3bSchristos 
5205a5a4af3bSchristos #undef OPRND
5206a5a4af3bSchristos #undef FLD
5207a5a4af3bSchristos }
5208a5a4af3bSchristos   NEXT (vpc);
5209a5a4af3bSchristos 
5210a5a4af3bSchristos CASE (sem, INSN_WRITE_MVFC) : /* mvfc $dr,$scr */
5211a5a4af3bSchristos   {
5212a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5213a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5214a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5215a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvfc.f
5216a5a4af3bSchristos     int UNUSED written = abuf->written;
5217a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5218a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5219a5a4af3bSchristos 
5220a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5221a5a4af3bSchristos 
5222a5a4af3bSchristos #undef OPRND
5223a5a4af3bSchristos #undef FLD
5224a5a4af3bSchristos   }
5225a5a4af3bSchristos   NEXT (vpc);
5226a5a4af3bSchristos 
5227a5a4af3bSchristos   CASE (sem, INSN_PAR_MVTACHI_A) : /* mvtachi $src1,$accs */
5228a5a4af3bSchristos {
5229a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5230a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5231a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
5232a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
5233a5a4af3bSchristos   int UNUSED written = 0;
5234a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5235a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5236a5a4af3bSchristos 
5237a5a4af3bSchristos   {
5238a5a4af3bSchristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32));
5239a5a4af3bSchristos     OPRND (accs) = opval;
5240a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
5241a5a4af3bSchristos   }
5242a5a4af3bSchristos 
5243a5a4af3bSchristos #undef OPRND
5244a5a4af3bSchristos #undef FLD
5245a5a4af3bSchristos }
5246a5a4af3bSchristos   NEXT (vpc);
5247a5a4af3bSchristos 
5248a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTACHI_A) : /* mvtachi $src1,$accs */
5249a5a4af3bSchristos   {
5250a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5251a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5252a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
5253a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
5254a5a4af3bSchristos     int UNUSED written = abuf->written;
5255a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5256a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5257a5a4af3bSchristos 
5258a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
5259a5a4af3bSchristos 
5260a5a4af3bSchristos #undef OPRND
5261a5a4af3bSchristos #undef FLD
5262a5a4af3bSchristos   }
5263a5a4af3bSchristos   NEXT (vpc);
5264a5a4af3bSchristos 
5265a5a4af3bSchristos   CASE (sem, INSN_PAR_MVTACLO_A) : /* mvtaclo $src1,$accs */
5266a5a4af3bSchristos {
5267a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5268a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5269a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
5270a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
5271a5a4af3bSchristos   int UNUSED written = 0;
5272a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5273a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5274a5a4af3bSchristos 
5275a5a4af3bSchristos   {
5276a5a4af3bSchristos     DI opval = ORDI (ANDDI (GET_H_ACCUMS (FLD (f_accs)), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1)));
5277a5a4af3bSchristos     OPRND (accs) = opval;
5278a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
5279a5a4af3bSchristos   }
5280a5a4af3bSchristos 
5281a5a4af3bSchristos #undef OPRND
5282a5a4af3bSchristos #undef FLD
5283a5a4af3bSchristos }
5284a5a4af3bSchristos   NEXT (vpc);
5285a5a4af3bSchristos 
5286a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTACLO_A) : /* mvtaclo $src1,$accs */
5287a5a4af3bSchristos   {
5288a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5289a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5290a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
5291a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtachi_a.f
5292a5a4af3bSchristos     int UNUSED written = abuf->written;
5293a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5294a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5295a5a4af3bSchristos 
5296a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_accs), OPRND (accs));
5297a5a4af3bSchristos 
5298a5a4af3bSchristos #undef OPRND
5299a5a4af3bSchristos #undef FLD
5300a5a4af3bSchristos   }
5301a5a4af3bSchristos   NEXT (vpc);
5302a5a4af3bSchristos 
5303a5a4af3bSchristos   CASE (sem, INSN_PAR_MVTC) : /* mvtc $sr,$dcr */
5304a5a4af3bSchristos {
5305a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5306a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5307a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5308a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f
5309a5a4af3bSchristos   int UNUSED written = 0;
5310a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5311a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5312a5a4af3bSchristos 
5313a5a4af3bSchristos   {
5314a5a4af3bSchristos     USI opval = * FLD (i_sr);
5315a5a4af3bSchristos     OPRND (dcr) = opval;
5316a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
5317a5a4af3bSchristos   }
5318a5a4af3bSchristos 
5319a5a4af3bSchristos #undef OPRND
5320a5a4af3bSchristos #undef FLD
5321a5a4af3bSchristos }
5322a5a4af3bSchristos   NEXT (vpc);
5323a5a4af3bSchristos 
5324a5a4af3bSchristos CASE (sem, INSN_WRITE_MVTC) : /* mvtc $sr,$dcr */
5325a5a4af3bSchristos   {
5326a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5327a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5328a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5329a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mvtc.f
5330a5a4af3bSchristos     int UNUSED written = abuf->written;
5331a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5332a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5333a5a4af3bSchristos 
5334a5a4af3bSchristos   SET_H_CR (FLD (f_r1), OPRND (dcr));
5335a5a4af3bSchristos 
5336a5a4af3bSchristos #undef OPRND
5337a5a4af3bSchristos #undef FLD
5338a5a4af3bSchristos   }
5339a5a4af3bSchristos   NEXT (vpc);
5340a5a4af3bSchristos 
5341a5a4af3bSchristos   CASE (sem, INSN_PAR_NEG) : /* neg $dr,$sr */
5342a5a4af3bSchristos {
5343a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5344a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5345a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5346a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5347a5a4af3bSchristos   int UNUSED written = 0;
5348a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5349a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5350a5a4af3bSchristos 
5351a5a4af3bSchristos   {
5352a5a4af3bSchristos     SI opval = NEGSI (* FLD (i_sr));
5353a5a4af3bSchristos     OPRND (dr) = opval;
5354a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5355a5a4af3bSchristos   }
5356a5a4af3bSchristos 
5357a5a4af3bSchristos #undef OPRND
5358a5a4af3bSchristos #undef FLD
5359a5a4af3bSchristos }
5360a5a4af3bSchristos   NEXT (vpc);
5361a5a4af3bSchristos 
5362a5a4af3bSchristos CASE (sem, INSN_WRITE_NEG) : /* neg $dr,$sr */
5363a5a4af3bSchristos   {
5364a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5365a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5366a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5367a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5368a5a4af3bSchristos     int UNUSED written = abuf->written;
5369a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5370a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5371a5a4af3bSchristos 
5372a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5373a5a4af3bSchristos 
5374a5a4af3bSchristos #undef OPRND
5375a5a4af3bSchristos #undef FLD
5376a5a4af3bSchristos   }
5377a5a4af3bSchristos   NEXT (vpc);
5378a5a4af3bSchristos 
5379a5a4af3bSchristos   CASE (sem, INSN_PAR_NOP) : /* nop */
5380a5a4af3bSchristos {
5381a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5382a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5383a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
5384a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_nop.f
5385a5a4af3bSchristos   int UNUSED written = 0;
5386a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5387a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5388a5a4af3bSchristos 
5389a5a4af3bSchristos PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr);
5390a5a4af3bSchristos 
5391a5a4af3bSchristos #undef OPRND
5392a5a4af3bSchristos #undef FLD
5393a5a4af3bSchristos }
5394a5a4af3bSchristos   NEXT (vpc);
5395a5a4af3bSchristos 
5396a5a4af3bSchristos CASE (sem, INSN_WRITE_NOP) : /* nop */
5397a5a4af3bSchristos   {
5398a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5399a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5400a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
5401a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_nop.f
5402a5a4af3bSchristos     int UNUSED written = abuf->written;
5403a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5404a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5405a5a4af3bSchristos 
5406a5a4af3bSchristos 
5407a5a4af3bSchristos #undef OPRND
5408a5a4af3bSchristos #undef FLD
5409a5a4af3bSchristos   }
5410a5a4af3bSchristos   NEXT (vpc);
5411a5a4af3bSchristos 
5412a5a4af3bSchristos   CASE (sem, INSN_PAR_NOT) : /* not $dr,$sr */
5413a5a4af3bSchristos {
5414a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5415a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5416a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5417a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5418a5a4af3bSchristos   int UNUSED written = 0;
5419a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5420a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5421a5a4af3bSchristos 
5422a5a4af3bSchristos   {
5423a5a4af3bSchristos     SI opval = INVSI (* FLD (i_sr));
5424a5a4af3bSchristos     OPRND (dr) = opval;
5425a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5426a5a4af3bSchristos   }
5427a5a4af3bSchristos 
5428a5a4af3bSchristos #undef OPRND
5429a5a4af3bSchristos #undef FLD
5430a5a4af3bSchristos }
5431a5a4af3bSchristos   NEXT (vpc);
5432a5a4af3bSchristos 
5433a5a4af3bSchristos CASE (sem, INSN_WRITE_NOT) : /* not $dr,$sr */
5434a5a4af3bSchristos   {
5435a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5436a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5437a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_ld_plus.f
5438a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mv.f
5439a5a4af3bSchristos     int UNUSED written = abuf->written;
5440a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5441a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5442a5a4af3bSchristos 
5443a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5444a5a4af3bSchristos 
5445a5a4af3bSchristos #undef OPRND
5446a5a4af3bSchristos #undef FLD
5447a5a4af3bSchristos   }
5448a5a4af3bSchristos   NEXT (vpc);
5449a5a4af3bSchristos 
5450a5a4af3bSchristos   CASE (sem, INSN_PAR_RAC_DSI) : /* rac $accd,$accs,$imm1 */
5451a5a4af3bSchristos {
5452a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5453a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5454a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5455a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5456a5a4af3bSchristos   int UNUSED written = 0;
5457a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5458a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5459a5a4af3bSchristos 
5460a5a4af3bSchristos {
5461a5a4af3bSchristos   DI tmp_tmp1;
5462a5a4af3bSchristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5463a5a4af3bSchristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768));
5464a5a4af3bSchristos   {
5465a5a4af3bSchristos     DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000)));
5466a5a4af3bSchristos     OPRND (accd) = opval;
5467a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
5468a5a4af3bSchristos   }
5469a5a4af3bSchristos }
5470a5a4af3bSchristos 
5471a5a4af3bSchristos #undef OPRND
5472a5a4af3bSchristos #undef FLD
5473a5a4af3bSchristos }
5474a5a4af3bSchristos   NEXT (vpc);
5475a5a4af3bSchristos 
5476a5a4af3bSchristos CASE (sem, INSN_WRITE_RAC_DSI) : /* rac $accd,$accs,$imm1 */
5477a5a4af3bSchristos   {
5478a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5479a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5480a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5481a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5482a5a4af3bSchristos     int UNUSED written = abuf->written;
5483a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5484a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5485a5a4af3bSchristos 
5486a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5487a5a4af3bSchristos 
5488a5a4af3bSchristos #undef OPRND
5489a5a4af3bSchristos #undef FLD
5490a5a4af3bSchristos   }
5491a5a4af3bSchristos   NEXT (vpc);
5492a5a4af3bSchristos 
5493a5a4af3bSchristos   CASE (sem, INSN_PAR_RACH_DSI) : /* rach $accd,$accs,$imm1 */
5494a5a4af3bSchristos {
5495a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5496a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5497a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5498a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5499a5a4af3bSchristos   int UNUSED written = 0;
5500a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5501a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5502a5a4af3bSchristos 
5503a5a4af3bSchristos {
5504a5a4af3bSchristos   DI tmp_tmp1;
5505a5a4af3bSchristos   tmp_tmp1 = SLLDI (GET_H_ACCUMS (FLD (f_accs)), FLD (f_imm1));
5506a5a4af3bSchristos   tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 0x80000000));
5507a5a4af3bSchristos   {
5508a5a4af3bSchristos     DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0))) ? (MAKEDI (32767, 0)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0)));
5509a5a4af3bSchristos     OPRND (accd) = opval;
5510a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
5511a5a4af3bSchristos   }
5512a5a4af3bSchristos }
5513a5a4af3bSchristos 
5514a5a4af3bSchristos #undef OPRND
5515a5a4af3bSchristos #undef FLD
5516a5a4af3bSchristos }
5517a5a4af3bSchristos   NEXT (vpc);
5518a5a4af3bSchristos 
5519a5a4af3bSchristos CASE (sem, INSN_WRITE_RACH_DSI) : /* rach $accd,$accs,$imm1 */
5520a5a4af3bSchristos   {
5521a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5522a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5523a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
5524a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rac_dsi.f
5525a5a4af3bSchristos     int UNUSED written = abuf->written;
5526a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5527a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5528a5a4af3bSchristos 
5529a5a4af3bSchristos   SET_H_ACCUMS (FLD (f_accd), OPRND (accd));
5530a5a4af3bSchristos 
5531a5a4af3bSchristos #undef OPRND
5532a5a4af3bSchristos #undef FLD
5533a5a4af3bSchristos   }
5534a5a4af3bSchristos   NEXT (vpc);
5535a5a4af3bSchristos 
5536a5a4af3bSchristos   CASE (sem, INSN_PAR_RTE) : /* rte */
5537a5a4af3bSchristos {
5538a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5539a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5540a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
5541a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rte.f
5542a5a4af3bSchristos   int UNUSED written = 0;
5543a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5544a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5545a5a4af3bSchristos 
5546a5a4af3bSchristos {
5547a5a4af3bSchristos   {
5548a5a4af3bSchristos     USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4);
5549a5a4af3bSchristos     OPRND (pc) = opval;
5550a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
5551a5a4af3bSchristos   }
5552a5a4af3bSchristos   {
5553a5a4af3bSchristos     USI opval = GET_H_CR (((UINT) 14));
5554a5a4af3bSchristos     OPRND (h_cr_USI_6) = opval;
5555a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
5556a5a4af3bSchristos   }
5557a5a4af3bSchristos   {
5558a5a4af3bSchristos     UQI opval = CPU (h_bpsw);
5559a5a4af3bSchristos     OPRND (h_psw_UQI) = opval;
5560a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
5561a5a4af3bSchristos   }
5562a5a4af3bSchristos   {
5563a5a4af3bSchristos     UQI opval = CPU (h_bbpsw);
5564a5a4af3bSchristos     OPRND (h_bpsw_UQI) = opval;
5565a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
5566a5a4af3bSchristos   }
5567a5a4af3bSchristos }
5568a5a4af3bSchristos 
5569a5a4af3bSchristos #undef OPRND
5570a5a4af3bSchristos #undef FLD
5571a5a4af3bSchristos }
5572a5a4af3bSchristos   NEXT (vpc);
5573a5a4af3bSchristos 
5574a5a4af3bSchristos CASE (sem, INSN_WRITE_RTE) : /* rte */
5575a5a4af3bSchristos   {
5576a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5577a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5578a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
5579a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_rte.f
5580a5a4af3bSchristos     int UNUSED written = abuf->written;
5581a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5582a5a4af3bSchristos     SEM_BRANCH_INIT
5583a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5584a5a4af3bSchristos 
5585a5a4af3bSchristos   CPU (h_bpsw) = OPRND (h_bpsw_UQI);
5586a5a4af3bSchristos   SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6));
5587a5a4af3bSchristos   SET_H_PSW (OPRND (h_psw_UQI));
5588a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
5589a5a4af3bSchristos 
5590a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
5591a5a4af3bSchristos #undef OPRND
5592a5a4af3bSchristos #undef FLD
5593a5a4af3bSchristos   }
5594a5a4af3bSchristos   NEXT (vpc);
5595a5a4af3bSchristos 
5596a5a4af3bSchristos   CASE (sem, INSN_PAR_SLL) : /* sll $dr,$sr */
5597a5a4af3bSchristos {
5598a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5599a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5600a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5601a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5602a5a4af3bSchristos   int UNUSED written = 0;
5603a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5604a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5605a5a4af3bSchristos 
5606a5a4af3bSchristos   {
5607a5a4af3bSchristos     SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5608a5a4af3bSchristos     OPRND (dr) = opval;
5609a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5610a5a4af3bSchristos   }
5611a5a4af3bSchristos 
5612a5a4af3bSchristos #undef OPRND
5613a5a4af3bSchristos #undef FLD
5614a5a4af3bSchristos }
5615a5a4af3bSchristos   NEXT (vpc);
5616a5a4af3bSchristos 
5617a5a4af3bSchristos CASE (sem, INSN_WRITE_SLL) : /* sll $dr,$sr */
5618a5a4af3bSchristos   {
5619a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5620a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5621a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5622a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5623a5a4af3bSchristos     int UNUSED written = abuf->written;
5624a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5625a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5626a5a4af3bSchristos 
5627a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5628a5a4af3bSchristos 
5629a5a4af3bSchristos #undef OPRND
5630a5a4af3bSchristos #undef FLD
5631a5a4af3bSchristos   }
5632a5a4af3bSchristos   NEXT (vpc);
5633a5a4af3bSchristos 
5634a5a4af3bSchristos   CASE (sem, INSN_PAR_SLLI) : /* slli $dr,$uimm5 */
5635a5a4af3bSchristos {
5636a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5637a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5638a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5639a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5640a5a4af3bSchristos   int UNUSED written = 0;
5641a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5642a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5643a5a4af3bSchristos 
5644a5a4af3bSchristos   {
5645a5a4af3bSchristos     SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5));
5646a5a4af3bSchristos     OPRND (dr) = opval;
5647a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5648a5a4af3bSchristos   }
5649a5a4af3bSchristos 
5650a5a4af3bSchristos #undef OPRND
5651a5a4af3bSchristos #undef FLD
5652a5a4af3bSchristos }
5653a5a4af3bSchristos   NEXT (vpc);
5654a5a4af3bSchristos 
5655a5a4af3bSchristos CASE (sem, INSN_WRITE_SLLI) : /* slli $dr,$uimm5 */
5656a5a4af3bSchristos   {
5657a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5658a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5659a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5660a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5661a5a4af3bSchristos     int UNUSED written = abuf->written;
5662a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5663a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5664a5a4af3bSchristos 
5665a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5666a5a4af3bSchristos 
5667a5a4af3bSchristos #undef OPRND
5668a5a4af3bSchristos #undef FLD
5669a5a4af3bSchristos   }
5670a5a4af3bSchristos   NEXT (vpc);
5671a5a4af3bSchristos 
5672a5a4af3bSchristos   CASE (sem, INSN_PAR_SRA) : /* sra $dr,$sr */
5673a5a4af3bSchristos {
5674a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5675a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5676a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5677a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5678a5a4af3bSchristos   int UNUSED written = 0;
5679a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5680a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5681a5a4af3bSchristos 
5682a5a4af3bSchristos   {
5683a5a4af3bSchristos     SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5684a5a4af3bSchristos     OPRND (dr) = opval;
5685a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5686a5a4af3bSchristos   }
5687a5a4af3bSchristos 
5688a5a4af3bSchristos #undef OPRND
5689a5a4af3bSchristos #undef FLD
5690a5a4af3bSchristos }
5691a5a4af3bSchristos   NEXT (vpc);
5692a5a4af3bSchristos 
5693a5a4af3bSchristos CASE (sem, INSN_WRITE_SRA) : /* sra $dr,$sr */
5694a5a4af3bSchristos   {
5695a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5696a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5697a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5698a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5699a5a4af3bSchristos     int UNUSED written = abuf->written;
5700a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5701a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5702a5a4af3bSchristos 
5703a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5704a5a4af3bSchristos 
5705a5a4af3bSchristos #undef OPRND
5706a5a4af3bSchristos #undef FLD
5707a5a4af3bSchristos   }
5708a5a4af3bSchristos   NEXT (vpc);
5709a5a4af3bSchristos 
5710a5a4af3bSchristos   CASE (sem, INSN_PAR_SRAI) : /* srai $dr,$uimm5 */
5711a5a4af3bSchristos {
5712a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5713a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5714a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5715a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5716a5a4af3bSchristos   int UNUSED written = 0;
5717a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5718a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5719a5a4af3bSchristos 
5720a5a4af3bSchristos   {
5721a5a4af3bSchristos     SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5));
5722a5a4af3bSchristos     OPRND (dr) = opval;
5723a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5724a5a4af3bSchristos   }
5725a5a4af3bSchristos 
5726a5a4af3bSchristos #undef OPRND
5727a5a4af3bSchristos #undef FLD
5728a5a4af3bSchristos }
5729a5a4af3bSchristos   NEXT (vpc);
5730a5a4af3bSchristos 
5731a5a4af3bSchristos CASE (sem, INSN_WRITE_SRAI) : /* srai $dr,$uimm5 */
5732a5a4af3bSchristos   {
5733a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5734a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5735a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5736a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5737a5a4af3bSchristos     int UNUSED written = abuf->written;
5738a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5739a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5740a5a4af3bSchristos 
5741a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5742a5a4af3bSchristos 
5743a5a4af3bSchristos #undef OPRND
5744a5a4af3bSchristos #undef FLD
5745a5a4af3bSchristos   }
5746a5a4af3bSchristos   NEXT (vpc);
5747a5a4af3bSchristos 
5748a5a4af3bSchristos   CASE (sem, INSN_PAR_SRL) : /* srl $dr,$sr */
5749a5a4af3bSchristos {
5750a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5751a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5752a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5753a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5754a5a4af3bSchristos   int UNUSED written = 0;
5755a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5756a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5757a5a4af3bSchristos 
5758a5a4af3bSchristos   {
5759a5a4af3bSchristos     SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31));
5760a5a4af3bSchristos     OPRND (dr) = opval;
5761a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5762a5a4af3bSchristos   }
5763a5a4af3bSchristos 
5764a5a4af3bSchristos #undef OPRND
5765a5a4af3bSchristos #undef FLD
5766a5a4af3bSchristos }
5767a5a4af3bSchristos   NEXT (vpc);
5768a5a4af3bSchristos 
5769a5a4af3bSchristos CASE (sem, INSN_WRITE_SRL) : /* srl $dr,$sr */
5770a5a4af3bSchristos   {
5771a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5772a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5773a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
5774a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
5775a5a4af3bSchristos     int UNUSED written = abuf->written;
5776a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5777a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5778a5a4af3bSchristos 
5779a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5780a5a4af3bSchristos 
5781a5a4af3bSchristos #undef OPRND
5782a5a4af3bSchristos #undef FLD
5783a5a4af3bSchristos   }
5784a5a4af3bSchristos   NEXT (vpc);
5785a5a4af3bSchristos 
5786a5a4af3bSchristos   CASE (sem, INSN_PAR_SRLI) : /* srli $dr,$uimm5 */
5787a5a4af3bSchristos {
5788a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5789a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5790a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5791a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5792a5a4af3bSchristos   int UNUSED written = 0;
5793a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5794a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5795a5a4af3bSchristos 
5796a5a4af3bSchristos   {
5797a5a4af3bSchristos     SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5));
5798a5a4af3bSchristos     OPRND (dr) = opval;
5799a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5800a5a4af3bSchristos   }
5801a5a4af3bSchristos 
5802a5a4af3bSchristos #undef OPRND
5803a5a4af3bSchristos #undef FLD
5804a5a4af3bSchristos }
5805a5a4af3bSchristos   NEXT (vpc);
5806a5a4af3bSchristos 
5807a5a4af3bSchristos CASE (sem, INSN_WRITE_SRLI) : /* srli $dr,$uimm5 */
5808a5a4af3bSchristos   {
5809a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5810a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5811a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_slli.f
5812a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_slli.f
5813a5a4af3bSchristos     int UNUSED written = abuf->written;
5814a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5815a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5816a5a4af3bSchristos 
5817a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
5818a5a4af3bSchristos 
5819a5a4af3bSchristos #undef OPRND
5820a5a4af3bSchristos #undef FLD
5821a5a4af3bSchristos   }
5822a5a4af3bSchristos   NEXT (vpc);
5823a5a4af3bSchristos 
5824a5a4af3bSchristos   CASE (sem, INSN_PAR_ST) : /* st $src1,@$src2 */
5825a5a4af3bSchristos {
5826a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5827a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5828a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5829a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st.f
5830a5a4af3bSchristos   int UNUSED written = 0;
5831a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5832a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5833a5a4af3bSchristos 
5834a5a4af3bSchristos   {
5835a5a4af3bSchristos     SI opval = * FLD (i_src1);
5836a5a4af3bSchristos     OPRND (h_memory_SI_src2_idx) = * FLD (i_src2);
5837a5a4af3bSchristos     OPRND (h_memory_SI_src2) = opval;
5838a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5839a5a4af3bSchristos   }
5840a5a4af3bSchristos 
5841a5a4af3bSchristos #undef OPRND
5842a5a4af3bSchristos #undef FLD
5843a5a4af3bSchristos }
5844a5a4af3bSchristos   NEXT (vpc);
5845a5a4af3bSchristos 
5846a5a4af3bSchristos CASE (sem, INSN_WRITE_ST) : /* st $src1,@$src2 */
5847a5a4af3bSchristos   {
5848a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5849a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5850a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5851a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st.f
5852a5a4af3bSchristos     int UNUSED written = abuf->written;
5853a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5854a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5855a5a4af3bSchristos 
5856a5a4af3bSchristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2));
5857a5a4af3bSchristos 
5858a5a4af3bSchristos #undef OPRND
5859a5a4af3bSchristos #undef FLD
5860a5a4af3bSchristos   }
5861a5a4af3bSchristos   NEXT (vpc);
5862a5a4af3bSchristos 
5863a5a4af3bSchristos   CASE (sem, INSN_PAR_STB) : /* stb $src1,@$src2 */
5864a5a4af3bSchristos {
5865a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5866a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5867a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5868a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb.f
5869a5a4af3bSchristos   int UNUSED written = 0;
5870a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5871a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5872a5a4af3bSchristos 
5873a5a4af3bSchristos   {
5874a5a4af3bSchristos     QI opval = * FLD (i_src1);
5875a5a4af3bSchristos     OPRND (h_memory_QI_src2_idx) = * FLD (i_src2);
5876a5a4af3bSchristos     OPRND (h_memory_QI_src2) = opval;
5877a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5878a5a4af3bSchristos   }
5879a5a4af3bSchristos 
5880a5a4af3bSchristos #undef OPRND
5881a5a4af3bSchristos #undef FLD
5882a5a4af3bSchristos }
5883a5a4af3bSchristos   NEXT (vpc);
5884a5a4af3bSchristos 
5885a5a4af3bSchristos CASE (sem, INSN_WRITE_STB) : /* stb $src1,@$src2 */
5886a5a4af3bSchristos   {
5887a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5888a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5889a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5890a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb.f
5891a5a4af3bSchristos     int UNUSED written = abuf->written;
5892a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5893a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5894a5a4af3bSchristos 
5895a5a4af3bSchristos   SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_src2_idx), OPRND (h_memory_QI_src2));
5896a5a4af3bSchristos 
5897a5a4af3bSchristos #undef OPRND
5898a5a4af3bSchristos #undef FLD
5899a5a4af3bSchristos   }
5900a5a4af3bSchristos   NEXT (vpc);
5901a5a4af3bSchristos 
5902a5a4af3bSchristos   CASE (sem, INSN_PAR_STH) : /* sth $src1,@$src2 */
5903a5a4af3bSchristos {
5904a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5905a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5906a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5907a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth.f
5908a5a4af3bSchristos   int UNUSED written = 0;
5909a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5910a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5911a5a4af3bSchristos 
5912a5a4af3bSchristos   {
5913a5a4af3bSchristos     HI opval = * FLD (i_src1);
5914a5a4af3bSchristos     OPRND (h_memory_HI_src2_idx) = * FLD (i_src2);
5915a5a4af3bSchristos     OPRND (h_memory_HI_src2) = opval;
5916a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5917a5a4af3bSchristos   }
5918a5a4af3bSchristos 
5919a5a4af3bSchristos #undef OPRND
5920a5a4af3bSchristos #undef FLD
5921a5a4af3bSchristos }
5922a5a4af3bSchristos   NEXT (vpc);
5923a5a4af3bSchristos 
5924a5a4af3bSchristos CASE (sem, INSN_WRITE_STH) : /* sth $src1,@$src2 */
5925a5a4af3bSchristos   {
5926a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5927a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5928a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5929a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth.f
5930a5a4af3bSchristos     int UNUSED written = abuf->written;
5931a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5932a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5933a5a4af3bSchristos 
5934a5a4af3bSchristos   SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_src2_idx), OPRND (h_memory_HI_src2));
5935a5a4af3bSchristos 
5936a5a4af3bSchristos #undef OPRND
5937a5a4af3bSchristos #undef FLD
5938a5a4af3bSchristos   }
5939a5a4af3bSchristos   NEXT (vpc);
5940a5a4af3bSchristos 
5941a5a4af3bSchristos   CASE (sem, INSN_PAR_ST_PLUS) : /* st $src1,@+$src2 */
5942a5a4af3bSchristos {
5943a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5944a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5945a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5946a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5947a5a4af3bSchristos   int UNUSED written = 0;
5948a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5949a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5950a5a4af3bSchristos 
5951a5a4af3bSchristos {
5952a5a4af3bSchristos   SI tmp_new_src2;
5953a5a4af3bSchristos   tmp_new_src2 = ADDSI (* FLD (i_src2), 4);
5954a5a4af3bSchristos   {
5955a5a4af3bSchristos     SI opval = * FLD (i_src1);
5956a5a4af3bSchristos     OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2;
5957a5a4af3bSchristos     OPRND (h_memory_SI_new_src2) = opval;
5958a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
5959a5a4af3bSchristos   }
5960a5a4af3bSchristos   {
5961a5a4af3bSchristos     SI opval = tmp_new_src2;
5962a5a4af3bSchristos     OPRND (src2) = opval;
5963a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
5964a5a4af3bSchristos   }
5965a5a4af3bSchristos }
5966a5a4af3bSchristos 
5967a5a4af3bSchristos #undef OPRND
5968a5a4af3bSchristos #undef FLD
5969a5a4af3bSchristos }
5970a5a4af3bSchristos   NEXT (vpc);
5971a5a4af3bSchristos 
5972a5a4af3bSchristos CASE (sem, INSN_WRITE_ST_PLUS) : /* st $src1,@+$src2 */
5973a5a4af3bSchristos   {
5974a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5975a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
5976a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5977a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
5978a5a4af3bSchristos     int UNUSED written = abuf->written;
5979a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
5980a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
5981a5a4af3bSchristos 
5982a5a4af3bSchristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2));
5983a5a4af3bSchristos   * FLD (i_src2) = OPRND (src2);
5984a5a4af3bSchristos 
5985a5a4af3bSchristos #undef OPRND
5986a5a4af3bSchristos #undef FLD
5987a5a4af3bSchristos   }
5988a5a4af3bSchristos   NEXT (vpc);
5989a5a4af3bSchristos 
5990a5a4af3bSchristos   CASE (sem, INSN_PAR_STH_PLUS) : /* sth $src1,@$src2+ */
5991a5a4af3bSchristos {
5992a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
5993a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
5994a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
5995a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f
5996a5a4af3bSchristos   int UNUSED written = 0;
5997a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
5998a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
5999a5a4af3bSchristos 
6000a5a4af3bSchristos {
6001a5a4af3bSchristos   SI tmp_new_src2;
6002a5a4af3bSchristos   tmp_new_src2 = * FLD (i_src2);
6003a5a4af3bSchristos   {
6004a5a4af3bSchristos     HI opval = * FLD (i_src1);
6005a5a4af3bSchristos     OPRND (h_memory_HI_new_src2_idx) = tmp_new_src2;
6006a5a4af3bSchristos     OPRND (h_memory_HI_new_src2) = opval;
6007a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
6008a5a4af3bSchristos   }
6009a5a4af3bSchristos   {
6010a5a4af3bSchristos     SI opval = ADDSI (tmp_new_src2, 2);
6011a5a4af3bSchristos     OPRND (src2) = opval;
6012a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6013a5a4af3bSchristos   }
6014a5a4af3bSchristos }
6015a5a4af3bSchristos 
6016a5a4af3bSchristos #undef OPRND
6017a5a4af3bSchristos #undef FLD
6018a5a4af3bSchristos }
6019a5a4af3bSchristos   NEXT (vpc);
6020a5a4af3bSchristos 
6021a5a4af3bSchristos CASE (sem, INSN_WRITE_STH_PLUS) : /* sth $src1,@$src2+ */
6022a5a4af3bSchristos   {
6023a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6024a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6025a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6026a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sth_plus.f
6027a5a4af3bSchristos     int UNUSED written = abuf->written;
6028a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6029a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6030a5a4af3bSchristos 
6031a5a4af3bSchristos   SETMEMHI (current_cpu, pc, OPRND (h_memory_HI_new_src2_idx), OPRND (h_memory_HI_new_src2));
6032a5a4af3bSchristos   * FLD (i_src2) = OPRND (src2);
6033a5a4af3bSchristos 
6034a5a4af3bSchristos #undef OPRND
6035a5a4af3bSchristos #undef FLD
6036a5a4af3bSchristos   }
6037a5a4af3bSchristos   NEXT (vpc);
6038a5a4af3bSchristos 
6039a5a4af3bSchristos   CASE (sem, INSN_PAR_STB_PLUS) : /* stb $src1,@$src2+ */
6040a5a4af3bSchristos {
6041a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6042a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6043a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6044a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f
6045a5a4af3bSchristos   int UNUSED written = 0;
6046a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6047a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6048a5a4af3bSchristos 
6049a5a4af3bSchristos {
6050a5a4af3bSchristos   SI tmp_new_src2;
6051a5a4af3bSchristos   tmp_new_src2 = * FLD (i_src2);
6052a5a4af3bSchristos   {
6053a5a4af3bSchristos     QI opval = * FLD (i_src1);
6054a5a4af3bSchristos     OPRND (h_memory_QI_new_src2_idx) = tmp_new_src2;
6055a5a4af3bSchristos     OPRND (h_memory_QI_new_src2) = opval;
6056a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
6057a5a4af3bSchristos   }
6058a5a4af3bSchristos   {
6059a5a4af3bSchristos     SI opval = ADDSI (tmp_new_src2, 1);
6060a5a4af3bSchristos     OPRND (src2) = opval;
6061a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6062a5a4af3bSchristos   }
6063a5a4af3bSchristos }
6064a5a4af3bSchristos 
6065a5a4af3bSchristos #undef OPRND
6066a5a4af3bSchristos #undef FLD
6067a5a4af3bSchristos }
6068a5a4af3bSchristos   NEXT (vpc);
6069a5a4af3bSchristos 
6070a5a4af3bSchristos CASE (sem, INSN_WRITE_STB_PLUS) : /* stb $src1,@$src2+ */
6071a5a4af3bSchristos   {
6072a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6073a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6074a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6075a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_stb_plus.f
6076a5a4af3bSchristos     int UNUSED written = abuf->written;
6077a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6078a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6079a5a4af3bSchristos 
6080a5a4af3bSchristos   SETMEMQI (current_cpu, pc, OPRND (h_memory_QI_new_src2_idx), OPRND (h_memory_QI_new_src2));
6081a5a4af3bSchristos   * FLD (i_src2) = OPRND (src2);
6082a5a4af3bSchristos 
6083a5a4af3bSchristos #undef OPRND
6084a5a4af3bSchristos #undef FLD
6085a5a4af3bSchristos   }
6086a5a4af3bSchristos   NEXT (vpc);
6087a5a4af3bSchristos 
6088a5a4af3bSchristos   CASE (sem, INSN_PAR_ST_MINUS) : /* st $src1,@-$src2 */
6089a5a4af3bSchristos {
6090a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6091a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6092a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6093a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
6094a5a4af3bSchristos   int UNUSED written = 0;
6095a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6096a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6097a5a4af3bSchristos 
6098a5a4af3bSchristos {
6099a5a4af3bSchristos   SI tmp_new_src2;
6100a5a4af3bSchristos   tmp_new_src2 = SUBSI (* FLD (i_src2), 4);
6101a5a4af3bSchristos   {
6102a5a4af3bSchristos     SI opval = * FLD (i_src1);
6103a5a4af3bSchristos     OPRND (h_memory_SI_new_src2_idx) = tmp_new_src2;
6104a5a4af3bSchristos     OPRND (h_memory_SI_new_src2) = opval;
6105a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
6106a5a4af3bSchristos   }
6107a5a4af3bSchristos   {
6108a5a4af3bSchristos     SI opval = tmp_new_src2;
6109a5a4af3bSchristos     OPRND (src2) = opval;
6110a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6111a5a4af3bSchristos   }
6112a5a4af3bSchristos }
6113a5a4af3bSchristos 
6114a5a4af3bSchristos #undef OPRND
6115a5a4af3bSchristos #undef FLD
6116a5a4af3bSchristos }
6117a5a4af3bSchristos   NEXT (vpc);
6118a5a4af3bSchristos 
6119a5a4af3bSchristos CASE (sem, INSN_WRITE_ST_MINUS) : /* st $src1,@-$src2 */
6120a5a4af3bSchristos   {
6121a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6122a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6123a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6124a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_st_plus.f
6125a5a4af3bSchristos     int UNUSED written = abuf->written;
6126a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6127a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6128a5a4af3bSchristos 
6129a5a4af3bSchristos   SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_new_src2_idx), OPRND (h_memory_SI_new_src2));
6130a5a4af3bSchristos   * FLD (i_src2) = OPRND (src2);
6131a5a4af3bSchristos 
6132a5a4af3bSchristos #undef OPRND
6133a5a4af3bSchristos #undef FLD
6134a5a4af3bSchristos   }
6135a5a4af3bSchristos   NEXT (vpc);
6136a5a4af3bSchristos 
6137a5a4af3bSchristos   CASE (sem, INSN_PAR_SUB) : /* sub $dr,$sr */
6138a5a4af3bSchristos {
6139a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6140a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6141a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6142a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
6143a5a4af3bSchristos   int UNUSED written = 0;
6144a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6145a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6146a5a4af3bSchristos 
6147a5a4af3bSchristos   {
6148a5a4af3bSchristos     SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr));
6149a5a4af3bSchristos     OPRND (dr) = opval;
6150a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6151a5a4af3bSchristos   }
6152a5a4af3bSchristos 
6153a5a4af3bSchristos #undef OPRND
6154a5a4af3bSchristos #undef FLD
6155a5a4af3bSchristos }
6156a5a4af3bSchristos   NEXT (vpc);
6157a5a4af3bSchristos 
6158a5a4af3bSchristos CASE (sem, INSN_WRITE_SUB) : /* sub $dr,$sr */
6159a5a4af3bSchristos   {
6160a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6161a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6162a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6163a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_add.f
6164a5a4af3bSchristos     int UNUSED written = abuf->written;
6165a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6166a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6167a5a4af3bSchristos 
6168a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
6169a5a4af3bSchristos 
6170a5a4af3bSchristos #undef OPRND
6171a5a4af3bSchristos #undef FLD
6172a5a4af3bSchristos   }
6173a5a4af3bSchristos   NEXT (vpc);
6174a5a4af3bSchristos 
6175a5a4af3bSchristos   CASE (sem, INSN_PAR_SUBV) : /* subv $dr,$sr */
6176a5a4af3bSchristos {
6177a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6178a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6179a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6180a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f
6181a5a4af3bSchristos   int UNUSED written = 0;
6182a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6183a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6184a5a4af3bSchristos 
6185a5a4af3bSchristos {
6186a5a4af3bSchristos   SI temp0;BI temp1;
6187a5a4af3bSchristos   temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr));
6188a5a4af3bSchristos   temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0);
6189a5a4af3bSchristos   {
6190a5a4af3bSchristos     SI opval = temp0;
6191a5a4af3bSchristos     OPRND (dr) = opval;
6192a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6193a5a4af3bSchristos   }
6194a5a4af3bSchristos   {
6195a5a4af3bSchristos     BI opval = temp1;
6196a5a4af3bSchristos     OPRND (condbit) = opval;
6197a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
6198a5a4af3bSchristos   }
6199a5a4af3bSchristos }
6200a5a4af3bSchristos 
6201a5a4af3bSchristos #undef OPRND
6202a5a4af3bSchristos #undef FLD
6203a5a4af3bSchristos }
6204a5a4af3bSchristos   NEXT (vpc);
6205a5a4af3bSchristos 
6206a5a4af3bSchristos CASE (sem, INSN_WRITE_SUBV) : /* subv $dr,$sr */
6207a5a4af3bSchristos   {
6208a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6209a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6210a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6211a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addv.f
6212a5a4af3bSchristos     int UNUSED written = abuf->written;
6213a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6214a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6215a5a4af3bSchristos 
6216a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
6217a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
6218a5a4af3bSchristos 
6219a5a4af3bSchristos #undef OPRND
6220a5a4af3bSchristos #undef FLD
6221a5a4af3bSchristos   }
6222a5a4af3bSchristos   NEXT (vpc);
6223a5a4af3bSchristos 
6224a5a4af3bSchristos   CASE (sem, INSN_PAR_SUBX) : /* subx $dr,$sr */
6225a5a4af3bSchristos {
6226a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6227a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6228a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6229a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f
6230a5a4af3bSchristos   int UNUSED written = 0;
6231a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6232a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6233a5a4af3bSchristos 
6234a5a4af3bSchristos {
6235a5a4af3bSchristos   SI temp0;BI temp1;
6236a5a4af3bSchristos   temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
6237a5a4af3bSchristos   temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond));
6238a5a4af3bSchristos   {
6239a5a4af3bSchristos     SI opval = temp0;
6240a5a4af3bSchristos     OPRND (dr) = opval;
6241a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval);
6242a5a4af3bSchristos   }
6243a5a4af3bSchristos   {
6244a5a4af3bSchristos     BI opval = temp1;
6245a5a4af3bSchristos     OPRND (condbit) = opval;
6246a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
6247a5a4af3bSchristos   }
6248a5a4af3bSchristos }
6249a5a4af3bSchristos 
6250a5a4af3bSchristos #undef OPRND
6251a5a4af3bSchristos #undef FLD
6252a5a4af3bSchristos }
6253a5a4af3bSchristos   NEXT (vpc);
6254a5a4af3bSchristos 
6255a5a4af3bSchristos CASE (sem, INSN_WRITE_SUBX) : /* subx $dr,$sr */
6256a5a4af3bSchristos   {
6257a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6258a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6259a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_add.f
6260a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_addx.f
6261a5a4af3bSchristos     int UNUSED written = abuf->written;
6262a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6263a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6264a5a4af3bSchristos 
6265a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
6266a5a4af3bSchristos   * FLD (i_dr) = OPRND (dr);
6267a5a4af3bSchristos 
6268a5a4af3bSchristos #undef OPRND
6269a5a4af3bSchristos #undef FLD
6270a5a4af3bSchristos   }
6271a5a4af3bSchristos   NEXT (vpc);
6272a5a4af3bSchristos 
6273a5a4af3bSchristos   CASE (sem, INSN_PAR_TRAP) : /* trap $uimm4 */
6274a5a4af3bSchristos {
6275a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6276a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6277a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f
6278a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_trap.f
6279a5a4af3bSchristos   int UNUSED written = 0;
6280a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6281a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6282a5a4af3bSchristos 
6283a5a4af3bSchristos {
6284a5a4af3bSchristos   {
6285a5a4af3bSchristos     USI opval = GET_H_CR (((UINT) 6));
6286a5a4af3bSchristos     OPRND (h_cr_USI_14) = opval;
6287a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
6288a5a4af3bSchristos   }
6289a5a4af3bSchristos   {
6290a5a4af3bSchristos     USI opval = ADDSI (pc, 4);
6291a5a4af3bSchristos     OPRND (h_cr_USI_6) = opval;
6292a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
6293a5a4af3bSchristos   }
6294a5a4af3bSchristos   {
6295a5a4af3bSchristos     UQI opval = CPU (h_bpsw);
6296a5a4af3bSchristos     OPRND (h_bbpsw_UQI) = opval;
6297a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval);
6298a5a4af3bSchristos   }
6299a5a4af3bSchristos   {
6300a5a4af3bSchristos     UQI opval = GET_H_PSW ();
6301a5a4af3bSchristos     OPRND (h_bpsw_UQI) = opval;
6302a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval);
6303a5a4af3bSchristos   }
6304a5a4af3bSchristos   {
6305a5a4af3bSchristos     UQI opval = ANDQI (GET_H_PSW (), 128);
6306a5a4af3bSchristos     OPRND (h_psw_UQI) = opval;
6307a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval);
6308a5a4af3bSchristos   }
6309a5a4af3bSchristos   {
6310a5a4af3bSchristos     SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4));
6311a5a4af3bSchristos     OPRND (pc) = opval;
6312a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval);
6313a5a4af3bSchristos   }
6314a5a4af3bSchristos }
6315a5a4af3bSchristos 
6316a5a4af3bSchristos #undef OPRND
6317a5a4af3bSchristos #undef FLD
6318a5a4af3bSchristos }
6319a5a4af3bSchristos   NEXT (vpc);
6320a5a4af3bSchristos 
6321a5a4af3bSchristos CASE (sem, INSN_WRITE_TRAP) : /* trap $uimm4 */
6322a5a4af3bSchristos   {
6323a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6324a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6325a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_trap.f
6326a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_trap.f
6327a5a4af3bSchristos     int UNUSED written = abuf->written;
6328a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6329a5a4af3bSchristos     SEM_BRANCH_INIT
6330a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6331a5a4af3bSchristos 
6332a5a4af3bSchristos   CPU (h_bbpsw) = OPRND (h_bbpsw_UQI);
6333a5a4af3bSchristos   CPU (h_bpsw) = OPRND (h_bpsw_UQI);
6334a5a4af3bSchristos   SET_H_CR (((UINT) 14), OPRND (h_cr_USI_14));
6335a5a4af3bSchristos   SET_H_CR (((UINT) 6), OPRND (h_cr_USI_6));
6336a5a4af3bSchristos   SET_H_PSW (OPRND (h_psw_UQI));
6337a5a4af3bSchristos   SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, OPRND (pc), vpc);
6338a5a4af3bSchristos 
6339a5a4af3bSchristos   SEM_BRANCH_FINI (vpc);
6340a5a4af3bSchristos #undef OPRND
6341a5a4af3bSchristos #undef FLD
6342a5a4af3bSchristos   }
6343a5a4af3bSchristos   NEXT (vpc);
6344a5a4af3bSchristos 
6345a5a4af3bSchristos   CASE (sem, INSN_PAR_UNLOCK) : /* unlock $src1,@$src2 */
6346a5a4af3bSchristos {
6347a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6348a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6349a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6350a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_unlock.f
6351a5a4af3bSchristos   int UNUSED written = 0;
6352a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6353a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6354a5a4af3bSchristos 
6355a5a4af3bSchristos {
6356a5a4af3bSchristos if (CPU (h_lock)) {
6357a5a4af3bSchristos   {
6358a5a4af3bSchristos     SI opval = * FLD (i_src1);
6359a5a4af3bSchristos     OPRND (h_memory_SI_src2_idx) = * FLD (i_src2);
6360a5a4af3bSchristos     OPRND (h_memory_SI_src2) = opval;
6361a5a4af3bSchristos     written |= (1 << 4);
6362a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval);
6363a5a4af3bSchristos   }
6364a5a4af3bSchristos }
6365a5a4af3bSchristos   {
6366a5a4af3bSchristos     BI opval = 0;
6367a5a4af3bSchristos     OPRND (h_lock_BI) = opval;
6368a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval);
6369a5a4af3bSchristos   }
6370a5a4af3bSchristos }
6371a5a4af3bSchristos 
6372a5a4af3bSchristos   abuf->written = written;
6373a5a4af3bSchristos #undef OPRND
6374a5a4af3bSchristos #undef FLD
6375a5a4af3bSchristos }
6376a5a4af3bSchristos   NEXT (vpc);
6377a5a4af3bSchristos 
6378a5a4af3bSchristos CASE (sem, INSN_WRITE_UNLOCK) : /* unlock $src1,@$src2 */
6379a5a4af3bSchristos   {
6380a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6381a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6382a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6383a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_unlock.f
6384a5a4af3bSchristos     int UNUSED written = abuf->written;
6385a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6386a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6387a5a4af3bSchristos 
6388a5a4af3bSchristos   CPU (h_lock) = OPRND (h_lock_BI);
6389a5a4af3bSchristos   if (written & (1 << 4))
6390a5a4af3bSchristos     {
6391a5a4af3bSchristos       SETMEMSI (current_cpu, pc, OPRND (h_memory_SI_src2_idx), OPRND (h_memory_SI_src2));
6392a5a4af3bSchristos     }
6393a5a4af3bSchristos 
6394a5a4af3bSchristos #undef OPRND
6395a5a4af3bSchristos #undef FLD
6396a5a4af3bSchristos   }
6397a5a4af3bSchristos   NEXT (vpc);
6398a5a4af3bSchristos 
6399a5a4af3bSchristos   CASE (sem, INSN_PAR_PCMPBZ) : /* pcmpbz $src2 */
6400a5a4af3bSchristos {
6401a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6402a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6403a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6404a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
6405a5a4af3bSchristos   int UNUSED written = 0;
6406a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6407a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6408a5a4af3bSchristos 
6409a5a4af3bSchristos   {
6410a5a4af3bSchristos     BI opval = (EQSI (ANDSI (* FLD (i_src2), 255), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 65280), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 16711680), 0)) ? (1) : (EQSI (ANDSI (* FLD (i_src2), 0xff000000), 0)) ? (1) : (0);
6411a5a4af3bSchristos     OPRND (condbit) = opval;
6412a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
6413a5a4af3bSchristos   }
6414a5a4af3bSchristos 
6415a5a4af3bSchristos #undef OPRND
6416a5a4af3bSchristos #undef FLD
6417a5a4af3bSchristos }
6418a5a4af3bSchristos   NEXT (vpc);
6419a5a4af3bSchristos 
6420a5a4af3bSchristos CASE (sem, INSN_WRITE_PCMPBZ) : /* pcmpbz $src2 */
6421a5a4af3bSchristos   {
6422a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6423a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6424a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6425a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_cmpz.f
6426a5a4af3bSchristos     int UNUSED written = abuf->written;
6427a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6428a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6429a5a4af3bSchristos 
6430a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
6431a5a4af3bSchristos 
6432a5a4af3bSchristos #undef OPRND
6433a5a4af3bSchristos #undef FLD
6434a5a4af3bSchristos   }
6435a5a4af3bSchristos   NEXT (vpc);
6436a5a4af3bSchristos 
6437a5a4af3bSchristos   CASE (sem, INSN_PAR_SADD) : /* sadd */
6438a5a4af3bSchristos {
6439a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6440a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6441a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6442a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sadd.f
6443a5a4af3bSchristos   int UNUSED written = 0;
6444a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6445a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6446a5a4af3bSchristos 
6447a5a4af3bSchristos   {
6448a5a4af3bSchristos     DI opval = ADDDI (SRADI (GET_H_ACCUMS (((UINT) 1)), 16), GET_H_ACCUMS (((UINT) 0)));
6449a5a4af3bSchristos     OPRND (h_accums_DI_0) = opval;
6450a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
6451a5a4af3bSchristos   }
6452a5a4af3bSchristos 
6453a5a4af3bSchristos #undef OPRND
6454a5a4af3bSchristos #undef FLD
6455a5a4af3bSchristos }
6456a5a4af3bSchristos   NEXT (vpc);
6457a5a4af3bSchristos 
6458a5a4af3bSchristos CASE (sem, INSN_WRITE_SADD) : /* sadd */
6459a5a4af3bSchristos   {
6460a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6461a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6462a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6463a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sadd.f
6464a5a4af3bSchristos     int UNUSED written = abuf->written;
6465a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6466a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6467a5a4af3bSchristos 
6468a5a4af3bSchristos   SET_H_ACCUMS (((UINT) 0), OPRND (h_accums_DI_0));
6469a5a4af3bSchristos 
6470a5a4af3bSchristos #undef OPRND
6471a5a4af3bSchristos #undef FLD
6472a5a4af3bSchristos   }
6473a5a4af3bSchristos   NEXT (vpc);
6474a5a4af3bSchristos 
6475a5a4af3bSchristos   CASE (sem, INSN_PAR_MACWU1) : /* macwu1 $src1,$src2 */
6476a5a4af3bSchristos {
6477a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6478a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6479a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6480a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6481a5a4af3bSchristos   int UNUSED written = 0;
6482a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6483a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6484a5a4af3bSchristos 
6485a5a4af3bSchristos   {
6486a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535)))), 8), 8);
6487a5a4af3bSchristos     OPRND (h_accums_DI_1) = opval;
6488a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
6489a5a4af3bSchristos   }
6490a5a4af3bSchristos 
6491a5a4af3bSchristos #undef OPRND
6492a5a4af3bSchristos #undef FLD
6493a5a4af3bSchristos }
6494a5a4af3bSchristos   NEXT (vpc);
6495a5a4af3bSchristos 
6496a5a4af3bSchristos CASE (sem, INSN_WRITE_MACWU1) : /* macwu1 $src1,$src2 */
6497a5a4af3bSchristos   {
6498a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6499a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6500a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6501a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6502a5a4af3bSchristos     int UNUSED written = abuf->written;
6503a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6504a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6505a5a4af3bSchristos 
6506a5a4af3bSchristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
6507a5a4af3bSchristos 
6508a5a4af3bSchristos #undef OPRND
6509a5a4af3bSchristos #undef FLD
6510a5a4af3bSchristos   }
6511a5a4af3bSchristos   NEXT (vpc);
6512a5a4af3bSchristos 
6513a5a4af3bSchristos   CASE (sem, INSN_PAR_MSBLO) : /* msblo $src1,$src2 */
6514a5a4af3bSchristos {
6515a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6516a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6517a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6518a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_msblo.f
6519a5a4af3bSchristos   int UNUSED written = 0;
6520a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6521a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6522a5a4af3bSchristos 
6523a5a4af3bSchristos   {
6524a5a4af3bSchristos     DI opval = SRADI (SLLDI (SUBDI (GET_H_ACCUM (), SRADI (SLLDI (MULDI (EXTHIDI (TRUNCSIHI (* FLD (i_src1))), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 32), 16)), 8), 8);
6525a5a4af3bSchristos     OPRND (accum) = opval;
6526a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval);
6527a5a4af3bSchristos   }
6528a5a4af3bSchristos 
6529a5a4af3bSchristos #undef OPRND
6530a5a4af3bSchristos #undef FLD
6531a5a4af3bSchristos }
6532a5a4af3bSchristos   NEXT (vpc);
6533a5a4af3bSchristos 
6534a5a4af3bSchristos CASE (sem, INSN_WRITE_MSBLO) : /* msblo $src1,$src2 */
6535a5a4af3bSchristos   {
6536a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6537a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6538a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6539a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_msblo.f
6540a5a4af3bSchristos     int UNUSED written = abuf->written;
6541a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6542a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6543a5a4af3bSchristos 
6544a5a4af3bSchristos   SET_H_ACCUM (OPRND (accum));
6545a5a4af3bSchristos 
6546a5a4af3bSchristos #undef OPRND
6547a5a4af3bSchristos #undef FLD
6548a5a4af3bSchristos   }
6549a5a4af3bSchristos   NEXT (vpc);
6550a5a4af3bSchristos 
6551a5a4af3bSchristos   CASE (sem, INSN_PAR_MULWU1) : /* mulwu1 $src1,$src2 */
6552a5a4af3bSchristos {
6553a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6554a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6555a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6556a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
6557a5a4af3bSchristos   int UNUSED written = 0;
6558a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6559a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6560a5a4af3bSchristos 
6561a5a4af3bSchristos   {
6562a5a4af3bSchristos     DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTSIDI (ANDSI (* FLD (i_src2), 65535))), 16), 16);
6563a5a4af3bSchristos     OPRND (h_accums_DI_1) = opval;
6564a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
6565a5a4af3bSchristos   }
6566a5a4af3bSchristos 
6567a5a4af3bSchristos #undef OPRND
6568a5a4af3bSchristos #undef FLD
6569a5a4af3bSchristos }
6570a5a4af3bSchristos   NEXT (vpc);
6571a5a4af3bSchristos 
6572a5a4af3bSchristos CASE (sem, INSN_WRITE_MULWU1) : /* mulwu1 $src1,$src2 */
6573a5a4af3bSchristos   {
6574a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6575a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6576a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6577a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_mulwu1.f
6578a5a4af3bSchristos     int UNUSED written = abuf->written;
6579a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6580a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6581a5a4af3bSchristos 
6582a5a4af3bSchristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
6583a5a4af3bSchristos 
6584a5a4af3bSchristos #undef OPRND
6585a5a4af3bSchristos #undef FLD
6586a5a4af3bSchristos   }
6587a5a4af3bSchristos   NEXT (vpc);
6588a5a4af3bSchristos 
6589a5a4af3bSchristos   CASE (sem, INSN_PAR_MACLH1) : /* maclh1 $src1,$src2 */
6590a5a4af3bSchristos {
6591a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6592a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6593a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6594a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6595a5a4af3bSchristos   int UNUSED written = 0;
6596a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6597a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6598a5a4af3bSchristos 
6599a5a4af3bSchristos   {
6600a5a4af3bSchristos     DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUMS (((UINT) 1)), SLLDI (EXTSIDI (MULSI (EXTHISI (TRUNCSIHI (* FLD (i_src1))), SRASI (* FLD (i_src2), 16))), 16)), 8), 8);
6601a5a4af3bSchristos     OPRND (h_accums_DI_1) = opval;
6602a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "accums", 'D', opval);
6603a5a4af3bSchristos   }
6604a5a4af3bSchristos 
6605a5a4af3bSchristos #undef OPRND
6606a5a4af3bSchristos #undef FLD
6607a5a4af3bSchristos }
6608a5a4af3bSchristos   NEXT (vpc);
6609a5a4af3bSchristos 
6610a5a4af3bSchristos CASE (sem, INSN_WRITE_MACLH1) : /* maclh1 $src1,$src2 */
6611a5a4af3bSchristos   {
6612a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6613a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6614a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_st_plus.f
6615a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_macwu1.f
6616a5a4af3bSchristos     int UNUSED written = abuf->written;
6617a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6618a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6619a5a4af3bSchristos 
6620a5a4af3bSchristos   SET_H_ACCUMS (((UINT) 1), OPRND (h_accums_DI_1));
6621a5a4af3bSchristos 
6622a5a4af3bSchristos #undef OPRND
6623a5a4af3bSchristos #undef FLD
6624a5a4af3bSchristos   }
6625a5a4af3bSchristos   NEXT (vpc);
6626a5a4af3bSchristos 
6627a5a4af3bSchristos   CASE (sem, INSN_PAR_SC) : /* sc */
6628a5a4af3bSchristos {
6629a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6630a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6631a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6632a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f
6633a5a4af3bSchristos   int UNUSED written = 0;
6634a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6635a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6636a5a4af3bSchristos 
6637a5a4af3bSchristos if (ZEXTBISI (CPU (h_cond)))
6638a5a4af3bSchristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6639a5a4af3bSchristos 
6640a5a4af3bSchristos #undef OPRND
6641a5a4af3bSchristos #undef FLD
6642a5a4af3bSchristos }
6643a5a4af3bSchristos   NEXT (vpc);
6644a5a4af3bSchristos 
6645a5a4af3bSchristos CASE (sem, INSN_WRITE_SC) : /* sc */
6646a5a4af3bSchristos   {
6647a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6648a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6649a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6650a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f
6651a5a4af3bSchristos     int UNUSED written = abuf->written;
6652a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6653a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6654a5a4af3bSchristos 
6655a5a4af3bSchristos 
6656a5a4af3bSchristos #undef OPRND
6657a5a4af3bSchristos #undef FLD
6658a5a4af3bSchristos   }
6659a5a4af3bSchristos   NEXT (vpc);
6660a5a4af3bSchristos 
6661a5a4af3bSchristos   CASE (sem, INSN_PAR_SNC) : /* snc */
6662a5a4af3bSchristos {
6663a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6664a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6665a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6666a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f
6667a5a4af3bSchristos   int UNUSED written = 0;
6668a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6669a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6670a5a4af3bSchristos 
6671a5a4af3bSchristos if (ZEXTBISI (NOTBI (CPU (h_cond))))
6672a5a4af3bSchristos   SEM_SKIP_INSN (current_cpu, sem_arg, vpc);
6673a5a4af3bSchristos 
6674a5a4af3bSchristos #undef OPRND
6675a5a4af3bSchristos #undef FLD
6676a5a4af3bSchristos }
6677a5a4af3bSchristos   NEXT (vpc);
6678a5a4af3bSchristos 
6679a5a4af3bSchristos CASE (sem, INSN_WRITE_SNC) : /* snc */
6680a5a4af3bSchristos   {
6681a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6682a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6683a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_empty.f
6684a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_sc.f
6685a5a4af3bSchristos     int UNUSED written = abuf->written;
6686a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6687a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6688a5a4af3bSchristos 
6689a5a4af3bSchristos 
6690a5a4af3bSchristos #undef OPRND
6691a5a4af3bSchristos #undef FLD
6692a5a4af3bSchristos   }
6693a5a4af3bSchristos   NEXT (vpc);
6694a5a4af3bSchristos 
6695a5a4af3bSchristos   CASE (sem, INSN_PAR_CLRPSW) : /* clrpsw $uimm8 */
6696a5a4af3bSchristos {
6697a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6698a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6699a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
6700a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f
6701a5a4af3bSchristos   int UNUSED written = 0;
6702a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6703a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6704a5a4af3bSchristos 
6705a5a4af3bSchristos   {
6706a5a4af3bSchristos     USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280));
6707a5a4af3bSchristos     OPRND (h_cr_USI_0) = opval;
6708a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
6709a5a4af3bSchristos   }
6710a5a4af3bSchristos 
6711a5a4af3bSchristos #undef OPRND
6712a5a4af3bSchristos #undef FLD
6713a5a4af3bSchristos }
6714a5a4af3bSchristos   NEXT (vpc);
6715a5a4af3bSchristos 
6716a5a4af3bSchristos CASE (sem, INSN_WRITE_CLRPSW) : /* clrpsw $uimm8 */
6717a5a4af3bSchristos   {
6718a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6719a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6720a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
6721a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_clrpsw.f
6722a5a4af3bSchristos     int UNUSED written = abuf->written;
6723a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6724a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6725a5a4af3bSchristos 
6726a5a4af3bSchristos   SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0));
6727a5a4af3bSchristos 
6728a5a4af3bSchristos #undef OPRND
6729a5a4af3bSchristos #undef FLD
6730a5a4af3bSchristos   }
6731a5a4af3bSchristos   NEXT (vpc);
6732a5a4af3bSchristos 
6733a5a4af3bSchristos   CASE (sem, INSN_PAR_SETPSW) : /* setpsw $uimm8 */
6734a5a4af3bSchristos {
6735a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6736a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6737a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
6738a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f
6739a5a4af3bSchristos   int UNUSED written = 0;
6740a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6741a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6742a5a4af3bSchristos 
6743a5a4af3bSchristos   {
6744a5a4af3bSchristos     USI opval = FLD (f_uimm8);
6745a5a4af3bSchristos     OPRND (h_cr_USI_0) = opval;
6746a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval);
6747a5a4af3bSchristos   }
6748a5a4af3bSchristos 
6749a5a4af3bSchristos #undef OPRND
6750a5a4af3bSchristos #undef FLD
6751a5a4af3bSchristos }
6752a5a4af3bSchristos   NEXT (vpc);
6753a5a4af3bSchristos 
6754a5a4af3bSchristos CASE (sem, INSN_WRITE_SETPSW) : /* setpsw $uimm8 */
6755a5a4af3bSchristos   {
6756a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6757a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6758a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_clrpsw.f
6759a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_setpsw.f
6760a5a4af3bSchristos     int UNUSED written = abuf->written;
6761a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6762a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6763a5a4af3bSchristos 
6764a5a4af3bSchristos   SET_H_CR (((UINT) 0), OPRND (h_cr_USI_0));
6765a5a4af3bSchristos 
6766a5a4af3bSchristos #undef OPRND
6767a5a4af3bSchristos #undef FLD
6768a5a4af3bSchristos   }
6769a5a4af3bSchristos   NEXT (vpc);
6770a5a4af3bSchristos 
6771a5a4af3bSchristos   CASE (sem, INSN_PAR_BTST) : /* btst $uimm3,$sr */
6772a5a4af3bSchristos {
6773a5a4af3bSchristos   SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6774a5a4af3bSchristos   ARGBUF *abuf = SEM_ARGBUF (sem_arg);
6775a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f
6776a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_btst.f
6777a5a4af3bSchristos   int UNUSED written = 0;
6778a5a4af3bSchristos   IADDR UNUSED pc = abuf->addr;
6779a5a4af3bSchristos   vpc = SEM_NEXT_VPC (sem_arg, pc, 2);
6780a5a4af3bSchristos 
6781a5a4af3bSchristos   {
6782a5a4af3bSchristos     BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1);
6783a5a4af3bSchristos     OPRND (condbit) = opval;
6784a5a4af3bSchristos     CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval);
6785a5a4af3bSchristos   }
6786a5a4af3bSchristos 
6787a5a4af3bSchristos #undef OPRND
6788a5a4af3bSchristos #undef FLD
6789a5a4af3bSchristos }
6790a5a4af3bSchristos   NEXT (vpc);
6791a5a4af3bSchristos 
6792a5a4af3bSchristos CASE (sem, INSN_WRITE_BTST) : /* btst $uimm3,$sr */
6793a5a4af3bSchristos   {
6794a5a4af3bSchristos     SEM_ARG sem_arg = SEM_SEM_ARG (vpc, sc);
6795a5a4af3bSchristos     const ARGBUF *abuf = SEM_ARGBUF (sem_arg)->fields.write.abuf;
6796a5a4af3bSchristos #define FLD(f) abuf->fields.sfmt_bset.f
6797a5a4af3bSchristos #define OPRND(f) par_exec->operands.sfmt_btst.f
6798a5a4af3bSchristos     int UNUSED written = abuf->written;
6799a5a4af3bSchristos     IADDR UNUSED pc = abuf->addr;
6800a5a4af3bSchristos     vpc = SEM_NEXT_VPC (sem_arg, pc, 0);
6801a5a4af3bSchristos 
6802a5a4af3bSchristos   CPU (h_cond) = OPRND (condbit);
6803a5a4af3bSchristos 
6804a5a4af3bSchristos #undef OPRND
6805a5a4af3bSchristos #undef FLD
6806a5a4af3bSchristos   }
6807a5a4af3bSchristos   NEXT (vpc);
6808a5a4af3bSchristos 
6809a5a4af3bSchristos 
6810a5a4af3bSchristos     }
6811a5a4af3bSchristos   ENDSWITCH (sem) /* End of semantic switch.  */
6812a5a4af3bSchristos 
6813a5a4af3bSchristos   /* At this point `vpc' contains the next insn to execute.  */
6814a5a4af3bSchristos }
6815a5a4af3bSchristos 
6816a5a4af3bSchristos #undef DEFINE_SWITCH
6817a5a4af3bSchristos #endif /* DEFINE_SWITCH */
6818