|
|
1.1 root 1: ;;- Machine description for GNU compiler
2: ;;- Elxsi Version
3: ;; Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
4: ;; This port done by Mike Stump <[email protected]> in 1988, and is the first
5: ;; 64 bit port of GNU CC.
6: ;; Based upon the VAX port.
7:
8: ;; This file is part of GNU CC.
9:
10: ;; GNU CC is free software; you can redistribute it and/or modify
11: ;; it under the terms of the GNU General Public License as published by
12: ;; the Free Software Foundation; either version 1, or (at your option)
13: ;; any later version.
14:
15: ;; GNU CC is distributed in the hope that it will be useful,
16: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: ;; GNU General Public License for more details.
19:
20: ;; You should have received a copy of the GNU General Public License
21: ;; along with GNU CC; see the file COPYING. If not, write to
22: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23:
24:
25: ;;- Instruction patterns. When multiple patterns apply,
26: ;;- the first one in the file is chosen.
27: ;;-
28: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
29: ;;-
30: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
31: ;;- updates for most instructions.
32:
33:
34: (define_insn ""
35: [(set (reg:SI 15)
36: (plus:SI (reg:SI 15)
37: (match_operand:SI 0 "general_operand" "g")))]
38: ""
39: "add.64\\t.sp,%0")
40:
41: (define_insn ""
42: [(set (reg:SI 15)
43: (plus:SI (match_operand:SI 0 "general_operand" "g")
44: (reg:SI 15)))]
45: ""
46: "add.64\\t.sp,%0")
47:
48: (define_insn ""
49: [(set (match_operand:SI 0 "register_operand" "r")
50: (plus:SI (reg:SI 15)
51: (match_operand:SI 1 "general_operand" "g")))]
52: ""
53: "ld.32\\t%0,.sp\;add.64\\t%0,%1")
54:
55: (define_insn ""
56: [(set (match_operand:SI 0 "register_operand" "r")
57: (plus:SI (match_operand:SI 1 "general_operand" "g")
58: (reg:SI 15)))]
59: ""
60: "ld.32\\t%0,.sp\;add.64\\t%0,%1")
61:
62: (define_insn ""
63: [(set (reg:SI 15)
64: (minus:SI (reg:SI 15)
65: (match_operand:SI 0 "general_operand" "g")))]
66: ""
67: "sub.64\\t.sp,%0")
68:
69: (define_insn ""
70: [(set (reg:SI 15)
71: (match_operand:SI 0 "general_operand" "rm"))]
72: ""
73: "ld.32\\t.sp,%0")
74:
75: (define_insn ""
76: [(set (match_operand:SI 0 "general_operand" "m,r")
77: (reg:SI 15))]
78: ""
79: "*
80: if (which_alternative == 0)
81: return \"st.32\\t.sp,%0\";
82: return \"ld.32\\t%0,.sp\";
83: ")
84:
85: ; tstdi is first test insn so that it is the one to match
86: ; a constant argument.
87:
88: (define_insn "tstdi"
89: [(set (cc0)
90: (match_operand:DI 0 "register_operand" "r"))]
91: ""
92: "*
93: extern rtx cmp_op0, cmp_op1;
94: cmp_op0=operands[0]; cmp_op1=0;
95: return \";\\ttstdi\\t%0\";
96: ")
97:
98: (define_insn "tstdf"
99: [(set (cc0)
100: (match_operand:DF 0 "register_operand" "r"))]
101: ""
102: "*
103: extern rtx cmp_op0, cmp_op1;
104: cmp_op0=operands[0]; cmp_op1=0;
105: return \";\\ttstdf\\t%0\";
106: ")
107:
108: (define_insn "tstsf"
109: [(set (cc0)
110: (match_operand:SF 0 "register_operand" "r"))]
111: ""
112: "*
113: extern rtx cmp_op0, cmp_op1;
114: cmp_op0=operands[0]; cmp_op1=0;
115: return \";\\ttstsf\\t%0\";
116: ")
117:
118: (define_insn "cmpdi"
119: [(set (cc0)
120: (compare (match_operand:DI 0 "register_operand" "r")
121: (match_operand:DI 1 "general_operand" "rm")))]
122: ""
123: "*
124: extern rtx cmp_op0, cmp_op1;
125: cmp_op0=operands[0]; cmp_op1=operands[1];
126: return \";\\tcmpdi\\t%0,%1\";
127: ")
128:
129: (define_insn "cmpdf"
130: [(set (cc0)
131: (compare (match_operand:DF 0 "register_operand" "r")
132: (match_operand:DF 1 "general_operand" "rm")))]
133: ""
134: "*
135: extern rtx cmp_op0, cmp_op1;
136: cmp_op0=operands[0]; cmp_op1=operands[1];
137: return \";\\tcmpdf\\t%0,%1\";
138: ")
139:
140: (define_insn "cmpsf"
141: [(set (cc0)
142: (compare (match_operand:SF 0 "register_operand" "r")
143: (match_operand:SF 1 "general_operand" "rm")))]
144: ""
145: "*
146: extern rtx cmp_op0, cmp_op1;
147: cmp_op0=operands[0]; cmp_op1=operands[1];
148: return \";\\tcmpsf\\t%0,%1\";
149: ")
150:
151: (define_insn ""
152: [(set (match_operand:DI 0 "register_operand" "=r")
153: (eq (match_operand:DI 1 "register_operand" "r")
154: (match_operand:DI 2 "general_operand" "g")))]
155: ""
156: "cmp.64\\t%0,%1,%2:eq")
157:
158: (define_insn ""
159: [(set (match_operand:DI 0 "register_operand" "=r")
160: (ne (match_operand:DI 1 "register_operand" "r")
161: (match_operand:DI 2 "general_operand" "g")))]
162: ""
163: "cmp.64\\t%0,%1,%2:ne")
164:
165: (define_insn ""
166: [(set (match_operand:DI 0 "register_operand" "=r")
167: (le (match_operand:DI 1 "register_operand" "r")
168: (match_operand:DI 2 "general_operand" "g")))]
169: ""
170: "cmp.64\\t%0,%1,%2:le")
171:
172: (define_insn ""
173: [(set (match_operand:DI 0 "register_operand" "=r")
174: (leu (match_operand:DI 1 "register_operand" "r")
175: (match_operand:DI 2 "general_operand" "g")))]
176: ""
177: "cmpu.64\\t%0,%1,%2:le")
178:
179: (define_insn ""
180: [(set (match_operand:DI 0 "register_operand" "=r")
181: (lt (match_operand:DI 1 "register_operand" "r")
182: (match_operand:DI 2 "general_operand" "g")))]
183: ""
184: "cmp.64\\t%0,%1,%2:lt")
185:
186: (define_insn ""
187: [(set (match_operand:DI 0 "register_operand" "=r")
188: (ltu (match_operand:DI 1 "register_operand" "r")
189: (match_operand:DI 2 "general_operand" "g")))]
190: ""
191: "cmpu.64\\t%0,%1,%2:lt")
192:
193: (define_insn ""
194: [(set (match_operand:DI 0 "register_operand" "=r")
195: (ge (match_operand:DI 1 "register_operand" "r")
196: (match_operand:DI 2 "general_operand" "g")))]
197: ""
198: "cmp.64\\t%0,%1,%2:ge")
199:
200: (define_insn ""
201: [(set (match_operand:DI 0 "register_operand" "=r")
202: (geu (match_operand:DI 1 "register_operand" "r")
203: (match_operand:DI 2 "general_operand" "g")))]
204: ""
205: "cmpu.64\\t%0,%1,%2:ge")
206:
207: (define_insn ""
208: [(set (match_operand:DI 0 "register_operand" "=r")
209: (gt (match_operand:DI 1 "register_operand" "r")
210: (match_operand:DI 2 "general_operand" "g")))]
211: ""
212: "cmp.64\\t%0,%1,%2:gt")
213:
214: (define_insn ""
215: [(set (match_operand:DI 0 "register_operand" "=r")
216: (gtu (match_operand:DI 1 "register_operand" "r")
217: (match_operand:DI 2 "general_operand" "g")))]
218: ""
219: "cmpu.64\\t%0,%1,%2:gt")
220:
221: (define_insn "seq"
222: [(set (match_operand:DI 0 "register_operand" "=r")
223: (eq (cc0) (const_int 0)))]
224: ""
225: "* return cmp_set(\"\", \"eq\", operands[0]); ")
226:
227: (define_insn "sne"
228: [(set (match_operand:DI 0 "register_operand" "=r")
229: (ne (cc0) (const_int 0)))]
230: ""
231: "* return cmp_set(\"\", \"ne\", operands[0]); ")
232:
233: (define_insn "sle"
234: [(set (match_operand:DI 0 "register_operand" "=r")
235: (le (cc0) (const_int 0)))]
236: ""
237: "* return cmp_set(\"\", \"le\", operands[0]); ")
238:
239: (define_insn "sleu"
240: [(set (match_operand:DI 0 "register_operand" "=r")
241: (leu (cc0) (const_int 0)))]
242: ""
243: "* return cmp_set(\"u\", \"le\", operands[0]); ")
244:
245: (define_insn "slt"
246: [(set (match_operand:DI 0 "register_operand" "=r")
247: (lt (cc0) (const_int 0)))]
248: ""
249: "* return cmp_set(\"\", \"lt\", operands[0]); ")
250:
251: (define_insn "sltu"
252: [(set (match_operand:DI 0 "register_operand" "=r")
253: (ltu (cc0) (const_int 0)))]
254: ""
255: "* return cmp_set(\"u\", \"lt\", operands[0]); ")
256:
257: (define_insn "sge"
258: [(set (match_operand:DI 0 "register_operand" "=r")
259: (ge (cc0) (const_int 0)))]
260: ""
261: "* return cmp_set(\"\", \"ge\", operands[0]); ")
262:
263: (define_insn "sgeu"
264: [(set (match_operand:DI 0 "register_operand" "=r")
265: (geu (cc0) (const_int 0)))]
266: ""
267: "* return cmp_set(\"u\", \"ge\", operands[0]); ")
268:
269: (define_insn "sgt"
270: [(set (match_operand:DI 0 "register_operand" "=r")
271: (gt (cc0) (const_int 0)))]
272: ""
273: "* return cmp_set(\"\", \"gt\", operands[0]); ")
274:
275: (define_insn "sgtu"
276: [(set (match_operand:DI 0 "register_operand" "=r")
277: (gtu (cc0) (const_int 0)))]
278: ""
279: "* return cmp_set(\"u\", \"gt\", operands[0]); ")
280:
281: (define_insn ""
282: [(set (match_operand:SI 0 "register_operand" "=r")
283: (eq (match_operand:SI 1 "register_operand" "r")
284: (match_operand:SI 2 "general_operand" "m")))]
285: ""
286: "cmp.32\\t%0,%1,%2:eq")
287:
288: (define_insn ""
289: [(set (match_operand:SI 0 "register_operand" "=r")
290: (ne (match_operand:SI 1 "register_operand" "r")
291: (match_operand:SI 2 "general_operand" "m")))]
292: ""
293: "cmp.32\\t%0,%1,%2:ne")
294:
295: (define_insn ""
296: [(set (match_operand:SI 0 "register_operand" "=r")
297: (le (match_operand:SI 1 "register_operand" "r")
298: (match_operand:SI 2 "general_operand" "m")))]
299: ""
300: "cmp.32\\t%0,%1,%2:le")
301:
302: (define_insn ""
303: [(set (match_operand:SI 0 "register_operand" "=r")
304: (leu (match_operand:SI 1 "register_operand" "r")
305: (match_operand:SI 2 "general_operand" "m")))]
306: ""
307: "cmpu.32\\t%0,%1,%2:le")
308:
309: (define_insn ""
310: [(set (match_operand:SI 0 "register_operand" "=r")
311: (lt (match_operand:SI 1 "register_operand" "r")
312: (match_operand:SI 2 "general_operand" "m")))]
313: ""
314: "cmp.32\\t%0,%1,%2:lt")
315:
316: (define_insn ""
317: [(set (match_operand:SI 0 "register_operand" "=r")
318: (ltu (match_operand:SI 1 "register_operand" "r")
319: (match_operand:SI 2 "general_operand" "m")))]
320: ""
321: "cmpu.32\\t%0,%1,%2:lt")
322:
323: (define_insn ""
324: [(set (match_operand:SI 0 "register_operand" "=r")
325: (ge (match_operand:SI 1 "register_operand" "r")
326: (match_operand:SI 2 "general_operand" "m")))]
327: ""
328: "cmp.32\\t%0,%1,%2:ge")
329:
330: (define_insn ""
331: [(set (match_operand:SI 0 "register_operand" "=r")
332: (geu (match_operand:SI 1 "register_operand" "r")
333: (match_operand:SI 2 "general_operand" "m")))]
334: ""
335: "cmpu.32\\t%0,%1,%2:ge")
336:
337: (define_insn ""
338: [(set (match_operand:SI 0 "register_operand" "=r")
339: (gt (match_operand:SI 1 "register_operand" "r")
340: (match_operand:SI 2 "general_operand" "m")))]
341: ""
342: "cmp.32\\t%0,%1,%2:gt")
343:
344: (define_insn ""
345: [(set (match_operand:SI 0 "register_operand" "=r")
346: (gtu (match_operand:SI 1 "register_operand" "r")
347: (match_operand:SI 2 "general_operand" "m")))]
348: ""
349: "cmpu.32\\t%0,%1,%2:gt")
350:
351: (define_insn ""
352: [(set (match_operand:HI 0 "register_operand" "=r")
353: (eq (match_operand:HI 1 "register_operand" "r")
354: (match_operand:HI 2 "general_operand" "m")))]
355: ""
356: "cmp.16\\t%0,%1,%2:eq")
357:
358: (define_insn ""
359: [(set (match_operand:HI 0 "register_operand" "=r")
360: (ne (match_operand:HI 1 "register_operand" "r")
361: (match_operand:HI 2 "general_operand" "m")))]
362: ""
363: "cmp.16\\t%0,%1,%2:ne")
364:
365: (define_insn ""
366: [(set (match_operand:HI 0 "register_operand" "=r")
367: (le (match_operand:HI 1 "register_operand" "r")
368: (match_operand:HI 2 "general_operand" "m")))]
369: ""
370: "cmp.16\\t%0,%1,%2:le")
371:
372: (define_insn ""
373: [(set (match_operand:HI 0 "register_operand" "=r")
374: (leu (match_operand:HI 1 "register_operand" "r")
375: (match_operand:HI 2 "general_operand" "m")))]
376: ""
377: "cmpu.16\\t%0,%1,%2:le")
378:
379: (define_insn ""
380: [(set (match_operand:HI 0 "register_operand" "=r")
381: (lt (match_operand:HI 1 "register_operand" "r")
382: (match_operand:HI 2 "general_operand" "m")))]
383: ""
384: "cmp.16\\t%0,%1,%2:lt")
385:
386: (define_insn ""
387: [(set (match_operand:HI 0 "register_operand" "=r")
388: (ltu (match_operand:HI 1 "register_operand" "r")
389: (match_operand:HI 2 "general_operand" "m")))]
390: ""
391: "cmpu.16\\t%0,%1,%2:lt")
392:
393: (define_insn ""
394: [(set (match_operand:HI 0 "register_operand" "=r")
395: (ge (match_operand:HI 1 "register_operand" "r")
396: (match_operand:HI 2 "general_operand" "m")))]
397: ""
398: "cmp.16\\t%0,%1,%2:ge")
399:
400: (define_insn ""
401: [(set (match_operand:HI 0 "register_operand" "=r")
402: (geu (match_operand:HI 1 "register_operand" "r")
403: (match_operand:HI 2 "general_operand" "m")))]
404: ""
405: "cmpu.16\\t%0,%1,%2:ge")
406:
407: (define_insn ""
408: [(set (match_operand:HI 0 "register_operand" "=r")
409: (gt (match_operand:HI 1 "register_operand" "r")
410: (match_operand:HI 2 "general_operand" "m")))]
411: ""
412: "cmp.16\\t%0,%1,%2:gt")
413:
414: (define_insn ""
415: [(set (match_operand:HI 0 "register_operand" "=r")
416: (gtu (match_operand:HI 1 "register_operand" "r")
417: (match_operand:HI 2 "general_operand" "m")))]
418: ""
419: "cmpu.16\\t%0,%1,%2:gt")
420:
421: (define_insn ""
422: [(set (match_operand:QI 0 "register_operand" "=r")
423: (eq (match_operand:QI 1 "register_operand" "r")
424: (match_operand:QI 2 "general_operand" "m")))]
425: ""
426: "cmp.8\\t%0,%1,%2:eq")
427:
428: (define_insn ""
429: [(set (match_operand:QI 0 "register_operand" "=r")
430: (ne (match_operand:QI 1 "register_operand" "r")
431: (match_operand:QI 2 "general_operand" "m")))]
432: ""
433: "cmp.8\\t%0,%1,%2:ne")
434:
435: (define_insn ""
436: [(set (match_operand:QI 0 "register_operand" "=r")
437: (le (match_operand:QI 1 "register_operand" "r")
438: (match_operand:QI 2 "general_operand" "m")))]
439: ""
440: "cmp.8\\t%0,%1,%2:le")
441:
442: (define_insn ""
443: [(set (match_operand:QI 0 "register_operand" "=r")
444: (leu (match_operand:QI 1 "register_operand" "r")
445: (match_operand:QI 2 "general_operand" "m")))]
446: ""
447: "cmpu.8\\t%0,%1,%2:le")
448:
449: (define_insn ""
450: [(set (match_operand:QI 0 "register_operand" "=r")
451: (lt (match_operand:QI 1 "register_operand" "r")
452: (match_operand:QI 2 "general_operand" "m")))]
453: ""
454: "cmp.8\\t%0,%1,%2:lt")
455:
456: (define_insn ""
457: [(set (match_operand:QI 0 "register_operand" "=r")
458: (ltu (match_operand:QI 1 "register_operand" "r")
459: (match_operand:QI 2 "general_operand" "m")))]
460: ""
461: "cmpu.8\\t%0,%1,%2:lt")
462:
463: (define_insn ""
464: [(set (match_operand:QI 0 "register_operand" "=r")
465: (ge (match_operand:QI 1 "register_operand" "r")
466: (match_operand:QI 2 "general_operand" "m")))]
467: ""
468: "cmp.8\\t%0,%1,%2:ge")
469:
470: (define_insn ""
471: [(set (match_operand:QI 0 "register_operand" "=r")
472: (geu (match_operand:QI 1 "register_operand" "r")
473: (match_operand:QI 2 "general_operand" "m")))]
474: ""
475: "cmpu.8\\t%0,%1,%2:ge")
476:
477: (define_insn ""
478: [(set (match_operand:QI 0 "register_operand" "=r")
479: (gt (match_operand:QI 1 "register_operand" "r")
480: (match_operand:QI 2 "general_operand" "m")))]
481: ""
482: "cmp.8\\t%0,%1,%2:gt")
483:
484: (define_insn ""
485: [(set (match_operand:QI 0 "register_operand" "=r")
486: (gtu (match_operand:QI 1 "register_operand" "r")
487: (match_operand:QI 2 "general_operand" "m")))]
488: ""
489: "cmpu.8\\t%0,%1,%2:gt")
490:
491:
492:
493: (define_insn "movdf" [(set (match_operand:DF 0 "general_operand" "=r,m")
494: (match_operand:DF 1 "general_operand" "rm,r"))]
495: ""
496: "*
497: {
498: if (which_alternative == 0)
499: return \"ld.64\\t%0,%1\";
500: return \"st.64\\t%1,%0\";
501: }")
502:
503: (define_insn "movsf"
504: [(set (match_operand:SF 0 "general_operand" "=r,m")
505: (match_operand:SF 1 "general_operand" "rm,r"))]
506: ""
507: "*
508: {
509: if (which_alternative == 0)
510: return \"ld.32\\t%0,%1\";
511: return \"st.32\\t%1,%0\";
512: }")
513:
514: (define_insn "movdi"
515: [(set (match_operand:DI 0 "general_operand" "=r,m,rm")
516: (match_operand:DI 1 "general_operand" "g,r,I"))]
517: ""
518: "*
519: if (which_alternative == 0)
520: return \"ld.64\\t%0,%1\";
521: else if (which_alternative == 1)
522: return \"st.64\\t%1,%0\";
523: else
524: if (GET_CODE(operands[1])==CONST_INT) {
525: if (INTVAL(operands[1]) >= 0)
526: return \"sti.64\\t%c1,%0\";
527: else
528: return \"stin.64\\t%n1,%0\";
529: }
530: ")
531:
532: (define_insn "movsi"
533: [(set (match_operand:SI 0 "general_operand" "=r,m,r")
534: (match_operand:SI 1 "general_operand" "rm,rI,i"))]
535: ""
536: "*
537: if (which_alternative == 0)
538: return \"ld.32\\t%0,%1\";
539: else if (which_alternative == 1) {
540: if (GET_CODE(operands[1])==CONST_INT) {
541: if (INTVAL(operands[1]) >= 0)
542: return \"sti.32\\t%c1,%0\";
543: else
544: return \"stin.32\\t%n1,%0\";
545: }
546: return \"st.32\\t%1,%0\";
547: } else
548: return \"ld.64\\t%0,%1 ; I only want 32\";
549: ")
550:
551: (define_insn "movhi"
552: [(set (match_operand:HI 0 "general_operand" "=r,m,r")
553: (match_operand:HI 1 "general_operand" "m,rI,ri"))]
554: ""
555: "*
556: {
557: if (which_alternative == 0)
558: return \"ld.16\\t%0,%1\";
559: if (which_alternative == 2)
560: return \"ld.64\\t%0,%1\\t; I only want 16\";
561: if (GET_CODE(operands[1])==CONST_INT) {
562: if (INTVAL(operands[1]) >= 0)
563: return \"sti.16\\t%c1,%0\";
564: else
565: return \"stin.16\\t%n1,%0\";
566: }
567: return \"st.16\\t%1,%0\";
568: }")
569:
570: (define_insn "movqi"
571: [(set (match_operand:QI 0 "general_operand" "=r,m,r")
572: (match_operand:QI 1 "general_operand" "m,rI,ri"))]
573: ""
574: "*
575: {
576: if (which_alternative == 0)
577: return \"ld.8\\t%0,%1\";
578: if (which_alternative == 2)
579: return \"ld.64\\t%0,%1\\t; I only want 8\";
580: if (GET_CODE(operands[1])==CONST_INT) {
581: if (INTVAL(operands[1]) >= 0)
582: return \"sti.8\\t%c1,%0\";
583: else
584: return \"stin.8\\t%n1,%0\";
585: }
586: return \"st.8\\t%1,%0\";
587: }")
588:
589: ;; Extension and truncation insns.
590: ;; Those for integer source operand
591: ;; are ordered widest source type first.
592:
593: (define_insn "truncdfsf2"
594: [(set (match_operand:SF 0 "register_operand" "=r")
595: (truncate:SF (match_operand:DF 1 "general_operand" "rm")))]
596: ""
597: "cvt.ds\\t%0,%1")
598:
599: (define_insn "truncdiqi2"
600: [(set (match_operand:QI 0 "general_operand" "=r,m,r")
601: (truncate:QI (match_operand:DI 1 "general_operand" "m,r,0")))]
602: ""
603: "*
604: {
605: if (which_alternative == 0)
606: return \"ld.8\\t%0,%1\";
607: else if (which_alternative == 1)
608: return \"st.8\\t%1,%0\";
609: return \"\";
610: }")
611:
612: (define_insn "truncdihi2"
613: [(set (match_operand:HI 0 "general_operand" "=r,m,r")
614: (truncate:HI (match_operand:DI 1 "general_operand" "m,r,0")))]
615: ""
616: "*
617: {
618: if (which_alternative == 0)
619: return \"ld.16\\t%0,%1\";
620: if (which_alternative == 1)
621: return \"st.16\\t%1,%0\";
622: return \"\";
623: }")
624:
625: (define_insn "truncdisi2"
626: [(set (match_operand:SI 0 "general_operand" "=r,m")
627: (truncate:SI (match_operand:DI 1 "general_operand" "rm,r")))]
628: ""
629: "*
630: {
631: if (which_alternative == 0)
632: return \"ld.32\\t%0,%1\";
633: return \"st.32\\t%1,%0\";
634: }")
635:
636: (define_insn "truncsiqi2"
637: [(set (match_operand:QI 0 "general_operand" "=r,m,r")
638: (truncate:QI (match_operand:SI 1 "general_operand" "m,r,0")))]
639: ""
640: "*
641: {
642: if (which_alternative == 0)
643: return \"ld.8\\t%0,%1\";
644: if (which_alternative == 1)
645: return \"st.8\\t%1,%0\";
646: return \"\";
647: }")
648:
649: (define_insn "truncsihi2"
650: [(set (match_operand:HI 0 "general_operand" "=r,m,r")
651: (truncate:HI (match_operand:SI 1 "general_operand" "m,r,0")))]
652: ""
653: "*
654: {
655: if (which_alternative == 0)
656: return \"ld.16\\t%0,%1\";
657: if (which_alternative == 1)
658: return \"st.16\\t%1,%0\";
659: return \"\";
660: }")
661:
662: (define_insn "trunchiqi2"
663: [(set (match_operand:QI 0 "general_operand" "=r,m,r")
664: (truncate:QI (match_operand:HI 1 "general_operand" "m,r,0")))]
665: ""
666: "*
667: {
668: if (which_alternative == 0)
669: return \"ld.8\\t%0,%1\";
670: if (which_alternative == 1)
671: return \"st.8\\t%1,%0\";
672: return \"\";
673: }")
674:
675: (define_insn "extendsfdf2"
676: [(set (match_operand:DF 0 "register_operand" "=r")
677: (sign_extend:DF (match_operand:SF 1 "general_operand" "rm")))]
678: ""
679: "cvt.sd\\t%0,%1")
680:
681: (define_insn "extendsidi2"
682: [(set (match_operand:DI 0 "register_operand" "=r")
683: (sign_extend:DI (match_operand:SI 1 "general_operand" "rm")))]
684: ""
685: "ld.32\\t%0,%1")
686:
687: (define_insn "extendhisi2"
688: [(set (match_operand:SI 0 "register_operand" "=r,r")
689: (sign_extend:SI (match_operand:HI 1 "general_operand" "m,r")))]
690: ""
691: "*
692: if (which_alternative==0)
693: return \"ld.16\\t%0,%1\";
694: return \"extract\\t%0,%1:bit 48,16\";
695: ")
696:
697: (define_insn "extendhidi2"
698: [(set (match_operand:DI 0 "register_operand" "=r,r")
699: (sign_extend:DI (match_operand:HI 1 "general_operand" "m,r")))]
700: ""
701: "*
702: if (which_alternative==0)
703: return \"ld.16\\t%0,%1\";
704: return \"extract\\t%0,%1:bit 48,16\";
705: ")
706:
707: (define_insn "extendqihi2"
708: [(set (match_operand:HI 0 "register_operand" "=r,r")
709: (sign_extend:HI (match_operand:QI 1 "general_operand" "m,r")))]
710: ""
711: "*
712: if (which_alternative==0)
713: return \"ld.8\\t%0,%1\";
714: return \"extract\\t%0,%1:bit 56,8\";
715: ")
716:
717: (define_insn "extendqisi2"
718: [(set (match_operand:SI 0 "register_operand" "=r,r")
719: (sign_extend:SI (match_operand:QI 1 "general_operand" "m,r")))]
720: ""
721: "*
722: if (which_alternative==0)
723: return \"ld.8\\t%0,%1\";
724: return \"extract\\t%0,%1:bit 56,8\";
725: ")
726:
727: (define_insn "extendqidi2"
728: [(set (match_operand:DI 0 "register_operand" "=r,r")
729: (sign_extend:DI (match_operand:QI 1 "general_operand" "m,r")))]
730: ""
731: "*
732: if (which_alternative==0)
733: return \"ld.8\\t%0,%1\";
734: return \"extract\\t%0,%1:bit 56,8\";
735: ")
736:
737: (define_insn "zero_extendsidi2"
738: [(set (match_operand:DI 0 "register_operand" "=r")
739: (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))]
740: ""
741: "ldz.32\\t%0,%1")
742:
743:
744: (define_insn "zero_extendhisi2"
745: [(set (match_operand:SI 0 "register_operand" "=r,r")
746: (zero_extend:SI (match_operand:HI 1 "general_operand" "m,r")))]
747: ""
748: "*
749: if (which_alternative==0)
750: return \"ldz.16\\t%0,%1\";
751: return \"extractz\\t%0,%1:bit 48,16\";
752: ")
753:
754: (define_insn "zero_extendhidi2"
755: [(set (match_operand:DI 0 "register_operand" "=r,r")
756: (zero_extend:DI (match_operand:HI 1 "general_operand" "m,r")))]
757: ""
758: "*
759: if (which_alternative==0)
760: return \"ldz.16\\t%0,%1\";
761: return \"extractz\\t%0,%1:bit 48,16\";
762: ")
763:
764: (define_insn "zero_extendqihi2"
765: [(set (match_operand:HI 0 "register_operand" "=r,r")
766: (zero_extend:HI (match_operand:QI 1 "general_operand" "m,r")))]
767: ""
768: "*
769: if (which_alternative==0)
770: return \"ldz.8\\t%0,%1\";
771: return \"extractz\\t%0,%1:bit 56,8\";
772: ")
773:
774: (define_insn "zero_extendqisi2"
775: [(set (match_operand:SI 0 "register_operand" "=r,r")
776: (zero_extend:SI (match_operand:QI 1 "general_operand" "m,r")))]
777: ""
778: "*
779: if (which_alternative==0)
780: return \"ldz.8\\t%0,%1\";
781: return \"extractz\\t%0,%1:bit 56,8\";
782: ")
783:
784: (define_insn "zero_extendqidi2"
785: [(set (match_operand:DI 0 "register_operand" "=r,r")
786: (zero_extend:DI (match_operand:QI 1 "general_operand" "m,r")))]
787: ""
788: "*
789: if (which_alternative==0)
790: return \"ldz.8\\t%0,%1\";
791: return \"extractz\\t%0,%1:bit 56,8\";
792: ")
793:
794:
795:
796: (define_insn "lshldi3"
797: [(set (match_operand:DI 0 "register_operand" "=r")
798: (lshift:DI (match_operand:DI 1 "register_operand" "r")
799: (match_operand:SI 2 "general_operand" "rn")))]
800: ""
801: "sll\\t%0,%1,%2")
802:
803: (define_insn "ashrdi3"
804: [(set (match_operand:DI 0 "register_operand" "=r")
805: (ashiftrt:DI (match_operand:DI 1 "register_operand" "r")
806: (match_operand:SI 2 "general_operand" "rn")))]
807: ""
808: "sra\\t%0,%1,%2")
809:
810: (define_insn "lshrdi3"
811: [(set (match_operand:DI 0 "register_operand" "=r")
812: (lshiftrt:DI (match_operand:DI 1 "register_operand" "r")
813: (match_operand:SI 2 "general_operand" "rn")))]
814: ""
815: "srl\\t%0,%1,%2")
816:
817: (define_insn "ashldi3"
818: [(set (match_operand:DI 0 "register_operand" "=r")
819: (ashift:DI (match_operand:DI 1 "register_operand" "r")
820: (match_operand:SI 2 "general_operand" "rn")))]
821: ""
822: "sla\\t%0,%1,%2")
823:
824: (define_insn "anddi3"
825: [(set (match_operand:DI 0 "register_operand" "=r,r")
826: (and:DI (match_operand:DI 1 "general_operand" "%0,r")
827: (match_operand:DI 2 "general_operand" "g,g")))]
828: "1 /*which_alternative == 0 || check356(operands[2])*/"
829: "*
830: if (which_alternative == 0)
831: return \"and\\t%0,%2\";
832: return \"and\\t%0,%1,%2\";
833: ")
834:
835: (define_insn "iordi3"
836: [(set (match_operand:DI 0 "register_operand" "=r,r")
837: (ior:DI (match_operand:DI 1 "general_operand" "%0,r")
838: (match_operand:DI 2 "general_operand" "g,g")))]
839: "1 /*which_alternative == 0 || check356(operands[2])*/"
840: "*
841: if (which_alternative == 0)
842: return \"or\\t%0,%2\";
843: return \"or\\t%0,%1,%2\";
844: ")
845:
846: (define_insn "xordi3"
847: [(set (match_operand:DI 0 "register_operand" "=r,r")
848: (xor:DI (match_operand:DI 1 "general_operand" "%0,r")
849: (match_operand:DI 2 "general_operand" "g,g")))]
850: "1 /*which_alternative == 0 || check356(operands[2])*/"
851: "*
852: if (which_alternative == 0)
853: return \"xor\\t%0,%2\";
854: return \"xor\\t%0,%1,%2\";
855: ")
856:
857: (define_insn "one_cmpldi2"
858: [(set (match_operand:DI 0 "register_operand" "=r")
859: (not:DI (match_operand:DI 1 "general_operand" "rm")))]
860: ""
861: "not\\t%0,%1")
862:
863: ;; gcc 2.1 does not widen ~si into ~di.
864: (define_insn "one_cmplsi2"
865: [(set (match_operand:SI 0 "register_operand" "=r")
866: (not:DI (match_operand:SI 1 "register_operand" "r")))]
867: ""
868: "not\\t%0,%1")
869:
870: (define_insn "negdi2"
871: [(set (match_operand:DI 0 "register_operand" "=r")
872: (neg:DI (match_operand:DI 1 "general_operand" "rm")))]
873: ""
874: "neg.64\\t%0,%1")
875:
876: (define_insn "negsi2"
877: [(set (match_operand:SI 0 "register_operand" "=r,r")
878: (neg:SI (match_operand:SI 1 "general_operand" "m,r")))]
879: ""
880: "*
881: if (which_alternative == 0)
882: return \"neg.32\\t%0,%1\";
883: return \"neg.64\\t%0,%1 ; I only want 32\";
884: ")
885:
886: (define_insn "neghi2"
887: [(set (match_operand:HI 0 "register_operand" "=r,r")
888: (neg:HI (match_operand:HI 1 "general_operand" "m,r")))]
889: ""
890: "*
891: if (which_alternative == 0)
892: return \"neg.16\\t%0,%1\";
893: return \"neg.64\\t%0,%1 ; I only want 16\";
894: ")
895:
896: (define_insn "adddf3"
897: [(set (match_operand:DF 0 "register_operand" "=r")
898: (plus:DF (match_operand:DF 1 "general_operand" "%0")
899: (match_operand:DF 2 "general_operand" "rm")))]
900: ""
901: "fadd.64\\t%0,%2")
902:
903: (define_insn "addsf3"
904: [(set (match_operand:SF 0 "register_operand" "=r")
905: (plus:SF (match_operand:SF 1 "general_operand" "%0")
906: (match_operand:SF 2 "general_operand" "rm")))]
907: ""
908: "fadd.32\\t%0,%2")
909:
910: ;; There is also an addi.64 4,.r0'' optimization
911: (define_insn "adddi3"
912: [(set (match_operand:DI 0 "register_operand" "=r,r")
913: (plus:DI (match_operand:DI 1 "general_operand" "%0,r")
914: (match_operand:DI 2 "general_operand" "g,g")))]
915: "1 /*which_alternative == 0 || check356(operands[2])*/"
916: "*
917: if (which_alternative == 0)
918: return \"add.64\\t%0,%2\";
919: return \"add.64\\t%0,%1,%2\";
920: ")
921:
922: (define_insn "addsi3"
923: [(set (match_operand:SI 0 "register_operand" "=r,r,r")
924: (plus:SI (match_operand:SI 1 "general_operand" "%0,r,0")
925: (match_operand:SI 2 "general_operand" "m,m,g")))]
926: "1 /*which_alternative != 1 || check356(operands[2])*/"
927: "*
928: if (which_alternative == 0)
929: return \"add.32\\t%0,%2\";
930: if (which_alternative == 1)
931: return \"add.32\\t%0,%1,%2\";
932: return \"add.64\\t%0,%2 ; I only want 32\";
933: ")
934:
935: (define_insn "addhi3"
936: [(set (match_operand:HI 0 "register_operand" "=r,r,r")
937: (plus:HI (match_operand:HI 1 "general_operand" "%0,r,0")
938: (match_operand:HI 2 "general_operand" "m,m,g")))]
939: "1 /*which_alternative != 1 || check356(operands[2])*/"
940: "*
941: if (which_alternative == 0)
942: return \"add.16\\t%0,%2\";
943: if (which_alternative == 1)
944: return \"add.16\\t%0,%1,%2\";
945: return \"add.64\\t%0,%2 ; I only want 16\";
946: ")
947:
948: (define_insn "subdf3"
949: [(set (match_operand:DF 0 "register_operand" "=r")
950: (minus:DF (match_operand:DF 1 "general_operand" "0")
951: (match_operand:DF 2 "general_operand" "rm")))]
952: ""
953: "fsub.64\\t%0,%2")
954:
955: (define_insn "subsf3"
956: [(set (match_operand:SF 0 "register_operand" "=r")
957: (minus:SF (match_operand:SF 1 "general_operand" "0")
958: (match_operand:SF 2 "general_operand" "rm")))]
959: ""
960: "fsub.32\\t%0,%2")
961:
962: (define_insn "subdi3"
963: [(set (match_operand:DI 0 "register_operand" "=r,r,r")
964: (minus:DI (match_operand:DI 1 "general_operand" "0,g,r")
965: (match_operand:DI 2 "general_operand" "g,r,g")))]
966: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
967: "*
968: if (which_alternative == 0)
969: return \"sub.64\\t%0,%2\";
970: else if (which_alternative == 1)
971: return \"subr.64\\t%0,%2,%1\";
972: else
973: return \"sub.64\\t%0,%1,%2\";
974: ")
975:
976: (define_insn "subsi3"
977: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
978: (minus:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
979: (match_operand:SI 2 "general_operand" "m,r,m,g")))]
980: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
981: "*
982: if (which_alternative == 0)
983: return \"sub.32\\t%0,%2\";
984: else if (which_alternative == 1)
985: return \"subr.32\\t%0,%2,%1\";
986: else if (which_alternative == 2)
987: return \"sub.32\\t%0,%1,%2\";
988: else
989: return \"sub.64\\t%0,%2 ; I only want 32\";
990: ")
991:
992: (define_insn "subhi3"
993: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
994: (minus:HI (match_operand:HI 1 "general_operand" "0,m,r,0")
995: (match_operand:HI 2 "general_operand" "m,r,m,g")))]
996: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
997: "*
998: if (which_alternative == 0)
999: return \"sub.16\\t%0,%2\";
1000: else if (which_alternative == 1)
1001: return \"subr.16\\t%0,%2,%1\";
1002: else if (which_alternative == 2)
1003: return \"sub.16\\t%0,%1,%2\";
1004: else
1005: return \"sub.64\\t%0,%2 ; I only want 16\";
1006: ")
1007:
1008: (define_insn "muldf3"
1009: [(set (match_operand:DF 0 "register_operand" "=r")
1010: (mult:DF (match_operand:DF 1 "general_operand" "%0")
1011: (match_operand:DF 2 "general_operand" "rm")))]
1012: ""
1013: "fmul.64\\t%0,%2")
1014:
1015: (define_insn "mulsf3"
1016: [(set (match_operand:SF 0 "register_operand" "=r")
1017: (mult:SF (match_operand:SF 1 "general_operand" "%0")
1018: (match_operand:SF 2 "general_operand" "rm")))]
1019: ""
1020: "fmul.32\\t%0,%2")
1021:
1022: (define_insn "muldi3"
1023: [(set (match_operand:DI 0 "register_operand" "=r,r")
1024: (mult:DI (match_operand:DI 1 "general_operand" "%0,r")
1025: (match_operand:DI 2 "general_operand" "g,g")))]
1026: "1 /*which_alternative == 0 || check356(operands[2])*/"
1027: "*
1028: if (which_alternative == 0)
1029: return \"mul.64\\t%0,%2\";
1030: return \"mul.64\\t%0,%1,%2\";
1031: ")
1032:
1033: (define_insn "mulsi3"
1034: [(set (match_operand:SI 0 "register_operand" "=r,r,r")
1035: (mult:SI (match_operand:SI 1 "general_operand" "%0,r,0")
1036: (match_operand:SI 2 "general_operand" "m,m,g")))]
1037: "1 /*which_alternative == 0 || check356(operands[2])*/"
1038: "*
1039: if (which_alternative == 0)
1040: return \"mul.32\\t%0,%2\";
1041: else if (which_alternative == 1)
1042: return \"mul.32\\t%0,%1,%2\";
1043: else
1044: return \"mul.64\\t%0,%2 ; I only want 32\";
1045: ")
1046:
1047: (define_insn "mulhi3"
1048: [(set (match_operand:HI 0 "register_operand" "=r,r,r")
1049: (mult:HI (match_operand:HI 1 "general_operand" "%0,r,0")
1050: (match_operand:HI 2 "general_operand" "m,m,g")))]
1051: "1 /*which_alternative == 0 || check356(operands[2])*/"
1052: "*
1053: if (which_alternative == 0)
1054: return \"mul.16\\t%0,%2\";
1055: else if (which_alternative == 1)
1056: return \"mul.16\\t%0,%1,%2\";
1057: else
1058: return \"mul.64\\t%0,%2 ; I only want 16\";
1059: ")
1060:
1061: (define_insn "divdf3"
1062: [(set (match_operand:DF 0 "register_operand" "=r")
1063: (div:DF (match_operand:DF 1 "general_operand" "0")
1064: (match_operand:DF 2 "general_operand" "rm")))]
1065: ""
1066: "fdiv.64\\t%0,%2")
1067:
1068: (define_insn "divsf3"
1069: [(set (match_operand:SF 0 "register_operand" "=r")
1070: (div:SF (match_operand:SF 1 "general_operand" "0")
1071: (match_operand:SF 2 "general_operand" "rm")))]
1072: ""
1073: "fdiv.32\\t%0,%2")
1074:
1075: (define_insn "divdi3"
1076: [(set (match_operand:DI 0 "register_operand" "=r,r,r")
1077: (div:DI (match_operand:DI 1 "general_operand" "0,g,r")
1078: (match_operand:DI 2 "general_operand" "g,r,g")))]
1079: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1080: "*
1081: if (which_alternative == 0)
1082: return \"div.64\\t%0,%2\";
1083: else if (which_alternative == 1)
1084: return \"divr.64\\t%0,%2,%1\";
1085: else
1086: return \"div.64\\t%0,%1,%2\";
1087: ")
1088:
1089: (define_insn "divsi3"
1090: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
1091: (div:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
1092: (match_operand:SI 2 "general_operand" "m,r,m,g")))]
1093: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1094: "*
1095: /* We don't ignore high bits. */
1096: if (0) {
1097: if (which_alternative == 0)
1098: return \"div.32\\t%0,%2\";
1099: else if (which_alternative == 1)
1100: return \"divr.32\\t%0,%2,%1\";
1101: else if (which_alternative == 2)
1102: return \"div.32\\t%0,%1,%2\";
1103: else
1104: return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\";
1105: } else {
1106: if (which_alternative == 0)
1107: return \"ld.32\\t%0,%0\;div.32\\t%0,%2\";
1108: else if (which_alternative == 1)
1109: return \"ld.32\\t%2,%2\;divr.32\\t%0,%2,%1\";
1110: else if (which_alternative == 2)
1111: return \"ld.32\\t%1,%1\;div.32\\t%0,%1,%2\";
1112: else
1113: return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\";
1114: }
1115: ")
1116:
1117: (define_insn "divhi3"
1118: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r")
1119: (div:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0")
1120: (match_operand:HI 2 "general_operand" "m,r,m,r,i")))]
1121: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1122: "*
1123: if (which_alternative == 0)
1124: return \"extract\\t%0,%0:bit 48,16\;div.16\\t%0,%2\";
1125: else if (which_alternative == 1)
1126: return \"extract\\t%2,%2:bit 48,16\;divr.16\\t%0,%2,%1\";
1127: else if (which_alternative == 2)
1128: return \"extract\\t%1,%1:bit 48,16\;div.16\\t%0,%1,%2\";
1129: else if (which_alternative == 3)
1130: return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;div.64\\t%0,%2 ; I only want 16\";
1131: else
1132: return \"extract\\t%0,%0:bit 48,16\;div.64\\t%0,%2 ; I only want 16\";
1133: ")
1134:
1135: (define_insn "modhi3"
1136: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r")
1137: (mod:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0")
1138: (match_operand:HI 2 "general_operand" "m,r,m,r,i")))]
1139: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1140: "*
1141: if (which_alternative == 0)
1142: return \"extract\\t%0,%0:bit 48,16\;rem.16\\t%0,%2\";
1143: else if (which_alternative == 1)
1144: return \"extract\\t%2,%2:bit 48,16\;remr.16\\t%0,%2,%1\";
1145: else if (which_alternative == 2)
1146: return \"extract\\t%1,%1:bit 48,16\;rem.16\\t%0,%1,%2\";
1147: else if (which_alternative == 3)
1148: return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\";
1149: else
1150: return \"extract\\t%0,%0:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\";
1151: ")
1152:
1153: (define_insn "moddi3"
1154: [(set (match_operand:DI 0 "register_operand" "=r,r,r")
1155: (mod:DI (match_operand:DI 1 "general_operand" "0,g,r")
1156: (match_operand:DI 2 "general_operand" "g,r,g")))]
1157: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1158: "*
1159: if (which_alternative == 0)
1160: return \"rem.64\\t%0,%2\";
1161: else if (which_alternative == 1)
1162: return \"remr.64\\t%0,%2,%1\";
1163: else
1164: return \"rem.64\\t%0,%1,%2\";
1165: ")
1166:
1167: (define_insn "modsi3"
1168: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
1169: (mod:SI (match_operand:SI 1 "general_operand" "0,m,r,0")
1170: (match_operand:SI 2 "general_operand" "m,r,m,g")))]
1171: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/"
1172: "*
1173: /* There is a micro code bug with the below... */
1174: if (0) {
1175: if (which_alternative == 0)
1176: return \"rem.32\\t%0,%2\";
1177: else if (which_alternative == 1)
1178: return \"remr.32\\t%0,%2,%1\";
1179: else if (which_alternative == 2)
1180: return \"rem.32\\t%0,%1,%2\";
1181: else
1182: return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\";
1183: } else {
1184: if (which_alternative == 0)
1185: return \"ld.32\\t%0,%0\;rem.32\\t%0,%2\";
1186: else if (which_alternative == 1)
1187: return \"ld.32\\t%2,%2\;remr.32\\t%0,%2,%1\";
1188: else if (which_alternative == 2)
1189: return \"ld.32\\t%1,%1\;rem.32\\t%0,%1,%2\";
1190: else
1191: return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\";
1192: }
1193: ")
1194:
1195:
1196: (define_insn "jump"
1197: [(set (pc)
1198: (label_ref (match_operand 0 "" "")))]
1199: ""
1200: "jmp\\t%l0")
1201:
1202: (define_insn "indirect_jump"
1203: [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
1204: ""
1205: ;; Maybe %l0 is better, maybe we can relax register only.
1206: "verify this before use ld.32\\t.r0,%0\;br.reg\\t.r0")
1207:
1208: (define_insn "beq"
1209: [(set (pc)
1210: (if_then_else (eq (cc0)
1211: (const_int 0))
1212: (label_ref (match_operand 0 "" ""))
1213: (pc)))]
1214: ""
1215: "* return cmp_jmp(\"\", 2, operands[0]); ")
1216:
1217: (define_insn "bne"
1218: [(set (pc)
1219: (if_then_else (ne (cc0)
1220: (const_int 0))
1221: (label_ref (match_operand 0 "" ""))
1222: (pc)))]
1223: ""
1224: "* return cmp_jmp(\"\", 8, operands[0]); ")
1225:
1226: (define_insn "bgt"
1227: [(set (pc)
1228: (if_then_else (gt (cc0)
1229: (const_int 0))
1230: (label_ref (match_operand 0 "" ""))
1231: (pc)))]
1232: ""
1233: "* return cmp_jmp(\"\", 0, operands[0]); ")
1234:
1235: (define_insn "bgtu"
1236: [(set (pc)
1237: (if_then_else (gtu (cc0)
1238: (const_int 0))
1239: (label_ref (match_operand 0 "" ""))
1240: (pc)))]
1241: ""
1242: "* return cmp_jmp(\"u\", 0, operands[0]); ")
1243:
1244: (define_insn "blt"
1245: [(set (pc)
1246: (if_then_else (lt (cc0)
1247: (const_int 0))
1248: (label_ref (match_operand 0 "" ""))
1249: (pc)))]
1250: ""
1251: "* return cmp_jmp(\"\", 6, operands[0]); ")
1252:
1253: (define_insn "bltu"
1254: [(set (pc)
1255: (if_then_else (ltu (cc0)
1256: (const_int 0))
1257: (label_ref (match_operand 0 "" ""))
1258: (pc)))]
1259: ""
1260: "* return cmp_jmp(\"u\", 6, operands[0]); ")
1261:
1262: (define_insn "bge"
1263: [(set (pc)
1264: (if_then_else (ge (cc0)
1265: (const_int 0))
1266: (label_ref (match_operand 0 "" ""))
1267: (pc)))]
1268: ""
1269: "* return cmp_jmp(\"\", 4, operands[0]); ")
1270:
1271: (define_insn "bgeu"
1272: [(set (pc)
1273: (if_then_else (geu (cc0)
1274: (const_int 0))
1275: (label_ref (match_operand 0 "" ""))
1276: (pc)))]
1277: ""
1278: "* return cmp_jmp(\"u\", 4, operands[0]); ")
1279:
1280: (define_insn "ble"
1281: [(set (pc)
1282: (if_then_else (le (cc0)
1283: (const_int 0))
1284: (label_ref (match_operand 0 "" ""))
1285: (pc)))]
1286: ""
1287: "* return cmp_jmp(\"\", 10, operands[0]); ")
1288:
1289: (define_insn "bleu"
1290: [(set (pc)
1291: (if_then_else (leu (cc0)
1292: (const_int 0))
1293: (label_ref (match_operand 0 "" ""))
1294: (pc)))]
1295: ""
1296: "* return cmp_jmp(\"u\", 10, operands[0]); ")
1297:
1298: (define_insn ""
1299: [(set (pc)
1300: (if_then_else (eq (cc0)
1301: (const_int 0))
1302: (pc)
1303: (label_ref (match_operand 0 "" ""))))]
1304: ""
1305: "* return cmp_jmp(\"\", 8, operands[0]); ")
1306:
1307: (define_insn ""
1308: [(set (pc)
1309: (if_then_else (ne (cc0)
1310: (const_int 0))
1311: (pc)
1312: (label_ref (match_operand 0 "" ""))))]
1313: ""
1314: "* return cmp_jmp(\"\", 2, operands[0]); ")
1315:
1316: (define_insn ""
1317: [(set (pc)
1318: (if_then_else (gt (cc0)
1319: (const_int 0))
1320: (pc)
1321: (label_ref (match_operand 0 "" ""))))]
1322: ""
1323: "* return cmp_jmp(\"\", 10, operands[0]); ")
1324:
1325: (define_insn ""
1326: [(set (pc)
1327: (if_then_else (gtu (cc0)
1328: (const_int 0))
1329: (pc)
1330: (label_ref (match_operand 0 "" ""))))]
1331: ""
1332: "* return cmp_jmp(\"u\", 10, operands[0]); ")
1333:
1334: (define_insn ""
1335: [(set (pc)
1336: (if_then_else (lt (cc0)
1337: (const_int 0))
1338: (pc)
1339: (label_ref (match_operand 0 "" ""))))]
1340: ""
1341: "* return cmp_jmp(\"\", 4, operands[0]); ")
1342:
1343: (define_insn ""
1344: [(set (pc)
1345: (if_then_else (ltu (cc0)
1346: (const_int 0))
1347: (pc)
1348: (label_ref (match_operand 0 "" ""))))]
1349: ""
1350: "* return cmp_jmp(\"u\", 4, operands[0]); ")
1351:
1352: (define_insn ""
1353: [(set (pc)
1354: (if_then_else (ge (cc0)
1355: (const_int 0))
1356: (pc)
1357: (label_ref (match_operand 0 "" ""))))]
1358: ""
1359: "* return cmp_jmp(\"\", 6, operands[0]); ")
1360:
1361: (define_insn ""
1362: [(set (pc)
1363: (if_then_else (geu (cc0)
1364: (const_int 0))
1365: (pc)
1366: (label_ref (match_operand 0 "" ""))))]
1367: ""
1368: "* return cmp_jmp(\"u\", 6, operands[0]); ")
1369:
1370: (define_insn ""
1371: [(set (pc)
1372: (if_then_else (le (cc0)
1373: (const_int 0))
1374: (pc)
1375: (label_ref (match_operand 0 "" ""))))]
1376: ""
1377: "* return cmp_jmp(\"\", 0, operands[0]); ")
1378:
1379: (define_insn ""
1380: [(set (pc)
1381: (if_then_else (leu (cc0)
1382: (const_int 0))
1383: (pc)
1384: (label_ref (match_operand 0 "" ""))))]
1385: ""
1386: "* return cmp_jmp(\"u\", 0, operands[0]); ")
1387:
1388: ;; Note that operand 1 is total size of args, in bytes,
1389: ;; and what the call insn wants is the number of words.
1390: (define_insn "call"
1391: [(call (match_operand:QI 0 "general_operand" "m")
1392: (match_operand:QI 1 "general_operand" "g"))]
1393: ""
1394: "*
1395: if (GET_CODE (operands[0]) == MEM && GET_CODE (XEXP (operands[0], 0)) == REG)
1396: if (REGNO (XEXP (operands[0], 0)) != 0)
1397: return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
1398: else
1399: return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
1400: else
1401: return \"add.64\\t.sp,=-4\;call\\t%0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\";
1402: ")
1403:
1404: (define_insn "call_value"
1405: [(set (match_operand 0 "" "g")
1406: (call (match_operand:QI 1 "general_operand" "m")
1407: (match_operand:QI 2 "general_operand" "g")))]
1408: ""
1409: "*
1410: if (GET_CODE (operands[1]) == MEM && GET_CODE (XEXP (operands[1], 0)) == REG)
1411: if (REGNO (XEXP (operands[1], 0)) != 0)
1412: return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
1413: else
1414: return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
1415: else
1416: return \"add.64\\t.sp,=-4\;call\\t%1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\";
1417: ")
1418:
1419: (define_insn "tablejump"
1420: [(set (pc) (match_operand:SI 0 "register_operand" "r"))
1421: (use (label_ref (match_operand 1 "" "")))]
1422: ""
1423: "br.reg\\t%0")
1424:
1425: (define_insn "nop"
1426: [(const_int 0)]
1427: ""
1428: "nop")
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.