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