|
|
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 "" ! 806: [(set (match_operand:SF 0 "register_operand" "=r") ! 807: (float_truncate:SF (match_operand:DF 1 "general_operand" "orF"))) ! 808: (clobber (reg:SI 1)) ! 809: (clobber (reg:SI 2))] ! 810: "REGNO (operands[0]) == 0" ! 811: "* ! 812: { ! 813: output_push_double(&operands[1]); ! 814: output_asm_insn(\"call &2, _fdtos\", operands); ! 815: ! 816: return \"\"; ! 817: }") ! 818: ! 819: (define_expand "truncdfsf2" ! 820: [(parallel [(set (reg:SF 0) ! 821: (float_truncate:SF (match_operand:DF 1 "general_operand" "orF"))) ! 822: (clobber (reg:SI 1)) ! 823: (clobber (reg:SI 2))]) ! 824: (set (match_operand:SF 0 "nonimmediate_operand" "=mr") ! 825: (reg:SF 0))] ! 826: "" ! 827: "") ! 828: ! 829: (define_insn "truncsihi2" ! 830: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 831: (truncate:HI (match_operand:SI 1 "general_operand" "mri")))] ! 832: "" ! 833: "movtwh %1, %0") ! 834: ! 835: (define_insn "truncsiqi2" ! 836: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 837: (truncate:QI (match_operand:SI 1 "general_operand" "mri")))] ! 838: "" ! 839: "movtwb %1, %0") ! 840: ! 841: (define_insn "trunchiqi2" ! 842: [(set (match_operand:QI 0 "nonimmediate_operand" "=mr") ! 843: (truncate:QI (match_operand:HI 1 "general_operand" "mri")))] ! 844: "" ! 845: "movthb %1, %0") ! 846: ! 847: ;; sign-extend move instructions ! 848: ! 849: (define_insn "" ! 850: [(set (match_operand:DF 0 "register_operand" "=r") ! 851: (float_extend:DF (match_operand:SF 1 "general_operand" "mrF"))) ! 852: (clobber (reg:SI 2))] ! 853: "REGNO (operands[0]) == 0" ! 854: "* ! 855: { ! 856: output_asm_insn(\"pushw %1\", operands); ! 857: output_asm_insn(\"call &1, _fstod\", operands); ! 858: ! 859: return \"\"; ! 860: }") ! 861: ! 862: (define_expand "extendsfdf2" ! 863: [(parallel [(set (reg:DF 0) ! 864: (float_extend:DF (match_operand:SF 1 "general_operand" "mrF"))) ! 865: (clobber (reg:SI 2))]) ! 866: (set (match_operand:DF 0 "nonimmediate_operand" "=or") ! 867: (reg:DF 0))] ! 868: "" ! 869: "") ! 870: ! 871: (define_insn "extendhisi2" ! 872: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 873: (sign_extend:SI (match_operand:HI 1 "general_operand" "mri")))] ! 874: "" ! 875: "movbhw %1, %0") ! 876: ! 877: (define_insn "extendqisi2" ! 878: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 879: (sign_extend:SI (match_operand:QI 1 "general_operand" "mri")))] ! 880: "" ! 881: "movbbw %1, %0") ! 882: ! 883: (define_insn "extendqihi2" ! 884: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 885: (sign_extend:HI (match_operand:QI 1 "general_operand" "mri")))] ! 886: "" ! 887: "movbbh %1, %0") ! 888: ! 889: ;; zero-extend move instructions ! 890: ! 891: (define_insn "zero_extendhisi2" ! 892: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 893: (zero_extend:SI (match_operand:HI 1 "general_operand" "mri")))] ! 894: "" ! 895: "movzhw %1, %0") ! 896: ! 897: (define_insn "zero_extendqisi2" ! 898: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 899: (zero_extend:SI (match_operand:QI 1 "general_operand" "mri")))] ! 900: "" ! 901: "movzbw %1, %0") ! 902: ! 903: (define_insn "zero_extendqihi2" ! 904: [(set (match_operand:HI 0 "nonimmediate_operand" "=mr") ! 905: (zero_extend:HI (match_operand:QI 1 "general_operand" "mri")))] ! 906: "" ! 907: "movzbh %1, %0") ! 908: ! 909: ;; bit field instructions ! 910: ! 911: (define_insn "extzv" ! 912: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 913: (zero_extract:SI (match_operand:SI 1 "general_operand" "mri") ! 914: (match_operand:SI 2 "immediate_operand" "i") ! 915: (match_operand:SI 3 "general_operand" "mri")))] ! 916: "" ! 917: "* ! 918: { ! 919: ! 920: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 921: output_asm_insn(\"EXTFW %2, %3, %1, %0\",operands); ! 922: ! 923: return \"\"; ! 924: }") ! 925: ! 926: (define_insn "" ! 927: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 928: (zero_extract:SI (match_operand:HI 1 "general_operand" "mri") ! 929: (match_operand:SI 2 "immediate_operand" "i") ! 930: (match_operand:SI 3 "general_operand" "mri")))] ! 931: "" ! 932: "* ! 933: { ! 934: ! 935: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 936: output_asm_insn(\"EXTFH %2, %3, {uhalf}%1, {uword}%0\",operands); ! 937: ! 938: return \"\"; ! 939: }") ! 940: ! 941: (define_insn "" ! 942: [(set (match_operand:SI 0 "nonimmediate_operand" "=mr") ! 943: (zero_extract:SI (match_operand:QI 1 "general_operand" "mri") ! 944: (match_operand:SI 2 "immediate_operand" "i") ! 945: (match_operand:SI 3 "general_operand" "mri")))] ! 946: "" ! 947: "* ! 948: { ! 949: ! 950: operands[2] = gen_rtx(CONST_INT, SImode, INTVAL(operands[2]) - 1); ! 951: output_asm_insn(\"EXTFB %2, %3, {ubyte}%1, {uword}%0\",operands); ! 952: ! 953: return \"\"; ! 954: }") ! 955: ! 956: (define_insn "insv" ! 957: [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+mr") ! 958: (match_operand:SI 1 "immediate_operand" "i") ! 959: (match_operand:SI 2 "general_operand" "mri")) ! 960: (match_operand:SI 3 "general_operand" "mri"))] ! 961: "" ! 962: "* ! 963: { ! 964: ! 965: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 966: output_asm_insn(\"INSFW %1, %2, %3, %0\",operands); ! 967: ! 968: return \"\"; ! 969: }") ! 970: ! 971: (define_insn "" ! 972: [(set (zero_extract:SI (match_operand:HI 0 "nonimmediate_operand" "+mr") ! 973: (match_operand:SI 1 "immediate_operand" "i") ! 974: (match_operand:SI 2 "general_operand" "mri")) ! 975: (match_operand:SI 3 "general_operand" "mri"))] ! 976: "" ! 977: "* ! 978: { ! 979: ! 980: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 981: output_asm_insn(\"INSFH %1, %2, {uword}%3, {uhalf}%0\",operands); ! 982: ! 983: return \"\"; ! 984: }") ! 985: ! 986: (define_insn "" ! 987: [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+mr") ! 988: (match_operand:SI 1 "immediate_operand" "i") ! 989: (match_operand:SI 2 "general_operand" "mri")) ! 990: (match_operand:SI 3 "general_operand" "mri"))] ! 991: "" ! 992: "* ! 993: { ! 994: ! 995: operands[1] = gen_rtx(CONST_INT, SImode, INTVAL(operands[1]) - 1); ! 996: output_asm_insn(\"INSFB %1, %2, {uword}%3, {ubyte}%0\",operands); ! 997: ! 998: return \"\"; ! 999: }") ! 1000: ! 1001: ;; conditional branch instructions ! 1002: ! 1003: (define_insn "beq" ! 1004: [(set (pc) (if_then_else (eq (cc0) (const_int 0)) ! 1005: (label_ref (match_operand 0 "" "")) ! 1006: (pc)))] ! 1007: "" ! 1008: "je %l0") ! 1009: ! 1010: (define_insn "bne" ! 1011: [(set (pc) (if_then_else (ne (cc0) (const_int 0)) ! 1012: (label_ref (match_operand 0 "" "")) ! 1013: (pc)))] ! 1014: "" ! 1015: "jne %l0") ! 1016: ! 1017: (define_insn "bgt" ! 1018: [(set (pc) (if_then_else (gt (cc0) (const_int 0)) ! 1019: (label_ref (match_operand 0 "" "")) ! 1020: (pc)))] ! 1021: "" ! 1022: "jg %l0") ! 1023: ! 1024: (define_insn "bgtu" ! 1025: [(set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1026: (label_ref (match_operand 0 "" "")) ! 1027: (pc)))] ! 1028: "" ! 1029: "jgu %l0") ! 1030: ! 1031: (define_insn "blt" ! 1032: [(set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1033: (label_ref (match_operand 0 "" "")) ! 1034: (pc)))] ! 1035: "" ! 1036: "jl %l0") ! 1037: ! 1038: (define_insn "bltu" ! 1039: [(set (pc) (if_then_else (ltu (cc0) (const_int 0)) ! 1040: (label_ref (match_operand 0 "" "")) ! 1041: (pc)))] ! 1042: "" ! 1043: "jlu %l0") ! 1044: ! 1045: (define_insn "bge" ! 1046: [(set (pc) (if_then_else (ge (cc0) (const_int 0)) ! 1047: (label_ref (match_operand 0 "" "")) ! 1048: (pc)))] ! 1049: "" ! 1050: "jge %l0") ! 1051: ! 1052: (define_insn "bgeu" ! 1053: [(set (pc) (if_then_else (geu (cc0) (const_int 0)) ! 1054: (label_ref (match_operand 0 "" "")) ! 1055: (pc)))] ! 1056: "" ! 1057: "jgeu %l0") ! 1058: ! 1059: (define_insn "ble" ! 1060: [(set (pc) (if_then_else (le (cc0) (const_int 0)) ! 1061: (label_ref (match_operand 0 "" "")) ! 1062: (pc)))] ! 1063: "" ! 1064: "jle %l0") ! 1065: ! 1066: (define_insn "bleu" ! 1067: [(set (pc) (if_then_else (leu (cc0) (const_int 0)) ! 1068: (label_ref (match_operand 0 "" "")) ! 1069: (pc)))] ! 1070: "" ! 1071: "jleu %l0") ! 1072: ! 1073: ;; reverse-conditional branch instructions ! 1074: ! 1075: (define_insn "" ! 1076: [(set (pc) (if_then_else (eq (cc0) (const_int 0)) ! 1077: (pc) ! 1078: (label_ref (match_operand 0 "" ""))))] ! 1079: "" ! 1080: "jne %l0") ! 1081: ! 1082: (define_insn "" ! 1083: [(set (pc) (if_then_else (ne (cc0) (const_int 0)) ! 1084: (pc) ! 1085: (label_ref (match_operand 0 "" ""))))] ! 1086: "" ! 1087: "je %l0") ! 1088: ! 1089: (define_insn "" ! 1090: [(set (pc) (if_then_else (gt (cc0) (const_int 0)) ! 1091: (pc) ! 1092: (label_ref (match_operand 0 "" ""))))] ! 1093: "" ! 1094: "jle %l0") ! 1095: ! 1096: (define_insn "" ! 1097: [(set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1098: (pc) ! 1099: (label_ref (match_operand 0 "" ""))))] ! 1100: "" ! 1101: "jleu %l0") ! 1102: ! 1103: (define_insn "" ! 1104: [(set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1105: (pc) ! 1106: (label_ref (match_operand 0 "" ""))))] ! 1107: "" ! 1108: "jge %l0") ! 1109: ! 1110: (define_insn "" ! 1111: [(set (pc) (if_then_else (ltu (cc0) (const_int 0)) ! 1112: (pc) ! 1113: (label_ref (match_operand 0 "" ""))))] ! 1114: "" ! 1115: "jgeu %l0") ! 1116: ! 1117: (define_insn "" ! 1118: [(set (pc) (if_then_else (ge (cc0) (const_int 0)) ! 1119: (pc) ! 1120: (label_ref (match_operand 0 "" ""))))] ! 1121: "" ! 1122: "jl %l0") ! 1123: ! 1124: (define_insn "" ! 1125: [(set (pc) (if_then_else (geu (cc0) (const_int 0)) ! 1126: (pc) ! 1127: (label_ref (match_operand 0 "" ""))))] ! 1128: "" ! 1129: "jlu %l0") ! 1130: ! 1131: (define_insn "" ! 1132: [(set (pc) (if_then_else (le (cc0) (const_int 0)) ! 1133: (pc) ! 1134: (label_ref (match_operand 0 "" ""))))] ! 1135: "" ! 1136: "jg %l0") ! 1137: ! 1138: (define_insn "" ! 1139: [(set (pc) (if_then_else (leu (cc0) (const_int 0)) ! 1140: (pc) ! 1141: (label_ref (match_operand 0 "" ""))))] ! 1142: "" ! 1143: "jgu %l0") ! 1144: ! 1145: ;; call instructions ! 1146: ! 1147: (define_insn "call" ! 1148: [(call (match_operand:QI 0 "memory_operand" "m") ! 1149: (match_operand:SI 1 "immediate_operand" "i"))] ! 1150: "" ! 1151: "call %1/4, %0") ! 1152: ! 1153: (define_insn "call_value" ! 1154: [(set (match_operand 0 "register_operand" "=r") ! 1155: (call (match_operand:QI 1 "memory_operand" "m") ! 1156: (match_operand:SI 2 "immediate_operand" "i")))] ! 1157: "" ! 1158: "call %2/4, %1") ! 1159: ! 1160: ;; No-op instruction ! 1161: ! 1162: (define_insn "nop" ! 1163: [(const_int 0)] ! 1164: "" ! 1165: "NOP") ! 1166: ! 1167: ;; jump through a dispatch table instruction ! 1168: ! 1169: (define_expand "casesi" ! 1170: [(use (match_operand:SI 0 "general_operand" "mri")) ! 1171: (set (cc0) (compare (match_dup 5) ! 1172: (match_operand:SI 1 "general_operand" "mri"))) ! 1173: (set (pc) (if_then_else (lt (cc0) (const_int 0)) ! 1174: (label_ref (match_operand 4 "" "")) ! 1175: (pc))) ! 1176: (set (match_dup 5) (minus:SI (match_dup 5) ! 1177: (match_dup 1))) ! 1178: (set (cc0) (compare (match_dup 5) ! 1179: (match_operand:SI 2 "general_operand" "mri"))) ! 1180: (set (pc) (if_then_else (gtu (cc0) (const_int 0)) ! 1181: (label_ref (match_dup 4)) ! 1182: (pc))) ! 1183: (set (match_dup 5) (ashift:SI (match_dup 5) ! 1184: (const_int 2))) ! 1185: (set (pc) (mem:SI (plus:SI (label_ref (match_operand 3 "" "")) ! 1186: (match_dup 5))))] ! 1187: "" ! 1188: " ! 1189: { ! 1190: operands[5] = gen_reg_rtx(GET_MODE (operands[0])); ! 1191: emit_move_insn(operands[5], operands[0]); ! 1192: }") ! 1193: ! 1194: ;; jump instructions ! 1195: ! 1196: (define_insn "indirect_jump" ! 1197: [(set (pc) (match_operand:SI 0 "address_operand" "p"))] ! 1198: "" ! 1199: "jmp %a0") ! 1200: ! 1201: (define_insn "jump" ! 1202: [(set (pc) (label_ref (match_operand 0 "" "")))] ! 1203: "" ! 1204: "jmp %l0")
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.