source: mainline/uspace/app/pcc/arch/powerpc/table.c@ 5974661

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 5974661 was a7de7182, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

Added pcc source tree (contents of pcc-1.0.0.tgz)

  • Property mode set to 100644
File size: 38.6 KB
Line 
1/* $Id: table.c,v 1.18 2010/11/26 17:06:31 ragge Exp $ */
2/*-
3 * Copyright (c) 2007 Gregory McGarry <g.mcgarry@ieee.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18/*
19 * A template has five logical sections:
20 *
21 * 1) subtree (operator); goal to achieve (cookie)
22 * 2) left node descendent of operator (node class; type)
23 * 3) right node descendent of operator (node class; type)
24 * 4) resource requirements (number of scratch registers);
25 * subtree rewriting rule
26 * 5) emitted instructions
27 */
28
29#include "pass2.h"
30
31#define TUWORD TUNSIGNED|TULONG
32#define TSWORD TINT|TLONG
33#define TWORD TUWORD|TSWORD
34
35#if defined(ELFABI)
36#define HA16(x) # x "@ha"
37#define LO16(x) # x "@l"
38#elif defined(MACHOABI)
39#define HA16(x) "ha16(" # x ")"
40#define LO16(x) "lo16(" # x ")"
41#else
42#error undefined ABI
43#endif
44
45struct optab table[] = {
46/* First entry must be an empty entry */
47{ -1, FOREFF, SANY, TANY, SANY, TANY, 0, 0, "", },
48
49/* PCONVs are not necessary */
50{ PCONV, INAREG,
51 SAREG, TWORD|TPOINT,
52 SAREG, TWORD|TPOINT,
53 0, RLEFT,
54 COM "pointer conversion\n", },
55
56/*
57 * Conversions of integral types
58 */
59
60{ SCONV, INAREG,
61 SAREG, TCHAR|TUCHAR,
62 SAREG, TCHAR|TUCHAR,
63 0, RLEFT,
64 COM "convert between (u)char and (u)char\n", },
65
66{ SCONV, INAREG,
67 SAREG, TSHORT|TUSHORT,
68 SAREG, TSHORT|TUSHORT,
69 0, RLEFT,
70 COM "convert between (u)short and (u)short\n", },
71
72{ SCONV, INAREG,
73 SAREG, TPOINT|TWORD,
74 SAREG, TWORD,
75 0, RLEFT,
76 COM "convert a pointer/word to an int\n", },
77
78{ SCONV, INAREG,
79 SAREG, TPOINT,
80 SAREG, TPOINT,
81 0, RLEFT,
82 COM "convert pointers\n", },
83
84{ SCONV, INBREG,
85 SBREG, TLONGLONG|TULONGLONG,
86 SBREG, TLONGLONG|TULONGLONG,
87 0, RLEFT,
88 COM "convert (u)longlong to (u)longlong\n", },
89
90{ SCONV, INAREG,
91 SAREG, TCHAR,
92 SAREG, TSHORT|TSWORD,
93 NASL|NAREG, RESC1,
94 " extsb A1,AL" COM "convert char to short/int\n", },
95
96{ SCONV, INAREG,
97 SAREG, TUCHAR,
98 SAREG, TSHORT|TSWORD,
99 0, RLEFT,
100 COM "convert uchar to short/int\n", },
101
102{ SCONV, INAREG,
103 SAREG, TUCHAR,
104 SAREG, TUSHORT|TUWORD,
105 0, RLEFT,
106 COM "convert uchar to ushort/unsigned\n", },
107
108/* XXX is this necessary? */
109{ SCONV, INAREG,
110 SAREG, TCHAR,
111 SAREG, TUSHORT|TUWORD,
112 NSPECIAL|NAREG|NASL, RESC1,
113 " extsb A1,AL" COM "convert char to ushort/unsigned\n", },
114
115{ SCONV, INBREG | FEATURE_BIGENDIAN,
116 SAREG, TUCHAR|TUSHORT|TUNSIGNED,
117 SBREG, TLONGLONG|TULONGLONG,
118 NBREG, RESC1,
119 " mr U1,AL" COM "convert uchar/ushort/uint to (u)longlong\n"
120 " li A1,0\n", },
121
122{ SCONV, INBREG,
123 SAREG, TUCHAR|TUSHORT|TUNSIGNED,
124 SBREG, TLONGLONG|TULONGLONG,
125 NBREG, RESC1,
126 " mr A1,AL" COM "convert uchar/ushort/uint to (u)longlong\n"
127 " li U1,0\n", },
128
129{ SCONV, INBREG | FEATURE_BIGENDIAN,
130 SAREG, TCHAR|TSHORT|TSWORD,
131 SBREG, TULONGLONG|TLONGLONG,
132 NBREG, RESC1,
133 " mr U1,AL" COM "convert char/short/int to ulonglong\n"
134 " srawi A1,AL,31\n", },
135
136{ SCONV, INBREG,
137 SAREG, TCHAR|TSHORT|TSWORD,
138 SBREG, TULONGLONG|TLONGLONG,
139 NBREG, RESC1,
140 " mr A1,AL" COM "convert char/short/int to ulonglong\n"
141 " srawi U1,AL,31\n", },
142
143{ SCONV, INAREG,
144 SAREG, TSHORT|TUSHORT,
145 SAREG, TCHAR|TUCHAR,
146 NSPECIAL|NAREG|NASL, RESC1,
147 " andi. A1,AL,255" COM "convert (u)short to (u)char\n", },
148
149/* XXX is this really necessary? */
150{ SCONV, INAREG,
151 SAREG, TSHORT,
152 SAREG, TWORD,
153 NAREG|NASL, RESC1,
154 " extsh A1,AL" COM "convert short to int\n", },
155
156{ SCONV, INAREG,
157 SAREG, TUSHORT,
158 SAREG, TWORD,
159 NSPECIAL|NAREG|NASL, RESC1,
160 COM "convert ushort to word\n", },
161
162{ SCONV, INAREG,
163 SAREG, TWORD,
164 SAREG, TCHAR|TUCHAR,
165 NAREG|NASL|NSPECIAL, RESC1,
166 " andi. A1,AL,255" COM "convert (u)int to (u)char\n", },
167
168{ SCONV, INAREG,
169 SAREG, TWORD,
170 SAREG, TSHORT|TUSHORT,
171 NAREG|NASL|NSPECIAL, RESC1,
172 " andi. A1,AL,65535" COM "convert (u)int to (u)short\n", },
173
174{ SCONV, INAREG,
175 SBREG, TLONGLONG|TULONGLONG,
176 SAREG, TCHAR|TUCHAR,
177 NAREG|NSPECIAL, RESC1,
178 " andi. A1,AL,255" COM "(u)longlong to (u)char\n", },
179
180{ SCONV, INAREG,
181 SBREG, TLONGLONG|TULONGLONG,
182 SAREG, TSHORT|TUSHORT,
183 NAREG|NSPECIAL, RESC1,
184 " andi. A1,AL,65535" COM "(u)longlong to (u)short\n", },
185
186{ SCONV, INAREG,
187 SBREG, TLONGLONG|TULONGLONG,
188 SAREG, TWORD,
189 NAREG, RESC1,
190 " mr A1,AL" COM "convert (u)longlong to (u)int/long\n", },
191
192/* conversions on load from memory */
193
194{ SCONV, INAREG,
195 SOREG, TCHAR,
196 SAREG, TWORD,
197 NASL|NAREG|NSPECIAL, RESC1,
198 " lbz A1,AL" COM "convert char to int/long\n"
199 " extsb A1,A1\n", },
200
201{ SCONV, INAREG,
202 SOREG, TUCHAR,
203 SAREG, TWORD,
204 NASL|NAREG|NSPECIAL, RESC1,
205 " lbz A1,AL" COM "convert uchar to int/long\n", },
206
207{ SCONV, INAREG,
208 SOREG, TSHORT,
209 SAREG, TWORD,
210 NASL|NAREG|NSPECIAL, RESC1,
211 " lha A1,AL" COM "convert short to int/long\n", },
212
213{ SCONV, INAREG,
214 SOREG, TUSHORT,
215 SAREG, TWORD,
216 NASL|NAREG|NSPECIAL, RESC1,
217 " lhz A1,AL" COM "convert ushort to int/long\n", },
218
219{ SCONV, INAREG,
220 SOREG, TLONGLONG|TULONGLONG,
221 SAREG, TCHAR|TUCHAR,
222 NAREG|NSPECIAL, RESC1,
223 " lwz A1,AL" COM "(u)longlong to (u)char\n"
224 " andi. A1,A1,255\n", },
225
226{ SCONV, INAREG,
227 SOREG, TLONGLONG|TULONGLONG,
228 SAREG, TSHORT|TUSHORT,
229 NAREG|NSPECIAL, RESC1,
230 " lwz A1,AL" COM "(u)longlong to (u)short\n"
231 " andi. A1,A1,65535\n", },
232
233{ SCONV, INAREG,
234 SOREG, TLONGLONG|TULONGLONG,
235 SAREG, TWORD,
236 NAREG|NSPECIAL, RESC1,
237 " lwz A1,AL" COM "(u)longlong to (u)int\n", },
238
239/*
240 * floating-point conversions
241 *
242 * There doesn't appear to be an instruction to move values between
243 * the floating-point registers and the general-purpose registers.
244 * So values are bounced into memory...
245 */
246
247{ SCONV, INCREG | FEATURE_HARDFLOAT,
248 SCREG, TFLOAT,
249 SCREG, TDOUBLE|TLDOUBLE,
250 0, RLEFT,
251 COM "convert float to (l)double\n", },
252
253/* soft-float */
254{ SCONV, INBREG,
255 SAREG, TFLOAT,
256 SBREG, TDOUBLE|TLDOUBLE,
257 NSPECIAL|NBREG, RESC1,
258 "ZF", },
259
260{ SCONV, INCREG | FEATURE_HARDFLOAT,
261 SCREG, TDOUBLE|TLDOUBLE,
262 SCREG, TFLOAT,
263 NCREG, RESC1,
264 " frsp A1,AL" COM "convert (l)double to float\n", },
265
266/* soft-float */
267{ SCONV, INAREG,
268 SBREG, TDOUBLE|TLDOUBLE,
269 SAREG, TFLOAT,
270 NSPECIAL|NAREG, RESC1,
271 "ZF", },
272
273{ SCONV, INCREG | FEATURE_HARDFLOAT,
274 SCREG, TDOUBLE|TLDOUBLE,
275 SCREG, TDOUBLE|TLDOUBLE,
276 0, RLEFT,
277 COM "convert (l)double to (l)double\n", },
278
279/* soft-float */
280{ SCONV, INBREG,
281 SBREG, TDOUBLE|TLDOUBLE,
282 SBREG, TDOUBLE|TLDOUBLE,
283 0, RLEFT,
284 COM "convert (l)double to (l)double (soft-float)\n", },
285
286{ SCONV, INCREG | FEATURE_HARDFLOAT,
287 SAREG, TWORD,
288 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
289 2*NCREG|NAREG, RESC3,
290 "ZC", },
291
292/* soft-float */
293{ SCONV, INAREG,
294 SAREG, TWORD,
295 SAREG, TFLOAT,
296 NSPECIAL|NAREG, RESC1,
297 "ZF", },
298
299/* soft-float */
300{ SCONV, INBREG,
301 SAREG, TWORD,
302 SBREG, TDOUBLE|TLDOUBLE,
303 NSPECIAL|NBREG, RESC1,
304 "ZF", },
305
306{ SCONV, INAREG | FEATURE_HARDFLOAT,
307 SOREG, TFLOAT|TDOUBLE|TLDOUBLE,
308 SAREG, TWORD,
309 2*NCREG|NAREG, RESC1,
310 "ZC", },
311
312/* soft-float */
313{ SCONV, INAREG,
314 SAREG, TFLOAT,
315 SAREG, TWORD,
316 NSPECIAL|NAREG, RESC1,
317 "ZF", },
318
319/* soft-float */
320{ SCONV, INAREG,
321 SBREG, TDOUBLE|TLDOUBLE,
322 SAREG, TWORD,
323 NSPECIAL|NAREG, RESC1,
324 "ZF", },
325
326{ SCONV, INCREG | FEATURE_HARDFLOAT,
327 SBREG, TLONGLONG|TULONGLONG,
328 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
329 NSPECIAL|NCREG, RESC1,
330 "ZF", },
331
332/* soft-float */
333{ SCONV, INAREG,
334 SBREG, TLONGLONG|TULONGLONG,
335 SAREG, TFLOAT,
336 NSPECIAL|NAREG, RESC1,
337 "ZF", },
338
339/* soft-float */
340{ SCONV, INBREG,
341 SBREG, TLONGLONG|TULONGLONG,
342 SBREG, TDOUBLE|TLDOUBLE,
343 NSPECIAL|NBREG, RESC1,
344 "ZF", },
345
346{ SCONV, INBREG | FEATURE_HARDFLOAT,
347 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
348 SBREG, TLONGLONG|TULONGLONG,
349 NSPECIAL|NBREG, RESC1,
350 "ZF", },
351
352/* soft-float */
353{ SCONV, INBREG,
354 SAREG, TFLOAT,
355 SBREG, TLONGLONG|TULONGLONG,
356 NSPECIAL|NBREG, RESC1,
357 "ZF", },
358
359/* soft-float */
360{ SCONV, INBREG,
361 SBREG, TDOUBLE|TLDOUBLE,
362 SBREG, TLONGLONG|TULONGLONG,
363 NSPECIAL|NBREG, RESC1,
364 "ZF", },
365
366/*
367 * Subroutine calls.
368 */
369
370{ CALL, FOREFF,
371 SCON, TANY,
372 SANY, TANY,
373 0, 0,
374 " bl CL" COM "call (args, no result) to scon\n", },
375
376{ UCALL, FOREFF,
377 SCON, TANY,
378 SANY, TANY,
379 0, 0,
380 " bl CL" COM "call (no args, no result) to scon\n", },
381
382{ CALL, INAREG,
383 SCON, TANY,
384 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
385 NAREG|NASL, RESC1, /* should be 0 */
386 " bl CL" COM "call (args, result) to scon\n", },
387
388{ UCALL, INAREG,
389 SCON, TANY,
390 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
391 NAREG|NASL, RESC1, /* should be 0 */
392 " bl CL" COM "call (no args, result) to scon\n", },
393
394{ CALL, INBREG,
395 SCON, TANY,
396 SBREG, TLONGLONG|TULONGLONG,
397 NBREG|NBSL, RESC1, /* should be 0 */
398 " bl CL" COM "call (args, result) to scon\n", },
399
400{ UCALL, INBREG,
401 SCON, TANY,
402 SBREG, TLONGLONG|TULONGLONG,
403 NBREG|NBSL, RESC1, /* should be 0 */
404 " bl CL" COM "call (no args, result) to scon\n", },
405
406{ CALL, INCREG | FEATURE_HARDFLOAT,
407 SCON, TANY,
408 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
409 NCREG|NCSL, RESC1, /* should be 0 */
410 " bl CL" COM "call (args, result) to scon\n", },
411
412{ UCALL, INCREG | FEATURE_HARDFLOAT,
413 SCON, TANY,
414 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
415 NCREG|NCSL, RESC1, /* should be 0 */
416 " bl CL" COM "call (no args, result) to scon\n", },
417
418{ CALL, INAREG,
419 SCON, TANY,
420 SAREG, TFLOAT,
421 NAREG|NASL, RESC1, /* should be 0 */
422 " bl CL" COM "call (args, result) to scon\n", },
423
424{ UCALL, INAREG,
425 SCON, TANY,
426 SAREG, TFLOAT,
427 NAREG|NASL, RESC1, /* should be 0 */
428 " bl CL" COM "call (no args, result) to scon\n", },
429
430{ CALL, INBREG,
431 SCON, TANY,
432 SBREG, TDOUBLE|TLDOUBLE,
433 NBREG|NBSL, RESC1, /* should be 0 */
434 " bl CL" COM "call (args, result) to scon\n", },
435
436{ UCALL, INBREG,
437 SCON, TANY,
438 SBREG, TDOUBLE|TLDOUBLE,
439 NBREG|NBSL, RESC1, /* should be 0 */
440 " bl CL" COM "call (no args, result) to scon\n", },
441
442
443
444{ CALL, FOREFF,
445 SAREG, TANY,
446 SANY, TANY,
447 0, 0,
448 " mtctr AL" COM "call (args, no result) to reg\n"
449 " bctrl\n", },
450
451{ UCALL, FOREFF,
452 SAREG, TANY,
453 SANY, TANY,
454 0, 0,
455 " mtctr AL" COM "call (no args, no result) to reg\n"
456 " bctrl\n", },
457
458{ CALL, INAREG,
459 SAREG, TANY,
460 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
461 NAREG, RESC1,
462 " mtctr AL" COM "call (args, result) to reg\n"
463 " bctrl\n", },
464
465{ UCALL, INAREG,
466 SAREG, TANY,
467 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
468 NAREG, RESC1,
469 " mtctr AL" COM "call (no args, result) to reg\n"
470 " bctrl\n", },
471
472/* struct return */
473{ USTCALL, FOREFF,
474 SCON, TANY,
475 SANY, TANY,
476 0, 0,
477 " bl CL\n", },
478
479{ USTCALL, INAREG,
480 SCON, TANY,
481 SANY, TANY,
482 NAREG|NASL, RESC1, /* should be 0 */
483 " bl CL\n", },
484
485{ USTCALL, INAREG,
486 SAREG, TANY,
487 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
488 NAREG, RESC1,
489 " mtctr AL"
490 " bctrl\n", },
491
492{ STCALL, FOREFF,
493 SCON, TANY,
494 SANY, TANY,
495 0, 0,
496 " bl CL\n", },
497
498{ STCALL, INAREG,
499 SCON, TANY,
500 SANY, TANY,
501 NAREG|NASL, RESC1, /* should be 0 */
502 " bl CL\n", },
503
504{ STCALL, INAREG,
505 SAREG, TANY,
506 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
507 NAREG|NASL, RESC1,
508 " mtctr AL"
509 " bctrl\n", },
510
511/*
512 * The next rules handle all binop-style operators.
513 */
514
515/* XXX AL cannot be R0 */
516{ PLUS, INAREG,
517 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
518 SSCON, TANY,
519 NAREG|NASL|NSPECIAL, RESC1,
520 " addi A1,AL,AR" COM "addition of constant\n", },
521
522/* XXX AL cannot be R0 */
523{ PLUS, INAREG|FORCC,
524 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
525 SSCON, TANY,
526 NAREG|NASL|NSPECIAL, RESC1|RESCC,
527 " addic. A1,AL,AR" COM "addition of constant\n", },
528
529{ PLUS, INBREG,
530 SBREG, TLONGLONG|TULONGLONG,
531 SSCON, TANY,
532 NBREG|NBSL, RESC1,
533 " addic A1,AL,AR" COM "64-bit addition of constant\n"
534 " addze U1,UL\n", },
535
536{ PLUS, INAREG,
537 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
538 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
539 NAREG|NASL|NSPECIAL, RESC1,
540 " add A1,AL,AR\n", },
541
542{ PLUS, INAREG|FORCC,
543 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
544 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
545 NAREG|NASL|NSPECIAL, RESC1|RESCC,
546 " add. A1,AL,AR\n", },
547
548{ PLUS, INBREG,
549 SBREG, TLONGLONG|TULONGLONG,
550 SBREG, TLONGLONG|TULONGLONG,
551 NBREG|NBSL, RESC1,
552 " addc A1,AL,AR" COM "64-bit add\n"
553 " adde U1,UL,UR\n", },
554
555{ PLUS, INCREG | FEATURE_HARDFLOAT,
556 SCREG, TFLOAT,
557 SCREG, TFLOAT,
558 NCREG, RESC1,
559 " fadds A1,AL,AR" COM "float add\n", },
560
561{ PLUS, INAREG,
562 SAREG, TFLOAT,
563 SAREG, TFLOAT,
564 NSPECIAL|NAREG, RESC1,
565 "ZF", },
566
567{ PLUS, INCREG | FEATURE_HARDFLOAT,
568 SCREG, TDOUBLE|TLDOUBLE,
569 SCREG, TDOUBLE|TLDOUBLE,
570 NCREG|NCSL, RESC1,
571 " fadd A1,AL,AR" COM "(l)double add\n", },
572
573/* soft-float */
574{ PLUS, INBREG,
575 SBREG, TDOUBLE|TLDOUBLE,
576 SBREG, TDOUBLE|TLDOUBLE,
577 NSPECIAL|NBREG|NBSL, RESC1,
578 "ZF", },
579
580{ MINUS, INAREG,
581 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
582 SSCON, TANY,
583 NAREG|NASL|NSPECIAL, RESC1,
584 " addi A1,AL,-AR\n", },
585
586{ MINUS, INAREG|FORCC,
587 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
588 SSCON, TANY,
589 NAREG|NASL|NSPECIAL, RESC1|RESCC,
590 " addic. A1,AL,-AR\n", },
591
592{ MINUS, INBREG,
593 SBREG, TLONGLONG|TULONGLONG,
594 SSCON, TANY,
595 NBREG|NBSL, RESC1,
596 " addic A1,AL,-AR\n"
597 " addme U1,UL\n", },
598
599{ MINUS, INAREG,
600 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
601 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
602 NAREG|NASL|NSPECIAL, RESC1,
603 " subf A1,AR,AL\n", },
604
605{ MINUS, INAREG|FORCC,
606 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
607 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
608 NAREG|NASL|NSPECIAL, RESC1|RESCC,
609 " subf. A1,AR,AL\n", },
610
611{ MINUS, INBREG,
612 SBREG, TLONGLONG|TULONGLONG,
613 SBREG, TLONGLONG|TULONGLONG,
614 NBREG|NBSL, RESC1,
615 " subfc A1,AR,AL" COM "64-bit subtraction\n"
616 " subfe U1,UR,UL\n", },
617
618{ MINUS, INCREG | FEATURE_HARDFLOAT,
619 SCREG, TFLOAT,
620 SCREG, TFLOAT,
621 NCREG, RESC1,
622 " fsubs A1,AL,AR\n", },
623
624{ MINUS, INAREG,
625 SAREG, TFLOAT,
626 SAREG, TFLOAT,
627 NSPECIAL|NAREG, RESC1,
628 "ZF", },
629
630{ MINUS, INCREG | FEATURE_HARDFLOAT,
631 SCREG, TDOUBLE|TLDOUBLE,
632 SCREG, TDOUBLE|TLDOUBLE,
633 NCREG|NCSL, RESC1,
634 " fsub A1,AL,AR" COM "(l)double sub\n", },
635
636/* soft-float */
637{ MINUS, INBREG,
638 SBREG, TDOUBLE|TLDOUBLE,
639 SBREG, TDOUBLE|TLDOUBLE,
640 NSPECIAL|NBREG|NBSL, RESC1,
641 "ZF", },
642
643
644/*
645 * The next rules handle all shift operators.
646 */
647
648{ LS, INAREG,
649 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
650 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
651 NAREG|NASL, RESC1,
652 " slw A1,AL,AR" COM "left shift\n", },
653
654{ LS, INAREG|FORCC,
655 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
656 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
657 NAREG|NASL, RESC1,
658 " slw. A1,AL,AR" COM "left shift\n", },
659
660{ LS, INAREG,
661 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
662 SCON, TANY,
663 NAREG|NASL, RESC1,
664 " slwi A1,AL,AR" COM "left shift by constant\n", },
665
666{ LS, INAREG|FORCC,
667 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
668 SCON, TANY,
669 NAREG|NASL, RESC1,
670 " slwi. A1,AL,AR" COM "left shift by constant\n", },
671
672{ LS, INBREG,
673 SBREG, TLONGLONG|TULONGLONG,
674 SCON, TANY,
675 NBREG, RESC1,
676 "ZO", },
677
678{ LS, INBREG,
679 SBREG, TLONGLONG|TULONGLONG,
680 SAREG, TANY,
681 NSPECIAL|NBREG, RESC1,
682 "ZE", },
683
684{ RS, INAREG,
685 SAREG, TUWORD|TUSHORT|TUCHAR,
686 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
687 NAREG|NASL, RESC1,
688 " srw A1,AL,AR" COM "right shift\n", },
689
690{ RS, INAREG,
691 SAREG, TSWORD|TSHORT|TCHAR,
692 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
693 NAREG|NASL, RESC1,
694 " sraw A1,AL,AR" COM "arithmetic right shift\n", },
695
696{ RS, INAREG|FORCC,
697 SAREG, TUWORD|TUSHORT|TUCHAR,
698 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
699 NAREG|NASL, RESC1,
700 " srw. A1,AL,AR" COM "right shift\n", },
701
702{ RS, INAREG|FORCC,
703 SAREG, TSWORD|TSHORT|TCHAR,
704 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
705 NAREG|NASL, RESC1,
706 " sraw. A1,AL,AR" COM "arithmetic right shift\n", },
707
708{ RS, INAREG,
709 SAREG, TUWORD|TUSHORT|TUCHAR,
710 SCON, TANY,
711 NAREG|NASL, RESC1,
712 " srwi A1,AL,AR" COM "right shift by constant\n", },
713
714{ RS, INAREG,
715 SAREG, TSWORD|TSHORT|TCHAR,
716 SCON, TANY,
717 NAREG|NASL, RESC1,
718 " srawi A1,AL,AR" COM "arithmetic right shift by constant\n", },
719
720{ RS, INAREG|FORCC,
721 SAREG, TUWORD|TUSHORT|TUCHAR,
722 SCON, TANY,
723 NAREG|NASL, RESC1,
724 " srwi. A1,AL,AR" COM "right shift by constant\n", },
725
726{ RS, INAREG|FORCC,
727 SAREG, TSWORD|TSHORT|TCHAR,
728 SCON, TANY,
729 NAREG|NASL, RESC1,
730 " srawi. A1,AL,AR" COM "right shift by constant\n", },
731
732{ RS, INBREG,
733 SBREG, TLONGLONG|TULONGLONG,
734 SCON, TANY,
735 NBREG, RESC1,
736 "ZO" },
737
738{ RS, INBREG,
739 SBREG, TLONGLONG|TULONGLONG,
740 SAREG, TANY,
741 NSPECIAL|NBREG, RESC1,
742 "ZE", },
743
744/*
745 * The next rules takes care of assignments. "=".
746 */
747
748{ ASSIGN, FOREFF|INAREG,
749 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
750 SSCON, TANY,
751 0, RDEST,
752 " li AL,AR\n", },
753
754{ ASSIGN, FOREFF|INBREG,
755 SBREG, TLONGLONG|TULONGLONG,
756 SSCON, TANY,
757 0, RDEST,
758 " li AL,AR\n"
759 " li UL,UR\n", },
760
761{ ASSIGN, FOREFF|INAREG,
762 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
763 SCON, TANY,
764 0, RDEST,
765 " lis AL," HA16(AR) "\n"
766 " addi AL,AL," LO16(AR) "\n", },
767
768{ ASSIGN, FOREFF|INBREG,
769 SBREG, TLONGLONG|TULONGLONG,
770 SCON, TANY,
771 0, RDEST,
772 " lis AL," HA16(AR) "\n"
773 " addi AL,AL," LO16(AR) "\n"
774 " lis UL," HA16(UR) "\n"
775 " addi UL,UL," LO16(UR) "\n", },
776
777{ ASSIGN, FOREFF|INAREG,
778 SAREG, TWORD|TPOINT,
779 SOREG, TWORD|TPOINT,
780 NSPECIAL, RDEST,
781 " lwz AL,AR" COM "assign oreg to reg\n", },
782
783{ ASSIGN, FOREFF|INAREG,
784 SAREG, TWORD|TPOINT,
785 SNAME, TWORD|TPOINT,
786 NSPECIAL, RDEST,
787 " lis AL," HA16(AR) COM "assign sname to reg\n"
788 " lwz AL," LO16(AR) "(AL)\n", },
789
790{ ASSIGN, FOREFF|INBREG,
791 SBREG, TLONGLONG|TULONGLONG,
792 SOREG, TLONGLONG|TULONGLONG,
793 NSPECIAL, RDEST,
794 " lwz AL,AR" COM "assign llong to reg\n"
795 " lwz UL,UR\n" },
796
797{ ASSIGN, FOREFF|INAREG,
798 SBREG, TLONGLONG|TULONGLONG,
799 SNAME, TLONGLONG|TULONGLONG,
800 NSPECIAL, RDEST,
801 " lis AL," HA16(AR) COM "assign 64-bit sname to reg\n"
802 " lwz AL," LO16(AR) "(AL)\n"
803 " lis UL," HA16(UR) "\n"
804 " lwz UL," LO16(UR) "(UL)\n", },
805
806{ ASSIGN, FOREFF|INBREG,
807 SBREG, TLONGLONG|TULONGLONG,
808 SOREG, TSWORD,
809 NSPECIAL, RDEST,
810 " lwz AL,AR" COM "load int/pointer into llong\n"
811 " srawi UL,AR,31\n" },
812
813{ ASSIGN, FOREFF|INBREG,
814 SBREG, TLONGLONG|TULONGLONG,
815 SOREG, TUNSIGNED|TPOINT,
816 NSPECIAL, RDEST,
817 " lwz AL,AR" COM "load uint/pointer into (u)llong\n"
818 " li UL,0\n" },
819
820{ ASSIGN, FOREFF|INAREG,
821 SAREG, TUCHAR,
822 SOREG, TUCHAR,
823 NSPECIAL, RDEST,
824 " lbz AL,AR\n", },
825
826{ ASSIGN, FOREFF|INAREG,
827 SAREG, TUCHAR,
828 SNAME, TUCHAR,
829 NSPECIAL, RDEST,
830 " lis AL," HA16(AR) COM "assign uchar sname to reg\n"
831 " lbz AL," LO16(AR) "(AL)\n", },
832
833{ ASSIGN, FOREFF|INAREG,
834 SAREG, TCHAR,
835 SOREG, TCHAR,
836 NSPECIAL, RDEST,
837 " lbz AL,AR\n"
838 " extsb AL,AL\n", },
839
840{ ASSIGN, FOREFF|INAREG,
841 SAREG, TCHAR,
842 SNAME, TCHAR,
843 NSPECIAL, RDEST,
844 " lis AL," HA16(AR) COM "assign char sname to reg\n"
845 " lbz AL," LO16(AR) "(AL)\n"
846 " extsb AL,AL\n", },
847
848{ ASSIGN, FOREFF|INAREG,
849 SAREG, TWORD|TPOINT,
850 SOREG, TSHORT,
851 NSPECIAL, RDEST,
852 " lha AL,AR\n", },
853
854{ ASSIGN, FOREFF|INAREG,
855 SAREG, TWORD|TPOINT,
856 SOREG, TUSHORT,
857 NSPECIAL, RDEST,
858 " lhz AL,AR\n", },
859
860{ ASSIGN, FOREFF|INAREG,
861 SAREG, TWORD,
862 SNAME, TSHORT,
863 NSPECIAL, RDEST,
864 " lis AL," HA16(AR) "\n"
865 " lha AL," LO16(AR) "(AL)\n", },
866
867{ ASSIGN, FOREFF|INAREG,
868 SAREG, TWORD,
869 SNAME, TUSHORT,
870 NSPECIAL, RDEST,
871 " lis AL," HA16(AR) "\n"
872 " lhz AL," LO16(AR) "(AL)\n", },
873
874{ ASSIGN, FOREFF|INAREG,
875 SOREG, TWORD|TPOINT,
876 SAREG, TWORD|TPOINT,
877 NSPECIAL, RDEST,
878 " stw AR,AL\n", },
879
880{ ASSIGN, FOREFF|INAREG,
881 SNAME, TWORD|TPOINT,
882 SAREG, TWORD|TPOINT,
883 NAREG|NSPECIAL, RDEST,
884 " lis A1," HA16(AL) COM "assign reg to sname\n"
885 " stw AR," LO16(AL) "(A1)\n", },
886
887{ ASSIGN, FOREFF|INBREG,
888 SOREG, TLONGLONG|TULONGLONG,
889 SBREG, TLONGLONG|TULONGLONG,
890 NSPECIAL, RDEST,
891 " stw AR,AL" COM "store 64-bit value\n"
892 " stw UR,UL\n", },
893
894{ ASSIGN, FOREFF|INBREG,
895 SNAME, TLONGLONG|TULONGLONG,
896 SBREG, TLONGLONG|TULONGLONG,
897 NBREG|NSPECIAL, RDEST,
898 " lis A1," HA16(AL) COM "assign reg to 64-bit sname\n"
899 " stw AR," LO16(AL) "(A1)\n"
900 " lis U1," HA16(UL) "\n"
901 " stw UR," LO16(UL) "(U1)\n", },
902
903{ ASSIGN, FOREFF|INAREG,
904 SOREG, TCHAR|TUCHAR,
905 SAREG, TCHAR|TUCHAR,
906 NSPECIAL, RDEST,
907 " stb AR,AL\n", },
908
909{ ASSIGN, FOREFF|INAREG,
910 SNAME, TCHAR|TUCHAR,
911 SAREG, TCHAR|TUCHAR,
912 NAREG|NSPECIAL, RDEST,
913 " lis A1," HA16(AL) "\n"
914 " stb AR," LO16(AL) "(A1)\n", },
915
916{ ASSIGN, FOREFF|INAREG,
917 SOREG, TSHORT|TUSHORT,
918 SAREG, TSHORT|TUSHORT,
919 NSPECIAL, RDEST,
920 " sth AR,AL\n", },
921
922{ ASSIGN, FOREFF|INAREG,
923 SNAME, TSHORT|TUSHORT,
924 SAREG, TSHORT|TUSHORT,
925 NAREG|NSPECIAL, RDEST,
926 " lis A1," HA16(AL) "\n"
927 " sth AR," LO16(AL) "(A1)\n", },
928
929{ ASSIGN, FOREFF|INAREG,
930 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
931 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
932 0, RDEST,
933 " mr AL,AR" COM "assign AR to AL\n", },
934
935{ ASSIGN, FOREFF|INBREG,
936 SBREG, TLONGLONG|TULONGLONG,
937 SBREG, TLONGLONG|TULONGLONG,
938 0, RDEST,
939 " mr AL,AR" COM "assign UR:AR to UL:AL\n"
940 " mr UL,UR\n", },
941
942{ ASSIGN, FOREFF|INAREG,
943 SFLD, TANY,
944 SAREG, TANY,
945 3*NAREG, RDEST,
946 " lis A3," HA16(M) COM "bit-field assignment\n"
947 " addi A3,A3," LO16(M) "\n"
948 " lwz A2,AL\n"
949 " slwi A1,AR,H\n"
950 " and A1,A1,A3\n"
951 " not A3,A3\n"
952 " and A2,A2,A3\n"
953 " or A2,A2,A1\n"
954 " stw A2,AL\n"
955 "F mr AD,AR\n"
956 "F slwi AD,AD,32-S\n"
957 "F srwi AD,AD,32-S\n", },
958
959{ STASG, INAREG|FOREFF,
960 SOREG|SNAME, TANY,
961 SAREG, TPTRTO|TANY,
962 NSPECIAL, RDEST,
963 "ZQ", },
964
965{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
966 SOREG, TFLOAT,
967 SCREG, TFLOAT,
968 0, RDEST,
969 " stfs AR,AL" COM "store float\n", },
970
971/* soft-float */
972{ ASSIGN, FOREFF|INAREG,
973 SOREG, TFLOAT,
974 SAREG, TFLOAT,
975 0, RDEST,
976 " stw AR,AL" COM "store float (soft-float)\n", },
977
978{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
979 SNAME, TFLOAT,
980 SCREG, TFLOAT,
981 NAREG, RDEST,
982 " lis A1," HA16(AL) "\n"
983 " stfs AR," LO16(AL) "(A1)\n", },
984
985/* soft-float */
986{ ASSIGN, FOREFF|INAREG,
987 SNAME, TFLOAT,
988 SAREG, TFLOAT,
989 NAREG, RDEST,
990 " lis A1," HA16(AL) "\n"
991 " stw AR," LO16(AL) "(A1)\n", },
992
993{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
994 SCREG, TFLOAT,
995 SOREG, TFLOAT,
996 0, RDEST,
997 " lfs AL,AR" COM "load float\n", },
998
999/* soft-float */
1000{ ASSIGN, FOREFF|INAREG,
1001 SAREG, TFLOAT,
1002 SOREG, TFLOAT,
1003 0, RDEST,
1004 " lwz AL,AR" COM "load float (soft-float)\n", },
1005
1006{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1007 SCREG, TFLOAT,
1008 SNAME, TFLOAT,
1009 NAREG, RDEST,
1010 " lis A1," HA16(AR) "\n"
1011 " lfs AL," LO16(AR) "(A1)\n", },
1012
1013/* soft-float */
1014{ ASSIGN, FOREFF|INAREG,
1015 SAREG, TFLOAT,
1016 SNAME, TFLOAT,
1017 NAREG, RDEST,
1018 " lis A1," HA16(AR) "\n"
1019 " lwz AL," LO16(AR) "(A1)\n", },
1020
1021{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1022 SCREG, TFLOAT,
1023 SCREG, TFLOAT,
1024 0, RDEST,
1025 " fmr AL,AR" COM "assign AR to AL\n", },
1026
1027/* soft-float */
1028{ ASSIGN, FOREFF|INAREG,
1029 SAREG, TFLOAT,
1030 SAREG, TFLOAT,
1031 0, RDEST,
1032 " mr AL,AR" COM "assign AR to AL\n", },
1033
1034{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1035 SOREG, TDOUBLE|TLDOUBLE,
1036 SCREG, TDOUBLE|TLDOUBLE,
1037 0, RDEST,
1038 " stfd AR,AL" COM "store (l)double\n", },
1039
1040/* soft-float */
1041{ ASSIGN, FOREFF|INBREG,
1042 SOREG, TDOUBLE|TLDOUBLE,
1043 SBREG, TDOUBLE|TLDOUBLE,
1044 0, RDEST,
1045 " stw AR,AL" COM "store (l)double (soft-float)\n"
1046 " stw UR,UL\n", },
1047
1048{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1049 SNAME, TDOUBLE|TLDOUBLE,
1050 SCREG, TDOUBLE|TLDOUBLE,
1051 NAREG, RDEST,
1052 " lis A1," HA16(AL) "\n"
1053 " stfd AR," LO16(AL) "(A1)\n", },
1054
1055/* soft-float */
1056{ ASSIGN, FOREFF|INBREG,
1057 SNAME, TDOUBLE|TLDOUBLE,
1058 SBREG, TDOUBLE|TLDOUBLE,
1059 NAREG, RDEST,
1060 " lis A1," HA16(AL) "\n"
1061 " stw AR," LO16(AL) "(A1)\n"
1062 " lis A1," HA16(UL) "\n"
1063 " stw UR," LO16(UL) "(A1)\n", },
1064
1065{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1066 SCREG, TDOUBLE|TLDOUBLE,
1067 SOREG, TDOUBLE|TLDOUBLE,
1068 0, RDEST,
1069 " lfd AL,AR" COM "load (l)double\n", },
1070
1071/* soft-float */
1072{ ASSIGN, FOREFF|INBREG,
1073 SBREG, TDOUBLE|TLDOUBLE,
1074 SOREG, TDOUBLE|TLDOUBLE,
1075 0, RDEST,
1076 " lwz AL,AR" COM "load (l)double (soft-float)\n"
1077 " lwz UL,UR\n", },
1078
1079{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1080 SCREG, TDOUBLE|TLDOUBLE,
1081 SNAME, TDOUBLE|TLDOUBLE,
1082 NAREG, RDEST,
1083 " lis A1," HA16(AR) "\n"
1084 " lfd AL," LO16(AR) "(A1)\n", },
1085
1086/* soft-float */
1087{ ASSIGN, FOREFF|INBREG,
1088 SBREG, TDOUBLE|TLDOUBLE,
1089 SNAME, TDOUBLE|TLDOUBLE,
1090 NAREG, RDEST,
1091 " lis A1," HA16(AR) "\n"
1092 " lwz AL," LO16(AR) "(A1)\n"
1093 " lis A1," HA16(UR) "\n"
1094 " lwz UL," LO16(UR) "(A1)\n", },
1095
1096{ ASSIGN, FOREFF|INCREG | FEATURE_HARDFLOAT,
1097 SCREG, TDOUBLE|TLDOUBLE,
1098 SCREG, TDOUBLE|TLDOUBLE,
1099 0, RDEST,
1100 " fmr AL,AR" COM "assign AR to AL\n", },
1101
1102/* soft-float */
1103{ ASSIGN, FOREFF|INBREG,
1104 SBREG, TDOUBLE|TLDOUBLE,
1105 SBREG, TDOUBLE|TLDOUBLE,
1106 0, RDEST,
1107 " mr AL,AR" COM "assign AR to AL\n"
1108 " mr UL,UR\n", },
1109
1110/*
1111 * DIV/MOD/MUL
1112 */
1113
1114{ DIV, INAREG,
1115 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1116 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1117 NAREG|NASL, RESC1,
1118 " divwu A1,AL,AR\n", },
1119
1120{ DIV, INAREG|FORCC,
1121 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1122 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1123 NAREG|NASL, RESC1|RESCC,
1124 " divwu. A1,AL,AR\n", },
1125
1126{ DIV, INAREG,
1127 SAREG, TWORD|TSHORT|TCHAR,
1128 SAREG, TWORD|TSHORT|TCHAR,
1129 NAREG|NASL, RESC1,
1130 " divw A1,AL,AR\n", },
1131
1132{ DIV, INAREG|FORCC,
1133 SAREG, TWORD|TSHORT|TCHAR,
1134 SAREG, TWORD|TSHORT|TCHAR,
1135 NAREG|NASL, RESC1|RESCC,
1136 " divw. A1,AL,AR\n", },
1137
1138{ DIV, INBREG,
1139 SBREG, TLONGLONG|TULONGLONG,
1140 SBREG, TLONGLONG|TULONGLONG,
1141 NSPECIAL|NBREG, RESC1,
1142 "ZE", },
1143
1144{ DIV, INCREG | FEATURE_HARDFLOAT,
1145 SCREG, TFLOAT,
1146 SCREG, TFLOAT,
1147 NCREG|NCSR, RESC1,
1148 " fdivs A1,AL,AR" COM "float divide\n", },
1149
1150/* soft-float */
1151{ DIV, INAREG,
1152 SAREG, TFLOAT,
1153 SAREG, TFLOAT,
1154 NSPECIAL|NAREG, RESC1,
1155 "ZF", },
1156
1157{ DIV, INCREG | FEATURE_HARDFLOAT,
1158 SCREG, TDOUBLE|TLDOUBLE,
1159 SCREG, TDOUBLE|TLDOUBLE,
1160 NCREG|NCSR, RESC1,
1161 " fdiv A1,AL,AR" COM "(l)double divide\n", },
1162
1163/* soft-float */
1164{ DIV, INBREG,
1165 SBREG, TDOUBLE|TLDOUBLE,
1166 SBREG, TDOUBLE|TLDOUBLE,
1167 NSPECIAL|NBREG, RESC1,
1168 "ZF", },
1169
1170{ MOD, INAREG,
1171 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1172 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1173 NAREG, RESC1,
1174 " divwu A1,AL,AR" COM "unsigned modulo\n"
1175 " mullw A1,A1,AR\n"
1176 " subf A1,A1,AL\n", },
1177
1178{ MOD, INAREG,
1179 SAREG, TWORD|TSHORT|TCHAR,
1180 SAREG, TWORD|TSHORT|TCHAR,
1181 NAREG, RESC1,
1182 " divw A1,AL,AR" COM "signed modulo\n"
1183 " mullw A1,A1,AR\n"
1184 " subf A1,A1,AL\n", },
1185
1186{ MOD, INBREG,
1187 SBREG, TLONGLONG|TULONGLONG,
1188 SBREG, TLONGLONG|TULONGLONG,
1189 NSPECIAL|NBREG, RESC1,
1190 "ZE", },
1191
1192{ MUL, INAREG,
1193 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1194 SSCON, TANY,
1195 NAREG|NASL, RESC1,
1196 " mulli A1,AL,AR\n", },
1197
1198{ MUL, INAREG|FORCC,
1199 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1200 SSCON, TANY,
1201 NAREG|NASL, RESC1|RESCC,
1202 " mulli. A1,AL,AR\n", },
1203
1204{ MUL, INAREG,
1205 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1206 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1207 NAREG|NASL, RESC1,
1208 " mullw A1,AL,AR\n", },
1209
1210{ MUL, INAREG|FORCC,
1211 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1212 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1213 NAREG|NASL, RESC1|RESCC,
1214 " mullw. A1,AL,AR\n", },
1215
1216{ MUL, INBREG,
1217 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1218 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1219 NBREG, RESC1,
1220 " mullw A1,AL,AR\n"
1221 " mulhw U1,AL,AR\n", },
1222
1223{ MUL, INBREG,
1224 SBREG, TLONGLONG|TULONGLONG,
1225 SBREG, TLONGLONG|TULONGLONG,
1226 NBREG, RESC1,
1227 " mullw A1,AL,AR\n"
1228 " mulhw U1,AL,AR\n", },
1229
1230{ MUL, INCREG | FEATURE_HARDFLOAT,
1231 SCREG, TFLOAT,
1232 SCREG, TFLOAT,
1233 NCREG|NCSR, RESC1,
1234 " fmuls A1,AL,AR" COM "float multiply\n", },
1235
1236/* soft-float */
1237{ MUL, INAREG,
1238 SAREG, TFLOAT,
1239 SAREG, TFLOAT,
1240 NSPECIAL|NAREG, RESC1,
1241 "ZF", },
1242
1243{ MUL, INCREG | FEATURE_HARDFLOAT,
1244 SCREG, TDOUBLE|TLDOUBLE,
1245 SCREG, TDOUBLE|TLDOUBLE,
1246 NCREG|NCSR, RESC1,
1247 " fmul A1,AL,AR" COM "(l)double multiply\n", },
1248
1249/* soft-float */
1250{ MUL, INBREG,
1251 SBREG, TDOUBLE|TLDOUBLE,
1252 SBREG, TDOUBLE|TLDOUBLE,
1253 NSPECIAL|NBREG, RESC1,
1254 "ZF", },
1255
1256/*
1257 * Indirection operators.
1258 */
1259
1260{ UMUL, INAREG,
1261 SANY, TANY,
1262 SOREG|SNAME, TWORD|TPOINT,
1263 NAREG|NSPECIAL, RESC1,
1264 " lwz A1,AL" COM "word load\n", },
1265
1266{ UMUL, INAREG,
1267 SANY, TANY,
1268 SOREG|SNAME, TCHAR,
1269 NAREG|NSPECIAL, RESC1,
1270 " lbz A1,AL" COM "char load\n"
1271 " extsb A1,A1\n", },
1272
1273{ UMUL, INAREG,
1274 SANY, TANY,
1275 SOREG|SNAME, TUCHAR,
1276 NAREG|NSPECIAL, RESC1,
1277 " lbz A1,AL" COM "uchar load\n", },
1278
1279{ UMUL, INAREG,
1280 SANY, TANY,
1281 SOREG|SNAME, TSHORT,
1282 NAREG|NSPECIAL, RESC1,
1283 " lha A1,AL" COM "short load\n", },
1284
1285{ UMUL, INAREG,
1286 SANY, TANY,
1287 SOREG|SNAME, TUSHORT,
1288 NAREG|NSPECIAL, RESC1,
1289 " lhz A1,AL" COM "ushort load\n", },
1290
1291{ UMUL, INBREG,
1292 SANY, TANY,
1293 SOREG|SNAME, TLONGLONG|TULONGLONG,
1294 NBREG, RESC1,
1295 " lwz A1,AL" COM "64-bit load\n"
1296 " lwz U1,UL\n", },
1297
1298{ UMUL, INCREG | FEATURE_HARDFLOAT,
1299 SANY, TANY,
1300 SOREG|SNAME, TFLOAT,
1301 NCREG, RESC1,
1302 " lfs A1,AL" COM "float load\n", },
1303
1304{ UMUL, INAREG,
1305 SANY, TANY,
1306 SOREG|SNAME, TFLOAT,
1307 NAREG, RESC1,
1308 " lwz A1,AL" COM "float load (soft-float)\n", },
1309
1310{ UMUL, INCREG | FEATURE_HARDFLOAT,
1311 SANY, TANY,
1312 SOREG|SNAME, TDOUBLE|TLDOUBLE,
1313 NCREG, RESC1,
1314 " lfd A1,AL" COM "(l)double load\n", },
1315
1316{ UMUL, INBREG,
1317 SANY, TANY,
1318 SOREG|SNAME, TDOUBLE|TLDOUBLE,
1319 NSPECIAL|NBREG, RESC1,
1320 " lwz A1,AL" COM "(l)double load (soft-float)\n"
1321 " lwz U1,UL\n", },
1322
1323#if 0
1324{ UMUL, INAREG,
1325 SANY, TANY,
1326 SAREG, TWORD|TPOINT,
1327 NAREG, RESC1,
1328 " lwz A1,(AL)" COM "word load\n", },
1329#endif
1330
1331/*
1332 * Logical/branching operators
1333 */
1334
1335/* compare with constant */
1336{ OPLOG, FORCC,
1337 SAREG, TSWORD|TSHORT|TCHAR,
1338 SSCON, TANY,
1339 0, RESCC,
1340 " cmpwi AL,AR\n", },
1341
1342/* compare with constant */
1343{ OPLOG, FORCC,
1344 SAREG, TUWORD|TPOINT|TUSHORT|TUCHAR,
1345 SSCON, TANY,
1346 0, RESCC,
1347 " cmplwi AL,AR\n", },
1348
1349/* compare with register */
1350{ OPLOG, FORCC,
1351 SAREG, TSWORD|TSHORT|TCHAR,
1352 SAREG, TSWORD|TSHORT|TCHAR,
1353 0, RESCC,
1354 " cmpw AL,AR\n", },
1355
1356/* compare with register */
1357{ OPLOG, FORCC,
1358 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1359 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1360 0, RESCC,
1361 " cmplw AL,AR\n", },
1362
1363/* compare with register */
1364{ OPLOG, FORCC,
1365 SBREG, TLONGLONG|TULONGLONG,
1366 SBREG, TLONGLONG|TULONGLONG,
1367 0, RESCC,
1368 "ZD", },
1369
1370/* compare with register */
1371{ OPLOG, FORCC | FEATURE_HARDFLOAT,
1372 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
1373 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
1374 0, RESCC,
1375 " fcmpu 0,AL,AR\n", },
1376
1377/* soft-float */
1378{ OPLOG, FORCC,
1379 SAREG, TFLOAT,
1380 SAREG, TFLOAT,
1381 NSPECIAL, RESCC,
1382 "ZF\n", },
1383
1384/* soft-float */
1385{ OPLOG, FORCC,
1386 SBREG, TDOUBLE|TLDOUBLE,
1387 SBREG, TDOUBLE|TLDOUBLE,
1388 NSPECIAL, RESCC,
1389 "ZF", },
1390
1391{ OPLOG, FORCC,
1392 SANY, TANY,
1393 SANY, TANY,
1394 REWRITE, 0,
1395 "diediedie!", },
1396
1397/* AND/OR/ER */
1398{ AND, INAREG,
1399 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1400 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1401 NAREG|NASL|NSPECIAL, RESC1|RESCC,
1402 " and A1,AL,AR\n", },
1403
1404{ AND, INAREG|FORCC,
1405 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1406 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1407 NAREG|NASL|NSPECIAL, RESC1,
1408 " and. A1,AL,AR\n", },
1409
1410/* AR must be positive */
1411{ AND, INAREG|FORCC,
1412 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1413 SPCON, TANY,
1414 NAREG|NASL|NSPECIAL, RESC1|RESCC,
1415 " andi. A1,AL,AR\n", },
1416
1417{ AND, INBREG,
1418 SBREG, TLONGLONG|TULONGLONG,
1419 SBREG, TLONGLONG|TULONGLONG,
1420 NBREG|NBSL, RESC1,
1421 " and A1,AL,AR" COM "64-bit and\n"
1422 " and U1,UL,UR\n" },
1423
1424{ AND, INBREG|FORCC,
1425 SBREG, TLONGLONG|TULONGLONG,
1426 SPCON, TANY,
1427 NBREG|NBSL, RESC1|RESCC,
1428 " andi. A1,AL,AR" COM "64-bit and with constant\n"
1429 " li U1,0\n" },
1430
1431{ OR, INAREG,
1432 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1433 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1434 NAREG|NASL|NSPECIAL, RESC1,
1435 " or A1,AL,AR\n", },
1436
1437{ OR, INAREG|FORCC,
1438 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1439 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1440 NAREG|NASL|NSPECIAL, RESC1|RESCC,
1441 " or. A1,AL,AR\n", },
1442
1443{ OR, INAREG,
1444 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1445 SPCON, TANY,
1446 NAREG|NASL, RESC1,
1447 " ori A1,AL,AR\n", },
1448
1449{ OR, INAREG|FORCC,
1450 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1451 SPCON, TANY,
1452 NAREG|NASL, RESC1|RESCC,
1453 " ori. A1,AL,AR\n", },
1454
1455{ OR, INBREG,
1456 SBREG, TLONGLONG|TULONGLONG,
1457 SBREG, TLONGLONG|TULONGLONG,
1458 NBREG|NBSL, RESC1,
1459 " or A1,AL,AR" COM "64-bit or\n"
1460 " or U1,UL,UR\n" },
1461
1462{ OR, INBREG,
1463 SBREG, TLONGLONG|TULONGLONG,
1464 SPCON, TANY,
1465 NBREG|NBSL, RESC1,
1466 " ori A1,AL,AR" COM "64-bit or with constant\n" },
1467
1468{ OR, INBREG|FORCC,
1469 SBREG, TLONGLONG|TULONGLONG,
1470 SPCON, TANY,
1471 NBREG|NBSL, RESC1|RESCC,
1472 " ori. A1,AL,AR" COM "64-bit or with constant\n" },
1473
1474{ ER, INAREG,
1475 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1476 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1477 NAREG|NASL|NSPECIAL, RESC1,
1478 " xor A1,AL,AR\n", },
1479
1480{ ER, INAREG|FORCC,
1481 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1482 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1483 NAREG|NASL|NSPECIAL, RESC1|RESCC,
1484 " xor. A1,AL,AR\n", },
1485
1486{ ER, INAREG,
1487 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1488 SPCON, TANY,
1489 NAREG|NASL|NSPECIAL, RESC1,
1490 " xori A1,AL,AR\n", },
1491
1492{ ER, INBREG,
1493 SBREG, TLONGLONG|TULONGLONG,
1494 SBREG, TLONGLONG|TULONGLONG,
1495 NBREG|NBSL, RESC1,
1496 " xor A1,AL,AR" COM "64-bit xor\n"
1497 " xor U1,UL,UR\n" },
1498
1499{ ER, INBREG,
1500 SBREG, TLONGLONG|TULONGLONG,
1501 SPCON, TANY,
1502 NBREG|NBSL, RESC1,
1503 " xori A1,AL,AR" COM "64-bit xor with constant\n" },
1504
1505/*
1506 * Jumps.
1507 */
1508{ GOTO, FOREFF,
1509 SCON, TANY,
1510 SANY, TANY,
1511 0, RNOP,
1512 " b LL\n", },
1513
1514{ GOTO, FOREFF,
1515 SAREG, TANY,
1516 SANY, TANY,
1517 0, RNOP,
1518 " mtctr AL\n"
1519 " bctr\n", },
1520
1521/*
1522 * Convert LTYPE to reg.
1523 */
1524
1525#if defined(ELFABI)
1526{ OPLTYPE, INAREG | FEATURE_PIC,
1527 SANY, TANY,
1528 SNAME, TANY,
1529 NAREG, RESC1,
1530 " lwz A1,AL" COM "elfabi pic load\n", },
1531#endif
1532
1533{ OPLTYPE, INBREG,
1534 SANY, TANY,
1535 SOREG, TLONGLONG|TULONGLONG,
1536 NBREG, RESC1,
1537 " lwz A1,AL" COM "load llong from memory\n"
1538 " lwz U1,UL\n", },
1539
1540{ OPLTYPE, INBREG,
1541 SANY, TANY,
1542 SNAME, TLONGLONG|TULONGLONG,
1543 NBREG, RESC1,
1544 " lis A1," HA16(AL) COM "load llong from sname\n"
1545 " lwz A1," LO16(AL) "(A1)\n"
1546 " lis U1," HA16(UL) "\n"
1547 " lwz U1," LO16(UL) "(U1)\n", },
1548
1549{ OPLTYPE, INAREG,
1550 SANY, TANY,
1551 SOREG, TWORD|TPOINT,
1552 NAREG, RESC1,
1553 " lwz A1,AL" COM "load word from memory\n", },
1554
1555{ OPLTYPE, INAREG,
1556 SANY, TANY,
1557 SNAME, TWORD|TPOINT,
1558 NAREG|NSPECIAL, RESC1,
1559 " lis A1," HA16(AL) COM "load word from sname\n"
1560 " lwz A1," LO16(AL) "(A1)\n", },
1561
1562{ OPLTYPE, INAREG,
1563 SANY, TANY,
1564 SOREG, TCHAR,
1565 NAREG, RESC1,
1566 " lbz A1,AL" COM "load char from memory\n"
1567 " extsb A1,A1\n", },
1568
1569{ OPLTYPE, INAREG,
1570 SANY, TANY,
1571 SNAME, TCHAR,
1572 NAREG|NSPECIAL, RESC1,
1573 " lis A1," HA16(AL) COM "load char from sname\n"
1574 " lbz A1," LO16(AL) "(A1)\n"
1575 " extsb A1,A1\n", },
1576
1577{ OPLTYPE, INAREG,
1578 SANY, TANY,
1579 SOREG, TUCHAR,
1580 NAREG, RESC1,
1581 " lbz A1,AL" COM "load uchar from memory\n", },
1582
1583{ OPLTYPE, INAREG,
1584 SANY, TANY,
1585 SNAME, TUCHAR,
1586 NAREG|NSPECIAL, RESC1,
1587 " lis A1," HA16(AL) COM "load uchar from sname\n"
1588 " lbz A1," LO16(AL) "(A1)\n", },
1589
1590/* load short from memory */
1591{ OPLTYPE, INAREG,
1592 SANY, TANY,
1593 SOREG, TSHORT,
1594 NAREG, RESC1,
1595 " lha A1,AL" COM "load short from memory\n", },
1596
1597{ OPLTYPE, INAREG,
1598 SANY, TANY,
1599 SOREG, TUSHORT,
1600 NAREG, RESC1,
1601 " lhz A1,AL" COM "load ushort from memory\n", },
1602
1603{ OPLTYPE, INAREG,
1604 SANY, TANY,
1605 SNAME, TSHORT,
1606 NAREG|NSPECIAL, RESC1,
1607 " lis A1," HA16(AL) COM "load short from sname\n"
1608 " lha A1," LO16(AL) "(A1)\n", },
1609
1610{ OPLTYPE, INAREG,
1611 SANY, TANY,
1612 SNAME, TUSHORT,
1613 NAREG|NSPECIAL, RESC1,
1614 " lis A1," HA16(AL) COM "load ushort from sname\n"
1615 " lhz A1," LO16(AL) "(A1)\n", },
1616
1617{ OPLTYPE, INAREG,
1618 SANY, TANY,
1619 SSCON, TANY,
1620 NAREG, RESC1,
1621 " li A1,AL" COM "load 16-bit constant\n", },
1622
1623{ OPLTYPE, INBREG,
1624 SANY, TANY,
1625 SSCON, TANY,
1626 NBREG, RESC1,
1627 " li A1,AL" COM "load 16-bit constant\n"
1628 " li U1,UL\n", },
1629
1630{ OPLTYPE, INAREG,
1631 SANY, TANY,
1632 SCON, TANY,
1633 NAREG|NASL, RESC1,
1634 " lis A1," HA16(AL) COM "load constant into register\n"
1635 " addi A1,A1," LO16(AL) "\n", },
1636
1637{ OPLTYPE, INBREG,
1638 SANY, TANY,
1639 SCON, TANY,
1640 NBREG, RESC1,
1641 " lis A1," HA16(AL) COM "load constant into register\n"
1642 " addi A1,A1," LO16(AL) "\n"
1643 " lis U1," HA16(UL) "\n"
1644 " addi U1,U1," LO16(UL) "\n", },
1645
1646{ OPLTYPE, INAREG,
1647 SANY, TANY,
1648 SAREG, TANY,
1649 NAREG, RESC1,
1650 " mr A1,AL" COM "load AL into A1\n" },
1651
1652{ OPLTYPE, INBREG,
1653 SANY, TANY,
1654 SBREG, TANY,
1655 NBREG, RESC1,
1656 " mr A1,AL" COM "load UL:AL into U1:A1\n"
1657 " mr U1,UL\n", },
1658
1659{ OPLTYPE, INCREG,
1660 SANY, TANY,
1661 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
1662 NCREG, RESC1,
1663 " fmr A1,AL" COM "load AL into A1\n", },
1664
1665{ OPLTYPE, INCREG | FEATURE_HARDFLOAT,
1666 SANY, TANY,
1667 SOREG, TFLOAT,
1668 NCREG, RESC1,
1669 " lfs A1,AL" COM "load float\n", },
1670
1671/* soft-float */
1672{ OPLTYPE, INAREG,
1673 SANY, TANY,
1674 SOREG, TFLOAT,
1675 NAREG, RESC1,
1676 " lwz A1,AL" COM "load float (soft-float)\n", },
1677
1678{ OPLTYPE, INCREG | FEATURE_HARDFLOAT,
1679 SANY, TANY,
1680 SNAME, TFLOAT,
1681 NCREG|NAREG, RESC2,
1682 " lis A1," HA16(AL) COM "load sname\n"
1683 " lfs A2," LO16(AL) "(A1)\n", },
1684
1685/* soft-float */
1686{ OPLTYPE, INAREG,
1687 SANY, TANY,
1688 SNAME, TFLOAT,
1689 NAREG, RESC1,
1690 " lis A1," HA16(AL) COM "load sname (soft-float)\n"
1691 " lwz A1," LO16(AL) "(A1)\n", },
1692
1693{ OPLTYPE, INCREG | FEATURE_HARDFLOAT,
1694 SANY, TANY,
1695 SOREG, TDOUBLE|TLDOUBLE,
1696 NCREG, RESC1,
1697 " lfd A1,AL" COM "load (l)double\n", },
1698
1699/* soft-float */
1700{ OPLTYPE, INBREG,
1701 SANY, TANY,
1702 SOREG, TDOUBLE|TLDOUBLE,
1703 NBREG, RESC1,
1704 " lwz A1,AL" COM "load (l)double (soft-float)\n"
1705 " lwz U1,UL\n", },
1706
1707{ OPLTYPE, INCREG | FEATURE_HARDFLOAT,
1708 SANY, TANY,
1709 SNAME, TDOUBLE|TLDOUBLE,
1710 NCREG|NAREG, RESC2,
1711 " lis A1," HA16(AL) COM "load sname\n"
1712 " lfd A2," LO16(AL) "(A1)\n", },
1713
1714{ OPLTYPE, INBREG,
1715 SANY, TANY,
1716 SNAME, TDOUBLE|TLDOUBLE,
1717 NBREG, RESC1,
1718 " lis A1," HA16(AL) COM "load sname (soft-float)\n"
1719 " lwz A1," LO16(AL) "(A1)\n"
1720 " lis U1," HA16(UL) "\n"
1721 " lwz U1," LO16(UL) "(U1)\n", },
1722
1723
1724/*
1725 * Negate a word.
1726 */
1727
1728{ UMINUS, INAREG,
1729 SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
1730 SANY, TANY,
1731 NAREG|NASL, RESC1,
1732 " neg A1,AL\n", },
1733
1734{ UMINUS, INBREG,
1735 SBREG, TLONGLONG|TULONGLONG,
1736 SANY, TANY,
1737 NBREG|NBSL, RESC1,
1738 " subfic A1,AL,0\n"
1739 " subfze U1,UL\n", },
1740
1741{ UMINUS, INCREG | FEATURE_HARDFLOAT,
1742 SCREG, TFLOAT|TDOUBLE|TLDOUBLE,
1743 SANY, TANY,
1744 NCREG|NCSL, RESC1,
1745 " fneg A1,AL\n", },
1746
1747{ UMINUS, INAREG,
1748 SAREG, TFLOAT,
1749 SANY, TANY,
1750 NAREG|NASL, RESC1,
1751 " xoris A1,AL,0x8000" COM "(soft-float)\n", },
1752
1753{ UMINUS, INBREG,
1754 SBREG, TDOUBLE|TLDOUBLE,
1755 SANY, TANY,
1756 NBREG|NBSL, RESC1,
1757 " xoris U1,UL,0x8000" COM "(soft-float)\n"
1758 " mr A1,AL\n", },
1759
1760{ COMPL, INAREG,
1761 SAREG, TWORD|TSHORT|TUSHORT|TCHAR|TUCHAR,
1762 SANY, TANY,
1763 NAREG|NASL, RESC1,
1764 " not A1,AL\n", },
1765
1766{ COMPL, INBREG,
1767 SBREG, TLONGLONG|TULONGLONG,
1768 SANY, TANY,
1769 NBREG|NBSL, RESC1,
1770 " not A1,AL\n"
1771 " not U1,UL\n", },
1772
1773/*
1774 * Arguments to functions.
1775 */
1776
1777#if 0
1778{ STARG, FOREFF,
1779 SAREG|SOREG|SNAME|SCON, TANY,
1780 SANY, TSTRUCT,
1781 NSPECIAL|NAREG, 0,
1782 "ZF", },
1783#endif
1784
1785# define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""
1786
1787{ UMUL, DF( UMUL ), },
1788
1789{ ASSIGN, DF(ASSIGN), },
1790
1791{ STASG, DF(STASG), },
1792
1793{ FLD, DF(FLD), },
1794
1795{ OPLEAF, DF(NAME), },
1796
1797/* { INIT, DF(INIT), }, */
1798
1799{ OPUNARY, DF(UMINUS), },
1800
1801{ OPANY, DF(BITYPE), },
1802
1803{ FREE, FREE, FREE, FREE, FREE, FREE, FREE, FREE, "help; I'm in trouble\n" },
1804};
1805
1806int tablesize = sizeof(table)/sizeof(table[0]);
Note: See TracBrowser for help on using the repository browser.