|
|
1.1 root 1: ;;- Machine description for GNU compiler
2: ;;- Vax Version
3: ;; Copyright (C) 1987 Free Software Foundation, Inc.
4:
5: ;; This file is part of GNU CC.
6:
7: ;; GNU CC is distributed in the hope that it will be useful,
8: ;; but WITHOUT ANY WARRANTY. No author or distributor
9: ;; accepts responsibility to anyone for the consequences of using it
10: ;; or for whether it serves any particular purpose or works at all,
11: ;; unless he says so in writing. Refer to the GNU CC General Public
12: ;; License for full details.
13:
14: ;; Everyone is granted permission to copy, modify and redistribute
15: ;; GNU CC, but only under the conditions described in the
16: ;; GNU CC General Public License. A copy of this license is
17: ;; supposed to have been given to you along with GNU CC so you
18: ;; can know your rights and responsibilities. It should be in a
19: ;; file named COPYING. Among other things, the copyright notice
20: ;; and this notice must be preserved on all copies.
21:
22:
23: ;;- Instruction patterns. When multiple patterns apply,
24: ;;- the first one in the file is chosen.
25: ;;-
26: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
27: ;;-
28: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
29: ;;- updates for most instructions.
30:
31: (define_insn "tstdf"
32: [(set (cc0)
33: (match_operand:DF 0 "general_operand" "gF"))]
34: ""
35: "tstd %0")
36:
37: (define_insn "tstsf"
38: [(set (cc0)
39: (match_operand:SF 0 "general_operand" "gF"))]
40: ""
41: "tstf %0")
42:
43: (define_insn "tstsi"
44: [(set (cc0)
45: (match_operand:SI 0 "general_operand" "g"))]
46: ""
47: "tstl %0")
48:
49: (define_insn "tsthi"
50: [(set (cc0)
51: (match_operand:HI 0 "general_operand" "g"))]
52: ""
53: "tstw %0")
54:
55: (define_insn "tstqi"
56: [(set (cc0)
57: (match_operand:QI 0 "general_operand" "g"))]
58: ""
59: "tstb %0")
60:
61: (define_insn "cmpdf"
62: [(set (cc0)
63: (minus (match_operand:DF 0 "general_operand" "gF")
64: (match_operand:DF 1 "general_operand" "gF")))]
65: ""
66: "cmpd %0,%1")
67:
68: (define_insn "cmpsf"
69: [(set (cc0)
70: (minus (match_operand:SF 0 "general_operand" "gF")
71: (match_operand:SF 1 "general_operand" "gF")))]
72: ""
73: "cmpf %0,%1")
74:
75: (define_insn "cmpsi"
76: [(set (cc0)
77: (minus (match_operand:SI 0 "general_operand" "g")
78: (match_operand:SI 1 "general_operand" "g")))]
79: ""
80: "cmpl %0,%1")
81:
82: (define_insn "cmphi"
83: [(set (cc0)
84: (minus (match_operand:HI 0 "general_operand" "g")
85: (match_operand:HI 1 "general_operand" "g")))]
86: ""
87: "cmpw %0,%1")
88:
89: (define_insn "cmpqi"
90: [(set (cc0)
91: (minus (match_operand:QI 0 "general_operand" "g")
92: (match_operand:QI 1 "general_operand" "g")))]
93: ""
94: "cmpb %0,%1")
95:
96: (define_insn ""
97: [(set (cc0)
98: (and:SI (match_operand:SI 0 "general_operand" "g")
99: (match_operand:SI 1 "general_operand" "g")))]
100: ""
101: "bitl %0,%1")
102:
103: (define_insn ""
104: [(set (cc0)
105: (and:HI (match_operand:HI 0 "general_operand" "g")
106: (match_operand:HI 1 "general_operand" "g")))]
107: ""
108: "bitw %0,%1")
109:
110: (define_insn ""
111: [(set (cc0)
112: (and:QI (match_operand:QI 0 "general_operand" "g")
113: (match_operand:QI 1 "general_operand" "g")))]
114: ""
115: "bitb %0,%1")
116:
117: (define_insn "movdf"
118: [(set (match_operand:DF 0 "general_operand" "=g")
119: (match_operand:DF 1 "general_operand" "gF"))]
120: ""
121: "*
122: {
123: if (operands[1] == dconst0_rtx)
124: return \"clrd %0\";
125: return \"movd %1,%0\";
126: }")
127:
128: (define_insn "movsf"
129: [(set (match_operand:SF 0 "general_operand" "=g")
130: (match_operand:SF 1 "general_operand" "gF"))]
131: ""
132: "*
133: {
134: if (operands[1] == fconst0_rtx)
135: return \"clrf %0\";
136: return \"movf %1,%0\";
137: }")
138:
139: (define_insn "movti"
140: [(set (match_operand:TI 0 "general_operand" "=g")
141: (match_operand:TI 1 "general_operand" "g"))]
142: ""
143: "movh %1,%0")
144:
145: (define_insn "movdi"
146: [(set (match_operand:DI 0 "general_operand" "=g")
147: (match_operand:DI 1 "general_operand" "g"))]
148: ""
149: "movd %1,%0")
150:
151: (define_insn "movsi"
152: [(set (match_operand:SI 0 "general_operand" "=g")
153: (match_operand:SI 1 "general_operand" "g"))]
154: ""
155: "*
156: { if (operands[1] == const1_rtx
157: && GET_MODE (REG_NOTES (insn)) == (enum machine_mode) REG_WAS_0)
158: return \"incl %0\";
159: if (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST)
160: {
161: if (push_operand (operands[0], SImode))
162: return \"pushab %a1\";
163: return \"movab %a1,%0\";
164: }
165: if (operands[1] == const0_rtx)
166: return \"clrl %0\";
167: if (GET_CODE (operands[1]) == CONST_INT
168: && (unsigned) INTVAL (operands[1]) >= 64)
169: {
170: int i = INTVAL (operands[1]);
171: if ((unsigned)(-i) < 64)
172: {
173: operands[1] = gen_rtx (CONST_INT, VOIDmode, -i);
174: return \"mnegl %1,%0\";
175: }
176: if ((unsigned)i < 0x100)
177: return \"movzbl %1,%0\";
178: if (i >= -0x80 && i < 0)
179: return \"cvtbl %1,%0\";
180: if ((unsigned)i < 0x10000)
181: return \"movzwl %1,%0\";
182: if (i >= -0x8000 && i < 0)
183: return \"cvtwl %1,%0\";
184: }
185: if (push_operand (operands[0], SImode))
186: return \"pushl %1\";
187: return \"movl %1,%0\";
188: }")
189:
190: (define_insn "movhi"
191: [(set (match_operand:HI 0 "general_operand" "=g")
192: (match_operand:HI 1 "general_operand" "g"))]
193: ""
194: "*
195: {
196: if (operands[1] == const1_rtx
197: && GET_MODE (REG_NOTES (insn)) == (enum machine_mode) REG_WAS_0)
198: return \"incw %0\";
199: if (operands[1] == const0_rtx)
200: return \"clrw %0\";
201: if (GET_CODE (operands[1]) == CONST_INT
202: && (unsigned) INTVAL (operands[1]) >= 64)
203: {
204: int i = INTVAL (operands[1]);
205: if ((unsigned)(-i) < 64)
206: {
207: operands[1] = gen_rtx (CONST_INT, VOIDmode, -i);
208: return \"mnegw %1,%0\";
209: }
210: if ((unsigned)i < 0x100)
211: return \"movzbw %1,%0\";
212: if (i >= -0x80 && i < 0)
213: return \"cvtbw %1,%0\";
214: }
215: return \"movw %1,%0\";
216: }")
217:
218: (define_insn "movqi"
219: [(set (match_operand:QI 0 "general_operand" "=g")
220: (match_operand:QI 1 "general_operand" "g"))]
221: ""
222: "*
223: {
224: if (operands[1] == const0_rtx)
225: return \"clrb %0\";
226: return \"movb %1,%0\";
227: }")
228:
229: ;; The definition of this insn does not really explain what it does,
230: ;; but it should suffice
231: ;; that anything generated as this insn will be recognized as one
232: ;; and that it won't successfully combine with anything.
233: (define_insn "movstrhi"
234: [(set (match_operand:BLK 0 "general_operand" "=g")
235: (match_operand:BLK 1 "general_operand" "g"))
236: (use (match_operand:HI 2 "general_operand" "g"))
237: (clobber (nil)) ;;- Clobber everything in memory
238: (clobber (reg 0))
239: (clobber (reg 1))
240: (clobber (reg 2))
241: (clobber (reg 3))
242: (clobber (reg 4))
243: (clobber (reg 5))]
244: ""
245: "movc3 %2,%1,%0")
246:
247: ;;- load or push effective address
248: ;; These come after the move patterns
249: ;; because we don't want pushl $1 turned into pushad 1.
250:
251: (define_insn ""
252: [(set (match_operand:SI 0 "general_operand" "=g")
253: (match_operand:QI 1 "address_operand" "p"))]
254: ""
255: "*
256: {
257: if (push_operand (operands[0], SImode))
258: return \"pushab %a1\";
259: return \"movab %a1,%0\";
260: }")
261:
262: (define_insn ""
263: [(set (match_operand:SI 0 "general_operand" "=g")
264: (match_operand:HI 1 "address_operand" "p"))]
265: ""
266: "*
267: {
268: if (push_operand (operands[0], SImode))
269: return \"pushaw %a1\";
270: return \"movaw %a1,%0\";
271: }")
272:
273: (define_insn ""
274: [(set (match_operand:SI 0 "general_operand" "=g")
275: (match_operand:SI 1 "address_operand" "p"))]
276: ""
277: "*
278: {
279: if (push_operand (operands[0], SImode))
280: return \"pushal %a1\";
281: return \"moval %a1,%0\";
282: }")
283:
284: (define_insn ""
285: [(set (match_operand:SI 0 "general_operand" "=g")
286: (match_operand:SF 1 "address_operand" "p"))]
287: ""
288: "*
289: {
290: if (push_operand (operands[0], SImode))
291: return \"pushaf %a1\";
292: return \"movaf %a1,%0\";
293: }")
294:
295: (define_insn ""
296: [(set (match_operand:SI 0 "general_operand" "=g")
297: (match_operand:DF 1 "address_operand" "p"))]
298: ""
299: "*
300: {
301: if (push_operand (operands[0], SImode))
302: return \"pushad %a1\";
303: return \"movad %a1,%0\";
304: }")
305:
306: (define_insn "extendqihi2"
307: [(set (match_operand:HI 0 "general_operand" "=g")
308: (sign_extend:HI (match_operand:QI 1 "general_operand" "g")))]
309: ""
310: "cvtbw %1,%0")
311:
312: (define_insn "extendqisi2"
313: [(set (match_operand:SI 0 "general_operand" "=g")
314: (sign_extend:SI (match_operand:QI 1 "general_operand" "g")))]
315: ""
316: "cvtbl %1,%0")
317:
318: (define_insn "floatqisf2"
319: [(set (match_operand:SF 0 "general_operand" "=g")
320: (float:SF (match_operand:QI 1 "general_operand" "g")))]
321: ""
322: "cvtbf %1,%0")
323:
324: (define_insn "floatqidf2"
325: [(set (match_operand:DF 0 "general_operand" "=g")
326: (float:DF (match_operand:QI 1 "general_operand" "g")))]
327: ""
328: "cvtbd %1,%0")
329:
330: (define_insn "trunchiqi2"
331: [(set (match_operand:QI 0 "general_operand" "=g")
332: (truncate:QI (match_operand:HI 1 "general_operand" "g")))]
333: ""
334: "cvtwb %1,%0")
335:
336: (define_insn "extendhisi2"
337: [(set (match_operand:SI 0 "general_operand" "=g")
338: (sign_extend:SI (match_operand:HI 1 "general_operand" "g")))]
339: ""
340: "cvtwl %1,%0")
341:
342: (define_insn "floathisf2"
343: [(set (match_operand:SF 0 "general_operand" "=g")
344: (float:SF (match_operand:HI 1 "general_operand" "g")))]
345: ""
346: "cvtwf %1,%0")
347:
348: (define_insn "floathidf2"
349: [(set (match_operand:DF 0 "general_operand" "=g")
350: (float:DF (match_operand:HI 1 "general_operand" "g")))]
351: ""
352: "cvtwd %1,%0")
353:
354: (define_insn "truncsiqi2"
355: [(set (match_operand:QI 0 "general_operand" "=g")
356: (truncate:QI (match_operand:SI 1 "general_operand" "g")))]
357: ""
358: "cvtlb %1,%0")
359:
360: (define_insn "truncsihi2"
361: [(set (match_operand:HI 0 "general_operand" "=g")
362: (truncate:HI (match_operand:SI 1 "general_operand" "g")))]
363: ""
364: "cvtlw %1,%0")
365:
366: (define_insn "floatsisf2"
367: [(set (match_operand:SF 0 "general_operand" "=g")
368: (float:SF (match_operand:SI 1 "general_operand" "g")))]
369: ""
370: "cvtlf %1,%0")
371:
372: (define_insn "floatsidf2"
373: [(set (match_operand:DF 0 "general_operand" "=g")
374: (float:DF (match_operand:SI 1 "general_operand" "g")))]
375: ""
376: "cvtld %1,%0")
377:
378: (define_insn "fixsfqi2"
379: [(set (match_operand:QI 0 "general_operand" "=g")
380: (fix:QI (match_operand:SF 1 "general_operand" "gF")))]
381: ""
382: "cvtfb %1,%0")
383:
384: (define_insn "fixsfhi2"
385: [(set (match_operand:HI 0 "general_operand" "=g")
386: (fix:HI (match_operand:SF 1 "general_operand" "gF")))]
387: ""
388: "cvtfw %1,%0")
389:
390: (define_insn "fixsfsi2"
391: [(set (match_operand:SI 0 "general_operand" "=g")
392: (fix:SI (match_operand:SF 1 "general_operand" "gF")))]
393: ""
394: "cvtfl %1,%0")
395:
396: (define_insn "extendsfdf2"
397: [(set (match_operand:DF 0 "general_operand" "=g")
398: (float_extend:DF (match_operand:SF 1 "general_operand" "gF")))]
399: ""
400: "cvtfd %1,%0")
401:
402: (define_insn "fixdfqi2"
403: [(set (match_operand:QI 0 "general_operand" "=g")
404: (fix:QI (match_operand:DF 1 "general_operand" "gF")))]
405: ""
406: "cvtdb %1,%0")
407:
408: (define_insn "fixdfhi2"
409: [(set (match_operand:HI 0 "general_operand" "=g")
410: (fix:HI (match_operand:DF 1 "general_operand" "gF")))]
411: ""
412: "cvtdw %1,%0")
413:
414: (define_insn "fixdfsi2"
415: [(set (match_operand:SI 0 "general_operand" "=g")
416: (fix:SI (match_operand:DF 1 "general_operand" "gF")))]
417: ""
418: "cvtdl %1,%0")
419:
420: (define_insn "truncdfsf2"
421: [(set (match_operand:SF 0 "general_operand" "=g")
422: (float_truncate:SF (match_operand:DF 1 "general_operand" "gF")))]
423: ""
424: "cvtdf %1,%0")
425:
426: (define_insn "zero_extendqihi2"
427: [(set (match_operand:HI 0 "general_operand" "=g")
428: (zero_extend:HI (match_operand:QI 1 "general_operand" "g")))]
429: ""
430: "movzbw %1,%0")
431:
432: (define_insn "zero_extendqisi2"
433: [(set (match_operand:SI 0 "general_operand" "=g")
434: (zero_extend:SI (match_operand:QI 1 "general_operand" "g")))]
435: ""
436: "movzbl %1,%0")
437:
438: (define_insn "zero_extendhisi2"
439: [(set (match_operand:SI 0 "general_operand" "=g")
440: (zero_extend:SI (match_operand:HI 1 "general_operand" "g")))]
441: ""
442: "movzwl %1,%0")
443:
444: ;;- All kinds of add instructions.
445:
446: (define_insn "adddf3"
447: [(set (match_operand:DF 0 "general_operand" "=g")
448: (plus:DF (match_operand:DF 1 "general_operand" "gF")
449: (match_operand:DF 2 "general_operand" "gF")))]
450: ""
451: "*
452: {
453: if (rtx_equal_p (operands[0], operands[1]))
454: return \"addd2 %2,%0\";
455: if (rtx_equal_p (operands[0], operands[2]))
456: return \"addd2 %1,%0\";
457: return \"addd3 %1,%2,%0\";
458: }")
459:
460: (define_insn "addsf3"
461: [(set (match_operand:SF 0 "general_operand" "=g")
462: (plus:SF (match_operand:SF 1 "general_operand" "gF")
463: (match_operand:SF 2 "general_operand" "gF")))]
464: ""
465: "*
466: {
467: if (rtx_equal_p (operands[0], operands[1]))
468: return \"addf2 %2,%0\";
469: if (rtx_equal_p (operands[0], operands[2]))
470: return \"addf2 %1,%0\";
471: return \"addf3 %1,%2,%0\";
472: }")
473:
474: (define_insn "addsi3"
475: [(set (match_operand:SI 0 "general_operand" "=g")
476: (plus:SI (match_operand:SI 1 "general_operand" "g")
477: (match_operand:SI 2 "general_operand" "g")))]
478: ""
479: "*
480: {
481: if (rtx_equal_p (operands[0], operands[1]))
482: {
483: if (operands[2] == const1_rtx)
484: return \"incl %0\";
485: if (GET_CODE (operands[1]) == CONST_INT
486: && INTVAL (operands[1]) == -1)
487: return \"decl %0\";
488: if (GET_CODE (operands[2]) == CONST_INT
489: && (unsigned) (- INTVAL (operands[2])) < 64)
490: return \"subl2 $%n2,%0\";
491: return \"addl2 %2,%0\";
492: }
493: if (rtx_equal_p (operands[0], operands[2]))
494: return \"addl2 %1,%0\";
495: if (GET_CODE (operands[2]) == CONST_INT
496: && GET_CODE (operands[1]) == REG)
497: {
498: if (push_operand (operands[0], SImode))
499: return \"pushab %c2(%1)\";
500: return \"movab %c2(%1),%0\";
501: }
502: if (GET_CODE (operands[2]) == CONST_INT
503: && (unsigned) (- INTVAL (operands[2])) < 64)
504: return \"subl3 $%n2,%1,%0\";
505: return \"addl3 %1,%2,%0\";
506: }")
507:
508: (define_insn "addhi3"
509: [(set (match_operand:HI 0 "general_operand" "=g")
510: (plus:HI (match_operand:HI 1 "general_operand" "g")
511: (match_operand:HI 2 "general_operand" "g")))]
512: ""
513: "*
514: {
515: if (rtx_equal_p (operands[0], operands[1]))
516: {
517: if (operands[2] == const1_rtx)
518: return \"incw %0\";
519: if (GET_CODE (operands[1]) == CONST_INT
520: && INTVAL (operands[1]) == -1)
521: return \"decw %0\";
522: if (GET_CODE (operands[2]) == CONST_INT
523: && (unsigned) (- INTVAL (operands[2])) < 64)
524: return \"subw2 $%n2,%0\";
525: return \"addw2 %2,%0\";
526: }
527: if (rtx_equal_p (operands[0], operands[2]))
528: return \"addw2 %1,%0\";
529: if (GET_CODE (operands[2]) == CONST_INT
530: && (unsigned) (- INTVAL (operands[2])) < 64)
531: return \"subw3 $%n2,%1,%0\";
532: return \"addw3 %1,%2,%0\";
533: }")
534:
535: (define_insn "addqi3"
536: [(set (match_operand:QI 0 "general_operand" "=g")
537: (plus:QI (match_operand:QI 1 "general_operand" "g")
538: (match_operand:QI 2 "general_operand" "g")))]
539: ""
540: "*
541: {
542: if (rtx_equal_p (operands[0], operands[1]))
543: {
544: if (operands[2] == const1_rtx)
545: return \"incb %0\";
546: if (GET_CODE (operands[1]) == CONST_INT
547: && INTVAL (operands[1]) == -1)
548: return \"decb %0\";
549: if (GET_CODE (operands[2]) == CONST_INT
550: && (unsigned) (- INTVAL (operands[2])) < 64)
551: return \"subb2 $%n2,%0\";
552: return \"addb2 %2,%0\";
553: }
554: if (rtx_equal_p (operands[0], operands[2]))
555: return \"addb2 %1,%0\";
556: if (GET_CODE (operands[2]) == CONST_INT
557: && (unsigned) (- INTVAL (operands[2])) < 64)
558: return \"subb3 $%n2,%1,%0\";
559: return \"addb3 %1,%2,%0\";
560: }")
561:
562: ;;- All kinds of subtract instructions.
563:
564: (define_insn "subdf3"
565: [(set (match_operand:DF 0 "general_operand" "=g")
566: (minus:DF (match_operand:DF 1 "general_operand" "gF")
567: (match_operand:DF 2 "general_operand" "gF")))]
568: ""
569: "*
570: {
571: if (rtx_equal_p (operands[0], operands[1]))
572: return \"subd2 %2,%0\";
573: return \"subd3 %2,%1,%0\";
574: }")
575:
576: (define_insn "subsf3"
577: [(set (match_operand:SF 0 "general_operand" "=g")
578: (minus:SF (match_operand:SF 1 "general_operand" "gF")
579: (match_operand:SF 2 "general_operand" "gF")))]
580: ""
581: "*
582: {
583: if (rtx_equal_p (operands[0], operands[1]))
584: return \"subf2 %2,%0\";
585: return \"subf3 %2,%1,%0\";
586: }")
587:
588: (define_insn "subsi3"
589: [(set (match_operand:SI 0 "general_operand" "=g")
590: (minus:SI (match_operand:SI 1 "general_operand" "g")
591: (match_operand:SI 2 "general_operand" "g")))]
592: ""
593: "*
594: {
595: if (rtx_equal_p (operands[0], operands[1]))
596: {
597: if (operands[2] == const1_rtx)
598: return \"decl %0\";
599: return \"subl2 %2,%0\";
600: }
601: return \"subl3 %2,%1,%0\";
602: }")
603:
604: (define_insn "subhi3"
605: [(set (match_operand:HI 0 "general_operand" "=g")
606: (minus:HI (match_operand:HI 1 "general_operand" "g")
607: (match_operand:HI 2 "general_operand" "g")))]
608: ""
609: "*
610: {
611: if (rtx_equal_p (operands[0], operands[1]))
612: {
613: if (operands[2] == const1_rtx)
614: return \"decw %0\";
615: return \"subw2 %2,%0\";
616: }
617: return \"subw3 %2,%1,%0\";
618: }")
619:
620: (define_insn "subqi3"
621: [(set (match_operand:QI 0 "general_operand" "=g")
622: (minus:QI (match_operand:QI 1 "general_operand" "g")
623: (match_operand:QI 2 "general_operand" "g")))]
624: ""
625: "*
626: {
627: if (rtx_equal_p (operands[0], operands[1]))
628: {
629: if (operands[2] == const1_rtx)
630: return \"decb %0\";
631: return \"subb2 %2,%0\";
632: }
633: return \"subb3 %2,%1,%0\";
634: }")
635:
636: ;;- Multiply instructions.
637:
638: (define_insn "muldf3"
639: [(set (match_operand:DF 0 "general_operand" "=g")
640: (mult:DF (match_operand:DF 1 "general_operand" "gF")
641: (match_operand:DF 2 "general_operand" "gF")))]
642: ""
643: "*
644: {
645: if (rtx_equal_p (operands[0], operands[1]))
646: return \"muld2 %2,%0\";
647: if (rtx_equal_p (operands[0], operands[2]))
648: return \"muld2 %1,%0\";
649: return \"muld3 %1,%2,%0\";
650: }")
651:
652: (define_insn "mulsf3"
653: [(set (match_operand:SF 0 "general_operand" "=g")
654: (mult:SF (match_operand:SF 1 "general_operand" "gF")
655: (match_operand:SF 2 "general_operand" "gF")))]
656: ""
657: "*
658: {
659: if (rtx_equal_p (operands[0], operands[1]))
660: return \"mulf2 %2,%0\";
661: if (rtx_equal_p (operands[0], operands[2]))
662: return \"mulf2 %1,%0\";
663: return \"mulf3 %1,%2,%0\";
664: }")
665:
666: (define_insn "mulsi3"
667: [(set (match_operand:SI 0 "general_operand" "=g")
668: (mult:SI (match_operand:SI 1 "general_operand" "g")
669: (match_operand:SI 2 "general_operand" "g")))]
670: ""
671: "*
672: {
673: if (rtx_equal_p (operands[0], operands[1]))
674: return \"mull2 %2,%0\";
675: if (rtx_equal_p (operands[0], operands[2]))
676: return \"mull2 %1,%0\";
677: return \"mull3 %1,%2,%0\";
678: }")
679:
680: (define_insn "mulhi3"
681: [(set (match_operand:HI 0 "general_operand" "=g")
682: (mult:HI (match_operand:HI 1 "general_operand" "g")
683: (match_operand:HI 2 "general_operand" "g")))]
684: ""
685: "*
686: {
687: if (rtx_equal_p (operands[0], operands[1]))
688: return \"mulw2 %2,%0\";
689: if (rtx_equal_p (operands[0], operands[2]))
690: return \"mulw2 %1,%0\";
691: return \"mulw3 %1,%2,%0\";
692: }")
693:
694: (define_insn "mulqi3"
695: [(set (match_operand:QI 0 "general_operand" "=g")
696: (mult:QI (match_operand:QI 1 "general_operand" "g")
697: (match_operand:QI 2 "general_operand" "g")))]
698: ""
699: "*
700: {
701: if (rtx_equal_p (operands[0], operands[1]))
702: return \"mulb2 %2,%0\";
703: if (rtx_equal_p (operands[0], operands[2]))
704: return \"mulb2 %1,%0\";
705: return \"mulb3 %1,%2,%0\";
706: }")
707:
708: ;;- Divide instructions.
709:
710: (define_insn "divdf3"
711: [(set (match_operand:DF 0 "general_operand" "=g")
712: (div:DF (match_operand:DF 1 "general_operand" "gF")
713: (match_operand:DF 2 "general_operand" "gF")))]
714: ""
715: "*
716: {
717: if (rtx_equal_p (operands[0], operands[1]))
718: return \"divd2 %2,%0\";
719: return \"divd3 %2,%1,%0\";
720: }")
721:
722: (define_insn "divsf3"
723: [(set (match_operand:SF 0 "general_operand" "=g")
724: (div:SF (match_operand:SF 1 "general_operand" "gF")
725: (match_operand:SF 2 "general_operand" "gF")))]
726: ""
727: "*
728: {
729: if (rtx_equal_p (operands[0], operands[1]))
730: return \"divf2 %2,%0\";
731: return \"divf3 %2,%1,%0\";
732: }")
733:
734: (define_insn "divsi3"
735: [(set (match_operand:SI 0 "general_operand" "=g")
736: (div:SI (match_operand:SI 1 "general_operand" "g")
737: (match_operand:SI 2 "general_operand" "g")))]
738: ""
739: "*
740: {
741: if (rtx_equal_p (operands[0], operands[1]))
742: return \"divl2 %2,%0\";
743: return \"divl3 %2,%1,%0\";
744: }")
745:
746: (define_insn "divhi3"
747: [(set (match_operand:HI 0 "general_operand" "=g")
748: (div:HI (match_operand:HI 1 "general_operand" "g")
749: (match_operand:HI 2 "general_operand" "g")))]
750: ""
751: "*
752: {
753: if (rtx_equal_p (operands[0], operands[1]))
754: return \"divw2 %2,%0\";
755: return \"divw3 %2,%1,%0\";
756: }")
757:
758: (define_insn "divqi3"
759: [(set (match_operand:QI 0 "general_operand" "=g")
760: (div:QI (match_operand:QI 1 "general_operand" "g")
761: (match_operand:QI 2 "general_operand" "g")))]
762: ""
763: "*
764: {
765: if (rtx_equal_p (operands[0], operands[1]))
766: return \"divb2 %2,%0\";
767: return \"divb3 %2,%1,%0\";
768: }")
769:
770: ;This is left out because it is very slow;
771: ;we are better off programming around the "lack" of this insn.
772: ;(define_insn "divmoddisi4"
773: ; [(set (match_operand:SI 0 "general_operand" "=g")
774: ; (div:SI (match_operand:DI 1 "general_operand" "g")
775: ; (match_operand:SI 2 "general_operand" "g")))
776: ; (set (match_operand:SI 3 "general_operand" "=g")
777: ; (mod:SI (match_operand:DI 1 "general_operand" "g")
778: ; (match_operand:SI 2 "general_operand" "g")))]
779: ; ""
780: ; "ediv %2,%1,%0,%3")
781:
782: (define_insn "andcbsi3"
783: [(set (match_operand:SI 0 "general_operand" "=g")
784: (and:SI (match_operand:SI 1 "general_operand" "g")
785: (not:SI (match_operand:SI 2 "general_operand" "g"))))]
786: ""
787: "*
788: {
789: if (rtx_equal_p (operands[0], operands[1]))
790: return \"bicl2 %2,%0\";
791: return \"bicl3 %2,%1,%0\";
792: }")
793:
794: (define_insn "andcbhi3"
795: [(set (match_operand:HI 0 "general_operand" "=g")
796: (and:HI (match_operand:HI 1 "general_operand" "g")
797: (not:HI (match_operand:HI 2 "general_operand" "g"))))]
798: ""
799: "*
800: {
801: if (rtx_equal_p (operands[0], operands[1]))
802: return \"bicw2 %2,%0\";
803: return \"bicw3 %2,%1,%0\";
804: }")
805:
806: (define_insn "andcbqi3"
807: [(set (match_operand:QI 0 "general_operand" "=g")
808: (and:QI (match_operand:QI 1 "general_operand" "g")
809: (not:QI (match_operand:QI 2 "general_operand" "g"))))]
810: ""
811: "*
812: {
813: if (rtx_equal_p (operands[0], operands[1]))
814: return \"bicb2 %2,%0\";
815: return \"bicb3 %2,%1,%0\";
816: }")
817:
818: ;; The following are needed because constant propagation can
819: ;; create them starting from the bic insn patterns above.
820:
821: (define_insn ""
822: [(set (match_operand:SI 0 "general_operand" "=g")
823: (and:SI (match_operand:SI 1 "general_operand" "g")
824: (match_operand:SI 2 "general_operand" "g")))]
825: "GET_CODE (operands[2]) == CONST_INT"
826: "*
827: { operands[2] = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[2]));
828: if (rtx_equal_p (operands[1], operands[0]))
829: return \"bicl2 %2,%0\";
830: return \"bicl3 %2,%1,%0\";
831: }")
832:
833: (define_insn ""
834: [(set (match_operand:HI 0 "general_operand" "=g")
835: (and:HI (match_operand:HI 1 "general_operand" "g")
836: (match_operand:HI 2 "general_operand" "g")))]
837: "GET_CODE (operands[2]) == CONST_INT"
838: "*
839: { operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xffff & ~INTVAL (operands[2]));
840: if (rtx_equal_p (operands[1], operands[0]))
841: return \"bicw2 %2,%0\";
842: return \"bicw3 %2,%1,%0\";
843: }")
844:
845: (define_insn ""
846: [(set (match_operand:QI 0 "general_operand" "=g")
847: (and:QI (match_operand:QI 1 "general_operand" "g")
848: (match_operand:QI 2 "general_operand" "g")))]
849: "GET_CODE (operands[2]) == CONST_INT"
850: "*
851: { operands[2] = gen_rtx (CONST_INT, VOIDmode, 0xff & ~INTVAL (operands[2]));
852: if (rtx_equal_p (operands[1], operands[0]))
853: return \"bicb2 %2,%0\";
854: return \"bicb3 %2,%1,%0\";
855: }")
856:
857: ;;- Bit set instructions.
858:
859: (define_insn "iorsi3"
860: [(set (match_operand:SI 0 "general_operand" "=g")
861: (ior:SI (match_operand:SI 1 "general_operand" "g")
862: (match_operand:SI 2 "general_operand" "g")))]
863: ""
864: "*
865: {
866: if (rtx_equal_p (operands[0], operands[1]))
867: return \"bisl2 %2,%0\";
868: if (rtx_equal_p (operands[0], operands[2]))
869: return \"bisl2 %1,%0\";
870: return \"bisl3 %2,%1,%0\";
871: }")
872:
873: (define_insn "iorhi3"
874: [(set (match_operand:HI 0 "general_operand" "=g")
875: (ior:HI (match_operand:HI 1 "general_operand" "g")
876: (match_operand:HI 2 "general_operand" "g")))]
877: ""
878: "*
879: {
880: if (rtx_equal_p (operands[0], operands[1]))
881: return \"bisw2 %2,%0\";
882: if (rtx_equal_p (operands[0], operands[2]))
883: return \"bisw2 %1,%0\";
884: return \"bisw3 %2,%1,%0\";
885: }")
886:
887: (define_insn "iorqi3"
888: [(set (match_operand:QI 0 "general_operand" "=g")
889: (ior:QI (match_operand:QI 1 "general_operand" "g")
890: (match_operand:QI 2 "general_operand" "g")))]
891: ""
892: "*
893: {
894: if (rtx_equal_p (operands[0], operands[1]))
895: return \"bisb2 %2,%0\";
896: if (rtx_equal_p (operands[0], operands[2]))
897: return \"bisb2 %1,%0\";
898: return \"bisb3 %2,%1,%0\";
899: }")
900:
901: ;;- xor instructions.
902:
903: (define_insn "xorsi3"
904: [(set (match_operand:SI 0 "general_operand" "=g")
905: (xor:SI (match_operand:SI 1 "general_operand" "g")
906: (match_operand:SI 2 "general_operand" "g")))]
907: ""
908: "*
909: {
910: if (rtx_equal_p (operands[0], operands[1]))
911: return \"xorl2 %2,%0\";
912: if (rtx_equal_p (operands[0], operands[2]))
913: return \"xorl2 %1,%0\";
914: return \"xorl3 %2,%1,%0\";
915: }")
916:
917: (define_insn "xorhi3"
918: [(set (match_operand:HI 0 "general_operand" "=g")
919: (xor:HI (match_operand:HI 1 "general_operand" "g")
920: (match_operand:HI 2 "general_operand" "g")))]
921: ""
922: "*
923: {
924: if (rtx_equal_p (operands[0], operands[1]))
925: return \"xorw2 %2,%0\";
926: if (rtx_equal_p (operands[0], operands[2]))
927: return \"xorw2 %1,%0\";
928: return \"xorw3 %2,%1,%0\";
929: }")
930:
931: (define_insn "xorqi3"
932: [(set (match_operand:QI 0 "general_operand" "=g")
933: (xor:QI (match_operand:QI 1 "general_operand" "g")
934: (match_operand:QI 2 "general_operand" "g")))]
935: ""
936: "*
937: {
938: if (rtx_equal_p (operands[0], operands[1]))
939: return \"xorb2 %2,%0\";
940: if (rtx_equal_p (operands[0], operands[2]))
941: return \"xorb2 %1,%0\";
942: return \"xorb3 %2,%1,%0\";
943: }")
944:
945: (define_insn "negdf2"
946: [(set (match_operand:DF 0 "general_operand" "=g")
947: (neg:DF (match_operand:DF 1 "general_operand" "gF")))]
948: ""
949: "mnegd %1,%0")
950:
951: (define_insn "negsf2"
952: [(set (match_operand:SF 0 "general_operand" "=g")
953: (neg:SF (match_operand:SF 1 "general_operand" "gF")))]
954: ""
955: "mnegf %1,%0")
956:
957: (define_insn "negsi2"
958: [(set (match_operand:SI 0 "general_operand" "=g")
959: (neg:SI (match_operand:SI 1 "general_operand" "g")))]
960: ""
961: "mnegl %1,%0")
962:
963: (define_insn "neghi2"
964: [(set (match_operand:HI 0 "general_operand" "=g")
965: (neg:HI (match_operand:HI 1 "general_operand" "g")))]
966: ""
967: "mnegw %1,%0")
968:
969: (define_insn "negqi2"
970: [(set (match_operand:QI 0 "general_operand" "=g")
971: (neg:QI (match_operand:QI 1 "general_operand" "g")))]
972: ""
973: "mnegb %1,%0")
974:
975: (define_insn "one_cmplsi2"
976: [(set (match_operand:SI 0 "general_operand" "=g")
977: (not:SI (match_operand:SI 1 "general_operand" "g")))]
978: ""
979: "mcoml %1,%0")
980:
981: (define_insn "one_cmplhi2"
982: [(set (match_operand:HI 0 "general_operand" "=g")
983: (not:HI (match_operand:HI 1 "general_operand" "g")))]
984: ""
985: "mcomw %1,%0")
986:
987: (define_insn "one_cmplqi2"
988: [(set (match_operand:QI 0 "general_operand" "=g")
989: (not:QI (match_operand:QI 1 "general_operand" "g")))]
990: ""
991: "mcomb %1,%0")
992:
993: (define_insn "ashlsi3"
994: [(set (match_operand:SI 0 "general_operand" "=g")
995: (ashift:SI (match_operand:SI 1 "general_operand" "g")
996: (match_operand:QI 2 "general_operand" "g")))]
997: ""
998: "ashl %2,%1,%0")
999:
1000: (define_insn "ashldi3"
1001: [(set (match_operand:DI 0 "general_operand" "=g")
1002: (ashift:DI (match_operand:DI 1 "general_operand" "g")
1003: (match_operand:QI 2 "general_operand" "g")))]
1004: ""
1005: "ashq %2,%1,%0")
1006:
1007: (define_insn "rotlsi3"
1008: [(set (match_operand:SI 0 "general_operand" "=g")
1009: (rotate:SI (match_operand:SI 1 "general_operand" "g")
1010: (match_operand:QI 2 "general_operand" "g")))]
1011: ""
1012: "rotl %2,%1,%0")
1013:
1014: (define_insn "rotldi3"
1015: [(set (match_operand:DI 0 "general_operand" "=g")
1016: (rotate:DI (match_operand:DI 1 "general_operand" "g")
1017: (match_operand:QI 2 "general_operand" "g")))]
1018: ""
1019: "rotq %2,%1,%0")
1020:
1021: (define_insn ""
1022: [(set (match_operand:SI 0 "general_operand" "=g")
1023: (mult:SI (plus:SI (match_operand:SI 1 "general_operand" "g")
1024: (match_operand:SI 2 "general_operand" "g"))
1025: (match_operand:SI 3 "general_operand" "g")))]
1026: ""
1027: "index %1,$??,$??,%3,%2,%0")
1028:
1029: (define_insn ""
1030: [(set (cc0)
1031: (minus
1032: (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
1033: (match_operand:SI 1 "general_operand" "g")
1034: (match_operand:SI 2 "general_operand" "g"))
1035: (match_operand:SI 3 "general_operand" "g")))]
1036: ""
1037: "cmpv %2,%1,%0,%3")
1038:
1039: (define_insn ""
1040: [(set (cc0)
1041: (minus
1042: (zero_extract:SI (match_operand:QI 0 "general_operand" "g")
1043: (match_operand:SI 1 "general_operand" "g")
1044: (match_operand:SI 2 "general_operand" "g"))
1045: (match_operand:SI 3 "general_operand" "g")))]
1046: ""
1047: "cmpzv %2,%1,%0,%3")
1048:
1049: (define_insn "extv"
1050: [(set (match_operand:SI 0 "general_operand" "=g")
1051: (sign_extract:SI (match_operand:QI 1 "general_operand" "g")
1052: (match_operand:SI 2 "general_operand" "g")
1053: (match_operand:SI 3 "general_operand" "g")))]
1054: ""
1055: "extv %3,%2,%1,%0")
1056:
1057: (define_insn "extzv"
1058: [(set (match_operand:SI 0 "general_operand" "=g")
1059: (zero_extract:SI (match_operand:QI 1 "general_operand" "g")
1060: (match_operand:SI 2 "general_operand" "g")
1061: (match_operand:SI 3 "general_operand" "g")))]
1062: ""
1063: "extzv %3,%2,%1,%0")
1064:
1065: (define_insn ""
1066: [(set (match_operand:SI 0 "general_operand" "=g")
1067: (sign_extract:SI (match_operand:SI 1 "general_operand" "r")
1068: (match_operand:SI 2 "general_operand" "g")
1069: (match_operand:SI 3 "general_operand" "g")))]
1070: ""
1071: "extv %3,%2,%1,%0")
1072:
1073: (define_insn ""
1074: [(set (match_operand:SI 0 "general_operand" "=g")
1075: (zero_extract:SI (match_operand:SI 1 "general_operand" "r")
1076: (match_operand:SI 2 "general_operand" "g")
1077: (match_operand:SI 3 "general_operand" "g")))]
1078: ""
1079: "extzv %3,%2,%1,%0")
1080:
1081: (define_insn "insv"
1082: [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "=g")
1083: (match_operand:SI 1 "general_operand" "g")
1084: (match_operand:SI 2 "general_operand" "g"))
1085: (match_operand:SI 3 "general_operand" "g"))]
1086: ""
1087: "insv %3,%2,%1,%0")
1088:
1089: (define_insn ""
1090: [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "=r")
1091: (match_operand:SI 1 "general_operand" "g")
1092: (match_operand:SI 2 "general_operand" "g"))
1093: (match_operand:SI 3 "general_operand" "g"))]
1094: ""
1095: "insv %3,%2,%1,%0")
1096:
1097: (define_insn "jump"
1098: [(set (pc)
1099: (label_ref (match_operand 0 "" "")))]
1100: ""
1101: "jbr %l0")
1102:
1103: (define_insn "beq"
1104: [(set (pc)
1105: (if_then_else (eq (cc0)
1106: (const_int 0))
1107: (label_ref (match_operand 0 "" ""))
1108: (pc)))]
1109: ""
1110: "jeql %l0")
1111:
1112: (define_insn "bne"
1113: [(set (pc)
1114: (if_then_else (ne (cc0)
1115: (const_int 0))
1116: (label_ref (match_operand 0 "" ""))
1117: (pc)))]
1118: ""
1119: "jneq %l0")
1120:
1121: (define_insn "bgt"
1122: [(set (pc)
1123: (if_then_else (gt (cc0)
1124: (const_int 0))
1125: (label_ref (match_operand 0 "" ""))
1126: (pc)))]
1127: ""
1128: "jgtr %l0")
1129:
1130: (define_insn "bgtu"
1131: [(set (pc)
1132: (if_then_else (gtu (cc0)
1133: (const_int 0))
1134: (label_ref (match_operand 0 "" ""))
1135: (pc)))]
1136: ""
1137: "jgtru %l0")
1138:
1139: (define_insn "blt"
1140: [(set (pc)
1141: (if_then_else (lt (cc0)
1142: (const_int 0))
1143: (label_ref (match_operand 0 "" ""))
1144: (pc)))]
1145: ""
1146: "jlss %l0")
1147:
1148: (define_insn "bltu"
1149: [(set (pc)
1150: (if_then_else (ltu (cc0)
1151: (const_int 0))
1152: (label_ref (match_operand 0 "" ""))
1153: (pc)))]
1154: ""
1155: "jlssu %l0")
1156:
1157: (define_insn "bge"
1158: [(set (pc)
1159: (if_then_else (ge (cc0)
1160: (const_int 0))
1161: (label_ref (match_operand 0 "" ""))
1162: (pc)))]
1163: ""
1164: "jgeq %l0")
1165:
1166: (define_insn "bgeu"
1167: [(set (pc)
1168: (if_then_else (geu (cc0)
1169: (const_int 0))
1170: (label_ref (match_operand 0 "" ""))
1171: (pc)))]
1172: ""
1173: "jgequ %l0")
1174:
1175: (define_insn "ble"
1176: [(set (pc)
1177: (if_then_else (le (cc0)
1178: (const_int 0))
1179: (label_ref (match_operand 0 "" ""))
1180: (pc)))]
1181: ""
1182: "jleq %l0")
1183:
1184: (define_insn "bleu"
1185: [(set (pc)
1186: (if_then_else (leu (cc0)
1187: (const_int 0))
1188: (label_ref (match_operand 0 "" ""))
1189: (pc)))]
1190: ""
1191: "jlequ %l0")
1192:
1193: (define_insn ""
1194: [(set (pc)
1195: (if_then_else (eq (cc0)
1196: (const_int 0))
1197: (pc)
1198: (label_ref (match_operand 0 "" ""))))]
1199: ""
1200: "jneq %l0")
1201:
1202: (define_insn ""
1203: [(set (pc)
1204: (if_then_else (ne (cc0)
1205: (const_int 0))
1206: (pc)
1207: (label_ref (match_operand 0 "" ""))))]
1208: ""
1209: "jeql %l0")
1210:
1211: (define_insn ""
1212: [(set (pc)
1213: (if_then_else (gt (cc0)
1214: (const_int 0))
1215: (pc)
1216: (label_ref (match_operand 0 "" ""))))]
1217: ""
1218: "jleq %l0")
1219:
1220: (define_insn ""
1221: [(set (pc)
1222: (if_then_else (gtu (cc0)
1223: (const_int 0))
1224: (pc)
1225: (label_ref (match_operand 0 "" ""))))]
1226: ""
1227: "jlequ %l0")
1228:
1229: (define_insn ""
1230: [(set (pc)
1231: (if_then_else (lt (cc0)
1232: (const_int 0))
1233: (pc)
1234: (label_ref (match_operand 0 "" ""))))]
1235: ""
1236: "jgeq %l0")
1237:
1238: (define_insn ""
1239: [(set (pc)
1240: (if_then_else (ltu (cc0)
1241: (const_int 0))
1242: (pc)
1243: (label_ref (match_operand 0 "" ""))))]
1244: ""
1245: "jgequ %l0")
1246:
1247: (define_insn ""
1248: [(set (pc)
1249: (if_then_else (ge (cc0)
1250: (const_int 0))
1251: (pc)
1252: (label_ref (match_operand 0 "" ""))))]
1253: ""
1254: "jlss %l0")
1255:
1256: (define_insn ""
1257: [(set (pc)
1258: (if_then_else (geu (cc0)
1259: (const_int 0))
1260: (pc)
1261: (label_ref (match_operand 0 "" ""))))]
1262: ""
1263: "jlssu %l0")
1264:
1265: (define_insn ""
1266: [(set (pc)
1267: (if_then_else (le (cc0)
1268: (const_int 0))
1269: (pc)
1270: (label_ref (match_operand 0 "" ""))))]
1271: ""
1272: "jgtr %l0")
1273:
1274: (define_insn ""
1275: [(set (pc)
1276: (if_then_else (leu (cc0)
1277: (const_int 0))
1278: (pc)
1279: (label_ref (match_operand 0 "" ""))))]
1280: ""
1281: "jgtru %l0")
1282:
1283: ;; Recognize jbs and jbc instructions.
1284:
1285: (define_insn ""
1286: [(set (pc)
1287: (if_then_else
1288: (ne (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
1289: (const_int 1)
1290: (match_operand:SI 1 "general_operand" "g"))
1291: (const_int 0))
1292: (label_ref (match_operand 2 "" ""))
1293: (pc)))]
1294: ""
1295: "jbs %1,%0,%l2")
1296:
1297: (define_insn ""
1298: [(set (pc)
1299: (if_then_else
1300: (eq (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
1301: (const_int 1)
1302: (match_operand:SI 1 "general_operand" "g"))
1303: (const_int 0))
1304: (label_ref (match_operand 2 "" ""))
1305: (pc)))]
1306: ""
1307: "jbc %1,%0,%l2")
1308:
1309: (define_insn ""
1310: [(set (pc)
1311: (if_then_else
1312: (ne (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
1313: (const_int 1)
1314: (match_operand:SI 1 "general_operand" "g"))
1315: (const_int 0))
1316: (pc)
1317: (label_ref (match_operand 2 "" ""))))]
1318: ""
1319: "jbc %1,%0,%l2")
1320:
1321: (define_insn ""
1322: [(set (pc)
1323: (if_then_else
1324: (eq (sign_extract:SI (match_operand:QI 0 "general_operand" "g")
1325: (const_int 1)
1326: (match_operand:SI 1 "general_operand" "g"))
1327: (const_int 0))
1328: (pc)
1329: (label_ref (match_operand 2 "" ""))))]
1330: ""
1331: "jbs %1,%0,%l2")
1332:
1333: (define_insn ""
1334: [(set (pc)
1335: (if_then_else
1336: (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
1337: (const_int 1)
1338: (match_operand:SI 1 "general_operand" "g"))
1339: (const_int 0))
1340: (label_ref (match_operand 2 "" ""))
1341: (pc)))]
1342: ""
1343: "jbs %1,%0,%l2")
1344:
1345: (define_insn ""
1346: [(set (pc)
1347: (if_then_else
1348: (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
1349: (const_int 1)
1350: (match_operand:SI 1 "general_operand" "g"))
1351: (const_int 0))
1352: (label_ref (match_operand 2 "" ""))
1353: (pc)))]
1354: ""
1355: "jbc %1,%0,%l2")
1356:
1357: (define_insn ""
1358: [(set (pc)
1359: (if_then_else
1360: (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
1361: (const_int 1)
1362: (match_operand:SI 1 "general_operand" "g"))
1363: (const_int 0))
1364: (pc)
1365: (label_ref (match_operand 2 "" ""))))]
1366: ""
1367: "jbc %1,%0,%l2")
1368:
1369: (define_insn ""
1370: [(set (pc)
1371: (if_then_else
1372: (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r")
1373: (const_int 1)
1374: (match_operand:SI 1 "general_operand" "g"))
1375: (const_int 0))
1376: (pc)
1377: (label_ref (match_operand 2 "" ""))))]
1378: ""
1379: "jbs %1,%0,%l2")
1380:
1381: (define_insn ""
1382: [(set (pc)
1383: (if_then_else
1384: (ne (and:SI (match_operand:SI 0 "general_operand" "g")
1385: (const_int 1))
1386: (const_int 0))
1387: (label_ref (match_operand 1 "" ""))
1388: (pc)))]
1389: ""
1390: "jlbs %0,%l1")
1391:
1392: (define_insn ""
1393: [(set (pc)
1394: (if_then_else
1395: (eq (and:SI (match_operand:SI 0 "general_operand" "g")
1396: (const_int 1))
1397: (const_int 0))
1398: (label_ref (match_operand 1 "" ""))
1399: (pc)))]
1400: ""
1401: "jlbc %0,%l1")
1402:
1403: (define_insn ""
1404: [(set (pc)
1405: (if_then_else
1406: (ne (and:SI (match_operand:SI 0 "general_operand" "g")
1407: (const_int 1))
1408: (const_int 0))
1409: (pc)
1410: (label_ref (match_operand 1 "" ""))))]
1411: ""
1412: "jlbc %0,%l1")
1413:
1414: (define_insn ""
1415: [(set (pc)
1416: (if_then_else
1417: (eq (and:SI (match_operand:SI 0 "general_operand" "g")
1418: (const_int 1))
1419: (const_int 0))
1420: (pc)
1421: (label_ref (match_operand 1 "" ""))))]
1422: ""
1423: "jlbs %0,%l1")
1424:
1425: ;; These four entries allow a jlbc or jlbs to be made
1426: ;; by combination with a bic.
1427: (define_insn ""
1428: [(set (pc)
1429: (if_then_else
1430: (ne (and:SI (match_operand:SI 0 "general_operand" "g")
1431: (not:SI (const_int -2)))
1432: (const_int 0))
1433: (label_ref (match_operand 1 "" ""))
1434: (pc)))]
1435: ""
1436: "jlbs %0,%l1")
1437:
1438: (define_insn ""
1439: [(set (pc)
1440: (if_then_else
1441: (eq (and:SI (match_operand:SI 0 "general_operand" "g")
1442: (not:SI (const_int -2)))
1443: (const_int 0))
1444: (label_ref (match_operand 1 "" ""))
1445: (pc)))]
1446: ""
1447: "jlbc %0,%l1")
1448:
1449: (define_insn ""
1450: [(set (pc)
1451: (if_then_else
1452: (ne (and:SI (match_operand:SI 0 "general_operand" "g")
1453: (not:SI (const_int -2)))
1454: (const_int 0))
1455: (pc)
1456: (label_ref (match_operand 1 "" ""))))]
1457: ""
1458: "jlbc %0,%l1")
1459:
1460: (define_insn ""
1461: [(set (pc)
1462: (if_then_else
1463: (eq (and:SI (match_operand:SI 0 "general_operand" "g")
1464: (not:SI (const_int -2)))
1465: (const_int 0))
1466: (pc)
1467: (label_ref (match_operand 1 "" ""))))]
1468: ""
1469: "jlbs %0,%l1")
1470:
1471: ;; Subtract-and-jump and Add-and-jump insns.
1472: ;; These are not used when output is for the Unix assembler
1473: ;; because it does not know how to modify them to reach far.
1474:
1475: ;; Normal sob insns.
1476:
1477: (define_insn ""
1478: [(set (pc)
1479: (if_then_else
1480: (gt (minus:SI (match_operand:SI 0 "general_operand" "+g")
1481: (const_int 1))
1482: (const_int 0))
1483: (label_ref (match_operand 1 "" ""))
1484: (pc)))
1485: (set (match_dup 0)
1486: (minus:SI (match_dup 0)
1487: (const_int 1)))]
1488: "!TARGET_UNIX_ASM"
1489: "jsobgtr %0,%l1")
1490:
1491: (define_insn ""
1492: [(set (pc)
1493: (if_then_else
1494: (ge (minus:SI (match_operand:SI 0 "general_operand" "+g")
1495: (const_int 1))
1496: (const_int 0))
1497: (label_ref (match_operand 1 "" ""))
1498: (pc)))
1499: (set (match_dup 0)
1500: (minus:SI (match_dup 0)
1501: (const_int 1)))]
1502: "!TARGET_UNIX_ASM"
1503: "jsobgeq %0,%l1")
1504:
1505: ;; Reversed sob insns.
1506:
1507: (define_insn ""
1508: [(set (pc)
1509: (if_then_else
1510: (le (minus:SI (match_operand:SI 0 "general_operand" "+g")
1511: (const_int 1))
1512: (const_int 0))
1513: (pc)
1514: (label_ref (match_operand 1 "" ""))))
1515: (set (match_dup 0)
1516: (minus:SI (match_dup 0)
1517: (const_int 1)))]
1518: "!TARGET_UNIX_ASM"
1519: "jsobgtr %0,%l1")
1520:
1521: (define_insn ""
1522: [(set (pc)
1523: (if_then_else
1524: (lt (minus:SI (match_operand:SI 0 "general_operand" "+g")
1525: (const_int 1))
1526: (const_int 0))
1527: (pc)
1528: (label_ref (match_operand 1 "" ""))))
1529: (set (match_dup 0)
1530: (minus:SI (match_dup 0)
1531: (const_int 1)))]
1532: "!TARGET_UNIX_ASM"
1533: "jsobgeq %0,%l1")
1534:
1535: ;; Normal aob insns.
1536: (define_insn ""
1537: [(set (pc)
1538: (if_then_else
1539: (lt (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
1540: (const_int 1))
1541: (match_operand:SI 1 "general_operand" "g"))
1542: (const_int 0))
1543: (label_ref (match_operand 2 "" ""))
1544: (pc)))
1545: (set (match_dup 0)
1546: (plus:SI (match_dup 0)
1547: (const_int 1)))]
1548: "!TARGET_UNIX_ASM"
1549: "jaoblss %1,%0,%l2")
1550:
1551: (define_insn ""
1552: [(set (pc)
1553: (if_then_else
1554: (le (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
1555: (const_int 1))
1556: (match_operand:SI 1 "general_operand" "g"))
1557: (const_int 0))
1558: (label_ref (match_operand 2 "" ""))
1559: (pc)))
1560: (set (match_dup 0)
1561: (plus:SI (match_dup 0)
1562: (const_int 1)))]
1563: "!TARGET_UNIX_ASM"
1564: "jaobleq %1,%0,%l2")
1565:
1566: ;; Reverse aob insns.
1567: (define_insn ""
1568: [(set (pc)
1569: (if_then_else
1570: (ge (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
1571: (const_int 1))
1572: (match_operand:SI 1 "general_operand" "g"))
1573: (const_int 0))
1574: (pc)
1575: (label_ref (match_operand 2 "" ""))))
1576: (set (match_dup 0)
1577: (plus:SI (match_dup 0)
1578: (const_int 1)))]
1579: "!TARGET_UNIX_ASM"
1580: "jaoblss %1,%0,%l2")
1581:
1582: (define_insn ""
1583: [(set (pc)
1584: (if_then_else
1585: (gt (minus (plus:SI (match_operand:SI 0 "general_operand" "+g")
1586: (const_int 1))
1587: (match_operand:SI 1 "general_operand" "g"))
1588: (const_int 0))
1589: (pc)
1590: (label_ref (match_operand 2 "" ""))))
1591: (set (match_dup 0)
1592: (plus:SI (match_dup 0)
1593: (const_int 1)))]
1594: "!TARGET_UNIX_ASM"
1595: "jaobleq %1,%0,%l2")
1596:
1597: (define_insn "call"
1598: [(call (match_operand:QI 0 "general_operand" "g")
1599: (match_operand:QI 1 "general_operand" "g"))]
1600: ""
1601: "calls %1,%0")
1602:
1603: (define_insn "return"
1604: [(return)]
1605: ""
1606: "ret")
1607:
1608: (define_insn "casesi"
1609: [(set (pc)
1610: (if_then_else (le (minus:SI (match_operand:SI 0 "general_operand" "g")
1611: (match_operand:SI 1 "general_operand" "g"))
1612: (match_operand:SI 2 "general_operand" "g"))
1613: (plus:SI (label_ref:SI (match_operand 3 "" ""))
1614: (sign_extend:SI
1615: (mem:HI (plus:SI (pc)
1616: (minus:SI (match_dup 0)
1617: (match_dup 1))))))
1618: (pc)))]
1619: ""
1620: "casel %0,%1,%2")
1621:
1622: ;; This arises from the preceding by simplification if operand 1 is zero.
1623: (define_insn ""
1624: [(set (pc)
1625: (if_then_else (le (match_operand:SI 0 "general_operand" "g")
1626: (match_operand:SI 1 "general_operand" "g"))
1627: (plus:SI (label_ref:SI (match_operand 3 "" ""))
1628: (sign_extend:SI
1629: (mem:HI (plus:SI (pc)
1630: (match_dup 0)))))
1631: (pc)))]
1632: ""
1633: "casel %0,$0,%1")
1634:
1635: ;;- Local variables:
1636: ;;- mode:emacs-lisp
1637: ;;- comment-start: ";;- "
1638: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
1639: ;;- eval: (modify-syntax-entry ?[ "(]")
1640: ;;- eval: (modify-syntax-entry ?] ")[")
1641: ;;- eval: (modify-syntax-entry ?{ "(}")
1642: ;;- eval: (modify-syntax-entry ?} "){")
1643: ;;- End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.