|
|
1.1 root 1: ;;- Machine description for GNU compiler
2: ;;- Convex Version
3: ;; Copyright (C) 1991 Free Software Foundation, Inc.
4:
5: ;; This file is part of GNU CC.
6:
7: ;; GNU CC is free software; you can redistribute it and/or modify
8: ;; it under the terms of the GNU General Public License as published by
9: ;; the Free Software Foundation; either version 2, or (at your option)
10: ;; any later version.
11:
12: ;; GNU CC is distributed in the hope that it will be useful,
13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: ;; GNU General Public License for more details.
16:
17: ;; You should have received a copy of the GNU General Public License
18: ;; along with GNU CC; see the file COPYING. If not, write to
19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20:
21: ;; Scheduling defs
22: ;;
23: ;; Insn scheduling is not used at present. Scheduling increases
24: ;; register pressure so much that many spills are generated
25: ;; even for very small functions.
26:
27: ;; Compares
28:
29: (define_insn "tstsi"
30: [(set (cc0)
31: (match_operand:SI 0 "register_operand" "r"))]
32: ""
33: "* return set_cmp (operands[0], const0_rtx, 'w');")
34:
35: (define_insn "tsthi"
36: [(set (cc0)
37: (match_operand:HI 0 "register_operand" "r"))]
38: ""
39: "* return set_cmp (operands[0], const0_rtx, 'h');")
40:
41: (define_expand "tstqi"
42: [(set (match_dup 1)
43: (sign_extend:SI (match_operand:QI 0 "register_operand" "r")))
44: (set (cc0)
45: (match_dup 1))]
46: ""
47: "operands[1] = gen_reg_rtx (SImode);")
48:
49: (define_expand "tstdi"
50: [(parallel [(set (cc0) (match_operand:DI 0 "register_operand" "d"))
51: (use (match_dup 1))])]
52: ""
53: "operands[1] = force_reg (DImode, const0_rtx);")
54:
55: (define_insn ""
56: [(set (cc0) (match_operand:DI 0 "register_operand" "d"))
57: (use (match_operand:DI 1 "register_operand" "d"))]
58: ""
59: "* return set_cmp (operands[0], operands[1], 'l');")
60:
61: (define_expand "tstdf"
62: [(set (cc0)
63: (compare (match_operand:DF 0 "register_operand" "d")
64: (match_dup 1)))]
65: ""
66: "operands[1] = force_reg (DFmode, CONST0_RTX (DFmode));")
67:
68: (define_insn "tstsf"
69: [(set (cc0)
70: (match_operand:SF 0 "register_operand" "d"))]
71: ""
72: "* return set_cmp (operands[0], CONST0_RTX (SFmode), 's');")
73:
74: (define_insn "cmpsi"
75: [(set (cc0)
76: (compare (match_operand:SI 0 "register_operand" "d,a,i,r")
77: (match_operand:SI 1 "nonmemory_operand" "d,a,r,i")))]
78: ""
79: "* return set_cmp (operands[0], operands[1], 'w');")
80:
81: (define_insn "cmphi"
82: [(set (cc0)
83: (compare (match_operand:HI 0 "register_operand" "d,a,r,i")
84: (match_operand:HI 1 "nonmemory_operand" "d,a,i,r")))]
85: ""
86: "* return set_cmp (operands[0], operands[1], 'h');")
87:
88: (define_insn "cmpqi"
89: [(set (cc0)
90: (compare (match_operand:QI 0 "register_operand" "d")
91: (match_operand:QI 1 "register_operand" "d")))]
92: ""
93: "* return set_cmp (operands[0], operands[1], 'b');")
94:
95: (define_insn "cmpdi"
96: [(set (cc0)
97: (compare (match_operand:DI 0 "register_operand" "d")
98: (match_operand:DI 1 "register_operand" "d")))]
99: ""
100: "* return set_cmp (operands[0], operands[1], 'l');")
101:
102: (define_insn "cmpdf"
103: [(set (cc0)
104: (compare (match_operand:DF 0 "register_operand" "d")
105: (match_operand:DF 1 "register_operand" "d")))]
106: ""
107: "* return set_cmp (operands[0], operands[1], 'd');")
108:
109: (define_insn "cmpsf"
110: [(set (cc0)
111: (compare (match_operand:SF 0 "nonmemory_operand" "dF,d")
112: (match_operand:SF 1 "nonmemory_operand" "d,F")))]
113: ""
114: "* return set_cmp (operands[0], operands[1], 's');")
115:
116: ;; Moves
117:
118: ;(define_insn "movtf"
119: ; [(set (match_operand:TF 0 "general_operand" "=g,d")
120: ; (match_operand:TF 1 "general_operand" "d,g"))]
121: ; ""
122: ; "*
123: ;{
124: ; rtx opaddr = 0;
125: ; rtx xoperands[4];
126: ; xoperands[0] = operands[0];
127: ; xoperands[2] = operands[1];
128: ;
129: ; if (REG_P (operands[0]))
130: ; xoperands[1] = gen_rtx (REG, TFmode, REGNO (operands[0]) + 1);
131: ; else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
132: ; xoperands[1] = 0;
133: ; else if (offsettable_memref_p (operands[0]))
134: ; xoperands[1] = adj_offsettable_operand (operands[0], 8);
135: ; else
136: ; {
137: ; opaddr = XEXP (operands[0], 0);
138: ; xoperands[0] = gen_rtx (MEM, TFmode, gen_rtx (REG, SImode, 13));
139: ; xoperands[1] = adj_offsettable_operand (xoperands[0], 8);
140: ; }
141: ;
142: ; if (REG_P (operands[1]))
143: ; xoperands[3] = gen_rtx (REG, TFmode, REGNO (operands[1]) + 1);
144: ; else if (offsettable_memref_p (operands[1]))
145: ; xoperands[3] = adj_offsettable_operand (operands[1], 8);
146: ; else
147: ; {
148: ; opaddr = XEXP (operands[1], 0);
149: ; xoperands[2] = gen_rtx (MEM, TFmode, gen_rtx (REG, SImode, 13));
150: ; xoperands[3] = adj_offsettable_operand (xoperands[2], 8);
151: ; }
152: ;
153: ; if (opaddr)
154: ; output_asm_insn (\"psh.w a5\;ld.w %0,a5\", &opaddr);
155: ; if (push_operand (operands[0], TFmode))
156: ; output_asm_insn (\"psh.l %3\;psh.l %2\", xoperands);
157: ; else if (GET_CODE (operands[0]) == MEM)
158: ; output_asm_insn (\"st.l %2,%0\;st.l %3,%1\", xoperands);
159: ; else if (GET_CODE (operands[1]) == REG)
160: ; output_asm_insn (\"mov %2,%0\;mov %3,%1\", xoperands);
161: ; else
162: ; output_asm_insn (\"ld.l %2,%0\;ld.l %3,%1\", xoperands);
163: ; if (opaddr)
164: ; output_asm_insn (\"pop.w a5\");
165: ; return \"\";
166: ;}")
167:
168: (define_insn "movdf"
169: [(set (match_operand:DF 0 "general_operand" "=g,d")
170: (match_operand:DF 1 "general_operand" "d,dmG"))]
171: ""
172: "*
173: {
174: if (push_operand (operands[0], DFmode))
175: return \"psh.l %1\";
176: else if (GET_CODE (operands[0]) == MEM)
177: return \"st.l %1,%0\";
178: else if (GET_CODE (operands[1]) == REG)
179: return \"mov %1,%0\";
180: else if (GET_CODE (operands[1]) == CONST_DOUBLE && LD_D_P (operands[1]))
181: {
182: operands[1] = gen_rtx (CONST_INT, VOIDmode,
183: const_double_high_int (operands[1]));
184: return \"ld.d %1,%0\";
185: }
186: else if (GET_CODE (operands[1]) == CONST_DOUBLE && LD_L_P (operands[1]))
187: {
188: operands[1] = gen_rtx (CONST_INT, VOIDmode,
189: const_double_low_int (operands[1]));
190: return \"ld.l %1,%0\";
191: }
192: else
193: return \"ld.l %1,%0\";
194: }")
195:
196: (define_insn "movsf"
197: [(set (match_operand:SF 0 "general_operand" "=g,d")
198: (match_operand:SF 1 "general_operand" "d,gF"))]
199: ""
200: "*
201: {
202: if (push_operand (operands[0], SFmode))
203: return \"psh.w %1\";
204: else if (GET_CODE (operands[0]) == MEM)
205: return \"st.s %1,%0\";
206: else if (GET_CODE (operands[1]) == REG)
207: return \"mov.s %1,%0\";
208: else
209: return \"ld.s %1,%0\";
210: }")
211:
212: (define_insn "movdi"
213: [(set (match_operand:DI 0 "general_operand" "=g,d")
214: (match_operand:DI 1 "general_operand" "d,dmiG"))]
215: ""
216: "*
217: {
218: if (push_operand (operands[0], DImode))
219: return \"psh.l %1\";
220: else if (GET_CODE (operands[0]) == MEM)
221: return \"st.l %1,%0\";
222: else if (GET_CODE (operands[1]) == REG)
223: return \"mov %1,%0\";
224: else if (GET_CODE (operands[1]) == CONST_DOUBLE && LD_D_P (operands[1]))
225: {
226: operands[1] = gen_rtx (CONST_INT, VOIDmode,
227: const_double_high_int (operands[1]));
228: return \"ld.d %1,%0\";
229: }
230: else
231: return \"ld.l %1,%0\";
232: }")
233:
234: ;; Special case of movsi, needed to express A-reg preference.
235:
236: (define_insn ""
237: [(set (match_operand:SI 0 "push_operand" "=<")
238: (plus:SI (match_operand:SI 1 "register_operand" "a")
239: (match_operand:SI 2 "immediate_operand" "i")))]
240: "operands[1] != stack_pointer_rtx"
241: "pshea %a2(%1)")
242:
243: ;; General movsi. Constraints will be selected based on TARGET_INDIRECTS
244: ;; to avoid indirect addressing on C3, where it is slow.
245:
246: (define_expand "movsi"
247: [(set (match_operand:SI 0 "general_operand" "")
248: (match_operand:SI 1 "general_operand" ""))]
249: ""
250: "")
251:
252: (define_insn ""
253: [(set (match_operand:SI 0 "general_operand" "=g,r,<")
254: (match_operand:SI 1 "general_operand" "r,g,io"))]
255: "TARGET_INDIRECTS"
256: "*
257: {
258: if (push_operand (operands[0], SImode))
259: {
260: if (GET_CODE (operands[1]) == REG)
261: return \"psh.w %1\";
262: else
263: return \"pshea %a1\";
264: }
265: if (GET_CODE (operands[0]) == MEM)
266: return \"st.w %1,%0\";
267: if (GET_CODE (operands[1]) != REG)
268: return \"ld.w %1,%0\";
269: if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
270: return \"mov.w %1,%0\";
271: return \"mov %1,%0\";
272: }")
273:
274: (define_insn ""
275: [(set (match_operand:SI 0 "general_operand" "=g,r,<")
276: (match_operand:SI 1 "general_operand" "r,g,i"))]
277: "! TARGET_INDIRECTS"
278: "*
279: {
280: if (push_operand (operands[0], SImode))
281: {
282: if (GET_CODE (operands[1]) == REG)
283: return \"psh.w %1\";
284: else
285: return \"pshea %a1\";
286: }
287: if (GET_CODE (operands[0]) == MEM)
288: return \"st.w %1,%0\";
289: if (GET_CODE (operands[1]) != REG)
290: return \"ld.w %1,%0\";
291: if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
292: return \"mov.w %1,%0\";
293: return \"mov %1,%0\";
294: }")
295:
296: (define_insn "movstrictsi"
297: [(set (strict_low_part (match_operand:SI 0 "general_operand" "=g,r"))
298: (match_operand:SI 1 "general_operand" "r,g"))]
299: ""
300: "*
301: {
302: if (GET_CODE (operands[0]) == MEM)
303: return \"st.w %1,%0\";
304: if (GET_CODE (operands[1]) != REG)
305: return \"ld.w %1,%0\";
306: if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
307: return \"mov.w %1,%0\";
308: return \"mov %1,%0\";
309: }")
310:
311: (define_insn "movhi"
312: [(set (match_operand:HI 0 "general_operand" "=g,r")
313: (match_operand:HI 1 "general_operand" "r,g"))]
314: ""
315: "*
316: {
317: if (push_operand (operands[0], HImode))
318: abort ();
319: else if (GET_CODE (operands[0]) == MEM)
320: return \"st.h %1,%0\";
321: else if (GET_CODE (operands[1]) == REG)
322: {
323: if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
324: return \"mov.w %1,%0\";
325: else
326: return \"mov %1,%0\";
327: }
328: else if (GET_CODE (operands[1]) == CONST_INT)
329: return \"ld.w %1,%0\";
330: else
331: return \"ld.h %1,%0\";
332: }")
333:
334: (define_insn "movqi"
335: [(set (match_operand:QI 0 "general_operand" "=g,r")
336: (match_operand:QI 1 "general_operand" "r,g"))]
337: ""
338: "*
339: {
340: if (push_operand (operands[0], QImode))
341: abort ();
342: else if (GET_CODE (operands[0]) == MEM)
343: return \"st.b %1,%0\";
344: else if (GET_CODE (operands[1]) == REG)
345: {
346: if (S_REG_P (operands[0]) && S_REG_P (operands[1]))
347: return \"mov.w %1,%0\";
348: else
349: return \"mov %1,%0\";
350: }
351: else if (GET_CODE (operands[1]) == CONST_INT)
352: return \"ld.w %1,%0\";
353: else
354: return \"ld.b %1,%0\";
355: }")
356:
357: ;; Extension and truncation insns.
358: ;; Those for integer source operand
359: ;; are ordered widest source type first.
360:
361: (define_insn "truncsiqi2"
362: [(set (match_operand:QI 0 "register_operand" "=d,a")
363: (truncate:QI (match_operand:SI 1 "register_operand" "d,a")))]
364: ""
365: "cvtw.b %1,%0")
366:
367: (define_insn "truncsihi2"
368: [(set (match_operand:HI 0 "register_operand" "=d,a")
369: (truncate:HI (match_operand:SI 1 "register_operand" "d,a")))]
370: ""
371: "cvtw.h %1,%0")
372:
373: (define_insn "trunchiqi2"
374: [(set (match_operand:QI 0 "register_operand" "=r")
375: (truncate:QI (match_operand:HI 1 "register_operand" "0")))]
376: ""
377: "")
378:
379: (define_insn "truncdisi2"
380: [(set (match_operand:SI 0 "register_operand" "=d")
381: (truncate:SI (match_operand:DI 1 "register_operand" "d")))]
382: ""
383: "cvtl.w %1,%0")
384:
385: (define_insn "extendsidi2"
386: [(set (match_operand:DI 0 "register_operand" "=d")
387: (sign_extend:DI (match_operand:SI 1 "register_operand" "d")))]
388: ""
389: "cvtw.l %1,%0")
390:
391: (define_insn "extendhisi2"
392: [(set (match_operand:SI 0 "register_operand" "=d,a")
393: (sign_extend:SI (match_operand:HI 1 "register_operand" "d,a")))]
394: ""
395: "cvth.w %1,%0")
396:
397: (define_insn "extendqihi2"
398: [(set (match_operand:HI 0 "register_operand" "=d,a")
399: (sign_extend:HI (match_operand:QI 1 "register_operand" "d,a")))]
400: ""
401: "cvtb.w %1,%0")
402:
403: (define_insn "extendqisi2"
404: [(set (match_operand:SI 0 "register_operand" "=d,a")
405: (sign_extend:SI (match_operand:QI 1 "register_operand" "d,a")))]
406: ""
407: "cvtb.w %1,%0")
408:
409: (define_insn "extendsfdf2"
410: [(set (match_operand:DF 0 "register_operand" "=d")
411: (float_extend:DF (match_operand:SF 1 "register_operand" "d")))]
412: ""
413: "cvts.d %1,%0")
414:
415: (define_insn "truncdfsf2"
416: [(set (match_operand:SF 0 "register_operand" "=d")
417: (float_truncate:SF (match_operand:DF 1 "register_operand" "d")))]
418: ""
419: "cvtd.s %1,%0")
420:
421: (define_insn "zero_extendhisi2"
422: [(set (match_operand:SI 0 "register_operand" "=r")
423: (zero_extend:SI (match_operand:HI 1 "register_operand" "0")))]
424: ""
425: "and #0xffff,%0")
426:
427: (define_insn "zero_extendqihi2"
428: [(set (match_operand:HI 0 "register_operand" "=r")
429: (zero_extend:HI (match_operand:QI 1 "register_operand" "0")))]
430: ""
431: "and #0xff,%0")
432:
433: (define_insn "zero_extendqisi2"
434: [(set (match_operand:SI 0 "register_operand" "=r")
435: (zero_extend:SI (match_operand:QI 1 "register_operand" "0")))]
436: ""
437: "and #0xff,%0")
438:
439: (define_insn "zero_extendsidi2"
440: [(set (match_operand:DI 0 "register_operand" "=d")
441: (zero_extend:DI (match_operand:SI 1 "register_operand" "0")))]
442: ""
443: "ld.u #0,%0")
444:
445: ;; Fix-to-float conversion insns.
446: ;; Note that the ones that start with SImode come first.
447: ;; That is so that an operand that is a CONST_INT
448: ;; (and therefore lacks a specific machine mode).
449: ;; will be recognized as SImode (which is always valid)
450: ;; rather than as QImode or HImode.
451:
452: (define_insn "floatsisf2"
453: [(set (match_operand:SF 0 "register_operand" "=d")
454: (float:SF (match_operand:SI 1 "register_operand" "d")))]
455: ""
456: "cvtw.s %1,%0")
457:
458: (define_insn "floatdisf2"
459: [(set (match_operand:SF 0 "register_operand" "=d")
460: (float:SF (match_operand:DI 1 "register_operand" "d")))]
461: ""
462: "cvtl.s %1,%0")
463:
464: (define_insn "floatsidf2"
465: [(set (match_operand:DF 0 "register_operand" "=d")
466: (float:DF (match_operand:SI 1 "register_operand" "d")))]
467: "TARGET_C2"
468: "cvtw.d %1,%0")
469:
470: (define_insn "floatdidf2"
471: [(set (match_operand:DF 0 "register_operand" "=d")
472: (float:DF (match_operand:DI 1 "register_operand" "d")))]
473: ""
474: "cvtl.d %1,%0")
475:
476: ;; Float-to-fix conversion insns.
477:
478: (define_insn "fix_truncsfsi2"
479: [(set (match_operand:SI 0 "register_operand" "=d")
480: (fix:SI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
481: ""
482: "cvts.w %1,%0")
483:
484: (define_insn "fix_truncsfdi2"
485: [(set (match_operand:DI 0 "register_operand" "=d")
486: (fix:DI (fix:SF (match_operand:SF 1 "register_operand" "d"))))]
487: ""
488: "cvts.l %1,%0")
489:
490: (define_insn "fix_truncdfsi2"
491: [(set (match_operand:SI 0 "register_operand" "=d")
492: (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
493: ""
494: "*
495: {
496: if (TARGET_C2)
497: return \"cvtd.w %1,%0\";
498: return \"cvtd.l %1,%0\";
499: }")
500:
501: (define_insn "fix_truncdfdi2"
502: [(set (match_operand:DI 0 "register_operand" "=d")
503: (fix:DI (fix:DF (match_operand:DF 1 "register_operand" "d"))))]
504: ""
505: "cvtd.l %1,%0")
506:
507: ;;- All kinds of add instructions.
508:
509: (define_insn "adddf3"
510: [(set (match_operand:DF 0 "register_operand" "=d")
511: (plus:DF (match_operand:DF 1 "register_operand" "%0")
512: (match_operand:DF 2 "register_operand" "d")))]
513: ""
514: "add.d %2,%0")
515:
516: (define_insn "addsf3"
517: [(set (match_operand:SF 0 "register_operand" "=d")
518: (plus:SF (match_operand:SF 1 "register_operand" "%0")
519: (match_operand:SF 2 "nonmemory_operand" "dF")))]
520: ""
521: "add.s %2,%0")
522:
523: (define_insn "adddi3"
524: [(set (match_operand:DI 0 "register_operand" "=d")
525: (plus:DI (match_operand:DI 1 "register_operand" "%0")
526: (match_operand:DI 2 "register_operand" "d")))]
527: ""
528: "add.l %2,%0")
529:
530: ;; special case of addsi3, needed to specify an A reg for the destination
531: ;; when the source is a sum involving FP or AP.
532:
533: (define_insn ""
534: [(set (match_operand:SI 0 "register_operand" "=a")
535: (plus:SI (match_operand:SI 1 "register_operand" "%a")
536: (match_operand:SI 2 "immediate_operand" "i")))]
537: "operands[1] == frame_pointer_rtx || operands[1] == arg_pointer_rtx"
538: "ldea %a2(%1),%0")
539:
540: (define_insn "addsi3"
541: [(set (match_operand:SI 0 "register_operand" "=d,a,a")
542: (plus:SI (match_operand:SI 1 "nonmemory_operand" "%0,0,a")
543: (match_operand:SI 2 "nonmemory_operand" "di,ri,i")))]
544: ""
545: "* switch (which_alternative)
546: {
547: case 0:
548: case 1:
549: return \"add.w %2,%0\";
550: case 2:
551: if ((TARGET_C2 || A_REG_P (operands[0]))
552: && operands[1] != stack_pointer_rtx)
553: return \"ldea %a2(%1),%0\";
554: else
555: return \"mov %1,%0\;add.w %2,%0\";
556: }")
557:
558: (define_insn "addhi3"
559: [(set (match_operand:HI 0 "register_operand" "=d,a")
560: (plus:HI (match_operand:HI 1 "register_operand" "%0,0")
561: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
562: ""
563: "add.h %2,%0")
564:
565: (define_insn "addqi3"
566: [(set (match_operand:QI 0 "register_operand" "=d")
567: (plus:QI (match_operand:QI 1 "register_operand" "%0")
568: (match_operand:QI 2 "register_operand" "d")))]
569: ""
570: "add.b %2,%0")
571:
572: ;;- All kinds of subtract instructions.
573:
574: (define_insn "subdf3"
575: [(set (match_operand:DF 0 "register_operand" "=d")
576: (minus:DF (match_operand:DF 1 "register_operand" "0")
577: (match_operand:DF 2 "register_operand" "d")))]
578: ""
579: "sub.d %2,%0")
580:
581: (define_insn "subsf3"
582: [(set (match_operand:SF 0 "register_operand" "=d")
583: (minus:SF (match_operand:SF 1 "register_operand" "0")
584: (match_operand:SF 2 "nonmemory_operand" "dF")))]
585: ""
586: "sub.s %2,%0")
587:
588: (define_insn "subdi3"
589: [(set (match_operand:DI 0 "register_operand" "=d")
590: (minus:DI (match_operand:DI 1 "register_operand" "0")
591: (match_operand:DI 2 "register_operand" "d")))]
592: ""
593: "sub.l %2,%0")
594:
595: (define_insn "subsi3"
596: [(set (match_operand:SI 0 "register_operand" "=d,a")
597: (minus:SI (match_operand:SI 1 "register_operand" "0,0")
598: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
599: ""
600: "sub.w %2,%0")
601:
602: (define_insn "subhi3"
603: [(set (match_operand:HI 0 "register_operand" "=d,a")
604: (minus:HI (match_operand:HI 1 "register_operand" "0,0")
605: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
606: ""
607: "sub.h %2,%0")
608:
609: (define_insn "subqi3"
610: [(set (match_operand:QI 0 "register_operand" "=d")
611: (minus:QI (match_operand:QI 1 "register_operand" "0")
612: (match_operand:QI 2 "register_operand" "d")))]
613: ""
614: "sub.b %2,%0")
615:
616: ;;- Multiply instructions.
617:
618: (define_insn "muldf3"
619: [(set (match_operand:DF 0 "register_operand" "=d")
620: (mult:DF (match_operand:DF 1 "register_operand" "%0")
621: (match_operand:DF 2 "register_operand" "d")))]
622: ""
623: "mul.d %2,%0")
624:
625: (define_insn "mulsf3"
626: [(set (match_operand:SF 0 "register_operand" "=d")
627: (mult:SF (match_operand:SF 1 "register_operand" "%0")
628: (match_operand:SF 2 "nonmemory_operand" "dF")))]
629: ""
630: "mul.s %2,%0")
631:
632: (define_insn "muldi3"
633: [(set (match_operand:DI 0 "register_operand" "=d")
634: (mult:DI (match_operand:DI 1 "register_operand" "%0")
635: (match_operand:DI 2 "register_operand" "d")))]
636: ""
637: "mul.l %2,%0")
638:
639: (define_insn "mulsi3"
640: [(set (match_operand:SI 0 "register_operand" "=d,a")
641: (mult:SI (match_operand:SI 1 "register_operand" "%0,0")
642: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
643: ""
644: "mul.w %2,%0")
645:
646: (define_insn "mulhi3"
647: [(set (match_operand:HI 0 "register_operand" "=d,a")
648: (mult:HI (match_operand:HI 1 "register_operand" "%0,0")
649: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
650: ""
651: "mul.h %2,%0")
652:
653: (define_insn "mulqi3"
654: [(set (match_operand:QI 0 "register_operand" "=d")
655: (mult:QI (match_operand:QI 1 "register_operand" "%0")
656: (match_operand:QI 2 "register_operand" "d")))]
657: ""
658: "mul.b %2,%0")
659:
660: ;;- Divide instructions.
661:
662: (define_insn "divdf3"
663: [(set (match_operand:DF 0 "register_operand" "=d")
664: (div:DF (match_operand:DF 1 "register_operand" "0")
665: (match_operand:DF 2 "register_operand" "d")))]
666: ""
667: "div.d %2,%0")
668:
669: (define_insn "divsf3"
670: [(set (match_operand:SF 0 "register_operand" "=d")
671: (div:SF (match_operand:SF 1 "register_operand" "0")
672: (match_operand:SF 2 "nonmemory_operand" "dF")))]
673: ""
674: "div.s %2,%0")
675:
676: (define_insn "divdi3"
677: [(set (match_operand:DI 0 "register_operand" "=d")
678: (div:DI (match_operand:DI 1 "register_operand" "0")
679: (match_operand:DI 2 "register_operand" "d")))]
680: ""
681: "div.l %2,%0")
682:
683: (define_insn "udivdi3"
684: [(set (match_operand:DI 0 "register_operand" "=d")
685: (udiv:DI (match_operand:DI 1 "register_operand" "d")
686: (match_operand:DI 2 "register_operand" "d")))]
687: ""
688: "psh.l %2\;psh.l %1\;callq udiv64\;pop.l %0\;add.w #8,sp")
689:
690: (define_insn "divsi3"
691: [(set (match_operand:SI 0 "register_operand" "=d,a")
692: (div:SI (match_operand:SI 1 "register_operand" "0,0")
693: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
694: ""
695: "div.w %2,%0")
696:
697: (define_insn "divhi3"
698: [(set (match_operand:HI 0 "register_operand" "=d,a")
699: (div:HI (match_operand:HI 1 "register_operand" "0,0")
700: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
701: ""
702: "div.h %2,%0")
703:
704: (define_insn "divqi3"
705: [(set (match_operand:QI 0 "register_operand" "=d")
706: (div:QI (match_operand:QI 1 "register_operand" "0")
707: (match_operand:QI 2 "register_operand" "d")))]
708: ""
709: "div.b %2,%0")
710:
711: ;; - and, or, xor
712:
713: (define_insn ""
714: [(set (match_operand:DI 0 "register_operand" "=d")
715: (and:DI (match_operand:DI 1 "register_operand" "%0")
716: (match_operand:DI 2 "immediate_operand" "Fn")))]
717: "GET_CODE (operands[2]) == CONST_INT
718: || (GET_CODE (operands[2]) == CONST_DOUBLE
719: && CONST_DOUBLE_HIGH (operands[2]) == -1)"
720: "and %2,%0")
721:
722: (define_insn "anddi3"
723: [(set (match_operand:DI 0 "register_operand" "=d")
724: (and:DI (match_operand:DI 1 "register_operand" "%0")
725: (match_operand:DI 2 "register_operand" "d")))]
726: ""
727: "and %2,%0")
728:
729: (define_insn "andsi3"
730: [(set (match_operand:SI 0 "register_operand" "=d,a")
731: (and:SI (match_operand:SI 1 "register_operand" "%0,0")
732: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
733: ""
734: "and %2,%0")
735:
736: (define_insn "andhi3"
737: [(set (match_operand:HI 0 "register_operand" "=d,a")
738: (and:HI (match_operand:HI 1 "register_operand" "%0,0")
739: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
740: ""
741: "and %2,%0")
742:
743: (define_insn "andqi3"
744: [(set (match_operand:QI 0 "register_operand" "=d,a")
745: (and:QI (match_operand:QI 1 "register_operand" "%0,0")
746: (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
747: ""
748: "and %2,%0")
749:
750: ;;- Bit set instructions.
751:
752: (define_insn ""
753: [(set (match_operand:DI 0 "register_operand" "=d")
754: (ior:DI (match_operand:DI 1 "register_operand" "%0")
755: (match_operand:DI 2 "immediate_operand" "Fn")))]
756: "GET_CODE (operands[2]) == CONST_INT
757: || (GET_CODE (operands[2]) == CONST_DOUBLE
758: && CONST_DOUBLE_HIGH (operands[2]) == 0)"
759: "or %2,%0")
760:
761: (define_insn "iordi3"
762: [(set (match_operand:DI 0 "register_operand" "=d")
763: (ior:DI (match_operand:DI 1 "register_operand" "%0")
764: (match_operand:DI 2 "register_operand" "d")))]
765: ""
766: "or %2,%0")
767:
768: (define_insn "iorsi3"
769: [(set (match_operand:SI 0 "register_operand" "=d,a")
770: (ior:SI (match_operand:SI 1 "register_operand" "%0,0")
771: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
772: ""
773: "or %2,%0")
774:
775: (define_insn "iorhi3"
776: [(set (match_operand:HI 0 "register_operand" "=d,a")
777: (ior:HI (match_operand:HI 1 "register_operand" "%0,0")
778: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
779: ""
780: "or %2,%0")
781:
782: (define_insn "iorqi3"
783: [(set (match_operand:QI 0 "register_operand" "=d,a")
784: (ior:QI (match_operand:QI 1 "register_operand" "%0,0")
785: (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
786: ""
787: "or %2,%0")
788:
789: ;;- xor instructions.
790:
791: (define_insn ""
792: [(set (match_operand:DI 0 "register_operand" "=d")
793: (xor:DI (match_operand:DI 1 "register_operand" "%0")
794: (match_operand:DI 2 "immediate_operand" "Fn")))]
795: "GET_CODE (operands[2]) == CONST_INT
796: || (GET_CODE (operands[2]) == CONST_DOUBLE
797: && CONST_DOUBLE_HIGH (operands[2]) == 0)"
798: "xor %2,%0")
799:
800: (define_insn "xordi3"
801: [(set (match_operand:DI 0 "register_operand" "=d")
802: (xor:DI (match_operand:DI 1 "register_operand" "%0")
803: (match_operand:DI 2 "register_operand" "d")))]
804: ""
805: "xor %2,%0")
806:
807: (define_insn "xorsi3"
808: [(set (match_operand:SI 0 "register_operand" "=d,a")
809: (xor:SI (match_operand:SI 1 "register_operand" "%0,0")
810: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
811: ""
812: "xor %2,%0")
813:
814: (define_insn "xorhi3"
815: [(set (match_operand:HI 0 "register_operand" "=d,a")
816: (xor:HI (match_operand:HI 1 "register_operand" "%0,0")
817: (match_operand:HI 2 "nonmemory_operand" "di,ai")))]
818: ""
819: "xor %2,%0")
820:
821: (define_insn "xorqi3"
822: [(set (match_operand:QI 0 "register_operand" "=d,a")
823: (xor:QI (match_operand:QI 1 "register_operand" "%0,0")
824: (match_operand:QI 2 "nonmemory_operand" "di,ai")))]
825: ""
826: "xor %2,%0")
827:
828: (define_insn "negdf2"
829: [(set (match_operand:DF 0 "register_operand" "=d")
830: (neg:DF (match_operand:DF 1 "register_operand" "d")))]
831: ""
832: "neg.d %1,%0")
833:
834: (define_insn "negsf2"
835: [(set (match_operand:SF 0 "register_operand" "=d")
836: (neg:SF (match_operand:SF 1 "register_operand" "d")))]
837: ""
838: "neg.s %1,%0")
839:
840: (define_insn "negdi2"
841: [(set (match_operand:DI 0 "register_operand" "=d")
842: (neg:DI (match_operand:DI 1 "register_operand" "d")))]
843: ""
844: "neg.l %1,%0")
845:
846: (define_insn "negsi2"
847: [(set (match_operand:SI 0 "register_operand" "=d,a")
848: (neg:SI (match_operand:SI 1 "register_operand" "d,a")))]
849: ""
850: "neg.w %1,%0")
851:
852: (define_insn "neghi2"
853: [(set (match_operand:HI 0 "register_operand" "=d,a")
854: (neg:HI (match_operand:HI 1 "register_operand" "d,a")))]
855: ""
856: "neg.h %1,%0")
857:
858: (define_insn "negqi2"
859: [(set (match_operand:QI 0 "register_operand" "=d")
860: (neg:QI (match_operand:QI 1 "register_operand" "d")))]
861: ""
862: "neg.b %1,%0")
863:
864: (define_insn "one_cmpldi2"
865: [(set (match_operand:DI 0 "register_operand" "=d")
866: (not:DI (match_operand:DI 1 "register_operand" "d")))]
867: ""
868: "not %1,%0")
869:
870: (define_insn "one_cmplsi2"
871: [(set (match_operand:SI 0 "register_operand" "=d,a")
872: (not:SI (match_operand:SI 1 "register_operand" "d,a")))]
873: ""
874: "not %1,%0")
875:
876: (define_insn "one_cmplhi2"
877: [(set (match_operand:HI 0 "register_operand" "=d,a")
878: (not:HI (match_operand:HI 1 "register_operand" "d,a")))]
879: ""
880: "not %1,%0")
881:
882: (define_insn "one_cmplqi2"
883: [(set (match_operand:QI 0 "register_operand" "=d,a")
884: (not:QI (match_operand:QI 1 "register_operand" "d,a")))]
885: ""
886: "not %1,%0")
887:
888: ;;- shifts
889: ;;
890: ;; Convex shift instructions are logical shifts.
891: ;; To make signed right shifts:
892: ;; for SImode, sign extend to DImode and shift, works for 0..32
893: ;; for DImode, shift and then extend the sign, works for 0..63 -- but not 64
894:
895: (define_insn "lshlsi3"
896: [(set (match_operand:SI 0 "register_operand" "=d,a")
897: (lshift:SI (match_operand:SI 1 "register_operand" "0,0")
898: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
899: ""
900: "*
901: {
902: if (operands[2] == const1_rtx)
903: return \"add.w %0,%0\";
904: else if (TARGET_C2 && S_REG_P (operands[0]))
905: return \"shf.w %2,%0\";
906: else
907: return \"shf %2,%0\";
908: }")
909:
910: (define_insn "ashlsi3"
911: [(set (match_operand:SI 0 "register_operand" "=d,a")
912: (ashift:SI (match_operand:SI 1 "register_operand" "0,0")
913: (match_operand:SI 2 "nonmemory_operand" "di,ai")))]
914: ""
915: "*
916: {
917: if (operands[2] == const1_rtx)
918: return \"add.w %0,%0\";
919: else if (TARGET_C2 && S_REG_P (operands[0]))
920: return \"shf.w %2,%0\";
921: else
922: return \"shf %2,%0\";
923: }")
924:
925: (define_expand "lshrsi3"
926: [(set (match_operand:SI 0 "register_operand" "")
927: (lshiftrt:SI (match_operand:SI 1 "register_operand" "")
928: (neg:SI (match_operand:SI 2 "nonmemory_operand" ""))))]
929: ""
930: "operands[2] = negate_rtx (SImode, operands[2]);")
931:
932: (define_insn ""
933: [(set
934: (match_operand:SI 0 "register_operand" "=d,a")
935: (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0")
936: (neg:SI (match_operand:SI 2 "nonmemory_operand" "di,ai"))))]
937: ""
938: "*
939: {
940: if (A_REG_P (operands[0]))
941: return \"shf %2,%0\";
942: else if (TARGET_C2)
943: return \"shf.w %2,%0\";
944: else
945: return \"ld.u #0,%0\;shf %2,%0\";
946: }")
947:
948: (define_insn ""
949: [(set
950: (match_operand:SI 0 "register_operand" "=r")
951: (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
952: (match_operand:SI 2 "immediate_operand" "i")))]
953: ""
954: "*
955: {
956: if (A_REG_P (operands[0]))
957: return \"shf #%n2,%0\";
958: else if (TARGET_C2)
959: return \"shf.w #%n2,%0\";
960: else
961: return \"ld.u #0,%0\;shf #%n2,%0\";
962: }")
963:
964: (define_expand "ashrsi3"
965: [(set (match_operand:SI 0 "register_operand" "=d")
966: (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
967: (neg:SI (match_operand:SI 2 "nonmemory_operand" "di"))))]
968: ""
969: "operands[2] = negate_rtx (SImode, operands[2]);")
970:
971: (define_insn ""
972: [(set (match_operand:SI 0 "register_operand" "=&d")
973: (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
974: (neg:SI (match_operand:SI 2 "nonmemory_operand" "di"))))]
975: ""
976: "cvtw.l %1,%0\;shf %2,%0")
977:
978: (define_insn ""
979: [(set (match_operand:SI 0 "register_operand" "=&d")
980: (ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
981: (match_operand:SI 2 "immediate_operand" "i")))]
982: ""
983: "cvtw.l %1,%0\;shf #%n2,%0")
984:
985: (define_insn "lshldi3"
986: [(set (match_operand:DI 0 "register_operand" "=d")
987: (lshift:DI (match_operand:DI 1 "register_operand" "0")
988: (match_operand:SI 2 "nonmemory_operand" "di")))]
989: ""
990: "shf %2,%0")
991:
992: (define_insn "ashldi3"
993: [(set (match_operand:DI 0 "register_operand" "=d")
994: (ashift:DI (match_operand:DI 1 "register_operand" "0")
995: (match_operand:SI 2 "nonmemory_operand" "di")))]
996: ""
997: "shf %2,%0")
998:
999: (define_expand "lshrdi3"
1000: [(set (match_operand:DI 0 "register_operand" "=d")
1001: (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
1002: (neg:SI (match_operand:SI 2 "nonmemory_operand" "di"))))]
1003: ""
1004: "operands[2] = negate_rtx (SImode, operands[2]);")
1005:
1006: (define_insn ""
1007: [(set (match_operand:DI 0 "register_operand" "=d")
1008: (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
1009: (neg:SI (match_operand:SI 2 "nonmemory_operand" "di"))))]
1010: ""
1011: "shf %2,%0")
1012:
1013: (define_insn ""
1014: [(set (match_operand:DI 0 "register_operand" "=d")
1015: (lshiftrt:DI (match_operand:DI 1 "register_operand" "0")
1016: (match_operand:SI 2 "immediate_operand" "i")))]
1017: ""
1018: "shf #%n2,%0")
1019:
1020: ;; signed a >> b is
1021: ;; ((a >> b) ^ signbit) - signbit
1022: ;; where signbit is (1 << 63) >> b
1023:
1024: (define_expand "ashrdi3"
1025: [(match_operand:DI 0 "register_operand" "")
1026: (match_operand:DI 1 "register_operand" "")
1027: (match_operand:SI 2 "nonmemory_operand" "")
1028: (match_dup 3)]
1029: ""
1030: "
1031: {
1032: if (GET_CODE (operands[2]) == CONST_INT)
1033: {
1034: int rshift = INTVAL (operands[2]);
1035: operands[3] =
1036: force_reg (DImode, immed_double_const (1 << (63 - rshift),
1037: 1 << (31 - rshift), DImode));
1038: }
1039: else
1040: {
1041: operands[3] =
1042: force_reg (DImode, immed_double_const (0, 1 << 31, DImode));
1043: emit_insn (gen_lshrdi3 (operands[3], operands[3], operands[2]));
1044: }
1045:
1046: emit_insn (gen_lshrdi3 (operands[0], operands[1], operands[2]));
1047: emit_insn (gen_rtx (SET, VOIDmode, operands[0],
1048: gen_rtx (XOR, DImode, operands[0], operands[3])));
1049: emit_insn (gen_rtx (SET, VOIDmode, operands[0],
1050: gen_rtx (MINUS, DImode, operands[0], operands[3])));
1051: DONE;
1052: }")
1053:
1054: ;; __builtin instructions
1055:
1056: (define_insn "sqrtdf2"
1057: [(set (match_operand:DF 0 "register_operand" "=d")
1058: (sqrt:DF (match_operand:DF 1 "register_operand" "0")))]
1059: "TARGET_C2"
1060: "sqrt.d %0")
1061:
1062: (define_insn "sqrtsf2"
1063: [(set (match_operand:SF 0 "register_operand" "=d")
1064: (sqrt:SF (match_operand:SF 1 "register_operand" "0")))]
1065: "TARGET_C2"
1066: "sqrt.s %0")
1067:
1068: ;(define_insn ""
1069: ; [(set (match_operand:SI 0 "register_operand" "=d")
1070: ; (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
1071: ; (const_int 1)))]
1072: ; ""
1073: ; "tzc %1,%0\;le.w #32,%0\;jbrs.f .+6\;ld.w #-1,%0")
1074: ;
1075: ;(define_expand "ffssi2"
1076: ; [(set (match_operand:SI 0 "register_operand" "=d")
1077: ; (minus:SI (ffs:SI (match_operand:SI 1 "register_operand" "d"))
1078: ; (const_int 1)))
1079: ; (set (match_dup 0)
1080: ; (plus:SI (match_dup 0)
1081: ; (const_int 1)))]
1082: ; ""
1083: ; "")
1084:
1085: (define_insn "abssf2"
1086: [(set (match_operand:SF 0 "register_operand" "=d")
1087: (abs:SF (match_operand:SF 1 "register_operand" "0")))]
1088: ""
1089: "and #0x7fffffff,%0")
1090:
1091: (define_expand "absdf2"
1092: [(set (subreg:DI (match_operand:DF 0 "register_operand" "=d") 0)
1093: (and:DI (subreg:DI (match_operand:DF 1 "register_operand" "d") 0)
1094: (match_dup 2)))]
1095: ""
1096: "operands[2] = force_reg (DImode,
1097: immed_double_const (-1, 0x7fffffff, DImode));")
1098:
1099: ;; Jumps
1100:
1101: (define_insn "jump"
1102: [(set (pc)
1103: (label_ref (match_operand 0 "" "")))]
1104: ""
1105: "jbr %l0")
1106:
1107: (define_insn "beq"
1108: [(set (pc)
1109: (if_then_else (eq (cc0)
1110: (const_int 0))
1111: (label_ref (match_operand 0 "" ""))
1112: (pc)))]
1113: ""
1114: "* return gen_cmp (operands[0], \"eq\", 't'); ")
1115:
1116: (define_insn "bne"
1117: [(set (pc)
1118: (if_then_else (ne (cc0)
1119: (const_int 0))
1120: (label_ref (match_operand 0 "" ""))
1121: (pc)))]
1122: ""
1123: "* return gen_cmp (operands[0], \"eq\", 'f'); ")
1124:
1125: (define_insn "bgt"
1126: [(set (pc)
1127: (if_then_else (gt (cc0)
1128: (const_int 0))
1129: (label_ref (match_operand 0 "" ""))
1130: (pc)))]
1131: ""
1132: "* return gen_cmp (operands[0], \"le\", 'f'); ")
1133:
1134: (define_insn "bgtu"
1135: [(set (pc)
1136: (if_then_else (gtu (cc0)
1137: (const_int 0))
1138: (label_ref (match_operand 0 "" ""))
1139: (pc)))]
1140: ""
1141: "* return gen_cmp (operands[0], \"leu\", 'f'); ")
1142:
1143: (define_insn "blt"
1144: [(set (pc)
1145: (if_then_else (lt (cc0)
1146: (const_int 0))
1147: (label_ref (match_operand 0 "" ""))
1148: (pc)))]
1149: ""
1150: "* return gen_cmp (operands[0], \"lt\", 't'); ")
1151:
1152: (define_insn "bltu"
1153: [(set (pc)
1154: (if_then_else (ltu (cc0)
1155: (const_int 0))
1156: (label_ref (match_operand 0 "" ""))
1157: (pc)))]
1158: ""
1159: "* return gen_cmp (operands[0], \"ltu\", 't'); ")
1160:
1161: (define_insn "bge"
1162: [(set (pc)
1163: (if_then_else (ge (cc0)
1164: (const_int 0))
1165: (label_ref (match_operand 0 "" ""))
1166: (pc)))]
1167: ""
1168: "* return gen_cmp (operands[0], \"lt\", 'f'); ")
1169:
1170: (define_insn "bgeu"
1171: [(set (pc)
1172: (if_then_else (geu (cc0)
1173: (const_int 0))
1174: (label_ref (match_operand 0 "" ""))
1175: (pc)))]
1176: ""
1177: "* return gen_cmp (operands[0], \"ltu\", 'f'); ")
1178:
1179: (define_insn "ble"
1180: [(set (pc)
1181: (if_then_else (le (cc0)
1182: (const_int 0))
1183: (label_ref (match_operand 0 "" ""))
1184: (pc)))]
1185: ""
1186: "* return gen_cmp (operands[0], \"le\", 't'); ")
1187:
1188: (define_insn "bleu"
1189: [(set (pc)
1190: (if_then_else (leu (cc0)
1191: (const_int 0))
1192: (label_ref (match_operand 0 "" ""))
1193: (pc)))]
1194: ""
1195: "* return gen_cmp (operands[0], \"leu\", 't'); ")
1196:
1197: (define_insn ""
1198: [(set (pc)
1199: (if_then_else (eq (cc0)
1200: (const_int 0))
1201: (pc)
1202: (label_ref (match_operand 0 "" ""))))]
1203: ""
1204: "* return gen_cmp (operands[0], \"eq\", 'f'); ")
1205:
1206: (define_insn ""
1207: [(set (pc)
1208: (if_then_else (ne (cc0)
1209: (const_int 0))
1210: (pc)
1211: (label_ref (match_operand 0 "" ""))))]
1212: ""
1213: "* return gen_cmp (operands[0], \"eq\", 't'); ")
1214:
1215: (define_insn ""
1216: [(set (pc)
1217: (if_then_else (gt (cc0)
1218: (const_int 0))
1219: (pc)
1220: (label_ref (match_operand 0 "" ""))))]
1221: ""
1222: "* return gen_cmp (operands[0], \"le\", 't'); ")
1223:
1224: (define_insn ""
1225: [(set (pc)
1226: (if_then_else (gtu (cc0)
1227: (const_int 0))
1228: (pc)
1229: (label_ref (match_operand 0 "" ""))))]
1230: ""
1231: "* return gen_cmp (operands[0], \"leu\", 't'); ")
1232:
1233: (define_insn ""
1234: [(set (pc)
1235: (if_then_else (lt (cc0)
1236: (const_int 0))
1237: (pc)
1238: (label_ref (match_operand 0 "" ""))))]
1239: ""
1240: "* return gen_cmp (operands[0], \"lt\", 'f'); ")
1241:
1242: (define_insn ""
1243: [(set (pc)
1244: (if_then_else (ltu (cc0)
1245: (const_int 0))
1246: (pc)
1247: (label_ref (match_operand 0 "" ""))))]
1248: ""
1249: "* return gen_cmp (operands[0], \"ltu\", 'f'); ")
1250:
1251: (define_insn ""
1252: [(set (pc)
1253: (if_then_else (ge (cc0)
1254: (const_int 0))
1255: (pc)
1256: (label_ref (match_operand 0 "" ""))))]
1257: ""
1258: "* return gen_cmp (operands[0], \"lt\", 't'); ")
1259:
1260: (define_insn ""
1261: [(set (pc)
1262: (if_then_else (geu (cc0)
1263: (const_int 0))
1264: (pc)
1265: (label_ref (match_operand 0 "" ""))))]
1266: ""
1267: "* return gen_cmp (operands[0], \"ltu\", 't'); ")
1268:
1269: (define_insn ""
1270: [(set (pc)
1271: (if_then_else (le (cc0)
1272: (const_int 0))
1273: (pc)
1274: (label_ref (match_operand 0 "" ""))))]
1275: ""
1276: "* return gen_cmp (operands[0], \"le\", 'f'); ")
1277:
1278: (define_insn ""
1279: [(set (pc)
1280: (if_then_else (leu (cc0)
1281: (const_int 0))
1282: (pc)
1283: (label_ref (match_operand 0 "" ""))))]
1284: ""
1285: "* return gen_cmp (operands[0], \"leu\", 'f'); ")
1286:
1287: ;; - Calls
1288: ;;
1289: ;; arg count word may be omitted to save a push and let gcc try to
1290: ;; combine the arg list pop. RETURN_POPS_ARGS from tm.h decides this.
1291:
1292: (define_insn "call"
1293: [(call (match_operand:QI 0 "memory_operand" "m")
1294: (match_operand:SI 1 "general_operand" "g"))]
1295: ""
1296: "* return output_call (insn, operands[0], operands[1]);")
1297:
1298: (define_insn "call_value"
1299: [(set (match_operand 0 "" "=g")
1300: (call (match_operand:QI 1 "memory_operand" "m")
1301: (match_operand:SI 2 "general_operand" "g")))]
1302: ""
1303: "* return output_call (insn, operands[1], operands[2]);")
1304:
1305: (define_insn "return"
1306: [(return)]
1307: ""
1308: "rtn")
1309:
1310: (define_insn "nop"
1311: [(const_int 0)]
1312: ""
1313: "nop")
1314:
1315: (define_insn "tablejump"
1316: [(set (pc) (match_operand:SI 0 "address_operand" "p"))
1317: (use (label_ref (match_operand 1 "" "")))]
1318: ""
1319: "jmp %a0")
1320:
1321: (define_insn "indirect_jump"
1322: [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
1323: ""
1324: "jmp %a0")
1325:
1326: ;;- Local variables:
1327: ;;- mode:emacs-lisp
1328: ;;- comment-start: ";;- "
1329: ;;- eval: (set-syntax-table (copy-sequence (syntax-table)))
1330: ;;- eval: (modify-syntax-entry ?[ "(]")
1331: ;;- eval: (modify-syntax-entry ?] ")[")
1332: ;;- eval: (modify-syntax-entry ?{ "(}")
1333: ;;- eval: (modify-syntax-entry ?} "){")
1334: ;;- End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.