|
|
1.1 ! root 1: ;;- Machine description for GNU compiler ! 2: ;;- Elxsi Version ! 3: ;; Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc. ! 4: ;; This port done by Mike Stump <[email protected]> in 1988, and is the first ! 5: ;; 64 bit port of GNU CC. ! 6: ;; Based upon the VAX port. ! 7: ! 8: ;; This file is part of GNU CC. ! 9: ! 10: ;; GNU CC is free software; you can redistribute it and/or modify ! 11: ;; it under the terms of the GNU General Public License as published by ! 12: ;; the Free Software Foundation; either version 1, or (at your option) ! 13: ;; any later version. ! 14: ! 15: ;; GNU CC is distributed in the hope that it will be useful, ! 16: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ! 17: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 18: ;; GNU General Public License for more details. ! 19: ! 20: ;; You should have received a copy of the GNU General Public License ! 21: ;; along with GNU CC; see the file COPYING. If not, write to ! 22: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! 23: ! 24: ! 25: ;;- Instruction patterns. When multiple patterns apply, ! 26: ;;- the first one in the file is chosen. ! 27: ;;- ! 28: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. ! 29: ;;- ! 30: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code ! 31: ;;- updates for most instructions. ! 32: ! 33: ! 34: (define_insn "" ! 35: [(set (reg:SI 15) ! 36: (plus:SI (reg:SI 15) ! 37: (match_operand:SI 0 "general_operand" "g")))] ! 38: "" ! 39: "add.64\\t.sp,%0") ! 40: ! 41: (define_insn "" ! 42: [(set (reg:SI 15) ! 43: (plus:SI (match_operand:SI 0 "general_operand" "g") ! 44: (reg:SI 15)))] ! 45: "" ! 46: "add.64\\t.sp,%0") ! 47: ! 48: (define_insn "" ! 49: [(set (match_operand:SI 0 "register_operand" "r") ! 50: (plus:SI (reg:SI 15) ! 51: (match_operand:SI 1 "general_operand" "g")))] ! 52: "" ! 53: "ld.32\\t%0,.sp\;add.64\\t%0,%1") ! 54: ! 55: (define_insn "" ! 56: [(set (match_operand:SI 0 "register_operand" "r") ! 57: (plus:SI (match_operand:SI 1 "general_operand" "g") ! 58: (reg:SI 15)))] ! 59: "" ! 60: "ld.32\\t%0,.sp\;add.64\\t%0,%1") ! 61: ! 62: (define_insn "" ! 63: [(set (reg:SI 15) ! 64: (minus:SI (reg:SI 15) ! 65: (match_operand:SI 0 "general_operand" "g")))] ! 66: "" ! 67: "sub.64\\t.sp,%0") ! 68: ! 69: (define_insn "" ! 70: [(set (reg:SI 15) ! 71: (match_operand:SI 0 "general_operand" "rm"))] ! 72: "" ! 73: "ld.32\\t.sp,%0") ! 74: ! 75: (define_insn "" ! 76: [(set (match_operand:SI 0 "general_operand" "m,r") ! 77: (reg:SI 15))] ! 78: "" ! 79: "* ! 80: if (which_alternative == 0) ! 81: return \"st.32\\t.sp,%0\"; ! 82: return \"ld.32\\t%0,.sp\"; ! 83: ") ! 84: ! 85: ; tstdi is first test insn so that it is the one to match ! 86: ; a constant argument. ! 87: ! 88: (define_insn "tstdi" ! 89: [(set (cc0) ! 90: (match_operand:DI 0 "register_operand" "r"))] ! 91: "" ! 92: "* ! 93: extern rtx cmp_op0, cmp_op1; ! 94: cmp_op0=operands[0]; cmp_op1=0; ! 95: return \";\\ttstdi\\t%0\"; ! 96: ") ! 97: ! 98: (define_insn "tstdf" ! 99: [(set (cc0) ! 100: (match_operand:DF 0 "register_operand" "r"))] ! 101: "" ! 102: "* ! 103: extern rtx cmp_op0, cmp_op1; ! 104: cmp_op0=operands[0]; cmp_op1=0; ! 105: return \";\\ttstdf\\t%0\"; ! 106: ") ! 107: ! 108: (define_insn "tstsf" ! 109: [(set (cc0) ! 110: (match_operand:SF 0 "register_operand" "r"))] ! 111: "" ! 112: "* ! 113: extern rtx cmp_op0, cmp_op1; ! 114: cmp_op0=operands[0]; cmp_op1=0; ! 115: return \";\\ttstsf\\t%0\"; ! 116: ") ! 117: ! 118: (define_insn "cmpdi" ! 119: [(set (cc0) ! 120: (compare (match_operand:DI 0 "register_operand" "r") ! 121: (match_operand:DI 1 "general_operand" "rm")))] ! 122: "" ! 123: "* ! 124: extern rtx cmp_op0, cmp_op1; ! 125: cmp_op0=operands[0]; cmp_op1=operands[1]; ! 126: return \";\\tcmpdi\\t%0,%1\"; ! 127: ") ! 128: ! 129: (define_insn "cmpdf" ! 130: [(set (cc0) ! 131: (compare (match_operand:DF 0 "register_operand" "r") ! 132: (match_operand:DF 1 "general_operand" "rm")))] ! 133: "" ! 134: "* ! 135: extern rtx cmp_op0, cmp_op1; ! 136: cmp_op0=operands[0]; cmp_op1=operands[1]; ! 137: return \";\\tcmpdf\\t%0,%1\"; ! 138: ") ! 139: ! 140: (define_insn "cmpsf" ! 141: [(set (cc0) ! 142: (compare (match_operand:SF 0 "register_operand" "r") ! 143: (match_operand:SF 1 "general_operand" "rm")))] ! 144: "" ! 145: "* ! 146: extern rtx cmp_op0, cmp_op1; ! 147: cmp_op0=operands[0]; cmp_op1=operands[1]; ! 148: return \";\\tcmpsf\\t%0,%1\"; ! 149: ") ! 150: ! 151: (define_insn "" ! 152: [(set (match_operand:DI 0 "register_operand" "=r") ! 153: (eq (match_operand:DI 1 "register_operand" "r") ! 154: (match_operand:DI 2 "general_operand" "g")))] ! 155: "" ! 156: "cmp.64\\t%0,%1,%2:eq") ! 157: ! 158: (define_insn "" ! 159: [(set (match_operand:DI 0 "register_operand" "=r") ! 160: (ne (match_operand:DI 1 "register_operand" "r") ! 161: (match_operand:DI 2 "general_operand" "g")))] ! 162: "" ! 163: "cmp.64\\t%0,%1,%2:ne") ! 164: ! 165: (define_insn "" ! 166: [(set (match_operand:DI 0 "register_operand" "=r") ! 167: (le (match_operand:DI 1 "register_operand" "r") ! 168: (match_operand:DI 2 "general_operand" "g")))] ! 169: "" ! 170: "cmp.64\\t%0,%1,%2:le") ! 171: ! 172: (define_insn "" ! 173: [(set (match_operand:DI 0 "register_operand" "=r") ! 174: (leu (match_operand:DI 1 "register_operand" "r") ! 175: (match_operand:DI 2 "general_operand" "g")))] ! 176: "" ! 177: "cmpu.64\\t%0,%1,%2:le") ! 178: ! 179: (define_insn "" ! 180: [(set (match_operand:DI 0 "register_operand" "=r") ! 181: (lt (match_operand:DI 1 "register_operand" "r") ! 182: (match_operand:DI 2 "general_operand" "g")))] ! 183: "" ! 184: "cmp.64\\t%0,%1,%2:lt") ! 185: ! 186: (define_insn "" ! 187: [(set (match_operand:DI 0 "register_operand" "=r") ! 188: (ltu (match_operand:DI 1 "register_operand" "r") ! 189: (match_operand:DI 2 "general_operand" "g")))] ! 190: "" ! 191: "cmpu.64\\t%0,%1,%2:lt") ! 192: ! 193: (define_insn "" ! 194: [(set (match_operand:DI 0 "register_operand" "=r") ! 195: (ge (match_operand:DI 1 "register_operand" "r") ! 196: (match_operand:DI 2 "general_operand" "g")))] ! 197: "" ! 198: "cmp.64\\t%0,%1,%2:ge") ! 199: ! 200: (define_insn "" ! 201: [(set (match_operand:DI 0 "register_operand" "=r") ! 202: (geu (match_operand:DI 1 "register_operand" "r") ! 203: (match_operand:DI 2 "general_operand" "g")))] ! 204: "" ! 205: "cmpu.64\\t%0,%1,%2:ge") ! 206: ! 207: (define_insn "" ! 208: [(set (match_operand:DI 0 "register_operand" "=r") ! 209: (gt (match_operand:DI 1 "register_operand" "r") ! 210: (match_operand:DI 2 "general_operand" "g")))] ! 211: "" ! 212: "cmp.64\\t%0,%1,%2:gt") ! 213: ! 214: (define_insn "" ! 215: [(set (match_operand:DI 0 "register_operand" "=r") ! 216: (gtu (match_operand:DI 1 "register_operand" "r") ! 217: (match_operand:DI 2 "general_operand" "g")))] ! 218: "" ! 219: "cmpu.64\\t%0,%1,%2:gt") ! 220: ! 221: (define_insn "seq" ! 222: [(set (match_operand:DI 0 "register_operand" "=r") ! 223: (eq (cc0) (const_int 0)))] ! 224: "" ! 225: "* return cmp_set(\"\", \"eq\", operands[0]); ") ! 226: ! 227: (define_insn "sne" ! 228: [(set (match_operand:DI 0 "register_operand" "=r") ! 229: (ne (cc0) (const_int 0)))] ! 230: "" ! 231: "* return cmp_set(\"\", \"ne\", operands[0]); ") ! 232: ! 233: (define_insn "sle" ! 234: [(set (match_operand:DI 0 "register_operand" "=r") ! 235: (le (cc0) (const_int 0)))] ! 236: "" ! 237: "* return cmp_set(\"\", \"le\", operands[0]); ") ! 238: ! 239: (define_insn "sleu" ! 240: [(set (match_operand:DI 0 "register_operand" "=r") ! 241: (leu (cc0) (const_int 0)))] ! 242: "" ! 243: "* return cmp_set(\"u\", \"le\", operands[0]); ") ! 244: ! 245: (define_insn "slt" ! 246: [(set (match_operand:DI 0 "register_operand" "=r") ! 247: (lt (cc0) (const_int 0)))] ! 248: "" ! 249: "* return cmp_set(\"\", \"lt\", operands[0]); ") ! 250: ! 251: (define_insn "sltu" ! 252: [(set (match_operand:DI 0 "register_operand" "=r") ! 253: (ltu (cc0) (const_int 0)))] ! 254: "" ! 255: "* return cmp_set(\"u\", \"lt\", operands[0]); ") ! 256: ! 257: (define_insn "sge" ! 258: [(set (match_operand:DI 0 "register_operand" "=r") ! 259: (ge (cc0) (const_int 0)))] ! 260: "" ! 261: "* return cmp_set(\"\", \"ge\", operands[0]); ") ! 262: ! 263: (define_insn "sgeu" ! 264: [(set (match_operand:DI 0 "register_operand" "=r") ! 265: (geu (cc0) (const_int 0)))] ! 266: "" ! 267: "* return cmp_set(\"u\", \"ge\", operands[0]); ") ! 268: ! 269: (define_insn "sgt" ! 270: [(set (match_operand:DI 0 "register_operand" "=r") ! 271: (gt (cc0) (const_int 0)))] ! 272: "" ! 273: "* return cmp_set(\"\", \"gt\", operands[0]); ") ! 274: ! 275: (define_insn "sgtu" ! 276: [(set (match_operand:DI 0 "register_operand" "=r") ! 277: (gtu (cc0) (const_int 0)))] ! 278: "" ! 279: "* return cmp_set(\"u\", \"gt\", operands[0]); ") ! 280: ! 281: (define_insn "" ! 282: [(set (match_operand:SI 0 "register_operand" "=r") ! 283: (eq (match_operand:SI 1 "register_operand" "r") ! 284: (match_operand:SI 2 "general_operand" "m")))] ! 285: "" ! 286: "cmp.32\\t%0,%1,%2:eq") ! 287: ! 288: (define_insn "" ! 289: [(set (match_operand:SI 0 "register_operand" "=r") ! 290: (ne (match_operand:SI 1 "register_operand" "r") ! 291: (match_operand:SI 2 "general_operand" "m")))] ! 292: "" ! 293: "cmp.32\\t%0,%1,%2:ne") ! 294: ! 295: (define_insn "" ! 296: [(set (match_operand:SI 0 "register_operand" "=r") ! 297: (le (match_operand:SI 1 "register_operand" "r") ! 298: (match_operand:SI 2 "general_operand" "m")))] ! 299: "" ! 300: "cmp.32\\t%0,%1,%2:le") ! 301: ! 302: (define_insn "" ! 303: [(set (match_operand:SI 0 "register_operand" "=r") ! 304: (leu (match_operand:SI 1 "register_operand" "r") ! 305: (match_operand:SI 2 "general_operand" "m")))] ! 306: "" ! 307: "cmpu.32\\t%0,%1,%2:le") ! 308: ! 309: (define_insn "" ! 310: [(set (match_operand:SI 0 "register_operand" "=r") ! 311: (lt (match_operand:SI 1 "register_operand" "r") ! 312: (match_operand:SI 2 "general_operand" "m")))] ! 313: "" ! 314: "cmp.32\\t%0,%1,%2:lt") ! 315: ! 316: (define_insn "" ! 317: [(set (match_operand:SI 0 "register_operand" "=r") ! 318: (ltu (match_operand:SI 1 "register_operand" "r") ! 319: (match_operand:SI 2 "general_operand" "m")))] ! 320: "" ! 321: "cmpu.32\\t%0,%1,%2:lt") ! 322: ! 323: (define_insn "" ! 324: [(set (match_operand:SI 0 "register_operand" "=r") ! 325: (ge (match_operand:SI 1 "register_operand" "r") ! 326: (match_operand:SI 2 "general_operand" "m")))] ! 327: "" ! 328: "cmp.32\\t%0,%1,%2:ge") ! 329: ! 330: (define_insn "" ! 331: [(set (match_operand:SI 0 "register_operand" "=r") ! 332: (geu (match_operand:SI 1 "register_operand" "r") ! 333: (match_operand:SI 2 "general_operand" "m")))] ! 334: "" ! 335: "cmpu.32\\t%0,%1,%2:ge") ! 336: ! 337: (define_insn "" ! 338: [(set (match_operand:SI 0 "register_operand" "=r") ! 339: (gt (match_operand:SI 1 "register_operand" "r") ! 340: (match_operand:SI 2 "general_operand" "m")))] ! 341: "" ! 342: "cmp.32\\t%0,%1,%2:gt") ! 343: ! 344: (define_insn "" ! 345: [(set (match_operand:SI 0 "register_operand" "=r") ! 346: (gtu (match_operand:SI 1 "register_operand" "r") ! 347: (match_operand:SI 2 "general_operand" "m")))] ! 348: "" ! 349: "cmpu.32\\t%0,%1,%2:gt") ! 350: ! 351: (define_insn "" ! 352: [(set (match_operand:HI 0 "register_operand" "=r") ! 353: (eq (match_operand:HI 1 "register_operand" "r") ! 354: (match_operand:HI 2 "general_operand" "m")))] ! 355: "" ! 356: "cmp.16\\t%0,%1,%2:eq") ! 357: ! 358: (define_insn "" ! 359: [(set (match_operand:HI 0 "register_operand" "=r") ! 360: (ne (match_operand:HI 1 "register_operand" "r") ! 361: (match_operand:HI 2 "general_operand" "m")))] ! 362: "" ! 363: "cmp.16\\t%0,%1,%2:ne") ! 364: ! 365: (define_insn "" ! 366: [(set (match_operand:HI 0 "register_operand" "=r") ! 367: (le (match_operand:HI 1 "register_operand" "r") ! 368: (match_operand:HI 2 "general_operand" "m")))] ! 369: "" ! 370: "cmp.16\\t%0,%1,%2:le") ! 371: ! 372: (define_insn "" ! 373: [(set (match_operand:HI 0 "register_operand" "=r") ! 374: (leu (match_operand:HI 1 "register_operand" "r") ! 375: (match_operand:HI 2 "general_operand" "m")))] ! 376: "" ! 377: "cmpu.16\\t%0,%1,%2:le") ! 378: ! 379: (define_insn "" ! 380: [(set (match_operand:HI 0 "register_operand" "=r") ! 381: (lt (match_operand:HI 1 "register_operand" "r") ! 382: (match_operand:HI 2 "general_operand" "m")))] ! 383: "" ! 384: "cmp.16\\t%0,%1,%2:lt") ! 385: ! 386: (define_insn "" ! 387: [(set (match_operand:HI 0 "register_operand" "=r") ! 388: (ltu (match_operand:HI 1 "register_operand" "r") ! 389: (match_operand:HI 2 "general_operand" "m")))] ! 390: "" ! 391: "cmpu.16\\t%0,%1,%2:lt") ! 392: ! 393: (define_insn "" ! 394: [(set (match_operand:HI 0 "register_operand" "=r") ! 395: (ge (match_operand:HI 1 "register_operand" "r") ! 396: (match_operand:HI 2 "general_operand" "m")))] ! 397: "" ! 398: "cmp.16\\t%0,%1,%2:ge") ! 399: ! 400: (define_insn "" ! 401: [(set (match_operand:HI 0 "register_operand" "=r") ! 402: (geu (match_operand:HI 1 "register_operand" "r") ! 403: (match_operand:HI 2 "general_operand" "m")))] ! 404: "" ! 405: "cmpu.16\\t%0,%1,%2:ge") ! 406: ! 407: (define_insn "" ! 408: [(set (match_operand:HI 0 "register_operand" "=r") ! 409: (gt (match_operand:HI 1 "register_operand" "r") ! 410: (match_operand:HI 2 "general_operand" "m")))] ! 411: "" ! 412: "cmp.16\\t%0,%1,%2:gt") ! 413: ! 414: (define_insn "" ! 415: [(set (match_operand:HI 0 "register_operand" "=r") ! 416: (gtu (match_operand:HI 1 "register_operand" "r") ! 417: (match_operand:HI 2 "general_operand" "m")))] ! 418: "" ! 419: "cmpu.16\\t%0,%1,%2:gt") ! 420: ! 421: (define_insn "" ! 422: [(set (match_operand:QI 0 "register_operand" "=r") ! 423: (eq (match_operand:QI 1 "register_operand" "r") ! 424: (match_operand:QI 2 "general_operand" "m")))] ! 425: "" ! 426: "cmp.8\\t%0,%1,%2:eq") ! 427: ! 428: (define_insn "" ! 429: [(set (match_operand:QI 0 "register_operand" "=r") ! 430: (ne (match_operand:QI 1 "register_operand" "r") ! 431: (match_operand:QI 2 "general_operand" "m")))] ! 432: "" ! 433: "cmp.8\\t%0,%1,%2:ne") ! 434: ! 435: (define_insn "" ! 436: [(set (match_operand:QI 0 "register_operand" "=r") ! 437: (le (match_operand:QI 1 "register_operand" "r") ! 438: (match_operand:QI 2 "general_operand" "m")))] ! 439: "" ! 440: "cmp.8\\t%0,%1,%2:le") ! 441: ! 442: (define_insn "" ! 443: [(set (match_operand:QI 0 "register_operand" "=r") ! 444: (leu (match_operand:QI 1 "register_operand" "r") ! 445: (match_operand:QI 2 "general_operand" "m")))] ! 446: "" ! 447: "cmpu.8\\t%0,%1,%2:le") ! 448: ! 449: (define_insn "" ! 450: [(set (match_operand:QI 0 "register_operand" "=r") ! 451: (lt (match_operand:QI 1 "register_operand" "r") ! 452: (match_operand:QI 2 "general_operand" "m")))] ! 453: "" ! 454: "cmp.8\\t%0,%1,%2:lt") ! 455: ! 456: (define_insn "" ! 457: [(set (match_operand:QI 0 "register_operand" "=r") ! 458: (ltu (match_operand:QI 1 "register_operand" "r") ! 459: (match_operand:QI 2 "general_operand" "m")))] ! 460: "" ! 461: "cmpu.8\\t%0,%1,%2:lt") ! 462: ! 463: (define_insn "" ! 464: [(set (match_operand:QI 0 "register_operand" "=r") ! 465: (ge (match_operand:QI 1 "register_operand" "r") ! 466: (match_operand:QI 2 "general_operand" "m")))] ! 467: "" ! 468: "cmp.8\\t%0,%1,%2:ge") ! 469: ! 470: (define_insn "" ! 471: [(set (match_operand:QI 0 "register_operand" "=r") ! 472: (geu (match_operand:QI 1 "register_operand" "r") ! 473: (match_operand:QI 2 "general_operand" "m")))] ! 474: "" ! 475: "cmpu.8\\t%0,%1,%2:ge") ! 476: ! 477: (define_insn "" ! 478: [(set (match_operand:QI 0 "register_operand" "=r") ! 479: (gt (match_operand:QI 1 "register_operand" "r") ! 480: (match_operand:QI 2 "general_operand" "m")))] ! 481: "" ! 482: "cmp.8\\t%0,%1,%2:gt") ! 483: ! 484: (define_insn "" ! 485: [(set (match_operand:QI 0 "register_operand" "=r") ! 486: (gtu (match_operand:QI 1 "register_operand" "r") ! 487: (match_operand:QI 2 "general_operand" "m")))] ! 488: "" ! 489: "cmpu.8\\t%0,%1,%2:gt") ! 490: ! 491: ! 492: ! 493: (define_insn "movdf" [(set (match_operand:DF 0 "general_operand" "=r,m") ! 494: (match_operand:DF 1 "general_operand" "rm,r"))] ! 495: "" ! 496: "* ! 497: { ! 498: if (which_alternative == 0) ! 499: return \"ld.64\\t%0,%1\"; ! 500: return \"st.64\\t%1,%0\"; ! 501: }") ! 502: ! 503: (define_insn "movsf" ! 504: [(set (match_operand:SF 0 "general_operand" "=r,m") ! 505: (match_operand:SF 1 "general_operand" "rm,r"))] ! 506: "" ! 507: "* ! 508: { ! 509: if (which_alternative == 0) ! 510: return \"ld.32\\t%0,%1\"; ! 511: return \"st.32\\t%1,%0\"; ! 512: }") ! 513: ! 514: (define_insn "movdi" ! 515: [(set (match_operand:DI 0 "general_operand" "=r,m,rm") ! 516: (match_operand:DI 1 "general_operand" "g,r,I"))] ! 517: "" ! 518: "* ! 519: if (which_alternative == 0) ! 520: return \"ld.64\\t%0,%1\"; ! 521: else if (which_alternative == 1) ! 522: return \"st.64\\t%1,%0\"; ! 523: else ! 524: if (GET_CODE(operands[1])==CONST_INT) { ! 525: if (INTVAL(operands[1]) >= 0) ! 526: return \"sti.64\\t%c1,%0\"; ! 527: else ! 528: return \"stin.64\\t%n1,%0\"; ! 529: } ! 530: ") ! 531: ! 532: (define_insn "movsi" ! 533: [(set (match_operand:SI 0 "general_operand" "=r,m,r") ! 534: (match_operand:SI 1 "general_operand" "rm,rI,i"))] ! 535: "" ! 536: "* ! 537: if (which_alternative == 0) ! 538: return \"ld.32\\t%0,%1\"; ! 539: else if (which_alternative == 1) { ! 540: if (GET_CODE(operands[1])==CONST_INT) { ! 541: if (INTVAL(operands[1]) >= 0) ! 542: return \"sti.32\\t%c1,%0\"; ! 543: else ! 544: return \"stin.32\\t%n1,%0\"; ! 545: } ! 546: return \"st.32\\t%1,%0\"; ! 547: } else ! 548: return \"ld.64\\t%0,%1 ; I only want 32\"; ! 549: ") ! 550: ! 551: (define_insn "movhi" ! 552: [(set (match_operand:HI 0 "general_operand" "=r,m,r") ! 553: (match_operand:HI 1 "general_operand" "m,rI,ri"))] ! 554: "" ! 555: "* ! 556: { ! 557: if (which_alternative == 0) ! 558: return \"ld.16\\t%0,%1\"; ! 559: if (which_alternative == 2) ! 560: return \"ld.64\\t%0,%1\\t; I only want 16\"; ! 561: if (GET_CODE(operands[1])==CONST_INT) { ! 562: if (INTVAL(operands[1]) >= 0) ! 563: return \"sti.16\\t%c1,%0\"; ! 564: else ! 565: return \"stin.16\\t%n1,%0\"; ! 566: } ! 567: return \"st.16\\t%1,%0\"; ! 568: }") ! 569: ! 570: (define_insn "movqi" ! 571: [(set (match_operand:QI 0 "general_operand" "=r,m,r") ! 572: (match_operand:QI 1 "general_operand" "m,rI,ri"))] ! 573: "" ! 574: "* ! 575: { ! 576: if (which_alternative == 0) ! 577: return \"ld.8\\t%0,%1\"; ! 578: if (which_alternative == 2) ! 579: return \"ld.64\\t%0,%1\\t; I only want 8\"; ! 580: if (GET_CODE(operands[1])==CONST_INT) { ! 581: if (INTVAL(operands[1]) >= 0) ! 582: return \"sti.8\\t%c1,%0\"; ! 583: else ! 584: return \"stin.8\\t%n1,%0\"; ! 585: } ! 586: return \"st.8\\t%1,%0\"; ! 587: }") ! 588: ! 589: ;; Extension and truncation insns. ! 590: ;; Those for integer source operand ! 591: ;; are ordered widest source type first. ! 592: ! 593: (define_insn "truncdfsf2" ! 594: [(set (match_operand:SF 0 "register_operand" "=r") ! 595: (truncate:SF (match_operand:DF 1 "general_operand" "rm")))] ! 596: "" ! 597: "cvt.ds\\t%0,%1") ! 598: ! 599: (define_insn "truncdiqi2" ! 600: [(set (match_operand:QI 0 "general_operand" "=r,m,r") ! 601: (truncate:QI (match_operand:DI 1 "general_operand" "m,r,0")))] ! 602: "" ! 603: "* ! 604: { ! 605: if (which_alternative == 0) ! 606: return \"ld.8\\t%0,%1\"; ! 607: else if (which_alternative == 1) ! 608: return \"st.8\\t%1,%0\"; ! 609: return \"\"; ! 610: }") ! 611: ! 612: (define_insn "truncdihi2" ! 613: [(set (match_operand:HI 0 "general_operand" "=r,m,r") ! 614: (truncate:HI (match_operand:DI 1 "general_operand" "m,r,0")))] ! 615: "" ! 616: "* ! 617: { ! 618: if (which_alternative == 0) ! 619: return \"ld.16\\t%0,%1\"; ! 620: if (which_alternative == 1) ! 621: return \"st.16\\t%1,%0\"; ! 622: return \"\"; ! 623: }") ! 624: ! 625: (define_insn "truncdisi2" ! 626: [(set (match_operand:SI 0 "general_operand" "=r,m") ! 627: (truncate:SI (match_operand:DI 1 "general_operand" "rm,r")))] ! 628: "" ! 629: "* ! 630: { ! 631: if (which_alternative == 0) ! 632: return \"ld.32\\t%0,%1\"; ! 633: return \"st.32\\t%1,%0\"; ! 634: }") ! 635: ! 636: (define_insn "truncsiqi2" ! 637: [(set (match_operand:QI 0 "general_operand" "=r,m,r") ! 638: (truncate:QI (match_operand:SI 1 "general_operand" "m,r,0")))] ! 639: "" ! 640: "* ! 641: { ! 642: if (which_alternative == 0) ! 643: return \"ld.8\\t%0,%1\"; ! 644: if (which_alternative == 1) ! 645: return \"st.8\\t%1,%0\"; ! 646: return \"\"; ! 647: }") ! 648: ! 649: (define_insn "truncsihi2" ! 650: [(set (match_operand:HI 0 "general_operand" "=r,m,r") ! 651: (truncate:HI (match_operand:SI 1 "general_operand" "m,r,0")))] ! 652: "" ! 653: "* ! 654: { ! 655: if (which_alternative == 0) ! 656: return \"ld.16\\t%0,%1\"; ! 657: if (which_alternative == 1) ! 658: return \"st.16\\t%1,%0\"; ! 659: return \"\"; ! 660: }") ! 661: ! 662: (define_insn "trunchiqi2" ! 663: [(set (match_operand:QI 0 "general_operand" "=r,m,r") ! 664: (truncate:QI (match_operand:HI 1 "general_operand" "m,r,0")))] ! 665: "" ! 666: "* ! 667: { ! 668: if (which_alternative == 0) ! 669: return \"ld.8\\t%0,%1\"; ! 670: if (which_alternative == 1) ! 671: return \"st.8\\t%1,%0\"; ! 672: return \"\"; ! 673: }") ! 674: ! 675: (define_insn "extendsfdf2" ! 676: [(set (match_operand:DF 0 "register_operand" "=r") ! 677: (sign_extend:DF (match_operand:SF 1 "general_operand" "rm")))] ! 678: "" ! 679: "cvt.sd\\t%0,%1") ! 680: ! 681: (define_insn "extendsidi2" ! 682: [(set (match_operand:DI 0 "register_operand" "=r") ! 683: (sign_extend:DI (match_operand:SI 1 "general_operand" "rm")))] ! 684: "" ! 685: "ld.32\\t%0,%1") ! 686: ! 687: (define_insn "extendhisi2" ! 688: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 689: (sign_extend:SI (match_operand:HI 1 "general_operand" "m,r")))] ! 690: "" ! 691: "* ! 692: if (which_alternative==0) ! 693: return \"ld.16\\t%0,%1\"; ! 694: return \"extract\\t%0,%1:bit 48,16\"; ! 695: ") ! 696: ! 697: (define_insn "extendhidi2" ! 698: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 699: (sign_extend:DI (match_operand:HI 1 "general_operand" "m,r")))] ! 700: "" ! 701: "* ! 702: if (which_alternative==0) ! 703: return \"ld.16\\t%0,%1\"; ! 704: return \"extract\\t%0,%1:bit 48,16\"; ! 705: ") ! 706: ! 707: (define_insn "extendqihi2" ! 708: [(set (match_operand:HI 0 "register_operand" "=r,r") ! 709: (sign_extend:HI (match_operand:QI 1 "general_operand" "m,r")))] ! 710: "" ! 711: "* ! 712: if (which_alternative==0) ! 713: return \"ld.8\\t%0,%1\"; ! 714: return \"extract\\t%0,%1:bit 56,8\"; ! 715: ") ! 716: ! 717: (define_insn "extendqisi2" ! 718: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 719: (sign_extend:SI (match_operand:QI 1 "general_operand" "m,r")))] ! 720: "" ! 721: "* ! 722: if (which_alternative==0) ! 723: return \"ld.8\\t%0,%1\"; ! 724: return \"extract\\t%0,%1:bit 56,8\"; ! 725: ") ! 726: ! 727: (define_insn "extendqidi2" ! 728: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 729: (sign_extend:DI (match_operand:QI 1 "general_operand" "m,r")))] ! 730: "" ! 731: "* ! 732: if (which_alternative==0) ! 733: return \"ld.8\\t%0,%1\"; ! 734: return \"extract\\t%0,%1:bit 56,8\"; ! 735: ") ! 736: ! 737: (define_insn "zero_extendsidi2" ! 738: [(set (match_operand:DI 0 "register_operand" "=r") ! 739: (zero_extend:DI (match_operand:SI 1 "general_operand" "rm")))] ! 740: "" ! 741: "ldz.32\\t%0,%1") ! 742: ! 743: ! 744: (define_insn "zero_extendhisi2" ! 745: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 746: (zero_extend:SI (match_operand:HI 1 "general_operand" "m,r")))] ! 747: "" ! 748: "* ! 749: if (which_alternative==0) ! 750: return \"ldz.16\\t%0,%1\"; ! 751: return \"extractz\\t%0,%1:bit 48,16\"; ! 752: ") ! 753: ! 754: (define_insn "zero_extendhidi2" ! 755: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 756: (zero_extend:DI (match_operand:HI 1 "general_operand" "m,r")))] ! 757: "" ! 758: "* ! 759: if (which_alternative==0) ! 760: return \"ldz.16\\t%0,%1\"; ! 761: return \"extractz\\t%0,%1:bit 48,16\"; ! 762: ") ! 763: ! 764: (define_insn "zero_extendqihi2" ! 765: [(set (match_operand:HI 0 "register_operand" "=r,r") ! 766: (zero_extend:HI (match_operand:QI 1 "general_operand" "m,r")))] ! 767: "" ! 768: "* ! 769: if (which_alternative==0) ! 770: return \"ldz.8\\t%0,%1\"; ! 771: return \"extractz\\t%0,%1:bit 56,8\"; ! 772: ") ! 773: ! 774: (define_insn "zero_extendqisi2" ! 775: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 776: (zero_extend:SI (match_operand:QI 1 "general_operand" "m,r")))] ! 777: "" ! 778: "* ! 779: if (which_alternative==0) ! 780: return \"ldz.8\\t%0,%1\"; ! 781: return \"extractz\\t%0,%1:bit 56,8\"; ! 782: ") ! 783: ! 784: (define_insn "zero_extendqidi2" ! 785: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 786: (zero_extend:DI (match_operand:QI 1 "general_operand" "m,r")))] ! 787: "" ! 788: "* ! 789: if (which_alternative==0) ! 790: return \"ldz.8\\t%0,%1\"; ! 791: return \"extractz\\t%0,%1:bit 56,8\"; ! 792: ") ! 793: ! 794: ! 795: ! 796: (define_insn "lshldi3" ! 797: [(set (match_operand:DI 0 "register_operand" "=r") ! 798: (lshift:DI (match_operand:DI 1 "register_operand" "r") ! 799: (match_operand:SI 2 "general_operand" "rn")))] ! 800: "" ! 801: "sll\\t%0,%1,%2") ! 802: ! 803: (define_insn "ashrdi3" ! 804: [(set (match_operand:DI 0 "register_operand" "=r") ! 805: (ashiftrt:DI (match_operand:DI 1 "register_operand" "r") ! 806: (match_operand:SI 2 "general_operand" "rn")))] ! 807: "" ! 808: "sra\\t%0,%1,%2") ! 809: ! 810: (define_insn "lshrdi3" ! 811: [(set (match_operand:DI 0 "register_operand" "=r") ! 812: (lshiftrt:DI (match_operand:DI 1 "register_operand" "r") ! 813: (match_operand:SI 2 "general_operand" "rn")))] ! 814: "" ! 815: "srl\\t%0,%1,%2") ! 816: ! 817: (define_insn "ashldi3" ! 818: [(set (match_operand:DI 0 "register_operand" "=r") ! 819: (ashift:DI (match_operand:DI 1 "register_operand" "r") ! 820: (match_operand:SI 2 "general_operand" "rn")))] ! 821: "" ! 822: "sla\\t%0,%1,%2") ! 823: ! 824: (define_insn "anddi3" ! 825: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 826: (and:DI (match_operand:DI 1 "general_operand" "%0,r") ! 827: (match_operand:DI 2 "general_operand" "g,g")))] ! 828: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 829: "* ! 830: if (which_alternative == 0) ! 831: return \"and\\t%0,%2\"; ! 832: return \"and\\t%0,%1,%2\"; ! 833: ") ! 834: ! 835: (define_insn "iordi3" ! 836: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 837: (ior:DI (match_operand:DI 1 "general_operand" "%0,r") ! 838: (match_operand:DI 2 "general_operand" "g,g")))] ! 839: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 840: "* ! 841: if (which_alternative == 0) ! 842: return \"or\\t%0,%2\"; ! 843: return \"or\\t%0,%1,%2\"; ! 844: ") ! 845: ! 846: (define_insn "xordi3" ! 847: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 848: (xor:DI (match_operand:DI 1 "general_operand" "%0,r") ! 849: (match_operand:DI 2 "general_operand" "g,g")))] ! 850: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 851: "* ! 852: if (which_alternative == 0) ! 853: return \"xor\\t%0,%2\"; ! 854: return \"xor\\t%0,%1,%2\"; ! 855: ") ! 856: ! 857: (define_insn "one_cmpldi2" ! 858: [(set (match_operand:DI 0 "register_operand" "=r") ! 859: (not:DI (match_operand:DI 1 "general_operand" "rm")))] ! 860: "" ! 861: "not\\t%0,%1") ! 862: ! 863: ;; gcc 2.1 does not widen ~si into ~di. ! 864: (define_insn "one_cmplsi2" ! 865: [(set (match_operand:SI 0 "register_operand" "=r") ! 866: (not:DI (match_operand:SI 1 "register_operand" "r")))] ! 867: "" ! 868: "not\\t%0,%1") ! 869: ! 870: (define_insn "negdi2" ! 871: [(set (match_operand:DI 0 "register_operand" "=r") ! 872: (neg:DI (match_operand:DI 1 "general_operand" "rm")))] ! 873: "" ! 874: "neg.64\\t%0,%1") ! 875: ! 876: (define_insn "negsi2" ! 877: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 878: (neg:SI (match_operand:SI 1 "general_operand" "m,r")))] ! 879: "" ! 880: "* ! 881: if (which_alternative == 0) ! 882: return \"neg.32\\t%0,%1\"; ! 883: return \"neg.64\\t%0,%1 ; I only want 32\"; ! 884: ") ! 885: ! 886: (define_insn "neghi2" ! 887: [(set (match_operand:HI 0 "register_operand" "=r,r") ! 888: (neg:HI (match_operand:HI 1 "general_operand" "m,r")))] ! 889: "" ! 890: "* ! 891: if (which_alternative == 0) ! 892: return \"neg.16\\t%0,%1\"; ! 893: return \"neg.64\\t%0,%1 ; I only want 16\"; ! 894: ") ! 895: ! 896: (define_insn "adddf3" ! 897: [(set (match_operand:DF 0 "register_operand" "=r") ! 898: (plus:DF (match_operand:DF 1 "general_operand" "%0") ! 899: (match_operand:DF 2 "general_operand" "rm")))] ! 900: "" ! 901: "fadd.64\\t%0,%2") ! 902: ! 903: (define_insn "addsf3" ! 904: [(set (match_operand:SF 0 "register_operand" "=r") ! 905: (plus:SF (match_operand:SF 1 "general_operand" "%0") ! 906: (match_operand:SF 2 "general_operand" "rm")))] ! 907: "" ! 908: "fadd.32\\t%0,%2") ! 909: ! 910: ;; There is also an addi.64 4,.r0'' optimization ! 911: (define_insn "adddi3" ! 912: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 913: (plus:DI (match_operand:DI 1 "general_operand" "%0,r") ! 914: (match_operand:DI 2 "general_operand" "g,g")))] ! 915: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 916: "* ! 917: if (which_alternative == 0) ! 918: return \"add.64\\t%0,%2\"; ! 919: return \"add.64\\t%0,%1,%2\"; ! 920: ") ! 921: ! 922: (define_insn "addsi3" ! 923: [(set (match_operand:SI 0 "register_operand" "=r,r,r") ! 924: (plus:SI (match_operand:SI 1 "general_operand" "%0,r,0") ! 925: (match_operand:SI 2 "general_operand" "m,m,g")))] ! 926: "1 /*which_alternative != 1 || check356(operands[2])*/" ! 927: "* ! 928: if (which_alternative == 0) ! 929: return \"add.32\\t%0,%2\"; ! 930: if (which_alternative == 1) ! 931: return \"add.32\\t%0,%1,%2\"; ! 932: return \"add.64\\t%0,%2 ; I only want 32\"; ! 933: ") ! 934: ! 935: (define_insn "addhi3" ! 936: [(set (match_operand:HI 0 "register_operand" "=r,r,r") ! 937: (plus:HI (match_operand:HI 1 "general_operand" "%0,r,0") ! 938: (match_operand:HI 2 "general_operand" "m,m,g")))] ! 939: "1 /*which_alternative != 1 || check356(operands[2])*/" ! 940: "* ! 941: if (which_alternative == 0) ! 942: return \"add.16\\t%0,%2\"; ! 943: if (which_alternative == 1) ! 944: return \"add.16\\t%0,%1,%2\"; ! 945: return \"add.64\\t%0,%2 ; I only want 16\"; ! 946: ") ! 947: ! 948: (define_insn "subdf3" ! 949: [(set (match_operand:DF 0 "register_operand" "=r") ! 950: (minus:DF (match_operand:DF 1 "general_operand" "0") ! 951: (match_operand:DF 2 "general_operand" "rm")))] ! 952: "" ! 953: "fsub.64\\t%0,%2") ! 954: ! 955: (define_insn "subsf3" ! 956: [(set (match_operand:SF 0 "register_operand" "=r") ! 957: (minus:SF (match_operand:SF 1 "general_operand" "0") ! 958: (match_operand:SF 2 "general_operand" "rm")))] ! 959: "" ! 960: "fsub.32\\t%0,%2") ! 961: ! 962: (define_insn "subdi3" ! 963: [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! 964: (minus:DI (match_operand:DI 1 "general_operand" "0,g,r") ! 965: (match_operand:DI 2 "general_operand" "g,r,g")))] ! 966: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 967: "* ! 968: if (which_alternative == 0) ! 969: return \"sub.64\\t%0,%2\"; ! 970: else if (which_alternative == 1) ! 971: return \"subr.64\\t%0,%2,%1\"; ! 972: else ! 973: return \"sub.64\\t%0,%1,%2\"; ! 974: ") ! 975: ! 976: (define_insn "subsi3" ! 977: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") ! 978: (minus:SI (match_operand:SI 1 "general_operand" "0,m,r,0") ! 979: (match_operand:SI 2 "general_operand" "m,r,m,g")))] ! 980: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 981: "* ! 982: if (which_alternative == 0) ! 983: return \"sub.32\\t%0,%2\"; ! 984: else if (which_alternative == 1) ! 985: return \"subr.32\\t%0,%2,%1\"; ! 986: else if (which_alternative == 2) ! 987: return \"sub.32\\t%0,%1,%2\"; ! 988: else ! 989: return \"sub.64\\t%0,%2 ; I only want 32\"; ! 990: ") ! 991: ! 992: (define_insn "subhi3" ! 993: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r") ! 994: (minus:HI (match_operand:HI 1 "general_operand" "0,m,r,0") ! 995: (match_operand:HI 2 "general_operand" "m,r,m,g")))] ! 996: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 997: "* ! 998: if (which_alternative == 0) ! 999: return \"sub.16\\t%0,%2\"; ! 1000: else if (which_alternative == 1) ! 1001: return \"subr.16\\t%0,%2,%1\"; ! 1002: else if (which_alternative == 2) ! 1003: return \"sub.16\\t%0,%1,%2\"; ! 1004: else ! 1005: return \"sub.64\\t%0,%2 ; I only want 16\"; ! 1006: ") ! 1007: ! 1008: (define_insn "muldf3" ! 1009: [(set (match_operand:DF 0 "register_operand" "=r") ! 1010: (mult:DF (match_operand:DF 1 "general_operand" "%0") ! 1011: (match_operand:DF 2 "general_operand" "rm")))] ! 1012: "" ! 1013: "fmul.64\\t%0,%2") ! 1014: ! 1015: (define_insn "mulsf3" ! 1016: [(set (match_operand:SF 0 "register_operand" "=r") ! 1017: (mult:SF (match_operand:SF 1 "general_operand" "%0") ! 1018: (match_operand:SF 2 "general_operand" "rm")))] ! 1019: "" ! 1020: "fmul.32\\t%0,%2") ! 1021: ! 1022: (define_insn "muldi3" ! 1023: [(set (match_operand:DI 0 "register_operand" "=r,r") ! 1024: (mult:DI (match_operand:DI 1 "general_operand" "%0,r") ! 1025: (match_operand:DI 2 "general_operand" "g,g")))] ! 1026: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 1027: "* ! 1028: if (which_alternative == 0) ! 1029: return \"mul.64\\t%0,%2\"; ! 1030: return \"mul.64\\t%0,%1,%2\"; ! 1031: ") ! 1032: ! 1033: (define_insn "mulsi3" ! 1034: [(set (match_operand:SI 0 "register_operand" "=r,r,r") ! 1035: (mult:SI (match_operand:SI 1 "general_operand" "%0,r,0") ! 1036: (match_operand:SI 2 "general_operand" "m,m,g")))] ! 1037: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 1038: "* ! 1039: if (which_alternative == 0) ! 1040: return \"mul.32\\t%0,%2\"; ! 1041: else if (which_alternative == 1) ! 1042: return \"mul.32\\t%0,%1,%2\"; ! 1043: else ! 1044: return \"mul.64\\t%0,%2 ; I only want 32\"; ! 1045: ") ! 1046: ! 1047: (define_insn "mulhi3" ! 1048: [(set (match_operand:HI 0 "register_operand" "=r,r,r") ! 1049: (mult:HI (match_operand:HI 1 "general_operand" "%0,r,0") ! 1050: (match_operand:HI 2 "general_operand" "m,m,g")))] ! 1051: "1 /*which_alternative == 0 || check356(operands[2])*/" ! 1052: "* ! 1053: if (which_alternative == 0) ! 1054: return \"mul.16\\t%0,%2\"; ! 1055: else if (which_alternative == 1) ! 1056: return \"mul.16\\t%0,%1,%2\"; ! 1057: else ! 1058: return \"mul.64\\t%0,%2 ; I only want 16\"; ! 1059: ") ! 1060: ! 1061: (define_insn "divdf3" ! 1062: [(set (match_operand:DF 0 "register_operand" "=r") ! 1063: (div:DF (match_operand:DF 1 "general_operand" "0") ! 1064: (match_operand:DF 2 "general_operand" "rm")))] ! 1065: "" ! 1066: "fdiv.64\\t%0,%2") ! 1067: ! 1068: (define_insn "divsf3" ! 1069: [(set (match_operand:SF 0 "register_operand" "=r") ! 1070: (div:SF (match_operand:SF 1 "general_operand" "0") ! 1071: (match_operand:SF 2 "general_operand" "rm")))] ! 1072: "" ! 1073: "fdiv.32\\t%0,%2") ! 1074: ! 1075: (define_insn "divdi3" ! 1076: [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! 1077: (div:DI (match_operand:DI 1 "general_operand" "0,g,r") ! 1078: (match_operand:DI 2 "general_operand" "g,r,g")))] ! 1079: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1080: "* ! 1081: if (which_alternative == 0) ! 1082: return \"div.64\\t%0,%2\"; ! 1083: else if (which_alternative == 1) ! 1084: return \"divr.64\\t%0,%2,%1\"; ! 1085: else ! 1086: return \"div.64\\t%0,%1,%2\"; ! 1087: ") ! 1088: ! 1089: (define_insn "divsi3" ! 1090: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") ! 1091: (div:SI (match_operand:SI 1 "general_operand" "0,m,r,0") ! 1092: (match_operand:SI 2 "general_operand" "m,r,m,g")))] ! 1093: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1094: "* ! 1095: /* We don't ignore high bits. */ ! 1096: if (0) { ! 1097: if (which_alternative == 0) ! 1098: return \"div.32\\t%0,%2\"; ! 1099: else if (which_alternative == 1) ! 1100: return \"divr.32\\t%0,%2,%1\"; ! 1101: else if (which_alternative == 2) ! 1102: return \"div.32\\t%0,%1,%2\"; ! 1103: else ! 1104: return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\"; ! 1105: } else { ! 1106: if (which_alternative == 0) ! 1107: return \"ld.32\\t%0,%0\;div.32\\t%0,%2\"; ! 1108: else if (which_alternative == 1) ! 1109: return \"ld.32\\t%2,%2\;divr.32\\t%0,%2,%1\"; ! 1110: else if (which_alternative == 2) ! 1111: return \"ld.32\\t%1,%1\;div.32\\t%0,%1,%2\"; ! 1112: else ! 1113: return \"ld.32\\t%0,%0\;div.64\\t%0,%2 ; I only want 32\"; ! 1114: } ! 1115: ") ! 1116: ! 1117: (define_insn "divhi3" ! 1118: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r") ! 1119: (div:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0") ! 1120: (match_operand:HI 2 "general_operand" "m,r,m,r,i")))] ! 1121: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1122: "* ! 1123: if (which_alternative == 0) ! 1124: return \"extract\\t%0,%0:bit 48,16\;div.16\\t%0,%2\"; ! 1125: else if (which_alternative == 1) ! 1126: return \"extract\\t%2,%2:bit 48,16\;divr.16\\t%0,%2,%1\"; ! 1127: else if (which_alternative == 2) ! 1128: return \"extract\\t%1,%1:bit 48,16\;div.16\\t%0,%1,%2\"; ! 1129: else if (which_alternative == 3) ! 1130: return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;div.64\\t%0,%2 ; I only want 16\"; ! 1131: else ! 1132: return \"extract\\t%0,%0:bit 48,16\;div.64\\t%0,%2 ; I only want 16\"; ! 1133: ") ! 1134: ! 1135: (define_insn "modhi3" ! 1136: [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r") ! 1137: (mod:HI (match_operand:HI 1 "general_operand" "0,m,r,0,0") ! 1138: (match_operand:HI 2 "general_operand" "m,r,m,r,i")))] ! 1139: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1140: "* ! 1141: if (which_alternative == 0) ! 1142: return \"extract\\t%0,%0:bit 48,16\;rem.16\\t%0,%2\"; ! 1143: else if (which_alternative == 1) ! 1144: return \"extract\\t%2,%2:bit 48,16\;remr.16\\t%0,%2,%1\"; ! 1145: else if (which_alternative == 2) ! 1146: return \"extract\\t%1,%1:bit 48,16\;rem.16\\t%0,%1,%2\"; ! 1147: else if (which_alternative == 3) ! 1148: return \"extract\\t%0,%0:bit 48,16\;extract\\t%2,%2:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\"; ! 1149: else ! 1150: return \"extract\\t%0,%0:bit 48,16\;rem.64\\t%0,%2 ; I only want 16\"; ! 1151: ") ! 1152: ! 1153: (define_insn "moddi3" ! 1154: [(set (match_operand:DI 0 "register_operand" "=r,r,r") ! 1155: (mod:DI (match_operand:DI 1 "general_operand" "0,g,r") ! 1156: (match_operand:DI 2 "general_operand" "g,r,g")))] ! 1157: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1158: "* ! 1159: if (which_alternative == 0) ! 1160: return \"rem.64\\t%0,%2\"; ! 1161: else if (which_alternative == 1) ! 1162: return \"remr.64\\t%0,%2,%1\"; ! 1163: else ! 1164: return \"rem.64\\t%0,%1,%2\"; ! 1165: ") ! 1166: ! 1167: (define_insn "modsi3" ! 1168: [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") ! 1169: (mod:SI (match_operand:SI 1 "general_operand" "0,m,r,0") ! 1170: (match_operand:SI 2 "general_operand" "m,r,m,g")))] ! 1171: "1 /*which_alternative == 0 || check356(operands[which_alternative])*/" ! 1172: "* ! 1173: /* There is a micro code bug with the below... */ ! 1174: if (0) { ! 1175: if (which_alternative == 0) ! 1176: return \"rem.32\\t%0,%2\"; ! 1177: else if (which_alternative == 1) ! 1178: return \"remr.32\\t%0,%2,%1\"; ! 1179: else if (which_alternative == 2) ! 1180: return \"rem.32\\t%0,%1,%2\"; ! 1181: else ! 1182: return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\"; ! 1183: } else { ! 1184: if (which_alternative == 0) ! 1185: return \"ld.32\\t%0,%0\;rem.32\\t%0,%2\"; ! 1186: else if (which_alternative == 1) ! 1187: return \"ld.32\\t%2,%2\;remr.32\\t%0,%2,%1\"; ! 1188: else if (which_alternative == 2) ! 1189: return \"ld.32\\t%1,%1\;rem.32\\t%0,%1,%2\"; ! 1190: else ! 1191: return \"ld.32\\t%0,%0\;rem.64\\t%0,%2 ; I only want 32\"; ! 1192: } ! 1193: ") ! 1194: ! 1195: ! 1196: (define_insn "jump" ! 1197: [(set (pc) ! 1198: (label_ref (match_operand 0 "" "")))] ! 1199: "" ! 1200: "jmp\\t%l0") ! 1201: ! 1202: (define_insn "indirect_jump" ! 1203: [(set (pc) (match_operand:SI 0 "register_operand" "r"))] ! 1204: "" ! 1205: ;; Maybe %l0 is better, maybe we can relax register only. ! 1206: "verify this before use ld.32\\t.r0,%0\;br.reg\\t.r0") ! 1207: ! 1208: (define_insn "beq" ! 1209: [(set (pc) ! 1210: (if_then_else (eq (cc0) ! 1211: (const_int 0)) ! 1212: (label_ref (match_operand 0 "" "")) ! 1213: (pc)))] ! 1214: "" ! 1215: "* return cmp_jmp(\"\", 2, operands[0]); ") ! 1216: ! 1217: (define_insn "bne" ! 1218: [(set (pc) ! 1219: (if_then_else (ne (cc0) ! 1220: (const_int 0)) ! 1221: (label_ref (match_operand 0 "" "")) ! 1222: (pc)))] ! 1223: "" ! 1224: "* return cmp_jmp(\"\", 8, operands[0]); ") ! 1225: ! 1226: (define_insn "bgt" ! 1227: [(set (pc) ! 1228: (if_then_else (gt (cc0) ! 1229: (const_int 0)) ! 1230: (label_ref (match_operand 0 "" "")) ! 1231: (pc)))] ! 1232: "" ! 1233: "* return cmp_jmp(\"\", 0, operands[0]); ") ! 1234: ! 1235: (define_insn "bgtu" ! 1236: [(set (pc) ! 1237: (if_then_else (gtu (cc0) ! 1238: (const_int 0)) ! 1239: (label_ref (match_operand 0 "" "")) ! 1240: (pc)))] ! 1241: "" ! 1242: "* return cmp_jmp(\"u\", 0, operands[0]); ") ! 1243: ! 1244: (define_insn "blt" ! 1245: [(set (pc) ! 1246: (if_then_else (lt (cc0) ! 1247: (const_int 0)) ! 1248: (label_ref (match_operand 0 "" "")) ! 1249: (pc)))] ! 1250: "" ! 1251: "* return cmp_jmp(\"\", 6, operands[0]); ") ! 1252: ! 1253: (define_insn "bltu" ! 1254: [(set (pc) ! 1255: (if_then_else (ltu (cc0) ! 1256: (const_int 0)) ! 1257: (label_ref (match_operand 0 "" "")) ! 1258: (pc)))] ! 1259: "" ! 1260: "* return cmp_jmp(\"u\", 6, operands[0]); ") ! 1261: ! 1262: (define_insn "bge" ! 1263: [(set (pc) ! 1264: (if_then_else (ge (cc0) ! 1265: (const_int 0)) ! 1266: (label_ref (match_operand 0 "" "")) ! 1267: (pc)))] ! 1268: "" ! 1269: "* return cmp_jmp(\"\", 4, operands[0]); ") ! 1270: ! 1271: (define_insn "bgeu" ! 1272: [(set (pc) ! 1273: (if_then_else (geu (cc0) ! 1274: (const_int 0)) ! 1275: (label_ref (match_operand 0 "" "")) ! 1276: (pc)))] ! 1277: "" ! 1278: "* return cmp_jmp(\"u\", 4, operands[0]); ") ! 1279: ! 1280: (define_insn "ble" ! 1281: [(set (pc) ! 1282: (if_then_else (le (cc0) ! 1283: (const_int 0)) ! 1284: (label_ref (match_operand 0 "" "")) ! 1285: (pc)))] ! 1286: "" ! 1287: "* return cmp_jmp(\"\", 10, operands[0]); ") ! 1288: ! 1289: (define_insn "bleu" ! 1290: [(set (pc) ! 1291: (if_then_else (leu (cc0) ! 1292: (const_int 0)) ! 1293: (label_ref (match_operand 0 "" "")) ! 1294: (pc)))] ! 1295: "" ! 1296: "* return cmp_jmp(\"u\", 10, operands[0]); ") ! 1297: ! 1298: (define_insn "" ! 1299: [(set (pc) ! 1300: (if_then_else (eq (cc0) ! 1301: (const_int 0)) ! 1302: (pc) ! 1303: (label_ref (match_operand 0 "" ""))))] ! 1304: "" ! 1305: "* return cmp_jmp(\"\", 8, operands[0]); ") ! 1306: ! 1307: (define_insn "" ! 1308: [(set (pc) ! 1309: (if_then_else (ne (cc0) ! 1310: (const_int 0)) ! 1311: (pc) ! 1312: (label_ref (match_operand 0 "" ""))))] ! 1313: "" ! 1314: "* return cmp_jmp(\"\", 2, operands[0]); ") ! 1315: ! 1316: (define_insn "" ! 1317: [(set (pc) ! 1318: (if_then_else (gt (cc0) ! 1319: (const_int 0)) ! 1320: (pc) ! 1321: (label_ref (match_operand 0 "" ""))))] ! 1322: "" ! 1323: "* return cmp_jmp(\"\", 10, operands[0]); ") ! 1324: ! 1325: (define_insn "" ! 1326: [(set (pc) ! 1327: (if_then_else (gtu (cc0) ! 1328: (const_int 0)) ! 1329: (pc) ! 1330: (label_ref (match_operand 0 "" ""))))] ! 1331: "" ! 1332: "* return cmp_jmp(\"u\", 10, operands[0]); ") ! 1333: ! 1334: (define_insn "" ! 1335: [(set (pc) ! 1336: (if_then_else (lt (cc0) ! 1337: (const_int 0)) ! 1338: (pc) ! 1339: (label_ref (match_operand 0 "" ""))))] ! 1340: "" ! 1341: "* return cmp_jmp(\"\", 4, operands[0]); ") ! 1342: ! 1343: (define_insn "" ! 1344: [(set (pc) ! 1345: (if_then_else (ltu (cc0) ! 1346: (const_int 0)) ! 1347: (pc) ! 1348: (label_ref (match_operand 0 "" ""))))] ! 1349: "" ! 1350: "* return cmp_jmp(\"u\", 4, operands[0]); ") ! 1351: ! 1352: (define_insn "" ! 1353: [(set (pc) ! 1354: (if_then_else (ge (cc0) ! 1355: (const_int 0)) ! 1356: (pc) ! 1357: (label_ref (match_operand 0 "" ""))))] ! 1358: "" ! 1359: "* return cmp_jmp(\"\", 6, operands[0]); ") ! 1360: ! 1361: (define_insn "" ! 1362: [(set (pc) ! 1363: (if_then_else (geu (cc0) ! 1364: (const_int 0)) ! 1365: (pc) ! 1366: (label_ref (match_operand 0 "" ""))))] ! 1367: "" ! 1368: "* return cmp_jmp(\"u\", 6, operands[0]); ") ! 1369: ! 1370: (define_insn "" ! 1371: [(set (pc) ! 1372: (if_then_else (le (cc0) ! 1373: (const_int 0)) ! 1374: (pc) ! 1375: (label_ref (match_operand 0 "" ""))))] ! 1376: "" ! 1377: "* return cmp_jmp(\"\", 0, operands[0]); ") ! 1378: ! 1379: (define_insn "" ! 1380: [(set (pc) ! 1381: (if_then_else (leu (cc0) ! 1382: (const_int 0)) ! 1383: (pc) ! 1384: (label_ref (match_operand 0 "" ""))))] ! 1385: "" ! 1386: "* return cmp_jmp(\"u\", 0, operands[0]); ") ! 1387: ! 1388: ;; Note that operand 1 is total size of args, in bytes, ! 1389: ;; and what the call insn wants is the number of words. ! 1390: (define_insn "call" ! 1391: [(call (match_operand:QI 0 "general_operand" "m") ! 1392: (match_operand:QI 1 "general_operand" "g"))] ! 1393: "" ! 1394: "* ! 1395: if (GET_CODE (operands[0]) == MEM && GET_CODE (XEXP (operands[0], 0)) == REG) ! 1396: if (REGNO (XEXP (operands[0], 0)) != 0) ! 1397: return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\"; ! 1398: else ! 1399: return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\"; ! 1400: else ! 1401: return \"add.64\\t.sp,=-4\;call\\t%0\;add.64\\t.sp,=4\;add.64\\t.sp,%1\"; ! 1402: ") ! 1403: ! 1404: (define_insn "call_value" ! 1405: [(set (match_operand 0 "" "g") ! 1406: (call (match_operand:QI 1 "general_operand" "m") ! 1407: (match_operand:QI 2 "general_operand" "g")))] ! 1408: "" ! 1409: "* ! 1410: if (GET_CODE (operands[1]) == MEM && GET_CODE (XEXP (operands[1], 0)) == REG) ! 1411: if (REGNO (XEXP (operands[1], 0)) != 0) ! 1412: return \"add.64\\t.sp,=-4\;ld.64\\t.r0,=.+11\;st.32\\t.r0,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\"; ! 1413: else ! 1414: return \"add.64\\t.sp,=-4\;ld.64\\t.r1,=.+11\;st.32\\t.r1,[.sp]\;br.reg\\t%r1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\"; ! 1415: else ! 1416: return \"add.64\\t.sp,=-4\;call\\t%1\;add.64\\t.sp,=4\;add.64\\t.sp,%2\"; ! 1417: ") ! 1418: ! 1419: (define_insn "tablejump" ! 1420: [(set (pc) (match_operand:SI 0 "register_operand" "r")) ! 1421: (use (label_ref (match_operand 1 "" "")))] ! 1422: "" ! 1423: "br.reg\\t%0") ! 1424: ! 1425: (define_insn "nop" ! 1426: [(const_int 0)] ! 1427: "" ! 1428: "nop")
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.