1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build amd64 && !purego && gc
6
7// This code was translated into a form compatible with 6a from the public
8// domain sources at https://github.com/gvanas/KeccakCodePackage
9
10// Offsets in state
11#define _ba  (0*8)
12#define _be  (1*8)
13#define _bi  (2*8)
14#define _bo  (3*8)
15#define _bu  (4*8)
16#define _ga  (5*8)
17#define _ge  (6*8)
18#define _gi  (7*8)
19#define _go  (8*8)
20#define _gu  (9*8)
21#define _ka (10*8)
22#define _ke (11*8)
23#define _ki (12*8)
24#define _ko (13*8)
25#define _ku (14*8)
26#define _ma (15*8)
27#define _me (16*8)
28#define _mi (17*8)
29#define _mo (18*8)
30#define _mu (19*8)
31#define _sa (20*8)
32#define _se (21*8)
33#define _si (22*8)
34#define _so (23*8)
35#define _su (24*8)
36
37// Temporary registers
38#define rT1  AX
39
40// Round vars
41#define rpState DI
42#define rpStack SP
43
44#define rDa BX
45#define rDe CX
46#define rDi DX
47#define rDo R8
48#define rDu R9
49
50#define rBa R10
51#define rBe R11
52#define rBi R12
53#define rBo R13
54#define rBu R14
55
56#define rCa SI
57#define rCe BP
58#define rCi rBi
59#define rCo rBo
60#define rCu R15
61
62#define MOVQ_RBI_RCE MOVQ rBi, rCe
63#define XORQ_RT1_RCA XORQ rT1, rCa
64#define XORQ_RT1_RCE XORQ rT1, rCe
65#define XORQ_RBA_RCU XORQ rBa, rCu
66#define XORQ_RBE_RCU XORQ rBe, rCu
67#define XORQ_RDU_RCU XORQ rDu, rCu
68#define XORQ_RDA_RCA XORQ rDa, rCa
69#define XORQ_RDE_RCE XORQ rDe, rCe
70
71#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \
72	/* Prepare round */    \
73	MOVQ rCe, rDa;         \
74	ROLQ $1, rDa;          \
75	                       \
76	MOVQ _bi(iState), rCi; \
77	XORQ _gi(iState), rDi; \
78	XORQ rCu, rDa;         \
79	XORQ _ki(iState), rCi; \
80	XORQ _mi(iState), rDi; \
81	XORQ rDi, rCi;         \
82	                       \
83	MOVQ rCi, rDe;         \
84	ROLQ $1, rDe;          \
85	                       \
86	MOVQ _bo(iState), rCo; \
87	XORQ _go(iState), rDo; \
88	XORQ rCa, rDe;         \
89	XORQ _ko(iState), rCo; \
90	XORQ _mo(iState), rDo; \
91	XORQ rDo, rCo;         \
92	                       \
93	MOVQ rCo, rDi;         \
94	ROLQ $1, rDi;          \
95	                       \
96	MOVQ rCu, rDo;         \
97	XORQ rCe, rDi;         \
98	ROLQ $1, rDo;          \
99	                       \
100	MOVQ rCa, rDu;         \
101	XORQ rCi, rDo;         \
102	ROLQ $1, rDu;          \
103	                       \
104	/* Result b */         \
105	MOVQ _ba(iState), rBa; \
106	MOVQ _ge(iState), rBe; \
107	XORQ rCo, rDu;         \
108	MOVQ _ki(iState), rBi; \
109	MOVQ _mo(iState), rBo; \
110	MOVQ _su(iState), rBu; \
111	XORQ rDe, rBe;         \
112	ROLQ $44, rBe;         \
113	XORQ rDi, rBi;         \
114	XORQ rDa, rBa;         \
115	ROLQ $43, rBi;         \
116	                       \
117	MOVQ rBe, rCa;         \
118	MOVQ rc, rT1;          \
119	ORQ  rBi, rCa;         \
120	XORQ rBa, rT1;         \
121	XORQ rT1, rCa;         \
122	MOVQ rCa, _ba(oState); \
123	                       \
124	XORQ rDu, rBu;         \
125	ROLQ $14, rBu;         \
126	MOVQ rBa, rCu;         \
127	ANDQ rBe, rCu;         \
128	XORQ rBu, rCu;         \
129	MOVQ rCu, _bu(oState); \
130	                       \
131	XORQ rDo, rBo;         \
132	ROLQ $21, rBo;         \
133	MOVQ rBo, rT1;         \
134	ANDQ rBu, rT1;         \
135	XORQ rBi, rT1;         \
136	MOVQ rT1, _bi(oState); \
137	                       \
138	NOTQ rBi;              \
139	ORQ  rBa, rBu;         \
140	ORQ  rBo, rBi;         \
141	XORQ rBo, rBu;         \
142	XORQ rBe, rBi;         \
143	MOVQ rBu, _bo(oState); \
144	MOVQ rBi, _be(oState); \
145	B_RBI_RCE;             \
146	                       \
147	/* Result g */         \
148	MOVQ _gu(iState), rBe; \
149	XORQ rDu, rBe;         \
150	MOVQ _ka(iState), rBi; \
151	ROLQ $20, rBe;         \
152	XORQ rDa, rBi;         \
153	ROLQ $3, rBi;          \
154	MOVQ _bo(iState), rBa; \
155	MOVQ rBe, rT1;         \
156	ORQ  rBi, rT1;         \
157	XORQ rDo, rBa;         \
158	MOVQ _me(iState), rBo; \
159	MOVQ _si(iState), rBu; \
160	ROLQ $28, rBa;         \
161	XORQ rBa, rT1;         \
162	MOVQ rT1, _ga(oState); \
163	G_RT1_RCA;             \
164	                       \
165	XORQ rDe, rBo;         \
166	ROLQ $45, rBo;         \
167	MOVQ rBi, rT1;         \
168	ANDQ rBo, rT1;         \
169	XORQ rBe, rT1;         \
170	MOVQ rT1, _ge(oState); \
171	G_RT1_RCE;             \
172	                       \
173	XORQ rDi, rBu;         \
174	ROLQ $61, rBu;         \
175	MOVQ rBu, rT1;         \
176	ORQ  rBa, rT1;         \
177	XORQ rBo, rT1;         \
178	MOVQ rT1, _go(oState); \
179	                       \
180	ANDQ rBe, rBa;         \
181	XORQ rBu, rBa;         \
182	MOVQ rBa, _gu(oState); \
183	NOTQ rBu;              \
184	G_RBA_RCU;             \
185	                       \
186	ORQ  rBu, rBo;         \
187	XORQ rBi, rBo;         \
188	MOVQ rBo, _gi(oState); \
189	                       \
190	/* Result k */         \
191	MOVQ _be(iState), rBa; \
192	MOVQ _gi(iState), rBe; \
193	MOVQ _ko(iState), rBi; \
194	MOVQ _mu(iState), rBo; \
195	MOVQ _sa(iState), rBu; \
196	XORQ rDi, rBe;         \
197	ROLQ $6, rBe;          \
198	XORQ rDo, rBi;         \
199	ROLQ $25, rBi;         \
200	MOVQ rBe, rT1;         \
201	ORQ  rBi, rT1;         \
202	XORQ rDe, rBa;         \
203	ROLQ $1, rBa;          \
204	XORQ rBa, rT1;         \
205	MOVQ rT1, _ka(oState); \
206	K_RT1_RCA;             \
207	                       \
208	XORQ rDu, rBo;         \
209	ROLQ $8, rBo;          \
210	MOVQ rBi, rT1;         \
211	ANDQ rBo, rT1;         \
212	XORQ rBe, rT1;         \
213	MOVQ rT1, _ke(oState); \
214	K_RT1_RCE;             \
215	                       \
216	XORQ rDa, rBu;         \
217	ROLQ $18, rBu;         \
218	NOTQ rBo;              \
219	MOVQ rBo, rT1;         \
220	ANDQ rBu, rT1;         \
221	XORQ rBi, rT1;         \
222	MOVQ rT1, _ki(oState); \
223	                       \
224	MOVQ rBu, rT1;         \
225	ORQ  rBa, rT1;         \
226	XORQ rBo, rT1;         \
227	MOVQ rT1, _ko(oState); \
228	                       \
229	ANDQ rBe, rBa;         \
230	XORQ rBu, rBa;         \
231	MOVQ rBa, _ku(oState); \
232	K_RBA_RCU;             \
233	                       \
234	/* Result m */         \
235	MOVQ _ga(iState), rBe; \
236	XORQ rDa, rBe;         \
237	MOVQ _ke(iState), rBi; \
238	ROLQ $36, rBe;         \
239	XORQ rDe, rBi;         \
240	MOVQ _bu(iState), rBa; \
241	ROLQ $10, rBi;         \
242	MOVQ rBe, rT1;         \
243	MOVQ _mi(iState), rBo; \
244	ANDQ rBi, rT1;         \
245	XORQ rDu, rBa;         \
246	MOVQ _so(iState), rBu; \
247	ROLQ $27, rBa;         \
248	XORQ rBa, rT1;         \
249	MOVQ rT1, _ma(oState); \
250	M_RT1_RCA;             \
251	                       \
252	XORQ rDi, rBo;         \
253	ROLQ $15, rBo;         \
254	MOVQ rBi, rT1;         \
255	ORQ  rBo, rT1;         \
256	XORQ rBe, rT1;         \
257	MOVQ rT1, _me(oState); \
258	M_RT1_RCE;             \
259	                       \
260	XORQ rDo, rBu;         \
261	ROLQ $56, rBu;         \
262	NOTQ rBo;              \
263	MOVQ rBo, rT1;         \
264	ORQ  rBu, rT1;         \
265	XORQ rBi, rT1;         \
266	MOVQ rT1, _mi(oState); \
267	                       \
268	ORQ  rBa, rBe;         \
269	XORQ rBu, rBe;         \
270	MOVQ rBe, _mu(oState); \
271	                       \
272	ANDQ rBa, rBu;         \
273	XORQ rBo, rBu;         \
274	MOVQ rBu, _mo(oState); \
275	M_RBE_RCU;             \
276	                       \
277	/* Result s */         \
278	MOVQ _bi(iState), rBa; \
279	MOVQ _go(iState), rBe; \
280	MOVQ _ku(iState), rBi; \
281	XORQ rDi, rBa;         \
282	MOVQ _ma(iState), rBo; \
283	ROLQ $62, rBa;         \
284	XORQ rDo, rBe;         \
285	MOVQ _se(iState), rBu; \
286	ROLQ $55, rBe;         \
287	                       \
288	XORQ rDu, rBi;         \
289	MOVQ rBa, rDu;         \
290	XORQ rDe, rBu;         \
291	ROLQ $2, rBu;          \
292	ANDQ rBe, rDu;         \
293	XORQ rBu, rDu;         \
294	MOVQ rDu, _su(oState); \
295	                       \
296	ROLQ $39, rBi;         \
297	S_RDU_RCU;             \
298	NOTQ rBe;              \
299	XORQ rDa, rBo;         \
300	MOVQ rBe, rDa;         \
301	ANDQ rBi, rDa;         \
302	XORQ rBa, rDa;         \
303	MOVQ rDa, _sa(oState); \
304	S_RDA_RCA;             \
305	                       \
306	ROLQ $41, rBo;         \
307	MOVQ rBi, rDe;         \
308	ORQ  rBo, rDe;         \
309	XORQ rBe, rDe;         \
310	MOVQ rDe, _se(oState); \
311	S_RDE_RCE;             \
312	                       \
313	MOVQ rBo, rDi;         \
314	MOVQ rBu, rDo;         \
315	ANDQ rBu, rDi;         \
316	ORQ  rBa, rDo;         \
317	XORQ rBi, rDi;         \
318	XORQ rBo, rDo;         \
319	MOVQ rDi, _si(oState); \
320	MOVQ rDo, _so(oState)  \
321
322// func keccakF1600(a *[25]uint64)
323TEXT ·keccakF1600(SB), 0, $200-8
324	MOVQ a+0(FP), rpState
325
326	// Convert the user state into an internal state
327	NOTQ _be(rpState)
328	NOTQ _bi(rpState)
329	NOTQ _go(rpState)
330	NOTQ _ki(rpState)
331	NOTQ _mi(rpState)
332	NOTQ _sa(rpState)
333
334	// Execute the KeccakF permutation
335	MOVQ _ba(rpState), rCa
336	MOVQ _be(rpState), rCe
337	MOVQ _bu(rpState), rCu
338
339	XORQ _ga(rpState), rCa
340	XORQ _ge(rpState), rCe
341	XORQ _gu(rpState), rCu
342
343	XORQ _ka(rpState), rCa
344	XORQ _ke(rpState), rCe
345	XORQ _ku(rpState), rCu
346
347	XORQ _ma(rpState), rCa
348	XORQ _me(rpState), rCe
349	XORQ _mu(rpState), rCu
350
351	XORQ _sa(rpState), rCa
352	XORQ _se(rpState), rCe
353	MOVQ _si(rpState), rDi
354	MOVQ _so(rpState), rDo
355	XORQ _su(rpState), rCu
356
357	mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
358	mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
359	mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
360	mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
361	mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
362	mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
363	mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
364	mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
365	mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
366	mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
367	mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
368	mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
369	mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
370	mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
371	mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
372	mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
373	mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
374	mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
375	mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
376	mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
377	mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
378	mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
379	mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
380	mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP)
381
382	// Revert the internal state to the user state
383	NOTQ _be(rpState)
384	NOTQ _bi(rpState)
385	NOTQ _go(rpState)
386	NOTQ _ki(rpState)
387	NOTQ _mi(rpState)
388	NOTQ _sa(rpState)
389
390	RET
391