|
|
1.1 root 1: ;; BUGS:
2: ;; Insert no-op between an insn with memory read-write operands
3: ;; following by a scale-indexing operation.
4: ;; The Sequent assembler does not allow addresses to be used
5: ;; except in insns which explicitly compute an effective address.
6: ;; I.e., one cannot say "cmpd _p,@_x"
7: ;; Implement unsigned multiplication??
8:
9: ;;- Machine descrption for GNU compiler
10: ;;- ns32000 Version
11: ;; Copyright (C) 1988 Free Software Foundation, Inc.
12: ;; Contributed by Michael Tiemann ([email protected])
13:
14: ;; This file is part of GNU CC.
15:
16: ;; GNU CC is free software; you can redistribute it and/or modify
17: ;; it under the terms of the GNU General Public License as published by
18: ;; the Free Software Foundation; either version 1, or (at your option)
19: ;; any later version.
20:
21: ;; GNU CC is distributed in the hope that it will be useful,
22: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24: ;; GNU General Public License for more details.
25:
26: ;; You should have received a copy of the GNU General Public License
27: ;; along with GNU CC; see the file COPYING. If not, write to
28: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
29:
30:
31: ;;- Instruction patterns. When multiple patterns apply,
32: ;;- the first one in the file is chosen.
33: ;;-
34: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
35: ;;-
36: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
37: ;;- updates for most instructions.
38:
39: ; tstsi is first test insn so that it is the one to match
40: ; a constant argument.
41:
42: (define_insn "tstsi"
43: [(set (cc0)
44: (match_operand:SI 0 "general_operand" "rmn"))]
45: ""
46: "*
47: { cc_status.flags |= CC_REVERSED;
48: operands[1] = const0_rtx;
49: return \"cmpqd %1,%0\"; }")
50:
51: (define_insn "tsthi"
52: [(set (cc0)
53: (match_operand:HI 0 "general_operand" "g"))]
54: ""
55: "*
56: { cc_status.flags |= CC_REVERSED;
57: operands[1] = const0_rtx;
58: return \"cmpqw %1,%0\"; }")
59:
60: (define_insn "tstqi"
61: [(set (cc0)
62: (match_operand:QI 0 "general_operand" "g"))]
63: ""
64: "*
65: { cc_status.flags |= CC_REVERSED;
66: operands[1] = const0_rtx;
67: return \"cmpqb %1,%0\"; }")
68:
69: (define_insn "tstdf"
70: [(set (cc0)
71: (match_operand:DF 0 "general_operand" "fmF"))]
72: "TARGET_32081"
73: "*
74: { cc_status.flags |= CC_REVERSED;
75: operands[1] = dconst0_rtx;
76: return \"cmpl %1,%0\"; }")
77:
78: (define_insn "tstsf"
79: [(set (cc0)
80: (match_operand:SF 0 "general_operand" "fmF"))]
81: "TARGET_32081"
82: "*
83: { cc_status.flags |= CC_REVERSED;
84: operands[1] = fconst0_rtx;
85: return \"cmpf %1,%0\"; }")
86:
87: ;; Put cmpsi first among compare insns so it matches two CONST_INT operands.
88:
89: (define_insn "cmpsi"
90: [(set (cc0)
91: (compare (match_operand:SI 0 "general_operand" "rmn")
92: (match_operand:SI 1 "general_operand" "rmn")))]
93: ""
94: "*
95: {
96: if (GET_CODE (operands[1]) == CONST_INT)
97: {
98: int i = INTVAL (operands[1]);
99: if (i <= 7 && i >= -8)
100: {
101: cc_status.flags |= CC_REVERSED;
102: return \"cmpqd %1,%0\";
103: }
104: }
105: cc_status.flags &= ~CC_REVERSED;
106: if (GET_CODE (operands[0]) == CONST_INT)
107: {
108: int i = INTVAL (operands[0]);
109: if (i <= 7 && i >= -8)
110: return \"cmpqd %0,%1\";
111: }
112: return \"cmpd %0,%1\";
113: }")
114:
115: (define_insn "cmphi"
116: [(set (cc0)
117: (compare (match_operand:HI 0 "general_operand" "g")
118: (match_operand:HI 1 "general_operand" "g")))]
119: ""
120: "*
121: {
122: if (GET_CODE (operands[1]) == CONST_INT)
123: {
124: short i = INTVAL (operands[1]);
125: if (i <= 7 && i >= -8)
126: {
127: cc_status.flags |= CC_REVERSED;
128: if (INTVAL (operands[1]) > 7)
129: operands[1] = gen_rtx(CONST_INT, VOIDmode, i);
130: return \"cmpqw %1,%0\";
131: }
132: }
133: cc_status.flags &= ~CC_REVERSED;
134: if (GET_CODE (operands[0]) == CONST_INT)
135: {
136: short i = INTVAL (operands[0]);
137: if (i <= 7 && i >= -8)
138: {
139: if (INTVAL (operands[0]) > 7)
140: operands[0] = gen_rtx(CONST_INT, VOIDmode, i);
141: return \"cmpqw %0,%1\";
142: }
143: }
144: return \"cmpw %0,%1\";
145: }")
146:
147: (define_insn "cmpqi"
148: [(set (cc0)
149: (compare (match_operand:QI 0 "general_operand" "g")
150: (match_operand:QI 1 "general_operand" "g")))]
151: ""
152: "*
153: {
154: if (GET_CODE (operands[1]) == CONST_INT)
155: {
156: char i = INTVAL (operands[1]);
157: if (i <= 7 && i >= -8)
158: {
159: cc_status.flags |= CC_REVERSED;
160: if (INTVAL (operands[1]) > 7)
161: operands[1] = gen_rtx(CONST_INT, VOIDmode, i);
162: return \"cmpqb %1,%0\";
163: }
164: }
165: cc_status.flags &= ~CC_REVERSED;
166: if (GET_CODE (operands[0]) == CONST_INT)
167: {
168: char i = INTVAL (operands[0]);
169: if (i <= 7 && i >= -8)
170: {
171: if (INTVAL (operands[0]) > 7)
172: operands[0] = gen_rtx(CONST_INT, VOIDmode, i);
173: return \"cmpqb %0,%1\";
174: }
175: }
176: return \"cmpb %0,%1\";
177: }")
178:
179: (define_insn "cmpdf"
180: [(set (cc0)
181: (compare (match_operand:DF 0 "general_operand" "fmF")
182: (match_operand:DF 1 "general_operand" "fmF")))]
183: "TARGET_32081"
184: "cmpl %0,%1")
185:
186: (define_insn "cmpsf"
187: [(set (cc0)
188: (compare (match_operand:SF 0 "general_operand" "fmF")
189: (match_operand:SF 1 "general_operand" "fmF")))]
190: "TARGET_32081"
191: "cmpf %0,%1")
192:
193: (define_insn "movdf"
194: [(set (match_operand:DF 0 "general_operand" "=&fg<")
195: (match_operand:DF 1 "general_operand" "fFg"))]
196: ""
197: "*
198: {
199: if (FP_REG_P (operands[0]))
200: {
201: if (FP_REG_P (operands[1]) || GET_CODE (operands[1]) == CONST_DOUBLE)
202: return \"movl %1,%0\";
203: if (REG_P (operands[1]))
204: {
205: rtx xoperands[2];
206: xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
207: output_asm_insn (\"movd %1,tos\", xoperands);
208: output_asm_insn (\"movd %1,tos\", operands);
209: return \"movl tos,%0\";
210: }
211: return \"movl %1,%0\";
212: }
213: else if (FP_REG_P (operands[1]))
214: {
215: if (REG_P (operands[0]))
216: {
217: output_asm_insn (\"movl %1,tos\;movd tos,%0\", operands);
218: operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
219: return \"movd tos,%0\";
220: }
221: else
222: return \"movl %1,%0\";
223: }
224: return output_move_double (operands);
225: }")
226:
227: (define_insn "movsf"
228: [(set (match_operand:SF 0 "general_operand" "=fg<")
229: (match_operand:SF 1 "general_operand" "fFg"))]
230: ""
231: "*
232: {
233: if (FP_REG_P (operands[0]))
234: {
235: if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 8)
236: return \"movd %1,tos\;movf tos,%0\";
237: else
238: return \"movf %1,%0\";
239: }
240: else if (FP_REG_P (operands[1]))
241: {
242: if (REG_P (operands[0]))
243: return \"movf %1,tos\;movd tos,%0\";
244: return \"movf %1,%0\";
245: }
246: else if (GET_CODE (operands[1]) == CONST_DOUBLE)
247: {
1.1.1.2 ! root 248: union {int i[2]; float f; double d;} convrt;
! 249: convrt.i[0] = CONST_DOUBLE_LOW (operands[1]);
! 250: convrt.i[1] = CONST_DOUBLE_HIGH (operands[1]);
! 251: convrt.f = convrt.d;
! 252:
1.1 root 253: /* Is there a better machine-independent way to to this? */
1.1.1.2 ! root 254: operands[1] = gen_rtx (CONST_INT, VOIDmode, convrt.i[0]);
1.1 root 255: return \"movd %1,%0\";
256: }
257: else return \"movd %1,%0\";
258: }")
259:
260: (define_insn ""
261: [(set (match_operand:TI 0 "memory_operand" "=m")
262: (match_operand:TI 1 "memory_operand" "m"))]
263: ""
264: "movmd %1,%0,4")
265:
266: (define_insn "movdi"
267: [(set (match_operand:DI 0 "general_operand" "=&g<")
268: (match_operand:DI 1 "general_operand" "gF"))]
269: ""
270: "* return output_move_double (operands); ")
271:
272: ;; This special case must precede movsi.
273: (define_insn ""
274: [(set (reg:SI 17)
275: (match_operand:SI 0 "general_operand" "rmn"))]
276: ""
277: "lprd sp,%0")
278:
279: (define_insn "movsi"
280: [(set (match_operand:SI 0 "general_operand" "=g<")
281: (match_operand:SI 1 "general_operand" "gx"))]
282: ""
283: "*
284: { if (GET_CODE (operands[1]) == CONST_INT)
285: {
286: int i = INTVAL (operands[1]);
287: if (i <= 7 && i >= -8)
288: return \"movqd %1,%0\";
289: if (i < 0x4000 && i >= -0x4000)
290: #ifdef GNX_V3
291: return \"addr %c1,%0\";
292: #else
293: return \"addr @%c1,%0\";
294: #endif
295: return \"movd %1,%0\";
296: }
297: else if (GET_CODE (operands[1]) == REG)
298: {
299: if (REGNO (operands[1]) < 16)
300: return \"movd %1,%0\";
301: else if (REGNO (operands[1]) == FRAME_POINTER_REGNUM)
302: {
303: if (GET_CODE(operands[0]) == REG)
304: return \"sprd fp,%0\";
305: else
306: return \"addr 0(fp),%0\" ;
307: }
308: else if (REGNO (operands[1]) == STACK_POINTER_REGNUM)
309: {
310: if (GET_CODE(operands[0]) == REG)
311: return \"sprd sp,%0\";
312: else
313: return \"addr 0(sp),%0\" ;
314: }
315: else abort (0);
316: }
317: else if (GET_CODE (operands[1]) == MEM)
318: return \"movd %1,%0\";
319: /* Check if this effective address can be
320: calculated faster by pulling it apart. */
321: if (REG_P (operands[0])
322: && GET_CODE (operands[1]) == MULT
323: && GET_CODE (XEXP (operands[1], 1)) == CONST_INT
324: && (INTVAL (XEXP (operands[1], 1)) == 2
325: || INTVAL (XEXP (operands[1], 1)) == 4))
326: {
327: rtx xoperands[3];
328: xoperands[0] = operands[0];
329: xoperands[1] = XEXP (operands[1], 0);
330: xoperands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (XEXP (operands[1], 1)) >> 1);
331: return output_shift_insn (xoperands);
332: }
333: return \"addr %a1,%0\";
334: }")
335:
336: (define_insn "movhi"
337: [(set (match_operand:HI 0 "general_operand" "=g<")
338: (match_operand:HI 1 "general_operand" "g"))]
339: ""
340: "*
341: {
342: if (GET_CODE (operands[1]) == CONST_INT)
343: {
344: short i = INTVAL (operands[1]);
345: if (i <= 7 && i >= -8)
346: {
347: if (INTVAL (operands[1]) > 7)
348: operands[1] =
349: gen_rtx (CONST_INT, VOIDmode, i);
350: return \"movqw %1,%0\";
351: }
352: }
353: return \"movw %1,%0\";
354: }")
355:
356: (define_insn "movstricthi"
357: [(set (strict_low_part (match_operand:HI 0 "general_operand" "+r"))
358: (match_operand:HI 1 "general_operand" "g"))]
359: ""
360: "*
361: {
362: if (GET_CODE (operands[1]) == CONST_INT
363: && INTVAL(operands[1]) <= 7 && INTVAL(operands[1]) >= -8)
364: return \"movqw %1,%0\";
365: return \"movw %1,%0\";
366: }")
367:
368: (define_insn "movqi"
369: [(set (match_operand:QI 0 "general_operand" "=g<")
370: (match_operand:QI 1 "general_operand" "g"))]
371: ""
372: "*
373: { if (GET_CODE (operands[1]) == CONST_INT)
374: {
375: char char_val = (char)INTVAL (operands[1]);
376: if (char_val <= 7 && char_val >= -8)
377: {
378: if (INTVAL (operands[1]) > 7)
379: operands[1] =
380: gen_rtx (CONST_INT, VOIDmode, char_val);
381: return \"movqb %1,%0\";
382: }
383: }
384: return \"movb %1,%0\";
385: }")
386:
387: (define_insn "movstrictqi"
388: [(set (strict_low_part (match_operand:QI 0 "general_operand" "+r"))
389: (match_operand:QI 1 "general_operand" "g"))]
390: ""
391: "*
392: {
393: if (GET_CODE (operands[1]) == CONST_INT
394: && INTVAL(operands[1]) < 8 && INTVAL(operands[1]) > -9)
395: return \"movqb %1,%0\";
396: return \"movb %1,%0\";
397: }")
398:
399: ;; The definition of this insn does not really explain what it does,
400: ;; but it should suffice
401: ;; that anything generated as this insn will be recognized as one
402: ;; and that it won't successfully combine with anything.
403: (define_insn "movstrsi"
404: [(set (match_operand:BLK 0 "general_operand" "=g")
405: (match_operand:BLK 1 "general_operand" "g"))
406: (use (match_operand:SI 2 "general_operand" "rmn"))
407: (clobber (reg:SI 0))
408: (clobber (reg:SI 1))
409: (clobber (reg:SI 2))]
410: ""
411: "*
412: {
413: if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
414: abort ();
415: operands[0] = XEXP (operands[0], 0);
416: operands[1] = XEXP (operands[1], 0);
417: if (GET_CODE (operands[0]) == MEM)
418: if (GET_CODE (operands[1]) == MEM)
419: output_asm_insn (\"movd %0,r2\;movd %1,r1\", operands);
420: else
421: output_asm_insn (\"movd %0,r2\;addr %a1,r1\", operands);
422: else if (GET_CODE (operands[1]) == MEM)
423: output_asm_insn (\"addr %a0,r2\;movd %1,r1\", operands);
424: else
425: output_asm_insn (\"addr %a0,r2\;addr %a1,r1\", operands);
426:
427: if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0x3) == 0)
428: {
429: operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) >> 2);
430: if ((unsigned) INTVAL (operands[2]) <= 7)
431: return \"movqd %2,r0\;movsd\";
432: else
433: return \"movd %2,r0\;movsd\";
434: }
435: else
436: {
437: return \"movd %2,r0\;movsb\";
438: }
439: }")
440:
441: ;; Extension and truncation insns.
442: ;; Those for integer source operand
443: ;; are ordered widest source type first.
444:
445: (define_insn "truncsiqi2"
446: [(set (match_operand:QI 0 "general_operand" "=g<")
447: (truncate:QI (match_operand:SI 1 "general_operand" "rmn")))]
448: ""
449: "movb %1,%0")
450:
451: (define_insn "truncsihi2"
452: [(set (match_operand:HI 0 "general_operand" "=g<")
453: (truncate:HI (match_operand:SI 1 "general_operand" "rmn")))]
454: ""
455: "movw %1,%0")
456:
457: (define_insn "trunchiqi2"
458: [(set (match_operand:QI 0 "general_operand" "=g<")
459: (truncate:QI (match_operand:HI 1 "general_operand" "g")))]
460: ""
461: "movb %1,%0")
462:
463: (define_insn "extendhisi2"
464: [(set (match_operand:SI 0 "general_operand" "=g<")
465: (sign_extend:SI (match_operand:HI 1 "general_operand" "g")))]
466: ""
467: "movxwd %1,%0")
468:
469: (define_insn "extendqihi2"
470: [(set (match_operand:HI 0 "general_operand" "=g<")
471: (sign_extend:HI (match_operand:QI 1 "general_operand" "g")))]
472: ""
473: "movxbw %1,%0")
474:
475: (define_insn "extendqisi2"
476: [(set (match_operand:SI 0 "general_operand" "=g<")
477: (sign_extend:SI (match_operand:QI 1 "general_operand" "g")))]
478: ""
479: "movxbd %1,%0")
480:
481: (define_insn "extendsfdf2"
482: [(set (match_operand:DF 0 "general_operand" "=fm<")
483: (float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))]
484: "TARGET_32081"
485: "movfl %1,%0")
486:
487: (define_insn "truncdfsf2"
488: [(set (match_operand:SF 0 "general_operand" "=fm<")
489: (float_truncate:SF (match_operand:DF 1 "general_operand" "fmF")))]
490: "TARGET_32081"
491: "movlf %1,%0")
492:
493: (define_insn "zero_extendhisi2"
494: [(set (match_operand:SI 0 "general_operand" "=g<")
495: (zero_extend:SI (match_operand:HI 1 "general_operand" "g")))]
496: ""
497: "movzwd %1,%0")
498:
499: (define_insn "zero_extendqihi2"
500: [(set (match_operand:HI 0 "general_operand" "=g<")
501: (zero_extend:HI (match_operand:QI 1 "general_operand" "g")))]
502: ""
503: "movzbw %1,%0")
504:
505: (define_insn "zero_extendqisi2"
506: [(set (match_operand:SI 0 "general_operand" "=g<")
507: (zero_extend:SI (match_operand:QI 1 "general_operand" "g")))]
508: ""
509: "movzbd %1,%0")
510:
511: ;; Fix-to-float conversion insns.
512: ;; Note that the ones that start with SImode come first.
513: ;; That is so that an operand that is a CONST_INT
514: ;; (and therefore lacks a specific machine mode).
515: ;; will be recognized as SImode (which is always valid)
516: ;; rather than as QImode or HImode.
517:
518: ;; Rumor has it that the National part does not correctly convert
519: ;; constant ints to floats. This conversion is therefore disabled.
520: ;; A register must be used to perform the conversion.
521:
522: (define_insn "floatsisf2"
523: [(set (match_operand:SF 0 "general_operand" "=fm<")
524: (float:SF (match_operand:SI 1 "general_operand" "rm")))]
525: "TARGET_32081"
526: "movdf %1,%0")
527:
528: (define_insn "floatsidf2"
529: [(set (match_operand:DF 0 "general_operand" "=fm<")
530: (float:DF (match_operand:SI 1 "general_operand" "rm")))]
531: "TARGET_32081"
532: "movdl %1,%0")
533:
534: (define_insn "floathisf2"
535: [(set (match_operand:SF 0 "general_operand" "=fm<")
536: (float:SF (match_operand:HI 1 "general_operand" "rm")))]
537: "TARGET_32081"
538: "movwf %1,%0")
539:
540: (define_insn "floathidf2"
541: [(set (match_operand:DF 0 "general_operand" "=fm<")
542: (float:DF (match_operand:HI 1 "general_operand" "rm")))]
543: "TARGET_32081"
544: "movwl %1,%0")
545:
546: (define_insn "floatqisf2"
547: [(set (match_operand:SF 0 "general_operand" "=fm<")
548: (float:SF (match_operand:QI 1 "general_operand" "rm")))]
549: "TARGET_32081"
550: "movbf %1,%0")
551:
552: ; Some assemblers warn that this insn doesn't work.
553: ; Maybe they know something we don't.
554: ;(define_insn "floatqidf2"
555: ; [(set (match_operand:DF 0 "general_operand" "=fm<")
556: ; (float:DF (match_operand:QI 1 "general_operand" "rm")))]
557: ; "TARGET_32081"
558: ; "movbl %1,%0")
559:
560: ;; Float-to-fix conversion insns.
561: ;; The sequent compiler always generates "trunc" insns.
562:
563: (define_insn "fixsfqi2"
564: [(set (match_operand:QI 0 "general_operand" "=g<")
565: (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
566: "TARGET_32081"
567: "truncfb %1,%0")
568:
569: (define_insn "fixsfhi2"
570: [(set (match_operand:HI 0 "general_operand" "=g<")
571: (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
572: "TARGET_32081"
573: "truncfw %1,%0")
574:
575: (define_insn "fixsfsi2"
576: [(set (match_operand:SI 0 "general_operand" "=g<")
577: (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
578: "TARGET_32081"
579: "truncfd %1,%0")
580:
581: (define_insn "fixdfqi2"
582: [(set (match_operand:QI 0 "general_operand" "=g<")
583: (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
584: "TARGET_32081"
585: "trunclb %1,%0")
586:
587: (define_insn "fixdfhi2"
588: [(set (match_operand:HI 0 "general_operand" "=g<")
589: (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
590: "TARGET_32081"
591: "trunclw %1,%0")
592:
593: (define_insn "fixdfsi2"
594: [(set (match_operand:SI 0 "general_operand" "=g<")
595: (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
596: "TARGET_32081"
597: "truncld %1,%0")
598:
599: ;; Unsigned
600:
601: (define_insn "fixunssfqi2"
602: [(set (match_operand:QI 0 "general_operand" "=g<")
603: (unsigned_fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
604: "TARGET_32081"
605: "truncfb %1,%0")
606:
607: (define_insn "fixunssfhi2"
608: [(set (match_operand:HI 0 "general_operand" "=g<")
609: (unsigned_fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
610: "TARGET_32081"
611: "truncfw %1,%0")
612:
613: (define_insn "fixunssfsi2"
614: [(set (match_operand:SI 0 "general_operand" "=g<")
615: (unsigned_fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]
616: "TARGET_32081"
617: "truncfd %1,%0")
618:
619: (define_insn "fixunsdfqi2"
620: [(set (match_operand:QI 0 "general_operand" "=g<")
621: (unsigned_fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
622: "TARGET_32081"
623: "trunclb %1,%0")
624:
625: (define_insn "fixunsdfhi2"
626: [(set (match_operand:HI 0 "general_operand" "=g<")
627: (unsigned_fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
628: "TARGET_32081"
629: "trunclw %1,%0")
630:
631: (define_insn "fixunsdfsi2"
632: [(set (match_operand:SI 0 "general_operand" "=g<")
633: (unsigned_fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]
634: "TARGET_32081"
635: "truncld %1,%0")
636:
637: ;;; These are not yet used by GCC
638: (define_insn "fix_truncsfqi2"
639: [(set (match_operand:QI 0 "general_operand" "=g<")
640: (fix:QI (match_operand:SF 1 "general_operand" "fm")))]
641: "TARGET_32081"
642: "truncfb %1,%0")
643:
644: (define_insn "fix_truncsfhi2"
645: [(set (match_operand:HI 0 "general_operand" "=g<")
646: (fix:HI (match_operand:SF 1 "general_operand" "fm")))]
647: "TARGET_32081"
648: "truncfw %1,%0")
649:
650: (define_insn "fix_truncsfsi2"
651: [(set (match_operand:SI 0 "general_operand" "=g<")
652: (fix:SI (match_operand:SF 1 "general_operand" "fm")))]
653: "TARGET_32081"
654: "truncfd %1,%0")
655:
656: (define_insn "fix_truncdfqi2"
657: [(set (match_operand:QI 0 "general_operand" "=g<")
658: (fix:QI (match_operand:DF 1 "general_operand" "fm")))]
659: "TARGET_32081"
660: "trunclb %1,%0")
661:
662: (define_insn "fix_truncdfhi2"
663: [(set (match_operand:HI 0 "general_operand" "=g<")
664: (fix:HI (match_operand:DF 1 "general_operand" "fm")))]
665: "TARGET_32081"
666: "trunclw %1,%0")
667:
668: (define_insn "fix_truncdfsi2"
669: [(set (match_operand:SI 0 "general_operand" "=g<")
670: (fix:SI (match_operand:DF 1 "general_operand" "fm")))]
671: "TARGET_32081"
672: "truncld %1,%0")
673:
674: ;;- All kinds of add instructions.
675:
676: (define_insn "adddf3"
677: [(set (match_operand:DF 0 "general_operand" "=fm")
678: (plus:DF (match_operand:DF 1 "general_operand" "%0")
679: (match_operand:DF 2 "general_operand" "fmF")))]
680: "TARGET_32081"
681: "addl %2,%0")
682:
683:
684: (define_insn "addsf3"
685: [(set (match_operand:SF 0 "general_operand" "=fm")
686: (plus:SF (match_operand:SF 1 "general_operand" "%0")
687: (match_operand:SF 2 "general_operand" "fmF")))]
688: "TARGET_32081"
689: "addf %2,%0")
690:
691: (define_insn ""
692: [(set (reg:SI 17)
693: (plus:SI (reg:SI 17)
694: (match_operand:SI 0 "immediate_operand" "i")))]
695: "GET_CODE (operands[0]) == CONST_INT"
696: "*
697: {
1.1.1.2 ! root 698: if (INTVAL (operands[0]) == 8)
! 699: return \"cmpd tos,tos # adjsp -8\";
! 700: if (INTVAL (operands[0]) == 4)
! 701: return \"cmpqd %$0,tos # adjsp -4\";
! 702: if (INTVAL (operands[0]) < 64 && INTVAL (operands[0]) > -64)
1.1 root 703: return \"adjspb %$%n0\";
704: else if (INTVAL (operands[0]) < 8192 && INTVAL (operands[0]) >= -8192)
705: return \"adjspw %$%n0\";
706: return \"adjspd %$%n0\";
707: }")
708:
709: (define_insn ""
710: [(set (match_operand:SI 0 "general_operand" "=g<")
711: (plus:SI (reg:SI 16)
712: (match_operand:SI 1 "immediate_operand" "i")))]
713: "GET_CODE (operands[1]) == CONST_INT"
714: "addr %c1(fp),%0")
715:
716: (define_insn ""
717: [(set (match_operand:SI 0 "general_operand" "=g<")
718: (plus:SI (reg:SI 17)
719: (match_operand:SI 1 "immediate_operand" "i")))]
720: "GET_CODE (operands[1]) == CONST_INT"
721: "addr %c1(sp),%0")
722:
723: (define_insn "addsi3"
724: [(set (match_operand:SI 0 "general_operand" "=g,=g<")
725: (plus:SI (match_operand:SI 1 "general_operand" "%0,%r")
726: (match_operand:SI 2 "general_operand" "rmn,n")))]
727: ""
728: "*
729: {
730: if (which_alternative == 1)
731: return \"addr %c2(%1),%0\";
732: if (GET_CODE (operands[2]) == CONST_INT)
733: {
734: int i = INTVAL (operands[2]);
735:
736: if (i <= 7 && i >= -8)
737: return \"addqd %2,%0\";
738: else if (GET_CODE (operands[0]) == REG
739: && i < 0x4000 && i >= -0x4000)
740: return \"addr %c2(%0),%0\";
741: }
742: return \"addd %2,%0\";
743: }")
744:
745: (define_insn "addhi3"
746: [(set (match_operand:HI 0 "general_operand" "=g")
747: (plus:HI (match_operand:HI 1 "general_operand" "%0")
748: (match_operand:HI 2 "general_operand" "g")))]
749: ""
750: "*
751: { if (GET_CODE (operands[2]) == CONST_INT)
752: {
753: int i = INTVAL (operands[2]);
754: if (i <= 7 && i >= -8)
755: return \"addqw %2,%0\";
756: }
757: return \"addw %2,%0\";
758: }")
759:
760: (define_insn ""
761: [(set (strict_low_part (match_operand:HI 0 "general_operand" "=r"))
762: (plus:HI (match_operand:HI 1 "general_operand" "0")
763: (match_operand:HI 2 "general_operand" "g")))]
764: ""
765: "*
766: {
767: if (GET_CODE (operands[1]) == CONST_INT
768: && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)
769: return \"addqw %1,%0\";
770: return \"addw %1,%0\";
771: }")
772:
773: (define_insn "addqi3"
774: [(set (match_operand:QI 0 "general_operand" "=g")
775: (plus:QI (match_operand:QI 1 "general_operand" "%0")
776: (match_operand:QI 2 "general_operand" "g")))]
777: ""
778: "*
779: { if (GET_CODE (operands[2]) == CONST_INT)
780: {
781: int i = INTVAL (operands[2]);
782: if (i <= 7 && i >= -8)
783: return \"addqb %2,%0\";
784: }
785: return \"addb %2,%0\";
786: }")
787:
788: (define_insn ""
789: [(set (strict_low_part (match_operand:QI 0 "general_operand" "=r"))
790: (plus:QI (match_operand:QI 1 "general_operand" "0")
791: (match_operand:QI 2 "general_operand" "g")))]
792: ""
793: "*
794: {
795: if (GET_CODE (operands[1]) == CONST_INT
796: && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)
797: return \"addqb %1,%0\";
798: return \"addb %1,%0\";
799: }")
800:
801: ;;- All kinds of subtract instructions.
802:
803: (define_insn "subdf3"
804: [(set (match_operand:DF 0 "general_operand" "=fm")
805: (minus:DF (match_operand:DF 1 "general_operand" "0")
806: (match_operand:DF 2 "general_operand" "fmF")))]
807: "TARGET_32081"
808: "subl %2,%0")
809:
810: (define_insn "subsf3"
811: [(set (match_operand:SF 0 "general_operand" "=fm")
812: (minus:SF (match_operand:SF 1 "general_operand" "0")
813: (match_operand:SF 2 "general_operand" "fmF")))]
814: "TARGET_32081"
815: "subf %2,%0")
816:
817: (define_insn ""
818: [(set (reg:SI 17)
819: (minus:SI (reg:SI 17)
820: (match_operand:SI 0 "immediate_operand" "i")))]
821: "GET_CODE (operands[0]) == CONST_INT"
822: "*
823: {
824: if (GET_CODE(operands[0]) == CONST_INT && INTVAL(operands[0]) < 64
825: && INTVAL(operands[0]) > -64)
826: return \"adjspb %0\";
827: return \"adjspd %0\";
828: }")
829:
830: (define_insn "subsi3"
831: [(set (match_operand:SI 0 "general_operand" "=g")
832: (minus:SI (match_operand:SI 1 "general_operand" "0")
833: (match_operand:SI 2 "general_operand" "rmn")))]
834: ""
835: "*
836: { if (GET_CODE (operands[2]) == CONST_INT)
837: {
838: int i = INTVAL (operands[2]);
839:
840: if (i <= 8 && i >= -7)
841: return \"addqd %$%n2,%0\";
842: }
843: return \"subd %2,%0\";
844: }")
845:
846: (define_insn "subhi3"
847: [(set (match_operand:HI 0 "general_operand" "=g")
848: (minus:HI (match_operand:HI 1 "general_operand" "0")
849: (match_operand:HI 2 "general_operand" "g")))]
850: ""
851: "*
852: { if (GET_CODE (operands[2]) == CONST_INT)
853: {
854: int i = INTVAL (operands[2]);
855:
856: if (i <= 8 && i >= -7)
857: return \"addqw %$%n2,%0\";
858: }
859: return \"subw %2,%0\";
860: }")
861:
862: (define_insn ""
863: [(set (strict_low_part (match_operand:HI 0 "general_operand" "=r"))
864: (minus:HI (match_operand:HI 1 "general_operand" "0")
865: (match_operand:HI 2 "general_operand" "g")))]
866: ""
867: "*
868: {
869: if (GET_CODE (operands[1]) == CONST_INT
870: && INTVAL (operands[1]) >-8 && INTVAL(operands[1]) < 9)
871: return \"addqw %$%n1,%0\";
872: return \"subw %1,%0\";
873: }")
874:
875: (define_insn "subqi3"
876: [(set (match_operand:QI 0 "general_operand" "=g")
877: (minus:QI (match_operand:QI 1 "general_operand" "0")
878: (match_operand:QI 2 "general_operand" "g")))]
879: ""
880: "*
881: { if (GET_CODE (operands[2]) == CONST_INT)
882: {
883: int i = INTVAL (operands[2]);
884:
885: if (i <= 8 && i >= -7)
886: return \"addqb %$%n2,%0\";
887: }
888: return \"subb %2,%0\";
889: }")
890:
891: (define_insn ""
892: [(set (strict_low_part (match_operand:QI 0 "general_operand" "=r"))
893: (minus:QI (match_operand:QI 1 "general_operand" "0")
894: (match_operand:QI 2 "general_operand" "g")))]
895: ""
896: "*
897: {
898: if (GET_CODE (operands[1]) == CONST_INT
899: && INTVAL (operands[1]) >-8 && INTVAL(operands[1]) < 9)
900: return \"addqb %$%n1,%0\";
901: return \"subb %1,%0\";
902: }")
903:
904: ;;- Multiply instructions.
905:
906: (define_insn "muldf3"
907: [(set (match_operand:DF 0 "general_operand" "=fm")
908: (mult:DF (match_operand:DF 1 "general_operand" "%0")
909: (match_operand:DF 2 "general_operand" "fmF")))]
910: "TARGET_32081"
911: "mull %2,%0")
912:
913: (define_insn "mulsf3"
914: [(set (match_operand:SF 0 "general_operand" "=fm")
915: (mult:SF (match_operand:SF 1 "general_operand" "%0")
916: (match_operand:SF 2 "general_operand" "fmF")))]
917: "TARGET_32081"
918: "mulf %2,%0")
919:
920: (define_insn "mulsi3"
921: [(set (match_operand:SI 0 "general_operand" "=g")
922: (mult:SI (match_operand:SI 1 "general_operand" "%0")
923: (match_operand:SI 2 "general_operand" "rmn")))]
924: ""
925: "muld %2,%0")
926:
927: (define_insn "mulhi3"
928: [(set (match_operand:HI 0 "general_operand" "=g")
929: (mult:HI (match_operand:HI 1 "general_operand" "%0")
930: (match_operand:HI 2 "general_operand" "g")))]
931: ""
932: "mulw %2,%0")
933:
934: (define_insn "mulqi3"
935: [(set (match_operand:QI 0 "general_operand" "=g")
936: (mult:QI (match_operand:QI 1 "general_operand" "%0")
937: (match_operand:QI 2 "general_operand" "g")))]
938: ""
939: "mulb %2,%0")
940:
941: (define_insn "umulsi3"
942: [(set (match_operand:SI 0 "general_operand" "=g")
943: (umult:SI (match_operand:SI 1 "general_operand" "%0")
944: (match_operand:SI 2 "general_operand" "rmn")))]
945: ""
946: "muld %2,%0")
947:
948: (define_insn "umulhi3"
949: [(set (match_operand:HI 0 "general_operand" "=g")
950: (umult:HI (match_operand:HI 1 "general_operand" "%0")
951: (match_operand:HI 2 "general_operand" "g")))]
952: ""
953: "mulw %2,%0")
954:
955: (define_insn "umulqi3"
956: [(set (match_operand:QI 0 "general_operand" "=g")
957: (umult:QI (match_operand:QI 1 "general_operand" "%0")
958: (match_operand:QI 2 "general_operand" "g")))]
959: ""
960: "mulb %2,%0")
961:
962: (define_insn "umulsidi3"
963: [(set (match_operand:DI 0 "general_operand" "=g")
964: (umult:DI (match_operand:SI 1 "general_operand" "0")
965: (match_operand:SI 2 "general_operand" "rmn")))]
966: ""
967: "meid %2,%0")
968:
969: ;;- Divide instructions.
970:
971: (define_insn "divdf3"
972: [(set (match_operand:DF 0 "general_operand" "=fm")
973: (div:DF (match_operand:DF 1 "general_operand" "0")
974: (match_operand:DF 2 "general_operand" "fmF")))]
975: "TARGET_32081"
976: "divl %2,%0")
977:
978: (define_insn "divsf3"
979: [(set (match_operand:SF 0 "general_operand" "=fm")
980: (div:SF (match_operand:SF 1 "general_operand" "0")
981: (match_operand:SF 2 "general_operand" "fmF")))]
982: "TARGET_32081"
983: "divf %2,%0")
984:
985: (define_insn "divsi3"
986: [(set (match_operand:SI 0 "general_operand" "=g")
987: (div:SI (match_operand:SI 1 "general_operand" "0")
988: (match_operand:SI 2 "general_operand" "rmn")))]
989: ""
990: "quod %2,%0")
991:
992: (define_insn "divhi3"
993: [(set (match_operand:HI 0 "general_operand" "=g")
994: (div:HI (match_operand:HI 1 "general_operand" "0")
995: (match_operand:HI 2 "general_operand" "g")))]
996: ""
997: "quow %2,%0")
998:
999: (define_insn "divqi3"
1000: [(set (match_operand:QI 0 "general_operand" "=g")
1001: (div:QI (match_operand:QI 1 "general_operand" "0")
1002: (match_operand:QI 2 "general_operand" "g")))]
1003: ""
1004: "quob %2,%0")
1005:
1006: (define_insn "udivsi3"
1007: [(set (match_operand:SI 0 "register_operand" "=r")
1008: (udiv:SI (subreg:SI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1009: (match_operand:SI 2 "general_operand" "rmn")))]
1010: ""
1011: "*
1012: {
1013: operands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
1014: return \"deid %2,%0\;movd %1,%0\";
1015: }")
1016:
1017: (define_insn "udivhi3"
1018: [(set (match_operand:HI 0 "register_operand" "=r")
1019: (udiv:HI (subreg:HI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1020: (match_operand:HI 2 "general_operand" "g")))]
1021: ""
1022: "*
1023: {
1024: operands[1] = gen_rtx (REG, HImode, REGNO (operands[0]) + 1);
1025: return \"deiw %2,%0\;movw %1,%0\";
1026: }")
1027:
1028: (define_insn "udivqi3"
1029: [(set (match_operand:QI 0 "register_operand" "=r")
1030: (udiv:QI (subreg:QI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1031: (match_operand:QI 2 "general_operand" "g")))]
1032: ""
1033: "*
1034: {
1035: operands[1] = gen_rtx (REG, QImode, REGNO (operands[0]) + 1);
1036: return \"deib %2,%0\;movb %1,%0\";
1037: }")
1038:
1039: ;; Remainder instructions.
1040:
1041: (define_insn "modsi3"
1042: [(set (match_operand:SI 0 "general_operand" "=g")
1043: (mod:SI (match_operand:SI 1 "general_operand" "0")
1044: (match_operand:SI 2 "general_operand" "rmn")))]
1045: ""
1046: "remd %2,%0")
1047:
1048: (define_insn "modhi3"
1049: [(set (match_operand:HI 0 "general_operand" "=g")
1050: (mod:HI (match_operand:HI 1 "general_operand" "0")
1051: (match_operand:HI 2 "general_operand" "g")))]
1052: ""
1053: "remw %2,%0")
1054:
1055: (define_insn "modqi3"
1056: [(set (match_operand:QI 0 "general_operand" "=g")
1057: (mod:QI (match_operand:QI 1 "general_operand" "0")
1058: (match_operand:QI 2 "general_operand" "g")))]
1059: ""
1060: "remb %2,%0")
1061:
1062: (define_insn "umodsi3"
1063: [(set (match_operand:SI 0 "register_operand" "=r")
1064: (umod:SI (subreg:SI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1065: (match_operand:SI 2 "general_operand" "rmn")))]
1066: ""
1067: "deid %2,%0")
1068:
1069: (define_insn "umodhi3"
1070: [(set (match_operand:HI 0 "register_operand" "=r")
1071: (umod:HI (subreg:HI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1072: (match_operand:HI 2 "general_operand" "g")))]
1073: ""
1074: "deiw %2,%0")
1075:
1076: (define_insn "umodqi3"
1077: [(set (match_operand:QI 0 "register_operand" "=r")
1078: (umod:QI (subreg:QI (match_operand:DI 1 "reg_or_mem_operand" "0") 0)
1079: (match_operand:QI 2 "general_operand" "g")))]
1080: ""
1081: "deib %2,%0")
1082:
1083: ; This isn't be usable in its current form.
1084: ;(define_insn "udivmoddisi4"
1085: ; [(set (subreg:SI (match_operand:DI 0 "general_operand" "=r") 1)
1086: ; (udiv:SI (match_operand:DI 1 "general_operand" "0")
1087: ; (match_operand:SI 2 "general_operand" "rmn")))
1088: ; (set (subreg:SI (match_dup 0) 0)
1089: ; (umod:SI (match_dup 1) (match_dup 2)))]
1090: ; ""
1091: ; "deid %2,%0")
1092:
1093: ;;- Logical Instructions: AND
1094:
1095: (define_insn "andsi3"
1096: [(set (match_operand:SI 0 "general_operand" "=g")
1097: (and:SI (match_operand:SI 1 "general_operand" "%0")
1098: (match_operand:SI 2 "general_operand" "rmn")))]
1099: ""
1100: "*
1101: {
1102: if (GET_CODE (operands[2]) == CONST_INT)
1103: {
1104: if ((INTVAL (operands[2]) | 0xff) == 0xffffffff)
1105: {
1106: if (INTVAL (operands[2]) == 0xffffff00)
1107: return \"movqb %$0,%0\";
1108: else
1109: {
1110: operands[2] = gen_rtx (CONST_INT, VOIDmode,
1111: INTVAL (operands[2]) & 0xff);
1112: return \"andb %2,%0\";
1113: }
1114: }
1115: if ((INTVAL (operands[2]) | 0xffff) == 0xffffffff)
1116: {
1117: if (INTVAL (operands[2]) == 0xffff0000)
1118: return \"movqw %$0,%0\";
1119: else
1120: {
1121: operands[2] = gen_rtx (CONST_INT, VOIDmode,
1122: INTVAL (operands[2]) & 0xffff);
1123: return \"andw %2,%0\";
1124: }
1125: }
1126: }
1127: return \"andd %2,%0\";
1128: }")
1129:
1130: (define_insn "andhi3"
1131: [(set (match_operand:HI 0 "general_operand" "=g")
1132: (and:HI (match_operand:HI 1 "general_operand" "%0")
1133: (match_operand:HI 2 "general_operand" "g")))]
1134: ""
1135: "*
1136: {
1137: if (GET_CODE (operands[2]) == CONST_INT
1138: && (INTVAL (operands[2]) | 0xff) == 0xffffffff)
1139: {
1140: if (INTVAL (operands[2]) == 0xffffff00)
1141: return \"movqb %$0,%0\";
1142: else
1143: {
1144: operands[2] = gen_rtx (CONST_INT, VOIDmode,
1145: INTVAL (operands[2]) & 0xff);
1146: return \"andb %2,%0\";
1147: }
1148: }
1149: return \"andw %2,%0\";
1150: }")
1151:
1152: (define_insn "andqi3"
1153: [(set (match_operand:QI 0 "general_operand" "=g")
1154: (and:QI (match_operand:QI 1 "general_operand" "%0")
1155: (match_operand:QI 2 "general_operand" "g")))]
1156: ""
1157: "andb %2,%0")
1158:
1159: (define_insn "andcbsi3"
1160: [(set (match_operand:SI 0 "general_operand" "=g")
1161: (and:SI (match_operand:SI 1 "general_operand" "0")
1162: (not:SI (match_operand:SI 2 "general_operand" "rmn"))))]
1163: ""
1164: "*
1165: {
1166: if (GET_CODE (operands[2]) == CONST_INT)
1167: {
1168: if ((INTVAL (operands[2]) & 0xffffff00) == 0)
1169: return \"bicb %2,%0\";
1170: if ((INTVAL (operands[2]) & 0xffff0000) == 0)
1171: return \"bicw %2,%0\";
1172: }
1173: return \"bicd %2,%0\";
1174: }")
1175:
1176: (define_insn ""
1177: [(set (match_operand:SI 0 "general_operand" "=g")
1178: (and:SI (not:SI (match_operand:SI 1 "general_operand" "rmn"))
1179: (match_operand:SI 2 "general_operand" "0")))]
1180: ""
1181: "*
1182: {
1183: if (GET_CODE (operands[1]) == CONST_INT)
1184: {
1185: if ((INTVAL (operands[1]) & 0xffffff00) == 0)
1186: return \"bicb %1,%0\";
1187: if ((INTVAL (operands[1]) & 0xffff0000) == 0)
1188: return \"bicw %1,%0\";
1189: }
1190: return \"bicd %1,%0\";
1191: }")
1192:
1193: (define_insn "andcbhi3"
1194: [(set (match_operand:HI 0 "general_operand" "=g")
1195: (and:HI (match_operand:HI 1 "general_operand" "%0")
1196: (not:HI (match_operand:HI 2 "general_operand" "g"))))]
1197: ""
1198: "*
1199: {
1200: if (GET_CODE (operands[2]) == CONST_INT
1201: && (INTVAL (operands[2]) & 0xffffff00) == 0)
1202: return \"bicb %2,%0\";
1203: return \"bicw %2,%0\";
1204: }")
1205:
1206: (define_insn ""
1207: [(set (match_operand:HI 0 "general_operand" "=g")
1208: (and:HI (not:HI (match_operand:HI 1 "general_operand" "g"))
1209: (match_operand:HI 2 "general_operand" "0")))]
1210: ""
1211: "*
1212: {
1213: if (GET_CODE (operands[1]) == CONST_INT
1214: && (INTVAL (operands[1]) & 0xffffff00) == 0)
1215: return \"bicb %1,%0\";
1216: return \"bicw %1,%0\";
1217: }")
1218:
1219: (define_insn "andcbqi3"
1220: [(set (match_operand:QI 0 "general_operand" "=g")
1221: (and:QI (match_operand:QI 1 "general_operand" "%0")
1222: (not:QI (match_operand:QI 2 "general_operand" "g"))))]
1223: ""
1224: "bicb %2,%0")
1225:
1226: (define_insn ""
1227: [(set (match_operand:QI 0 "general_operand" "=g")
1228: (and:QI (not:QI (match_operand:QI 1 "general_operand" "g"))
1229: (match_operand:QI 2 "general_operand" "0")))]
1230: ""
1231: "bicb %1,%0")
1232:
1233: ;;- Bit set instructions.
1234:
1235: (define_insn "iorsi3"
1236: [(set (match_operand:SI 0 "general_operand" "=g")
1237: (ior:SI (match_operand:SI 1 "general_operand" "%0")
1238: (match_operand:SI 2 "general_operand" "rmn")))]
1239: ""
1240: "*
1241: {
1242: if (GET_CODE (operands[2]) == CONST_INT) {
1243: if ((INTVAL (operands[2]) & 0xffffff00) == 0)
1244: return \"orb %2,%0\";
1245: if ((INTVAL (operands[2]) & 0xffff0000) == 0)
1246: return \"orw %2,%0\";
1247: }
1248: return \"ord %2,%0\";
1249: }")
1250:
1251: (define_insn "iorhi3"
1252: [(set (match_operand:HI 0 "general_operand" "=g")
1253: (ior:HI (match_operand:HI 1 "general_operand" "%0")
1254: (match_operand:HI 2 "general_operand" "g")))]
1255: ""
1256: "*
1257: {
1258: if (GET_CODE(operands[2]) == CONST_INT &&
1259: (INTVAL(operands[2]) & 0xffffff00) == 0)
1260: return \"orb %2,%0\";
1261: return \"orw %2,%0\";
1262: }")
1263:
1264: (define_insn "iorqi3"
1265: [(set (match_operand:QI 0 "general_operand" "=g")
1266: (ior:QI (match_operand:QI 1 "general_operand" "%0")
1267: (match_operand:QI 2 "general_operand" "g")))]
1268: ""
1269: "orb %2,%0")
1270:
1271: ;;- xor instructions.
1272:
1273: (define_insn "xorsi3"
1274: [(set (match_operand:SI 0 "general_operand" "=g")
1275: (xor:SI (match_operand:SI 1 "general_operand" "%0")
1276: (match_operand:SI 2 "general_operand" "rmn")))]
1277: ""
1278: "*
1279: {
1280: if (GET_CODE (operands[2]) == CONST_INT) {
1281: if ((INTVAL (operands[2]) & 0xffffff00) == 0)
1282: return \"xorb %2,%0\";
1283: if ((INTVAL (operands[2]) & 0xffff0000) == 0)
1284: return \"xorw %2,%0\";
1285: }
1286: return \"xord %2,%0\";
1287: }")
1288:
1289: (define_insn "xorhi3"
1290: [(set (match_operand:HI 0 "general_operand" "=g")
1291: (xor:HI (match_operand:HI 1 "general_operand" "%0")
1292: (match_operand:HI 2 "general_operand" "g")))]
1293: ""
1294: "*
1295: {
1296: if (GET_CODE(operands[2]) == CONST_INT &&
1297: (INTVAL(operands[2]) & 0xffffff00) == 0)
1298: return \"xorb %2,%0\";
1299: return \"xorw %2,%0\";
1300: }")
1301:
1302: (define_insn "xorqi3"
1303: [(set (match_operand:QI 0 "general_operand" "=g")
1304: (xor:QI (match_operand:QI 1 "general_operand" "%0")
1305: (match_operand:QI 2 "general_operand" "g")))]
1306: ""
1307: "xorb %2,%0")
1308:
1309: (define_insn "negdf2"
1310: [(set (match_operand:DF 0 "general_operand" "=fm<")
1311: (neg:DF (match_operand:DF 1 "general_operand" "fmF")))]
1312: "TARGET_32081"
1313: "negl %1,%0")
1314:
1315: (define_insn "negsf2"
1316: [(set (match_operand:SF 0 "general_operand" "=fm<")
1317: (neg:SF (match_operand:SF 1 "general_operand" "fmF")))]
1318: "TARGET_32081"
1319: "negf %1,%0")
1320:
1321: (define_insn "negsi2"
1322: [(set (match_operand:SI 0 "general_operand" "=g<")
1323: (neg:SI (match_operand:SI 1 "general_operand" "rmn")))]
1324: ""
1325: "negd %1,%0")
1326:
1327: (define_insn "neghi2"
1328: [(set (match_operand:HI 0 "general_operand" "=g<")
1329: (neg:HI (match_operand:HI 1 "general_operand" "g")))]
1330: ""
1331: "negw %1,%0")
1332:
1333: (define_insn "negqi2"
1334: [(set (match_operand:QI 0 "general_operand" "=g<")
1335: (neg:QI (match_operand:QI 1 "general_operand" "g")))]
1336: ""
1337: "negb %1,%0")
1338:
1339: (define_insn "one_cmplsi2"
1340: [(set (match_operand:SI 0 "general_operand" "=g<")
1341: (not:SI (match_operand:SI 1 "general_operand" "rmn")))]
1342: ""
1343: "comd %1,%0")
1344:
1345: (define_insn "one_cmplhi2"
1346: [(set (match_operand:HI 0 "general_operand" "=g<")
1347: (not:HI (match_operand:HI 1 "general_operand" "g")))]
1348: ""
1349: "comw %1,%0")
1350:
1351: (define_insn "one_cmplqi2"
1352: [(set (match_operand:QI 0 "general_operand" "=g<")
1353: (not:QI (match_operand:QI 1 "general_operand" "g")))]
1354: ""
1355: "comb %1,%0")
1356:
1357: ;; arithmetic left and right shift operations
1358:
1359: (define_insn "ashlsi3"
1360: [(set (match_operand:SI 0 "general_operand" "=g,g")
1361: (ashift:SI (match_operand:SI 1 "general_operand" "r,0")
1362: (match_operand:SI 2 "general_operand" "I,rmn")))]
1363: ""
1364: "* output_shift_insn (operands);")
1365:
1366: (define_insn "ashlhi3"
1367: [(set (match_operand:HI 0 "general_operand" "=g")
1368: (ashift:HI (match_operand:HI 1 "general_operand" "0")
1369: (match_operand:SI 2 "general_operand" "rmn")))]
1370: ""
1371: "*
1372: { if (GET_CODE (operands[2]) == CONST_INT)
1373: if (INTVAL (operands[2]) == 1)
1374: return \"addw %1,%0\";
1375: else if (INTVAL (operands[2]) == 2)
1376: return \"addw %1,%0\;addw %0,%0\";
1377: return \"ashw %2,%0\";
1378: }")
1379:
1380: (define_insn "ashlqi3"
1381: [(set (match_operand:QI 0 "general_operand" "=g")
1382: (ashift:QI (match_operand:QI 1 "general_operand" "0")
1383: (match_operand:SI 2 "general_operand" "rmn")))]
1384: ""
1385: "*
1386: { if (GET_CODE (operands[2]) == CONST_INT)
1387: if (INTVAL (operands[2]) == 1)
1388: return \"addb %1,%0\";
1389: else if (INTVAL (operands[2]) == 2)
1390: return \"addb %1,%0\;addb %0,%0\";
1391: return \"ashb %2,%0\";
1392: }")
1393:
1394: ;; Arithmetic right shift on the 32k works by negating the shift count.
1395: (define_expand "ashrsi3"
1396: [(set (match_operand:SI 0 "general_operand" "=g")
1397: (ashift:SI (match_operand:SI 1 "general_operand" "g")
1398: (match_operand:SI 2 "general_operand" "g")))]
1399: ""
1400: "
1401: {
1402: operands[2] = negate_rtx (SImode, operands[2]);
1403: }")
1404:
1405: (define_expand "ashrhi3"
1406: [(set (match_operand:HI 0 "general_operand" "=g")
1407: (ashift:HI (match_operand:HI 1 "general_operand" "g")
1408: (match_operand:SI 2 "general_operand" "g")))]
1409: ""
1410: "
1411: {
1412: operands[2] = negate_rtx (SImode, operands[2]);
1413: }")
1414:
1415: (define_expand "ashrqi3"
1416: [(set (match_operand:QI 0 "general_operand" "=g")
1417: (ashift:QI (match_operand:QI 1 "general_operand" "g")
1418: (match_operand:SI 2 "general_operand" "g")))]
1419: ""
1420: "
1421: {
1422: operands[2] = negate_rtx (SImode, operands[2]);
1423: }")
1424:
1425: ;; logical shift instructions
1426:
1427: (define_insn "lshlsi3"
1428: [(set (match_operand:SI 0 "general_operand" "=g")
1429: (lshift:SI (match_operand:SI 1 "general_operand" "0")
1430: (match_operand:SI 2 "general_operand" "rmn")))]
1431: ""
1432: "lshd %2,%0")
1433:
1434: (define_insn "lshlhi3"
1435: [(set (match_operand:HI 0 "general_operand" "=g")
1436: (lshift:HI (match_operand:HI 1 "general_operand" "0")
1437: (match_operand:SI 2 "general_operand" "rmn")))]
1438: ""
1439: "lshw %2,%0")
1440:
1441: (define_insn "lshlqi3"
1442: [(set (match_operand:QI 0 "general_operand" "=g")
1443: (lshift:QI (match_operand:QI 1 "general_operand" "0")
1444: (match_operand:SI 2 "general_operand" "rmn")))]
1445: ""
1446: "lshb %2,%0")
1447:
1448: ;; Logical right shift on the 32k works by negating the shift count.
1449: (define_expand "lshrsi3"
1450: [(set (match_operand:SI 0 "general_operand" "=g")
1451: (lshift:SI (match_operand:SI 1 "general_operand" "g")
1452: (match_operand:SI 2 "general_operand" "g")))]
1453: ""
1454: "
1455: {
1456: operands[2] = negate_rtx (SImode, operands[2]);
1457: }")
1458:
1459: (define_expand "lshrhi3"
1460: [(set (match_operand:HI 0 "general_operand" "=g")
1461: (lshift:HI (match_operand:HI 1 "general_operand" "g")
1462: (match_operand:SI 2 "general_operand" "g")))]
1463: ""
1464: "
1465: {
1466: operands[2] = negate_rtx (SImode, operands[2]);
1467: }")
1468:
1469: (define_expand "lshrqi3"
1470: [(set (match_operand:QI 0 "general_operand" "=g")
1471: (lshift:QI (match_operand:QI 1 "general_operand" "g")
1472: (match_operand:SI 2 "general_operand" "g")))]
1473: ""
1474: "
1475: {
1476: operands[2] = negate_rtx (SImode, operands[2]);
1477: }")
1478:
1479: ;; Rotate instructions
1480:
1481: (define_insn "rotlsi3"
1482: [(set (match_operand:SI 0 "general_operand" "=g")
1483: (rotate:SI (match_operand:SI 1 "general_operand" "0")
1484: (match_operand:SI 2 "general_operand" "rmn")))]
1485: ""
1486: "rotd %2,%0")
1487:
1488: (define_insn "rotlhi3"
1489: [(set (match_operand:HI 0 "general_operand" "=g")
1490: (rotate:HI (match_operand:HI 1 "general_operand" "0")
1491: (match_operand:SI 2 "general_operand" "rmn")))]
1492: ""
1493: "rotw %2,%0")
1494:
1495: (define_insn "rotlqi3"
1496: [(set (match_operand:QI 0 "general_operand" "=g")
1497: (rotate:QI (match_operand:QI 1 "general_operand" "0")
1498: (match_operand:SI 2 "general_operand" "rmn")))]
1499: ""
1500: "rotb %2,%0")
1501:
1502: ;; Right rotate on the 32k works by negating the shift count.
1503: (define_expand "rotrsi3"
1504: [(set (match_operand:SI 0 "general_operand" "=g")
1505: (rotate:SI (match_operand:SI 1 "general_operand" "g")
1506: (match_operand:SI 2 "general_operand" "g")))]
1507: ""
1508: "
1509: {
1510: operands[2] = negate_rtx (SImode, operands[2]);
1511: }")
1512:
1513: (define_expand "rotrhi3"
1514: [(set (match_operand:HI 0 "general_operand" "=g")
1515: (rotate:HI (match_operand:HI 1 "general_operand" "g")
1516: (match_operand:SI 2 "general_operand" "g")))]
1517: ""
1518: "
1519: {
1520: operands[2] = negate_rtx (SImode, operands[2]);
1521: }")
1522:
1523: (define_expand "rotrqi3"
1524: [(set (match_operand:QI 0 "general_operand" "=g")
1525: (rotate:QI (match_operand:QI 1 "general_operand" "g")
1526: (match_operand:SI 2 "general_operand" "g")))]
1527: ""
1528: "
1529: {
1530: operands[2] = negate_rtx (SImode, operands[2]);
1531: }")
1532:
1533: ;;- load or push effective address
1534: ;; These come after the move, add, and multiply patterns
1535: ;; because we don't want pushl $1 turned into pushad 1.
1536:
1537: (define_insn ""
1538: [(set (match_operand:SI 0 "general_operand" "=g<")
1539: (match_operand:QI 1 "address_operand" "p"))]
1540: ""
1541: "*
1542: {
1543: if (REG_P (operands[0])
1544: && GET_CODE (operands[1]) == MULT
1545: && GET_CODE (XEXP (operands[1], 1)) == CONST_INT
1546: && (INTVAL (XEXP (operands[1], 1)) == 2
1547: || INTVAL (XEXP (operands[1], 1)) == 4))
1548: {
1549: rtx xoperands[3];
1550: xoperands[0] = operands[0];
1551: xoperands[1] = XEXP (operands[1], 0);
1552: xoperands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (XEXP (operands[1], 1)) >> 1);
1553: return output_shift_insn (xoperands);
1554: }
1555: return \"addr %a1,%0\";
1556: }")
1557:
1558: ;;; Index insns. These are about the same speed as multiply-add counterparts.
1559: ;;; but slower then using power-of-2 shifts if we can use them
1560: ;
1561: ;(define_insn ""
1562: ; [(set (match_operand:SI 0 "register_operand" "=r")
1563: ; (plus:SI (match_operand:SI 1 "general_operand" "rmn")
1564: ; (mult:SI (match_operand:SI 2 "register_operand" "0")
1565: ; (plus:SI (match_operand:SI 3 "general_operand" "rmn") (const_int 1)))))]
1566: ; "GET_CODE (operands[3]) != CONST_INT || INTVAL (operands[3]) > 8"
1567: ; "indexd %0,%3,%1")
1568: ;
1569: ;(define_insn ""
1570: ; [(set (match_operand:SI 0 "register_operand" "=r")
1571: ; (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "0")
1572: ; (plus:SI (match_operand:SI 2 "general_operand" "rmn") (const_int 1)))
1573: ; (match_operand:SI 3 "general_operand" "rmn")))]
1574: ; "GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) > 8"
1575: ; "indexd %0,%2,%3")
1576:
1577: ;; Set, Clear, and Invert bit
1578:
1579: (define_insn ""
1580: [(set (match_operand:SI 0 "general_operand" "=g")
1581: (ior:SI
1582: (ashift:SI (const_int 1)
1583: (match_operand:SI 1 "general_operand" "rmn"))
1584: (match_dup 0)))]
1585: ""
1586: "sbitd %1,%0")
1587:
1588: (define_insn ""
1589: [(set (match_operand:SI 0 "general_operand" "=g")
1590: (ior:SI
1591: (match_dup 0)
1592: (ashift:SI (const_int 1)
1593: (match_operand:SI 1 "general_operand" "rmn"))))]
1594: ""
1595: "sbitd %1,%0")
1596:
1597: (define_insn ""
1598: [(set (match_operand:QI 0 "general_operand" "=g")
1599: (ior:QI
1600: (subreg:QI
1601: (ashift:SI (const_int 1)
1602: (match_operand:QI 1 "general_operand" "rmn")) 0)
1603: (match_dup 0)))]
1604: ""
1605: "sbitb %1,%0")
1606:
1607: (define_insn ""
1608: [(set (match_operand:QI 0 "general_operand" "=g")
1609: (ior:QI
1610: (match_dup 0)
1611: (subreg:QI
1612: (ashift:SI (const_int 1)
1613: (match_operand:QI 1 "general_operand" "rmn")) 0)))]
1614: ""
1615: "sbitb %1,%0")
1616:
1617: (define_insn ""
1618: [(set (match_operand:SI 0 "general_operand" "=g")
1619: (and:SI
1620: (not:SI
1621: (ashift:SI (const_int 1)
1622: (match_operand:SI 1 "general_operand" "rmn")))
1623: (match_dup 0)))]
1624: ""
1625: "cbitd %1,%0")
1626:
1627: (define_insn ""
1628: [(set (match_operand:SI 0 "general_operand" "=g")
1629: (and:SI
1630: (match_dup 0)
1631: (not:SI
1632: (ashift:SI (const_int 1)
1633: (match_operand:SI 1 "general_operand" "rmn")))))]
1634: ""
1635: "cbitd %1,%0")
1636:
1637: (define_insn ""
1638: [(set (match_operand:QI 0 "general_operand" "=g")
1639: (and:QI
1640: (subreg:QI
1641: (not:SI
1642: (ashift:SI (const_int 1)
1643: (match_operand:QI 1 "general_operand" "rmn"))) 0)
1644: (match_dup 0)))]
1645: ""
1646: "cbitb %1,%0")
1647:
1648: (define_insn ""
1649: [(set (match_operand:QI 0 "general_operand" "=g")
1650: (and:QI
1651: (match_dup 0)
1652: (subreg:QI
1653: (not:SI
1654: (ashift:SI (const_int 1)
1655: (match_operand:QI 1 "general_operand" "rmn"))) 0)))]
1656: ""
1657: "cbitb %1,%0")
1658:
1659: (define_insn ""
1660: [(set (match_operand:SI 0 "general_operand" "=g")
1661: (xor:SI
1662: (ashift:SI (const_int 1)
1663: (match_operand:SI 1 "general_operand" "rmn"))
1664: (match_dup 0)))]
1665: ""
1666: "ibitd %1,%0")
1667:
1668: (define_insn ""
1669: [(set (match_operand:SI 0 "general_operand" "=g")
1670: (xor:SI
1671: (match_dup 0)
1672: (ashift:SI (const_int 1)
1673: (match_operand:SI 1 "general_operand" "rmn"))))]
1674: ""
1675: "ibitd %1,%0")
1676:
1677: (define_insn ""
1678: [(set (match_operand:QI 0 "general_operand" "=g")
1679: (xor:QI
1680: (subreg:QI
1681: (ashift:SI (const_int 1)
1682: (match_operand:QI 1 "general_operand" "rmn")) 0)
1683: (match_dup 0)))]
1684: ""
1685: "ibitb %1,%0")
1686:
1687: (define_insn ""
1688: [(set (match_operand:QI 0 "general_operand" "=g")
1689: (xor:QI
1690: (match_dup 0)
1691: (subreg:QI
1692: (ashift:SI (const_int 1)
1693: (match_operand:QI 1 "general_operand" "rmn")) 0)))]
1694: ""
1695: "ibitb %1,%0")
1696:
1697: ;; Recognize jbs and jbc instructions.
1698:
1699: (define_insn ""
1700: [(set (cc0)
1701: (zero_extract (match_operand:SI 0 "general_operand" "rm")
1702: (const_int 1)
1703: (match_operand:SI 1 "general_operand" "rmn")))]
1704: ""
1705: "*
1706: { cc_status.flags = CC_Z_IN_F;
1707: return \"tbitd %1,%0\";
1708: }")
1709:
1710: (define_insn ""
1711: [(set (cc0)
1712: (compare (zero_extract (match_operand:SI 0 "general_operand" "rm")
1713: (const_int 1)
1714: (match_operand:SI 1 "general_operand" "rmn"))
1715: (const_int 1)))]
1716: ""
1717: "*
1718: { cc_status.flags = CC_Z_IN_NOT_F;
1719: return \"tbitd %1,%0\";
1720: }")
1721:
1722: (define_insn ""
1723: [(set (cc0)
1724: (zero_extract (match_operand:HI 0 "general_operand" "g")
1725: (const_int 1)
1726: (match_operand:HI 1 "general_operand" "g")))]
1727: ""
1728: "*
1729: { cc_status.flags = CC_Z_IN_F;
1730: return \"tbitw %1,%0\";
1731: }")
1732:
1733: (define_insn ""
1734: [(set (cc0)
1735: (compare (zero_extract (match_operand:HI 0 "general_operand" "g")
1736: (const_int 1)
1737: (match_operand:HI 1 "general_operand" "rmn"))
1738: (const_int 1)))]
1739: ""
1740: "*
1741: { cc_status.flags = CC_Z_IN_NOT_F;
1742: return \"tbitw %1,%0\";
1743: }")
1744:
1745: (define_insn ""
1746: [(set (cc0)
1747: (zero_extract (match_operand:QI 0 "general_operand" "g")
1748: (const_int 1)
1749: (match_operand:QI 1 "general_operand" "g")))]
1750: ""
1751: "*
1752: { cc_status.flags = CC_Z_IN_F;
1753: return \"tbitb %1,%0\";
1754: }")
1755:
1756: (define_insn ""
1757: [(set (cc0)
1758: (compare (zero_extract:SI (match_operand:QI 0 "general_operand" "g")
1759: (const_int 1)
1760: (match_operand:QI 1 "general_operand" "rmn"))
1761: (const_int 1)))]
1762: ""
1763: "*
1764: { cc_status.flags = CC_Z_IN_NOT_F;
1765: return \"tbitb %1,%0\";
1766: }")
1767:
1768: (define_insn ""
1769: [(set (cc0)
1770: (and:SI (match_operand:SI 0 "general_operand" "rm")
1771: (match_operand:SI 1 "immediate_operand" "i")))]
1772: "GET_CODE (operands[1]) == CONST_INT
1773: && exact_log2 (INTVAL (operands[1])) >= 0"
1774: "*
1775: {
1776: operands[1]
1777: = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1])));
1778: cc_status.flags = CC_Z_IN_F;
1779: return \"tbitd %1,%0\";
1780: }")
1781:
1782: ;; extract(base, width, offset)
1783: ;; Signed bitfield extraction is not supported in hardware on the
1784: ;; NS 32032. It is therefore better to let GCC figure out a
1785: ;; good strategy for generating the proper instruction sequence
1786: ;; and represent it as rtl.
1787:
1788: ;; Optimize the case of extracting a byte or word from a register.
1789: ;; Otherwise we must load a register with the offset of the
1790: ;; chunk we want, and perform an extract insn (each of which
1791: ;; is very expensive). Since we use the stack to do our bit-twiddling
1792: ;; we cannot use it for a destination. Perhaps things are fast
1793: ;; enough on the 32532 that such hacks are not needed.
1794:
1795: (define_insn ""
1796: [(set (match_operand:SI 0 "general_operand" "=ro")
1797: (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
1798: (match_operand:SI 2 "const_int" "i")
1799: (match_operand:SI 3 "const_int" "i")))]
1800: "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
1801: && (INTVAL (operands[3]) == 8 || INTVAL (operands[3]) == 16 || INTVAL (operands[3]) == 24)"
1802: "*
1803: {
1804: output_asm_insn (\"movd %1,tos\", operands);
1805: if (INTVAL (operands[2]) == 16)
1806: {
1807: if (INTVAL (operands[3]) == 8)
1808: output_asm_insn (\"movzwd 1(sp),%0\", operands);
1809: else
1810: output_asm_insn (\"movzwd 2(sp),%0\", operands);
1811: }
1812: else
1813: {
1814: if (INTVAL (operands[3]) == 8)
1815: output_asm_insn (\"movzbd 1(sp),%0\", operands);
1816: else if (INTVAL (operands[3]) == 16)
1817: output_asm_insn (\"movzbd 2(sp),%0\", operands);
1818: else
1819: output_asm_insn (\"movzbd 3(sp),%0\", operands);
1820: }
1821: return \"cmpqd %$0,tos # adjsp -4\";
1822: }")
1823:
1824: (define_insn ""
1825: [(set (match_operand:SI 0 "general_operand" "=ro")
1826: (zero_extract:SI (match_operand:HI 1 "register_operand" "r")
1827: (match_operand:SI 2 "const_int" "i")
1828: (match_operand:SI 3 "const_int" "i")))]
1829: "INTVAL (operands[2]) == 8 && INTVAL (operands[3]) == 8"
1830: "movw %1,tos\;movzbd 1(sp),%0\;adjspb %$-2")
1831:
1832: (define_insn "extzv"
1833: [(set (match_operand:SI 0 "general_operand" "=g<,g<")
1834: (zero_extract:SI (match_operand:SI 1 "general_operand" "rm,o")
1835: (match_operand:SI 2 "const_int" "i,i")
1836: (match_operand:SI 3 "general_operand" "rK,n")))]
1837: ""
1838: "*
1839: { if (GET_CODE (operands[3]) == CONST_INT)
1840: {
1841: if (INTVAL (operands[3]) >= 8)
1842: operands[1] = adj_offsettable_operand (operands[1],
1843: INTVAL (operands[3]) >> 3);
1844: return \"extsd %1,%0,%3,%2\";
1845: }
1846: else return \"extd %3,%1,%0,%2\";
1847: }")
1848:
1849: (define_insn ""
1850: [(set (match_operand:SI 0 "general_operand" "=g<,g<")
1851: (zero_extract:SI (match_operand:HI 1 "general_operand" "rm,o")
1852: (match_operand:SI 2 "const_int" "i,i")
1853: (match_operand:SI 3 "general_operand" "rK,n")))]
1854: ""
1855: "*
1856: { if (GET_CODE (operands[3]) == CONST_INT)
1857: {
1858: if (INTVAL (operands[3]) >= 8)
1859: operands[1] = adj_offsettable_operand (operands[1],
1860: INTVAL (operands[3]) >> 3);
1861: return \"extsd %1,%0,%3,%2\";
1862: }
1863: else return \"extd %3,%1,%0,%2\";
1864: }")
1865:
1866: (define_insn ""
1867: [(set (match_operand:SI 0 "general_operand" "=g<")
1868: (zero_extract:SI (match_operand:QI 1 "general_operand" "g")
1869: (match_operand:SI 2 "const_int" "i")
1870: (match_operand:SI 3 "general_operand" "rn")))]
1871: ""
1872: "*
1873: { if (GET_CODE (operands[3]) == CONST_INT)
1874: return \"extsd %1,%0,%3,%2\";
1875: else return \"extd %3,%1,%0,%2\";
1876: }")
1877:
1878: (define_insn "insv"
1879: [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+g,o")
1880: (match_operand:SI 1 "const_int" "i,i")
1881: (match_operand:SI 2 "general_operand" "rK,n"))
1882: (match_operand:SI 3 "general_operand" "rm,rm"))]
1883: ""
1884: "*
1885: { if (GET_CODE (operands[2]) == CONST_INT)
1886: {
1887: if (GET_CODE (operands[0]) == MEM && INTVAL (operands[2]) >= 8)
1888: {
1889: operands[0] = adj_offsettable_operand (operands[0],
1890: INTVAL (operands[2]) / 8);
1891: operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) % 8);
1892: }
1893: if (INTVAL (operands[1]) <= 8)
1894: return \"inssb %3,%0,%2,%1\";
1895: else if (INTVAL (operands[1]) <= 16)
1896: return \"inssw %3,%0,%2,%1\";
1897: else
1898: return \"inssd %3,%0,%2,%1\";
1899: }
1900: return \"insd %2,%3,%0,%1\";
1901: }")
1902:
1903: (define_insn ""
1904: [(set (zero_extract:SI (match_operand:HI 0 "general_operand" "+g,o")
1905: (match_operand:SI 1 "const_int" "i,i")
1906: (match_operand:SI 2 "general_operand" "rK,n"))
1907: (match_operand:SI 3 "general_operand" "rm,rm"))]
1908: ""
1909: "*
1910: { if (GET_CODE (operands[2]) == CONST_INT)
1911: {
1912: if (GET_CODE (operands[0]) == MEM && INTVAL (operands[2]) >= 8)
1913: {
1914: operands[0] = adj_offsettable_operand (operands[0],
1915: INTVAL (operands[2]) / 8);
1916: operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) % 8);
1917: }
1918: if (INTVAL (operands[1]) <= 8)
1919: return \"inssb %3,%0,%2,%1\";
1920: else if (INTVAL (operands[1]) <= 16)
1921: return \"inssw %3,%0,%2,%1\";
1922: else
1923: return \"inssd %3,%0,%2,%1\";
1924: }
1925: return \"insd %2,%3,%0,%1\";
1926: }")
1927:
1928: (define_insn ""
1929: [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "=g")
1930: (match_operand:SI 1 "const_int" "i")
1931: (match_operand:SI 2 "general_operand" "rn"))
1932: (match_operand:SI 3 "general_operand" "rm"))]
1933: ""
1934: "*
1935: { if (GET_CODE (operands[2]) == CONST_INT)
1936: if (INTVAL (operands[1]) <= 8)
1937: return \"inssb %3,%0,%2,%1\";
1938: else if (INTVAL (operands[1]) <= 16)
1939: return \"inssw %3,%0,%2,%1\";
1940: else
1941: return \"inssd %3,%0,%2,%1\";
1942: return \"insd %2,%3,%0,%1\";
1943: }")
1944:
1945:
1946: (define_insn "jump"
1947: [(set (pc)
1948: (label_ref (match_operand 0 "" "")))]
1949: ""
1950: "br %l0")
1951:
1952: (define_insn "beq"
1953: [(set (pc)
1954: (if_then_else (eq (cc0)
1955: (const_int 0))
1956: (label_ref (match_operand 0 "" ""))
1957: (pc)))]
1958: ""
1959: "*
1960: { if (cc_prev_status.flags & CC_Z_IN_F)
1961: return \"bfc %l0\";
1962: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
1963: return \"bfs %l0\";
1964: else return \"beq %l0\";
1965: }")
1966:
1967: (define_insn "bne"
1968: [(set (pc)
1969: (if_then_else (ne (cc0)
1970: (const_int 0))
1971: (label_ref (match_operand 0 "" ""))
1972: (pc)))]
1973: ""
1974: "*
1975: { if (cc_prev_status.flags & CC_Z_IN_F)
1976: return \"bfs %l0\";
1977: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
1978: return \"bfc %l0\";
1979: else return \"bne %l0\";
1980: }")
1981:
1982: (define_insn "bgt"
1983: [(set (pc)
1984: (if_then_else (gt (cc0)
1985: (const_int 0))
1986: (label_ref (match_operand 0 "" ""))
1987: (pc)))]
1988: ""
1989: "bgt %l0")
1990:
1991: (define_insn "bgtu"
1992: [(set (pc)
1993: (if_then_else (gtu (cc0)
1994: (const_int 0))
1995: (label_ref (match_operand 0 "" ""))
1996: (pc)))]
1997: ""
1998: "bhi %l0")
1999:
2000: (define_insn "blt"
2001: [(set (pc)
2002: (if_then_else (lt (cc0)
2003: (const_int 0))
2004: (label_ref (match_operand 0 "" ""))
2005: (pc)))]
2006: ""
2007: "blt %l0")
2008:
2009: (define_insn "bltu"
2010: [(set (pc)
2011: (if_then_else (ltu (cc0)
2012: (const_int 0))
2013: (label_ref (match_operand 0 "" ""))
2014: (pc)))]
2015: ""
2016: "blo %l0")
2017:
2018: (define_insn "bge"
2019: [(set (pc)
2020: (if_then_else (ge (cc0)
2021: (const_int 0))
2022: (label_ref (match_operand 0 "" ""))
2023: (pc)))]
2024: ""
2025: "bge %l0")
2026:
2027: (define_insn "bgeu"
2028: [(set (pc)
2029: (if_then_else (geu (cc0)
2030: (const_int 0))
2031: (label_ref (match_operand 0 "" ""))
2032: (pc)))]
2033: ""
2034: "bhs %l0")
2035:
2036: (define_insn "ble"
2037: [(set (pc)
2038: (if_then_else (le (cc0)
2039: (const_int 0))
2040: (label_ref (match_operand 0 "" ""))
2041: (pc)))]
2042: ""
2043: "ble %l0")
2044:
2045: (define_insn "bleu"
2046: [(set (pc)
2047: (if_then_else (leu (cc0)
2048: (const_int 0))
2049: (label_ref (match_operand 0 "" ""))
2050: (pc)))]
2051: ""
2052: "bls %l0")
2053:
2054: (define_insn ""
2055: [(set (pc)
2056: (if_then_else (eq (cc0)
2057: (const_int 0))
2058: (pc)
2059: (label_ref (match_operand 0 "" ""))))]
2060: ""
2061: "*
2062: { if (cc_prev_status.flags & CC_Z_IN_F)
2063: return \"bfs %l0\";
2064: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2065: return \"bfc %l0\";
2066: else return \"bne %l0\";
2067: }")
2068:
2069: (define_insn ""
2070: [(set (pc)
2071: (if_then_else (ne (cc0)
2072: (const_int 0))
2073: (pc)
2074: (label_ref (match_operand 0 "" ""))))]
2075: ""
2076: "*
2077: { if (cc_prev_status.flags & CC_Z_IN_F)
2078: return \"bfc %l0\";
2079: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2080: return \"bfs %l0\";
2081: else return \"beq %l0\";
2082: }")
2083:
2084: (define_insn ""
2085: [(set (pc)
2086: (if_then_else (gt (cc0)
2087: (const_int 0))
2088: (pc)
2089: (label_ref (match_operand 0 "" ""))))]
2090: ""
2091: "ble %l0")
2092:
2093: (define_insn ""
2094: [(set (pc)
2095: (if_then_else (gtu (cc0)
2096: (const_int 0))
2097: (pc)
2098: (label_ref (match_operand 0 "" ""))))]
2099: ""
2100: "bls %l0")
2101:
2102: (define_insn ""
2103: [(set (pc)
2104: (if_then_else (lt (cc0)
2105: (const_int 0))
2106: (pc)
2107: (label_ref (match_operand 0 "" ""))))]
2108: ""
2109: "bge %l0")
2110:
2111: (define_insn ""
2112: [(set (pc)
2113: (if_then_else (ltu (cc0)
2114: (const_int 0))
2115: (pc)
2116: (label_ref (match_operand 0 "" ""))))]
2117: ""
2118: "bhs %l0")
2119:
2120: (define_insn ""
2121: [(set (pc)
2122: (if_then_else (ge (cc0)
2123: (const_int 0))
2124: (pc)
2125: (label_ref (match_operand 0 "" ""))))]
2126: ""
2127: "blt %l0")
2128:
2129: (define_insn ""
2130: [(set (pc)
2131: (if_then_else (geu (cc0)
2132: (const_int 0))
2133: (pc)
2134: (label_ref (match_operand 0 "" ""))))]
2135: ""
2136: "blo %l0")
2137:
2138: (define_insn ""
2139: [(set (pc)
2140: (if_then_else (le (cc0)
2141: (const_int 0))
2142: (pc)
2143: (label_ref (match_operand 0 "" ""))))]
2144: ""
2145: "bgt %l0")
2146:
2147: (define_insn ""
2148: [(set (pc)
2149: (if_then_else (leu (cc0)
2150: (const_int 0))
2151: (pc)
2152: (label_ref (match_operand 0 "" ""))))]
2153: ""
2154: "bhi %l0")
2155:
2156: ;; Subtract-and-jump and Add-and-jump insns.
2157: ;; These can actually be used for adding numbers in the range -8 to 7
2158:
2159: (define_insn ""
2160: [(set (pc)
2161: (if_then_else
2162: (ne (minus:SI (match_operand:SI 0 "general_operand" "+g")
2163: (match_operand:SI 1 "general_operand" "i"))
2164: (const_int 0))
2165: (label_ref (match_operand 2 "" ""))
2166: (pc)))
2167: (set (match_dup 0)
2168: (minus:SI (match_dup 0)
2169: (match_dup 1)))]
2170: "GET_CODE (operands[1]) == CONST_INT
2171: && INTVAL (operands[1]) > -8 && INTVAL (operands[1]) <= 8"
2172: "acbd %$%n1,%0,%l2")
2173:
2174: (define_insn ""
2175: [(set (pc)
2176: (if_then_else
2177: (ne (plus:SI (match_operand:SI 0 "general_operand" "+g")
2178: (match_operand:SI 1 "general_operand" "i"))
2179: (const_int 0))
2180: (label_ref (match_operand 2 "" ""))
2181: (pc)))
2182: (set (match_dup 0)
2183: (plus:SI (match_dup 0)
2184: (match_dup 1)))]
2185: "GET_CODE (operands[1]) == CONST_INT
2186: && INTVAL (operands[1]) >= -8 && INTVAL (operands[1]) < 8"
2187: "acbd %1,%0,%l2")
2188:
2189: ;; Reversed
2190:
2191: (define_insn ""
2192: [(set (pc)
2193: (if_then_else
2194: (eq (minus:SI (match_operand:SI 0 "general_operand" "+g")
2195: (match_operand:SI 1 "general_operand" "i"))
2196: (const_int 0))
2197: (pc)
2198: (label_ref (match_operand 2 "" ""))))
2199: (set (match_dup 0)
2200: (minus:SI (match_dup 0)
2201: (match_dup 1)))]
2202: "GET_CODE (operands[1]) == CONST_INT
2203: && INTVAL (operands[1]) > -8 && INTVAL (operands[1]) <= 8"
2204: "acbd %$%n1,%0,%l2")
2205:
2206: (define_insn ""
2207: [(set (pc)
2208: (if_then_else
2209: (eq (plus:SI (match_operand:SI 0 "general_operand" "+g")
2210: (match_operand:SI 1 "general_operand" "i"))
2211: (const_int 0))
2212: (pc)
2213: (label_ref (match_operand 2 "" ""))))
2214: (set (match_dup 0)
2215: (plus:SI (match_dup 0)
2216: (match_dup 1)))]
2217: "GET_CODE (operands[1]) == CONST_INT
2218: && INTVAL (operands[1]) >= -8 && INTVAL (operands[1]) < 8"
2219: "acbd %1,%0,%l2")
2220:
2221: (define_insn "call"
2222: [(call (match_operand:QI 0 "general_operand" "g")
2223: (match_operand:QI 1 "general_operand" "g"))]
2224: ""
2225: "*
2226: {
2227: if (GET_CODE (operands[0]) == MEM)
2228: {
2229: if (CONSTANT_ADDRESS_P (XEXP (operands[0], 0)))
2230: #ifdef GNX_V3
2231: return \"bsr %0\";
2232: #else
2233: return \"bsr %?%a0\";
2234: #endif
2235: if (GET_CODE (XEXP (operands[0], 0)) == REG)
2236: #ifdef GNX_V3
2237: return \"jsr %0\";
2238: #else
2239: return \"jsr %a0\";
2240: #endif
2241: }
2242: return \"jsr %0\";
2243: }")
2244:
2245: (define_insn "call_value"
2246: [(set (match_operand 0 "" "=fg")
2247: (call (match_operand:QI 1 "general_operand" "g")
2248: (match_operand:QI 2 "general_operand" "g")))]
2249: ""
2250: "*
2251: {
2252: if (GET_CODE (operands[1]) == MEM)
2253: {
2254: if (CONSTANT_ADDRESS_P (XEXP (operands[1], 0)))
2255: #ifdef GNX_V3
2256: return \"bsr %1\";
2257: #else
2258: return \"bsr %?%a1\";
2259: #endif
2260: if (GET_CODE (XEXP (operands[1], 0)) == REG)
2261: #ifdef GNX_V3
2262: return \"jsr %1\";
2263: #else
2264: return \"jsr %a1\";
2265: #endif
2266: }
2267: return \"jsr %1\";
2268: }")
2269:
2270: (define_insn "return"
2271: [(return)]
2272: "0"
2273: "ret 0")
2274:
2275: (define_insn "abssf2"
2276: [(set (match_operand:SF 0 "general_operand" "=fm<")
2277: (abs:SF (match_operand:SF 1 "general_operand" "fmF")))]
2278: "TARGET_32081"
2279: "absf %1,%0")
2280:
2281: (define_insn "absdf2"
2282: [(set (match_operand:DF 0 "general_operand" "=fm<")
2283: (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
2284: "TARGET_32081"
2285: "absl %1,%0")
2286:
2287: (define_insn "abssi2"
2288: [(set (match_operand:SI 0 "general_operand" "=g<")
2289: (abs:SI (match_operand:SI 1 "general_operand" "rmn")))]
2290: ""
2291: "absd %1,%0")
2292:
2293: (define_insn "abshi2"
2294: [(set (match_operand:HI 0 "general_operand" "=g<")
2295: (abs:HI (match_operand:HI 1 "general_operand" "g")))]
2296: ""
2297: "absw %1,%0")
2298:
2299: (define_insn "absqi2"
2300: [(set (match_operand:QI 0 "general_operand" "=g<")
2301: (abs:QI (match_operand:QI 1 "general_operand" "g")))]
2302: ""
2303: "absb %1,%0")
2304:
2305: (define_insn "nop"
2306: [(const_int 0)]
2307: ""
2308: "nop")
2309:
2310: ;;(define_insn "tablejump"
2311: ;; [(set (pc)
2312: ;; (plus:SI (match_operand:SI 0 "general_operand" "g")
2313: ;; (pc)))]
2314: ;; ""
2315: ;; "cased %0")
2316:
2317: (define_insn "tablejump"
2318: [(set (pc)
2319: (plus:SI (pc) (match_operand:HI 0 "general_operand" "g")))
2320: (use (label_ref (match_operand 1 "" "")))]
2321: ""
2322: "*
2323: {
2324: ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"LI\",
2325: CODE_LABEL_NUMBER (operands[1]));
2326: return \"casew %0\";
2327: }")
2328:
2329: ;;(define_insn ""
2330: ;; [(set (pc)
2331: ;; (plus:SI (match_operand:QI 0 "general_operand" "g")
2332: ;; (pc)))]
2333: ;; ""
2334: ;; "caseb %0")
2335:
2336: ;; Scondi instructions
2337: (define_insn "seq"
2338: [(set (match_operand:SI 0 "general_operand" "=g<")
2339: (eq (cc0) (const_int 0)))]
2340: ""
2341: "*
2342: { if (cc_prev_status.flags & CC_Z_IN_F)
2343: return \"sfcd %0\";
2344: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2345: return \"sfsd %0\";
2346: else return \"seqd %0\";
2347: }")
2348:
2349: (define_insn ""
2350: [(set (match_operand:HI 0 "general_operand" "=g<")
2351: (eq (cc0) (const_int 0)))]
2352: ""
2353: "*
2354: { if (cc_prev_status.flags & CC_Z_IN_F)
2355: return \"sfcw %0\";
2356: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2357: return \"sfsw %0\";
2358: else return \"seqw %0\";
2359: }")
2360:
2361: (define_insn ""
2362: [(set (match_operand:QI 0 "general_operand" "=g<")
2363: (eq (cc0) (const_int 0)))]
2364: ""
2365: "*
2366: { if (cc_prev_status.flags & CC_Z_IN_F)
2367: return \"sfcb %0\";
2368: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2369: return \"sfsb %0\";
2370: else return \"seqb %0\";
2371: }")
2372:
2373: (define_insn "sne"
2374: [(set (match_operand:SI 0 "general_operand" "=g<")
2375: (ne (cc0) (const_int 0)))]
2376: ""
2377: "*
2378: { if (cc_prev_status.flags & CC_Z_IN_F)
2379: return \"sfsd %0\";
2380: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2381: return \"sfcd %0\";
2382: else return \"sned %0\";
2383: }")
2384:
2385: (define_insn ""
2386: [(set (match_operand:HI 0 "general_operand" "=g<")
2387: (ne (cc0) (const_int 0)))]
2388: ""
2389: "*
2390: { if (cc_prev_status.flags & CC_Z_IN_F)
2391: return \"sfsw %0\";
2392: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2393: return \"sfcw %0\";
2394: else return \"snew %0\";
2395: }")
2396:
2397: (define_insn ""
2398: [(set (match_operand:QI 0 "general_operand" "=g<")
2399: (ne (cc0) (const_int 0)))]
2400: ""
2401: "*
2402: { if (cc_prev_status.flags & CC_Z_IN_F)
2403: return \"sfsb %0\";
2404: else if (cc_prev_status.flags & CC_Z_IN_NOT_F)
2405: return \"sfcb %0\";
2406: else return \"sneb %0\";
2407: }")
2408:
2409: (define_insn "sgt"
2410: [(set (match_operand:SI 0 "general_operand" "=g<")
2411: (gt (cc0) (const_int 0)))]
2412: ""
2413: "sgtd %0")
2414:
2415: (define_insn ""
2416: [(set (match_operand:HI 0 "general_operand" "=g<")
2417: (gt (cc0) (const_int 0)))]
2418: ""
2419: "sgtw %0")
2420:
2421: (define_insn ""
2422: [(set (match_operand:QI 0 "general_operand" "=g<")
2423: (gt (cc0) (const_int 0)))]
2424: ""
2425: "sgtb %0")
2426:
2427: (define_insn "sgtu"
2428: [(set (match_operand:SI 0 "general_operand" "=g<")
2429: (gtu (cc0) (const_int 0)))]
2430: ""
2431: "shid %0")
2432:
2433: (define_insn ""
2434: [(set (match_operand:HI 0 "general_operand" "=g<")
2435: (gtu (cc0) (const_int 0)))]
2436: ""
2437: "shiw %0")
2438:
2439: (define_insn ""
2440: [(set (match_operand:QI 0 "general_operand" "=g<")
2441: (gtu (cc0) (const_int 0)))]
2442: ""
2443: "shib %0")
2444:
2445: (define_insn "slt"
2446: [(set (match_operand:SI 0 "general_operand" "=g<")
2447: (lt (cc0) (const_int 0)))]
2448: ""
2449: "sltd %0")
2450:
2451: (define_insn ""
2452: [(set (match_operand:HI 0 "general_operand" "=g<")
2453: (lt (cc0) (const_int 0)))]
2454: ""
2455: "sltw %0")
2456:
2457: (define_insn ""
2458: [(set (match_operand:QI 0 "general_operand" "=g<")
2459: (lt (cc0) (const_int 0)))]
2460: ""
2461: "sltb %0")
2462:
2463: (define_insn "sltu"
2464: [(set (match_operand:SI 0 "general_operand" "=g<")
2465: (ltu (cc0) (const_int 0)))]
2466: ""
2467: "slod %0")
2468:
2469: (define_insn ""
2470: [(set (match_operand:HI 0 "general_operand" "=g<")
2471: (ltu (cc0) (const_int 0)))]
2472: ""
2473: "slow %0")
2474:
2475: (define_insn ""
2476: [(set (match_operand:QI 0 "general_operand" "=g<")
2477: (ltu (cc0) (const_int 0)))]
2478: ""
2479: "slob %0")
2480:
2481: (define_insn "sge"
2482: [(set (match_operand:SI 0 "general_operand" "=g<")
2483: (ge (cc0) (const_int 0)))]
2484: ""
2485: "sged %0")
2486:
2487: (define_insn ""
2488: [(set (match_operand:HI 0 "general_operand" "=g<")
2489: (ge (cc0) (const_int 0)))]
2490: ""
2491: "sgew %0")
2492:
2493: (define_insn ""
2494: [(set (match_operand:QI 0 "general_operand" "=g<")
2495: (ge (cc0) (const_int 0)))]
2496: ""
2497: "sgeb %0")
2498:
2499: (define_insn "sgeu"
2500: [(set (match_operand:SI 0 "general_operand" "=g<")
2501: (geu (cc0) (const_int 0)))]
2502: ""
2503: "shsd %0")
2504:
2505: (define_insn ""
2506: [(set (match_operand:HI 0 "general_operand" "=g<")
2507: (geu (cc0) (const_int 0)))]
2508: ""
2509: "shsw %0")
2510:
2511: (define_insn ""
2512: [(set (match_operand:QI 0 "general_operand" "=g<")
2513: (geu (cc0) (const_int 0)))]
2514: ""
2515: "shsb %0")
2516:
2517: (define_insn "sle"
2518: [(set (match_operand:SI 0 "general_operand" "=g<")
2519: (le (cc0) (const_int 0)))]
2520: ""
2521: "sled %0")
2522:
2523: (define_insn ""
2524: [(set (match_operand:HI 0 "general_operand" "=g<")
2525: (le (cc0) (const_int 0)))]
2526: ""
2527: "slew %0")
2528:
2529: (define_insn ""
2530: [(set (match_operand:QI 0 "general_operand" "=g<")
2531: (le (cc0) (const_int 0)))]
2532: ""
2533: "sleb %0")
2534:
2535: (define_insn "sleu"
2536: [(set (match_operand:SI 0 "general_operand" "=g<")
2537: (leu (cc0) (const_int 0)))]
2538: ""
2539: "slsd %0")
2540:
2541: (define_insn ""
2542: [(set (match_operand:HI 0 "general_operand" "=g<")
2543: (leu (cc0) (const_int 0)))]
2544: ""
2545: "slsw %0")
2546:
2547: (define_insn ""
2548: [(set (match_operand:QI 0 "general_operand" "=g<")
2549: (leu (cc0) (const_int 0)))]
2550: ""
2551: "slsb %0")
2552:
2553: ;;- Local variables:
2554: ;;- mode:emacs-lisp
2555: ;;- comment-start: ";;- "
2556: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
2557: ;;- eval: (modify-syntax-entry ?[ "(]")
2558: ;;- eval: (modify-syntax-entry ?] ")[")
2559: ;;- eval: (modify-syntax-entry ?{ "(}")
2560: ;;- eval: (modify-syntax-entry ?} "){")
2561: ;;- End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.