|
|
1.1 ! root 1: ;;- Machine description for GNU compiler ! 2: ;;- AT&T we32000 Version ! 3: ;; Contributed by John Wehle ([email protected]) ! 4: ;; Copyright (C) 1991-1992 Free Software Foundation, Inc. ! 5: ! 6: ;; This file is part of GNU CC. ! 7: ! 8: ;; GNU CC is free software; you can redistribute it and/or modify ! 9: ;; it under the terms of the GNU General Public License as published by ! 10: ;; the Free Software Foundation; either version 1, or (at your option) ! 11: ;; any later version. ! 12: ! 13: ;; GNU CC is distributed in the hope that it will be useful, ! 14: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 16: ;; GNU General Public License for more details. ! 17: ! 18: ;; You should have received a copy of the GNU General Public License ! 19: ;; along with GNU CC; see the file COPYING. If not, write to ! 20: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: ! 23: ;;- instruction definitions ! 24: ! 25: ;;- @@The original PO technology requires these to be ordered by speed, ! 26: ;;- @@ so that assigner will pick the fastest. ! 27: ! 28: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. ! 29: ! 30: ;;- When naming insn's (operand 0 of define_insn) be careful about using ! 31: ;;- names from other targets machine descriptions. ! 32: ! 33: ;; move instructions ! 34: ! 35: (define_insn "" ! 36: [(set (match_operand:DF 0 "push_operand" "=m") ! 37: (match_operand:DF 1 "general_operand" "mrF"))] ! 38: "" ! 39: "* ! 40: { ! 41: output_push_double(&operands[1]); ! 42: ! 43: return \"\"; ! 44: }") ! 45: ! 46: (define_insn "movdf" ! 47: [(set (match_operand:DF 0 "nonimmediate_operand" "=mr") ! 48: (match_operand:DF 1 "general_operand" "mrF"))] ! 49: "" ! 50: "* ! 51: { ! 52: output_move_double(operands); ! 53: ! 54: return \"\"; ! 55: }") ! 56: ! 57: (define_insn "" ! 58: [(set (match_operand:SF 0 "push_operand" "=m") ! 59: (match_operand:SF 1 "general_operand" "mrF"))] ! 60: "" ! 61: "pushw %1") ! 62: ! 63: (define_insn "movsf" ! 64: [(set (match_operand:SF 0 "nonimmediate_operand" "=mr") ! 65: (match_operand:SF 1 "general_operand" "mrF"))] ! 66: "" ! 67: "movw %1, %0") ! 68: ! 69: (define_insn "" ! 70: [(set (match_operand:DI 0 "push_operand" "=m") ! 71: (match_operand:DI 1 "general_operand" "mriF"))] ! 72: "" ! 73: "* ! 74: { ! 75: output_push_double(&operands[1]); ! 76: ! 77: return \"\"; ! 78: }") ! 79: ! 80: (define_insn "movdi" ! 81: [(set (match_operand:DI 0 "nonimmediate_operand" "=mr") ! 82: (match_operand:DI 1 "general_operand" "mriF"))] ! 83: "" ! 84: "* ! 85: { ! 86: output_move_double(operands); ! 87: ! 88: return \"\"; ! 89: }") ! 90: ! 91: (define_insn "" ! 92: [(set (match_operand:SI 0 "push_operand" "=m") ! 93: (match_operand:SI 1 "general_operand" "mri"))] ! 94: "" ! 95: "pushw %1") ! 96: ! 97: (define_insn "movsi" ! 98: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 99: (match_operand:SI 1 "general_operand" "mri"))] ! 100: "" ! 101: "movw %1, %0") ! 102: ! 103: (define_insn "movhi" ! 104: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 105: (match_operand:HI 1 "general_operand" "mri"))] ! 106: "" ! 107: "movh %1, %0") ! 108: ! 109: (define_insn "movqi" ! 110: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 111: (match_operand:QI 1 "general_operand" "mri"))] ! 112: "" ! 113: "movb %1, %0") ! 114: ! 115: ;; add instructions ! 116: ! 117: (define_insn "" ! 118: [(set (match_operand:DI 0 "nonimmediate_operand" "=&or") ! 119: (plus:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! 120: (match_operand:DI 2 "general_operand" "oriF")))] ! 121: "" ! 122: "* ! 123: { ! 124: rtx label[1]; ! 125: rtx lsw_operands[3]; ! 126: ! 127: if (GET_CODE (operands[0]) == REG) ! 128: lsw_operands[0] = gen_rtx(REG, SImode, REGNO (operands[0]) + 1); ! 129: else ! 130: if (GET_CODE (operands[0]) == MEM && offsettable_memref_p (operands[0])) ! 131: lsw_operands[0] = adj_offsettable_operand(operands[0], 4); ! 132: else ! 133: abort(); ! 134: ! 135: if (GET_CODE (operands[2]) == REG) ! 136: lsw_operands[2] = gen_rtx(REG, SImode, REGNO (operands[2]) + 1); ! 137: else ! 138: if (GET_CODE (operands[2]) == MEM && offsettable_memref_p (operands[2])) ! 139: lsw_operands[2] = adj_offsettable_operand(operands[2], 4); ! 140: else ! 141: if (GET_CODE (operands[2]) == CONST_DOUBLE) ! 142: { ! 143: lsw_operands[2] = gen_rtx(CONST_INT, SImode, ! 144: CONST_DOUBLE_HIGH(operands[2])); ! 145: operands[2] = gen_rtx(CONST_INT, SImode, ! 146: CONST_DOUBLE_LOW(operands[2])); ! 147: } ! 148: else ! 149: if (GET_CODE (operands[2]) == CONST_INT) ! 150: { ! 151: lsw_operands[2] = operands[2]; ! 152: operands[2] = const0_rtx; ! 153: } ! 154: else ! 155: abort(); ! 156: ! 157: label[0] = gen_label_rtx(); ! 158: LABEL_NUSES(label[0]) = 1; ! 159: ! 160: output_asm_insn(\"addw2 %2, %0\", operands); ! 161: output_asm_insn(\"addw2 %2, %0\", lsw_operands); ! 162: output_asm_insn(\"BCCB %l0\", label); ! 163: output_asm_insn(\"INCW %0\", operands); ! 164: output_asm_insn(\"%l0:\", label); ! 165: ! 166: return \"\"; ! 167: }") ! 168: ! 169: (define_insn "adddi3" ! 170: [(set (match_operand:DI 0 "nonimmediate_operand" "=&or") ! 171: (plus:DI (match_operand:DI 1 "general_operand" "oriF") ! 172: (match_operand:DI 2 "general_operand" "oriF")))] ! 173: "" ! 174: "* ! 175: { ! 176: rtx label[1]; ! 177: rtx lsw_operands[3]; ! 178: ! 179: if (GET_CODE (operands[0]) == REG) ! 180: lsw_operands[0] = gen_rtx(REG, SImode, REGNO (operands[0]) + 1); ! 181: else ! 182: if (GET_CODE (operands[0]) == MEM && offsettable_memref_p (operands[0])) ! 183: lsw_operands[0] = adj_offsettable_operand(operands[0], 4); ! 184: else ! 185: abort(); ! 186: ! 187: if (GET_CODE (operands[1]) == REG) ! 188: lsw_operands[1] = gen_rtx(REG, SImode, REGNO (operands[1]) + 1); ! 189: else ! 190: if (GET_CODE (operands[1]) == MEM && offsettable_memref_p (operands[1])) ! 191: lsw_operands[1] = adj_offsettable_operand(operands[1], 4); ! 192: else ! 193: if (GET_CODE (operands[1]) == CONST_DOUBLE) ! 194: { ! 195: lsw_operands[1] = gen_rtx(CONST_INT, SImode, ! 196: CONST_DOUBLE_HIGH(operands[1])); ! 197: operands[1] = gen_rtx(CONST_INT, SImode, ! 198: CONST_DOUBLE_LOW(operands[1])); ! 199: } ! 200: else ! 201: if (GET_CODE (operands[1]) == CONST_INT) ! 202: { ! 203: lsw_operands[1] = operands[1]; ! 204: operands[1] = const0_rtx; ! 205: } ! 206: else ! 207: abort(); ! 208: ! 209: if (GET_CODE (operands[2]) == REG) ! 210: lsw_operands[2] = gen_rtx(REG, SImode, REGNO (operands[2]) + 1); ! 211: else ! 212: if (GET_CODE (operands[2]) == MEM && offsettable_memref_p (operands[2])) ! 213: lsw_operands[2] = adj_offsettable_operand(operands[2], 4); ! 214: else ! 215: if (GET_CODE (operands[2]) == CONST_DOUBLE) ! 216: { ! 217: lsw_operands[2] = gen_rtx(CONST_INT, SImode, ! 218: CONST_DOUBLE_HIGH(operands[2])); ! 219: operands[2] = gen_rtx(CONST_INT, SImode, ! 220: CONST_DOUBLE_LOW(operands[2])); ! 221: } ! 222: else ! 223: if (GET_CODE (operands[2]) == CONST_INT) ! 224: { ! 225: lsw_operands[2] = operands[2]; ! 226: operands[2] = const0_rtx; ! 227: } ! 228: else ! 229: abort(); ! 230: ! 231: label[0] = gen_label_rtx(); ! 232: LABEL_NUSES(label[0]) = 1; ! 233: ! 234: output_asm_insn(\"addw3 %2, %1, %0\", operands); ! 235: output_asm_insn(\"addw3 %2, %1, %0\", lsw_operands); ! 236: output_asm_insn(\"BCCB %l0\", label); ! 237: output_asm_insn(\"INCW %0\", operands); ! 238: output_asm_insn(\"%l0:\", label); ! 239: ! 240: return \"\"; ! 241: }") ! 242: ! 243: (define_insn "" ! 244: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 245: (plus:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 246: (match_operand:SI 2 "general_operand" "mri")))] ! 247: "" ! 248: "addw2 %2, %0") ! 249: ! 250: (define_insn "addsi3" ! 251: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 252: (plus:SI (match_operand:SI 1 "general_operand" "mri") ! 253: (match_operand:SI 2 "general_operand" "mri")))] ! 254: "" ! 255: "addw3 %2, %1, %0") ! 256: ! 257: (define_insn "" ! 258: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 259: (plus:HI (match_operand:HI 1 "nonimmediate_operand" "0") ! 260: (match_operand:HI 2 "general_operand" "mri")))] ! 261: "" ! 262: "addh2 %2, %0") ! 263: ! 264: (define_insn "addhi3" ! 265: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 266: (plus:HI (match_operand:HI 1 "general_operand" "mri") ! 267: (match_operand:HI 2 "general_operand" "mri")))] ! 268: "" ! 269: "addh3 %2, %1, %0") ! 270: ! 271: (define_insn "" ! 272: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 273: (plus:QI (match_operand:QI 1 "nonimmediate_operand" "0") ! 274: (match_operand:QI 2 "general_operand" "mri")))] ! 275: "" ! 276: "addb2 %2, %0") ! 277: ! 278: (define_insn "addqi3" ! 279: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 280: (plus:QI (match_operand:QI 1 "general_operand" "mri") ! 281: (match_operand:QI 2 "general_operand" "mri")))] ! 282: "" ! 283: "addb3 %2, %1, %0") ! 284: ! 285: ;; subtract instructions ! 286: ! 287: (define_insn "" ! 288: [(set (match_operand:DI 0 "nonimmediate_operand" "=&or") ! 289: (minus:DI (match_operand:DI 1 "nonimmediate_operand" "0") ! 290: (match_operand:DI 2 "general_operand" "oriF")))] ! 291: "" ! 292: "* ! 293: { ! 294: rtx label[1]; ! 295: rtx lsw_operands[3]; ! 296: ! 297: if (GET_CODE (operands[0]) == REG) ! 298: lsw_operands[0] = gen_rtx(REG, SImode, REGNO (operands[0]) + 1); ! 299: else ! 300: if (GET_CODE (operands[0]) == MEM && offsettable_memref_p (operands[0])) ! 301: lsw_operands[0] = adj_offsettable_operand(operands[0], 4); ! 302: else ! 303: abort(); ! 304: ! 305: if (GET_CODE (operands[2]) == REG) ! 306: lsw_operands[2] = gen_rtx(REG, SImode, REGNO (operands[2]) + 1); ! 307: else ! 308: if (GET_CODE (operands[2]) == MEM && offsettable_memref_p (operands[2])) ! 309: lsw_operands[2] = adj_offsettable_operand(operands[2], 4); ! 310: else ! 311: if (GET_CODE (operands[2]) == CONST_DOUBLE) ! 312: { ! 313: lsw_operands[2] = gen_rtx(CONST_INT, SImode, ! 314: CONST_DOUBLE_HIGH(operands[2])); ! 315: operands[2] = gen_rtx(CONST_INT, SImode, ! 316: CONST_DOUBLE_LOW(operands[2])); ! 317: } ! 318: else ! 319: if (GET_CODE (operands[2]) == CONST_INT) ! 320: { ! 321: lsw_operands[2] = operands[2]; ! 322: operands[2] = const0_rtx; ! 323: } ! 324: else ! 325: abort(); ! 326: ! 327: label[0] = gen_label_rtx(); ! 328: LABEL_NUSES(label[0]) = 1; ! 329: ! 330: output_asm_insn(\"subw2 %2, %0\", operands); ! 331: output_asm_insn(\"subw2 %2, %0\", lsw_operands); ! 332: output_asm_insn(\"BCCB %l0\", label); ! 333: output_asm_insn(\"DECW %0\", operands); ! 334: output_asm_insn(\"%l0:\", label); ! 335: ! 336: return \"\"; ! 337: }") ! 338: ! 339: (define_insn "subdi3" ! 340: [(set (match_operand:DI 0 "nonimmediate_operand" "=&or") ! 341: (minus:DI (match_operand:DI 1 "general_operand" "oriF") ! 342: (match_operand:DI 2 "general_operand" "oriF")))] ! 343: "" ! 344: "* ! 345: { ! 346: rtx label[1]; ! 347: rtx lsw_operands[3]; ! 348: ! 349: if (GET_CODE (operands[0]) == REG) ! 350: lsw_operands[0] = gen_rtx(REG, SImode, REGNO (operands[0]) + 1); ! 351: else ! 352: if (GET_CODE (operands[0]) == MEM && offsettable_memref_p (operands[0])) ! 353: lsw_operands[0] = adj_offsettable_operand(operands[0], 4); ! 354: else ! 355: abort(); ! 356: ! 357: if (GET_CODE (operands[1]) == REG) ! 358: lsw_operands[1] = gen_rtx(REG, SImode, REGNO (operands[1]) + 1); ! 359: else ! 360: if (GET_CODE (operands[1]) == MEM && offsettable_memref_p (operands[1])) ! 361: lsw_operands[1] = adj_offsettable_operand(operands[1], 4); ! 362: else ! 363: if (GET_CODE (operands[1]) == CONST_DOUBLE) ! 364: { ! 365: lsw_operands[1] = gen_rtx(CONST_INT, SImode, ! 366: CONST_DOUBLE_HIGH(operands[1])); ! 367: operands[1] = gen_rtx(CONST_INT, SImode, ! 368: CONST_DOUBLE_LOW(operands[1])); ! 369: } ! 370: else ! 371: if (GET_CODE (operands[1]) == CONST_INT) ! 372: { ! 373: lsw_operands[1] = operands[1]; ! 374: operands[1] = const0_rtx; ! 375: } ! 376: else ! 377: abort(); ! 378: ! 379: if (GET_CODE (operands[2]) == REG) ! 380: lsw_operands[2] = gen_rtx(REG, SImode, REGNO (operands[2]) + 1); ! 381: else ! 382: if (GET_CODE (operands[2]) == MEM && offsettable_memref_p (operands[2])) ! 383: lsw_operands[2] = adj_offsettable_operand(operands[2], 4); ! 384: else ! 385: if (GET_CODE (operands[2]) == CONST_DOUBLE) ! 386: { ! 387: lsw_operands[2] = gen_rtx(CONST_INT, SImode, ! 388: CONST_DOUBLE_HIGH(operands[2])); ! 389: operands[2] = gen_rtx(CONST_INT, SImode, ! 390: CONST_DOUBLE_LOW(operands[2])); ! 391: } ! 392: else ! 393: if (GET_CODE (operands[2]) == CONST_INT) ! 394: { ! 395: lsw_operands[2] = operands[2]; ! 396: operands[2] = const0_rtx; ! 397: } ! 398: else ! 399: abort(); ! 400: ! 401: label[0] = gen_label_rtx(); ! 402: LABEL_NUSES(label[0]) = 1; ! 403: ! 404: output_asm_insn(\"subw3 %2, %1, %0\", operands); ! 405: output_asm_insn(\"subw3 %2, %1, %0\", lsw_operands); ! 406: output_asm_insn(\"BCCB %l0\", label); ! 407: output_asm_insn(\"DECW %0\", operands); ! 408: output_asm_insn(\"%l0:\", label); ! 409: ! 410: return \"\"; ! 411: }") ! 412: ! 413: (define_insn "" ! 414: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 415: (minus:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 416: (match_operand:SI 2 "general_operand" "mri")))] ! 417: "" ! 418: "subw2 %2, %0") ! 419: ! 420: (define_insn "subsi3" ! 421: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 422: (minus:SI (match_operand:SI 1 "general_operand" "mri") ! 423: (match_operand:SI 2 "general_operand" "mri")))] ! 424: "" ! 425: "subw3 %2, %1, %0") ! 426: ! 427: (define_insn "" ! 428: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 429: (minus:HI (match_operand:HI 1 "nonimmediate_operand" "0") ! 430: (match_operand:HI 2 "general_operand" "mri")))] ! 431: "" ! 432: "subh2 %2, %0") ! 433: ! 434: (define_insn "subhi3" ! 435: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 436: (minus:HI (match_operand:HI 1 "general_operand" "mri") ! 437: (match_operand:HI 2 "general_operand" "mri")))] ! 438: "" ! 439: "subh3 %2, %1, %0") ! 440: ! 441: (define_insn "" ! 442: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 443: (minus:QI (match_operand:QI 1 "nonimmediate_operand" "0") ! 444: (match_operand:QI 2 "general_operand" "mri")))] ! 445: "" ! 446: "subb2 %2, %0") ! 447: ! 448: (define_insn "subqi3" ! 449: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 450: (minus:QI (match_operand:QI 1 "general_operand" "mri") ! 451: (match_operand:QI 2 "general_operand" "mri")))] ! 452: "" ! 453: "subb3 %2, %1, %0") ! 454: ! 455: ;; signed multiply instructions ! 456: ! 457: (define_insn "" ! 458: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 459: (mult:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 460: (match_operand:SI 2 "general_operand" "mri")))] ! 461: "" ! 462: "mulw2 %2, %0") ! 463: ! 464: (define_insn "mulsi3" ! 465: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 466: (mult:SI (match_operand:SI 1 "general_operand" "mri") ! 467: (match_operand:SI 2 "general_operand" "mri")))] ! 468: "" ! 469: "mulw3 %2, %1, %0") ! 470: ! 471: ;; signed divide instructions ! 472: ! 473: (define_insn "" ! 474: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 475: (div:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 476: (match_operand:SI 2 "general_operand" "mri")))] ! 477: "" ! 478: "divw2 %2, %0") ! 479: ! 480: (define_insn "divsi3" ! 481: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 482: (div:SI (match_operand:SI 1 "general_operand" "mri") ! 483: (match_operand:SI 2 "general_operand" "mri")))] ! 484: "" ! 485: "divw3 %2, %1, %0") ! 486: ! 487: ;; signed modulus instruction ! 488: ! 489: (define_insn "" ! 490: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 491: (mod:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 492: (match_operand:SI 2 "general_operand" "mri")))] ! 493: "" ! 494: "modw2 %2, %0") ! 495: ! 496: (define_insn "modsi3" ! 497: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 498: (mod:SI (match_operand:SI 1 "general_operand" "mri") ! 499: (match_operand:SI 2 "general_operand" "mri")))] ! 500: "" ! 501: "modw3 %2, %1, %0") ! 502: ! 503: ;; unsigned divide instruction ! 504: ! 505: (define_insn "" ! 506: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 507: (udiv:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 508: (match_operand:SI 2 "general_operand" "mri")))] ! 509: "" ! 510: "udivw2 %2, %0") ! 511: ! 512: (define_insn "udivsi3" ! 513: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 514: (udiv:SI (match_operand:SI 1 "general_operand" "mri") ! 515: (match_operand:SI 2 "general_operand" "mri")))] ! 516: "" ! 517: "udivw3 %2, %1, %0") ! 518: ! 519: ;; unsigned modulus instruction ! 520: ! 521: (define_insn "" ! 522: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 523: (umod:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 524: (match_operand:SI 2 "general_operand" "mri")))] ! 525: "" ! 526: "umodw2 %2, %0") ! 527: ! 528: (define_insn "umodsi3" ! 529: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 530: (umod:SI (match_operand:SI 1 "general_operand" "mri") ! 531: (match_operand:SI 2 "general_operand" "mri")))] ! 532: "" ! 533: "umodw3 %2, %1, %0") ! 534: ! 535: ;; logical-and instructions ! 536: ! 537: (define_insn "" ! 538: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 539: (and:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 540: (match_operand:SI 2 "general_operand" "mri")))] ! 541: "" ! 542: "andw2 %2, %0") ! 543: ! 544: (define_insn "andsi3" ! 545: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 546: (and:SI (match_operand:SI 1 "general_operand" "mri") ! 547: (match_operand:SI 2 "general_operand" "mri")))] ! 548: "" ! 549: "andw3 %2, %1, %0") ! 550: ! 551: (define_insn "" ! 552: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 553: (and:HI (match_operand:HI 1 "nonimmediate_operand" "0") ! 554: (match_operand:HI 2 "general_operand" "mri")))] ! 555: "" ! 556: "andh2 %2, %0") ! 557: ! 558: (define_insn "andhi3" ! 559: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 560: (and:HI (match_operand:HI 1 "general_operand" "mri") ! 561: (match_operand:HI 2 "general_operand" "mri")))] ! 562: "" ! 563: "andh3 %2, %1, %0") ! 564: ! 565: (define_insn "" ! 566: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 567: (and:QI (match_operand:QI 1 "nonimmediate_operand" "0") ! 568: (match_operand:QI 2 "general_operand" "mri")))] ! 569: "" ! 570: "andb2 %2, %0") ! 571: ! 572: (define_insn "andqi3" ! 573: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 574: (and:QI (match_operand:QI 1 "general_operand" "mri") ! 575: (match_operand:QI 2 "general_operand" "mri")))] ! 576: "" ! 577: "andb3 %2, %1, %0") ! 578: ! 579: ;; inclusive-or instructions ! 580: ! 581: (define_insn "" ! 582: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 583: (ior:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 584: (match_operand:SI 2 "general_operand" "mri")))] ! 585: "" ! 586: "orw2 %2, %0") ! 587: ! 588: (define_insn "iorsi3" ! 589: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 590: (ior:SI (match_operand:SI 1 "general_operand" "mri") ! 591: (match_operand:SI 2 "general_operand" "mri")))] ! 592: "" ! 593: "orw3 %2, %1, %0") ! 594: ! 595: (define_insn "" ! 596: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 597: (ior:HI (match_operand:HI 1 "nonimmediate_operand" "0") ! 598: (match_operand:HI 2 "general_operand" "mri")))] ! 599: "" ! 600: "orh2 %2, %0") ! 601: ! 602: (define_insn "iorhi3" ! 603: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 604: (ior:HI (match_operand:HI 1 "general_operand" "mri") ! 605: (match_operand:HI 2 "general_operand" "mri")))] ! 606: "" ! 607: "orh3 %2, %1, %0") ! 608: ! 609: (define_insn "" ! 610: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 611: (ior:QI (match_operand:QI 1 "nonimmediate_operand" "0") ! 612: (match_operand:QI 2 "general_operand" "mri")))] ! 613: "" ! 614: "orb2 %2, %0") ! 615: ! 616: (define_insn "iorqi3" ! 617: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 618: (ior:QI (match_operand:QI 1 "general_operand" "mri") ! 619: (match_operand:QI 2 "general_operand" "mri")))] ! 620: "" ! 621: "orb3 %2, %1, %0") ! 622: ! 623: ;; exclusive-or instructions ! 624: ! 625: (define_insn "" ! 626: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 627: (xor:SI (match_operand:SI 1 "nonimmediate_operand" "0") ! 628: (match_operand:SI 2 "general_operand" "mri")))] ! 629: "" ! 630: "xorw2 %2, %0") ! 631: ! 632: (define_insn "xorsi3" ! 633: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 634: (xor:SI (match_operand:SI 1 "general_operand" "mri") ! 635: (match_operand:SI 2 "general_operand" "mri")))] ! 636: "" ! 637: "xorw3 %2, %1, %0") ! 638: ! 639: (define_insn "" ! 640: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 641: (xor:HI (match_operand:HI 1 "nonimmediate_operand" "0") ! 642: (match_operand:HI 2 "general_operand" "mri")))] ! 643: "" ! 644: "xorh2 %2, %0") ! 645: ! 646: (define_insn "xorhi3" ! 647: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 648: (xor:HI (match_operand:HI 1 "general_operand" "mri") ! 649: (match_operand:HI 2 "general_operand" "mri")))] ! 650: "" ! 651: "xorh3 %2, %1, %0") ! 652: ! 653: (define_insn "" ! 654: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 655: (xor:QI (match_operand:QI 1 "nonimmediate_operand" "0") ! 656: (match_operand:QI 2 "general_operand" "mri")))] ! 657: "" ! 658: "xorb2 %2, %0") ! 659: ! 660: (define_insn "xorqi3" ! 661: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 662: (xor:QI (match_operand:QI 1 "general_operand" "mri") ! 663: (match_operand:QI 2 "general_operand" "mri")))] ! 664: "" ! 665: "xorb3 %2, %1, %0") ! 666: ! 667: ;; arithmetic shift instructions ! 668: ! 669: (define_insn "ashlsi3" ! 670: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 671: (ashift:SI (match_operand:SI 1 "general_operand" "mri") ! 672: (match_operand:SI 2 "general_operand" "mri")))] ! 673: "" ! 674: "LLSW3 %2, %1, %0") ! 675: ! 676: (define_insn "ashrsi3" ! 677: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 678: (ashiftrt:SI (match_operand:SI 1 "general_operand" "mri") ! 679: (match_operand:SI 2 "general_operand" "mri")))] ! 680: "" ! 681: "ARSW3 %2, %1, %0") ! 682: ! 683: ;; logical shift instructions ! 684: ! 685: ;; (define_insn "lshlsi3" ! 686: ;; [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 687: ;; (lshift:SI (match_operand:SI 1 "general_operand" "mri") ! 688: ;; (match_operand:SI 2 "general_operand" "mri")))] ! 689: ;; "" ! 690: ;; "LLSW3 %2, %1, %0") ! 691: ! 692: (define_insn "lshrsi3" ! 693: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 694: (lshiftrt:SI (match_operand:SI 1 "general_operand" "mri") ! 695: (match_operand:SI 2 "general_operand" "mri")))] ! 696: "" ! 697: "LRSW3 %2, %1, %0") ! 698: ! 699: ;; rotate instruction ! 700: ! 701: (define_insn "rotrsi3" ! 702: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 703: (rotatert: SI (match_operand:SI 1 "general_operand" "mri") ! 704: (match_operand:SI 2 "general_operand" "mri")))] ! 705: "" ! 706: "ROTW %2, %1, %0") ! 707: ! 708: ;; negate instructions ! 709: ! 710: (define_insn "negsi2" ! 711: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 712: (neg:SI (match_operand:SI 1 "general_operand" "mri")))] ! 713: "" ! 714: "mnegw %1, %0") ! 715: ! 716: (define_insn "neghi2" ! 717: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 718: (neg:HI (match_operand:HI 1 "general_operand" "mri")))] ! 719: "" ! 720: "mnegh %1, %0") ! 721: ! 722: ;; complement instructions ! 723: ! 724: (define_insn "one_cmplsi2" ! 725: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 726: (not:SI (match_operand:SI 1 "general_operand" "mri")))] ! 727: "" ! 728: "mcomw %1, %0") ! 729: ! 730: (define_insn "one_cmplhi2" ! 731: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 732: (not:HI (match_operand:HI 1 "general_operand" "mri")))] ! 733: "" ! 734: "mcomh %1, %0") ! 735: ! 736: (define_insn "one_cmplqi2" ! 737: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 738: (not:QI (match_operand:QI 1 "general_operand" "mri")))] ! 739: "" ! 740: "mcomb %1, %0") ! 741: ! 742: ;; test instruction ! 743: ! 744: ;; We don't want to allow a constant operand for test insns because ! 745: ;; (set (cc0) (const_int foo)) has no mode information. Such insns will ! 746: ;; be folded while optimizing anyway. ! 747: ! 748: (define_insn "tstsi" ! 749: [(set (cc0) (match_operand:SI 0 "nonimmediate_operand" "mr"))] ! 750: "" ! 751: "TSTW %0") ! 752: ! 753: (define_insn "tsthi" ! 754: [(set (cc0) (match_operand:HI 0 "nonimmediate_operand" "mr"))] ! 755: "" ! 756: "TSTH %0") ! 757: ! 758: (define_insn "tstqi" ! 759: [(set (cc0) (match_operand:QI 0 "nonimmediate_operand" "mr"))] ! 760: "" ! 761: "TSTB {sbyte}%0") ! 762: ! 763: ;; compare instruction ! 764: ! 765: (define_insn "cmpsi" ! 766: [(set (cc0) (compare (match_operand:SI 0 "nonimmediate_operand" "mr") ! 767: (match_operand:SI 1 "general_operand" "mri")))] ! 768: "" ! 769: "CMPW %1, %0") ! 770: ! 771: (define_insn "cmphi" ! 772: [(set (cc0) (compare (match_operand:HI 0 "nonimmediate_operand" "mr") ! 773: (match_operand:HI 1 "general_operand" "mri")))] ! 774: "" ! 775: "* ! 776: { ! 777: ! 778: if (GET_CODE (operands[1]) == CONST_INT && ! 779: ((unsigned long)INTVAL (operands[1]) & 0x8000L)) ! 780: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) | 0xffff0000L); ! 781: ! 782: output_asm_insn(\"CMPH %1, %0\",operands); ! 783: ! 784: return \"\"; ! 785: }") ! 786: ! 787: (define_insn "cmpqi" ! 788: [(set (cc0) (compare (match_operand:QI 0 "nonimmediate_operand" "mr") ! 789: (match_operand:QI 1 "general_operand" "mri")))] ! 790: "" ! 791: "* ! 792: { ! 793: ! 794: if (GET_CODE (operands[1]) == CONST_INT && ! 795: ((unsigned long)INTVAL (operands[1]) & 0x80L)) ! 796: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) | 0xffffff00L); ! 797: ! 798: output_asm_insn(\"CMPB {sbyte}%1, {sbyte}%0\",operands); ! 799: ! 800: return \"\"; ! 801: }") ! 802: ! 803: ;; truncate instructions ! 804: ! 805: (define_insn "truncdfsf2" ! 806: [(clobber (reg:SI 0)) ! 807: (clobber (reg:SI 1)) ! 808: (clobber (reg:SI 2)) ! 809: (set (match_operand:SF 0 "nonimmediate_operand" "=mr") ! 810: (float_truncate:SF (match_operand:DF 1 "general_operand" "orF")))] ! 811: "" ! 812: "* ! 813: { ! 814: output_push_double(&operands[1]); ! 815: output_asm_insn(\"call &2, _fdtos\"); ! 816: ! 817: if (GET_CODE (operands[0]) != REG || REGNO (operands[0]) != 0) ! 818: output_asm_insn(\"movw %%r0, %0\", operands); ! 819: ! 820: return \"\"; ! 821: }") ! 822: ! 823: ! 824: (define_insn "truncsihi2" ! 825: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 826: (truncate:HI (match_operand:SI 1 "general_operand" "mri")))] ! 827: "" ! 828: "movtwh %1, %0") ! 829: ! 830: (define_insn "truncsiqi2" ! 831: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 832: (truncate:QI (match_operand:SI 1 "general_operand" "mri")))] ! 833: "" ! 834: "movtwb %1, %0") ! 835: ! 836: (define_insn "trunchiqi2" ! 837: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 838: (truncate:QI (match_operand:HI 1 "general_operand" "mri")))] ! 839: "" ! 840: "movthb %1, %0") ! 841: ! 842: ;; sign-extend move instructions ! 843: ! 844: (define_insn "extendsfdf2" ! 845: [(clobber (reg:SI 0)) ! 846: (clobber (reg:SI 1)) ! 847: (clobber (reg:SI 2)) ! 848: (set (match_operand:DF 0 "nonimmediate_operand" "=or") ! 849: (float_extend:DF (match_operand:SF 1 "general_operand" "mrF")))] ! 850: "" ! 851: "* ! 852: { ! 853: rtx xoperands[2]; ! 854: ! 855: output_asm_insn(\"pushw %1\", operands); ! 856: output_asm_insn(\"call &1, _fstod\"); ! 857: ! 858: if (GET_CODE (operands[0]) != REG || REGNO (operands[0]) != 0) { ! 859: xoperands[0] = operands[0]; ! 860: xoperands[1] = gen_rtx(REG, DFmode, 0); ! 861: output_move_double(xoperands); ! 862: } ! 863: ! 864: return \"\"; ! 865: }") ! 866: ! 867: (define_insn "extendhisi2" ! 868: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 869: (sign_extend:SI (match_operand:HI 1 "general_operand" "mri")))] ! 870: "" ! 871: "movbhw %1, %0") ! 872: ! 873: (define_insn "extendqisi2" ! 874: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 875: (sign_extend:SI (match_operand:QI 1 "general_operand" "mri")))] ! 876: "" ! 877: "movbbw %1, %0") ! 878: ! 879: (define_insn "extendqihi2" ! 880: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 881: (sign_extend:HI (match_operand:QI 1 "general_operand" "mri")))] ! 882: "" ! 883: "movbbh %1, %0") ! 884: ! 885: ;; zero-extend move instructions ! 886: ! 887: (define_insn "zero_extendhisi2" ! 888: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 889: (zero_extend:SI (match_operand:HI 1 "general_operand" "mri")))] ! 890: "" ! 891: "movzhw %1, %0") ! 892: ! 893: (define_insn "zero_extendqisi2" ! 894: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 895: (zero_extend:SI (match_operand:QI 1 "general_operand" "mri")))] ! 896: "" ! 897: "movzbw %1, %0") ! 898: ! 899: (define_insn "zero_extendqihi2" ! 900: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 901: (zero_extend:HI (match_operand:QI 1 "general_operand" "mri")))] ! 902: "" ! 903: "movzbh %1, %0") ! 904: ! 905: ;; bit field instructions ! 906: ! 907: (define_insn "extzv" ! 908: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 909: (zero_extract:SI (match_operand:SI 1 "general_operand" "mri") ! 910: (match_operand:SI 2 "immediate_operand" "i") ! 911: (match_operand:SI 3 "general_operand" "mri")))] ! 912: "" ! 913: "* ! 914: { ! 915: ! 916: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 917: output_asm_insn(\"EXTFW %2, %3, %1, %0\",operands); ! 918: ! 919: return \"\"; ! 920: }") ! 921: ! 922: (define_insn "" ! 923: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 924: (zero_extract:SI (match_operand:HI 1 "general_operand" "mri") ! 925: (match_operand:SI 2 "immediate_operand" "i") ! 926: (match_operand:SI 3 "general_operand" "mri")))] ! 927: "" ! 928: "* ! 929: { ! 930: ! 931: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 932: output_asm_insn(\"EXTFH %2, %3, {uhalf}%1, {uword}%0\",operands); ! 933: ! 934: return \"\"; ! 935: }") ! 936: ! 937: (define_insn "" ! 938: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 939: (zero_extract:SI (match_operand:QI 1 "general_operand" "mri") ! 940: (match_operand:SI 2 "immediate_operand" "i") ! 941: (match_operand:SI 3 "general_operand" "mri")))] ! 942: "" ! 943: "* ! 944: { ! 945: ! 946: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 947: output_asm_insn(\"EXTFB %2, %3, {ubyte}%1, {uword}%0\",operands); ! 948: ! 949: return \"\"; ! 950: }") ! 951: ! 952: (define_insn "insv" ! 953: [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+mr") ! 954: (match_operand:SI 1 "immediate_operand" "i") ! 955: (match_operand:SI 2 "general_operand" "mri")) ! 956: (match_operand:SI 3 "general_operand" "mri"))] ! 957: "" ! 958: "* ! 959: { ! 960: ! 961: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 962: output_asm_insn(\"INSFW %1, %2, %3, %0\",operands); ! 963: ! 964: return \"\"; ! 965: }") ! 966: ! 967: (define_insn "" ! 968: [(set (zero_extract:SI (match_operand:HI 0 "nonimmediate_operand" "+mr") ! 969: (match_operand:SI 1 "immediate_operand" "i") ! 970: (match_operand:SI 2 "general_operand" "mri")) ! 971: (match_operand:SI 3 "general_operand" "mri"))] ! 972: "" ! 973: "* ! 974: { ! 975: ! 976: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 977: output_asm_insn(\"INSFH %1, %2, {uword}%3, {uhalf}%0\",operands); ! 978: ! 979: return \"\"; ! 980: }") ! 981: ! 982: (define_insn "" ! 983: [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+mr") ! 984: (match_operand:SI 1 "immediate_operand" "i") ! 985: (match_operand:SI 2 "general_operand" "mri")) ! 986: (match_operand:SI 3 "general_operand" "mri"))] ! 987: "" ! 988: "* ! 989: { ! 990: ! 991: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 992: output_asm_insn(\"INSFB %1, %2, {uword}%3, {ubyte}%0\",operands); ! 993: ! 994: return \"\"; ! 995: }") ! 996: ! 997: ;; conditional branch instructions ! 998: ! 999: (define_insn "beq" ! 1000: [(set (pc) (if_then_else (eq (cc0) (const_int 0)) ! 1001: (label_ref (match_operand 0 "" "")) ! 1002: (pc)))] ! 1003: "" ! 1004: "je %l0") ! 1005: ! 1006: (define_insn "bne" ! 1007: [(set (pc) (if_then_else (ne (cc0) (const_int 0)) ! 1008: (label_ref (match_operand 0 "" "")) ! 1009: (pc)))] ! 1010: "" ! 1011: "jne %l0") ! 1012: ! 1013: (define_insn "bgt" ! 1014: [(set (pc) (if_then_else (gt (cc0) (const_int 0)) ! 1015: (label_ref (match_operand 0 "" "")) ! 1016: (pc)))] ! 1017: "" ! 1018: "jg %l0") ! 1019: ! 1020: (define_insn "bgtu" ! 1021: [(set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1022: (label_ref (match_operand 0 "" "")) ! 1023: (pc)))] ! 1024: "" ! 1025: "jgu %l0") ! 1026: ! 1027: (define_insn "blt" ! 1028: [(set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1029: (label_ref (match_operand 0 "" "")) ! 1030: (pc)))] ! 1031: "" ! 1032: "jl %l0") ! 1033: ! 1034: (define_insn "bltu" ! 1035: [(set (pc) (if_then_else (ltu (cc0) (const_int 0)) ! 1036: (label_ref (match_operand 0 "" "")) ! 1037: (pc)))] ! 1038: "" ! 1039: "jlu %l0") ! 1040: ! 1041: (define_insn "bge" ! 1042: [(set (pc) (if_then_else (ge (cc0) (const_int 0)) ! 1043: (label_ref (match_operand 0 "" "")) ! 1044: (pc)))] ! 1045: "" ! 1046: "jge %l0") ! 1047: ! 1048: (define_insn "bgeu" ! 1049: [(set (pc) (if_then_else (geu (cc0) (const_int 0)) ! 1050: (label_ref (match_operand 0 "" "")) ! 1051: (pc)))] ! 1052: "" ! 1053: "jgeu %l0") ! 1054: ! 1055: (define_insn "ble" ! 1056: [(set (pc) (if_then_else (le (cc0) (const_int 0)) ! 1057: (label_ref (match_operand 0 "" "")) ! 1058: (pc)))] ! 1059: "" ! 1060: "jle %l0") ! 1061: ! 1062: (define_insn "bleu" ! 1063: [(set (pc) (if_then_else (leu (cc0) (const_int 0)) ! 1064: (label_ref (match_operand 0 "" "")) ! 1065: (pc)))] ! 1066: "" ! 1067: "jleu %l0") ! 1068: ! 1069: ;; reverse-conditional branch instructions ! 1070: ! 1071: (define_insn "" ! 1072: [(set (pc) (if_then_else (eq (cc0) (const_int 0)) ! 1073: (pc) ! 1074: (label_ref (match_operand 0 "" ""))))] ! 1075: "" ! 1076: "jne %l0") ! 1077: ! 1078: (define_insn "" ! 1079: [(set (pc) (if_then_else (ne (cc0) (const_int 0)) ! 1080: (pc) ! 1081: (label_ref (match_operand 0 "" ""))))] ! 1082: "" ! 1083: "je %l0") ! 1084: ! 1085: (define_insn "" ! 1086: [(set (pc) (if_then_else (gt (cc0) (const_int 0)) ! 1087: (pc) ! 1088: (label_ref (match_operand 0 "" ""))))] ! 1089: "" ! 1090: "jle %l0") ! 1091: ! 1092: (define_insn "" ! 1093: [(set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1094: (pc) ! 1095: (label_ref (match_operand 0 "" ""))))] ! 1096: "" ! 1097: "jleu %l0") ! 1098: ! 1099: (define_insn "" ! 1100: [(set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1101: (pc) ! 1102: (label_ref (match_operand 0 "" ""))))] ! 1103: "" ! 1104: "jge %l0") ! 1105: ! 1106: (define_insn "" ! 1107: [(set (pc) (if_then_else (ltu (cc0) (const_int 0)) ! 1108: (pc) ! 1109: (label_ref (match_operand 0 "" ""))))] ! 1110: "" ! 1111: "jgeu %l0") ! 1112: ! 1113: (define_insn "" ! 1114: [(set (pc) (if_then_else (ge (cc0) (const_int 0)) ! 1115: (pc) ! 1116: (label_ref (match_operand 0 "" ""))))] ! 1117: "" ! 1118: "jl %l0") ! 1119: ! 1120: (define_insn "" ! 1121: [(set (pc) (if_then_else (geu (cc0) (const_int 0)) ! 1122: (pc) ! 1123: (label_ref (match_operand 0 "" ""))))] ! 1124: "" ! 1125: "jlu %l0") ! 1126: ! 1127: (define_insn "" ! 1128: [(set (pc) (if_then_else (le (cc0) (const_int 0)) ! 1129: (pc) ! 1130: (label_ref (match_operand 0 "" ""))))] ! 1131: "" ! 1132: "jg %l0") ! 1133: ! 1134: (define_insn "" ! 1135: [(set (pc) (if_then_else (leu (cc0) (const_int 0)) ! 1136: (pc) ! 1137: (label_ref (match_operand 0 "" ""))))] ! 1138: "" ! 1139: "jgu %l0") ! 1140: ! 1141: ;; call instructions ! 1142: ! 1143: (define_insn "call" ! 1144: [(call (match_operand:QI 0 "memory_operand" "m") ! 1145: (match_operand:SI 1 "immediate_operand" "i"))] ! 1146: "" ! 1147: "call %1/4, %0") ! 1148: ! 1149: (define_insn "call_value" ! 1150: [(set (match_operand 0 "register_operand" "=r") ! 1151: (call (match_operand:QI 1 "memory_operand" "m") ! 1152: (match_operand:SI 2 "immediate_operand" "i")))] ! 1153: "" ! 1154: "call %2/4, %1") ! 1155: ! 1156: ;; No-op instruction ! 1157: ! 1158: (define_insn "nop" ! 1159: [(const_int 0)] ! 1160: "" ! 1161: "NOP") ! 1162: ! 1163: ;; jump through a dispatch table instruction ! 1164: ! 1165: (define_expand "casesi" ! 1166: [(use (match_operand:SI 0 "general_operand" "mri")) ! 1167: (set (cc0) (compare (match_dup 5) ! 1168: (match_operand:SI 1 "general_operand" "mri"))) ! 1169: (set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1170: (label_ref (match_operand 4 "" "")) ! 1171: (pc))) ! 1172: (set (match_dup 5) (minus:SI (match_dup 5) ! 1173: (match_dup 1))) ! 1174: (set (cc0) (compare (match_dup 5) ! 1175: (match_operand:SI 2 "general_operand" "mri"))) ! 1176: (set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1177: (label_ref (match_operand 4 "" "")) ! 1178: (pc))) ! 1179: (set (match_dup 5) (ashift:SI (match_dup 5) ! 1180: (const_int 2))) ! 1181: (set (pc) (mem:SI (plus:SI (label_ref (match_operand 3 "" "")) ! 1182: (match_dup 5))))] ! 1183: "" ! 1184: " ! 1185: { ! 1186: operands[5] = gen_reg_rtx(GET_MODE (operands[0])); ! 1187: emit_move_insn(operands[5], operands[0]); ! 1188: }") ! 1189: ! 1190: ;; jump instructions ! 1191: ! 1192: (define_insn "" ! 1193: [(set (pc) (mem:SI (match_operand:SI 0 "address_operand" "p")))] ! 1194: "GET_CODE (operands[0]) != MEM" ! 1195: "jmp *%a0") ! 1196: ! 1197: (define_insn "indirect_jump" ! 1198: [(set (pc) (match_operand:SI 0 "address_operand" "p"))] ! 1199: "" ! 1200: "jmp %a0") ! 1201: ! 1202: (define_insn "jump" ! 1203: [(set (pc) (label_ref (match_operand 0 "" "")))] ! 1204: "" ! 1205: "jmp %l0") ! 1206: ! 1207: ;; peephole optimizations ! 1208: ! 1209: (define_peephole ! 1210: [(set (match_operand:SI 0 "register_operand" "=r") ! 1211: (match_operand:SI 1 "nonimmediate_operand" "or")) ! 1212: (set (match_operand:SI 2 "register_operand" "=r") ! 1213: (mem:SI (match_dup 0)))] ! 1214: "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))" ! 1215: "movw %a1, %0") ! 1216: ! 1217: (define_peephole ! 1218: [(set (match_operand:SI 0 "register_operand" "=r") ! 1219: (match_operand:SI 1 "nonimmediate_operand" "or")) ! 1220: (set (match_operand:HI 2 "register_operand" "=r") ! 1221: (mem:HI (match_dup 0)))] ! 1222: "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))" ! 1223: "movh %a1, %0") ! 1224: ! 1225: (define_peephole ! 1226: [(set (match_operand:SI 0 "register_operand" "=r") ! 1227: (match_operand:SI 1 "nonimmediate_operand" "or")) ! 1228: (set (match_operand:QI 2 "register_operand" "=r") ! 1229: (mem:QI (match_dup 0)))] ! 1230: "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))" ! 1231: "movb %a1, %0")
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.