|
|
1.1 ! root 1: ;;- Machine description for the Motorola 88000 for GNU C compiler ! 2: ;; Copyright (C) 1988 Free Software Foundation, Inc. ! 3: ;; Contributed by Michael Tiemann ([email protected]) ! 4: ! 5: ;; This file is part of GNU CC. ! 6: ! 7: ;; GNU CC is free software; you can redistribute it and/or modify ! 8: ;; it under the terms of the GNU General Public License as published by ! 9: ;; the Free Software Foundation; either version 1, or (at your option) ! 10: ;; any later version. ! 11: ! 12: ;; GNU CC is distributed in the hope that it will be useful, ! 13: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 15: ;; GNU General Public License for more details. ! 16: ! 17: ;; You should have received a copy of the GNU General Public License ! 18: ;; along with GNU CC; see the file COPYING. If not, write to ! 19: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! 20: ! 21: ! 22: ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al. ! 23: ! 24: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code ! 25: ;;- updates for most instructions. ! 26: ! 27: ;;- Operand classes for the register allocator: ! 28: ! 29: ;; Compare instructions. ! 30: ;; This pattern is used for generating an "insn" ! 31: ;; which does just a compare and sets a (fictitious) condition code. ! 32: ! 33: ;; The actual the m88000 insns are compare-and-conditional-jump. ! 34: ;; The define_peephole's below recognize the combinations of ! 35: ;; compares and jumps, and output each pair as a single assembler insn. ! 36: ! 37: ;; This controls RTL generation and register allocation. ! 38: (define_insn "cmpsi" ! 39: [(set (cc0) ! 40: (compare (match_operand:SI 0 "arith_operand" "rI") ! 41: (match_operand:SI 1 "arith_operand" "rI")))] ! 42: "" ! 43: "* ! 44: { ! 45: if (GET_CODE (operands[0]) == CONST_INT) ! 46: { ! 47: cc_status.flags |= CC_REVERSED; ! 48: return \"cmp r25,%1,%0\"; ! 49: } ! 50: return \"cmp r25,%0,%1\"; ! 51: }") ! 52: ! 53: (define_insn "cmpdf" ! 54: [(set (cc0) ! 55: (compare (match_operand:DF 0 "nonmemory_operand" "rG") ! 56: (match_operand:DF 1 "nonmemory_operand" "rG")))] ! 57: "" ! 58: "* ! 59: { ! 60: if (GET_CODE (operands[0]) == CONST_DOUBLE) ! 61: { ! 62: cc_status.flags |= CC_REVERSED | CC_IN_FCCR; ! 63: return \"fcmp.sdd r25,%1,%0\"; ! 64: } ! 65: cc_status.flags |= CC_IN_FCCR; ! 66: return \"fcmp.sdd r25,%0,%1\"; ! 67: }") ! 68: ! 69: (define_insn "cmpsf" ! 70: [(set (cc0) ! 71: (compare (match_operand:SF 0 "nonmemory_operand" "rG") ! 72: (match_operand:SF 1 "nonmemory_operand" "rG")))] ! 73: "" ! 74: "* ! 75: { ! 76: if (GET_CODE (operands[0]) == CONST_DOUBLE) ! 77: { ! 78: cc_status.flags |= CC_REVERSED | CC_IN_FCCR; ! 79: return \"fcmp.sss r25,%1,%0\"; ! 80: } ! 81: cc_status.flags |= CC_IN_FCCR; ! 82: return \"fcmp.sss r25,%0,%1\"; ! 83: }") ! 84: ;; We have to have this because cse can optimize the previous pattern ! 85: ;; into this one. ! 86: ! 87: (define_insn "tstsi" ! 88: [(set (cc0) ! 89: (match_operand:SI 0 "register_operand" "r"))] ! 90: "" ! 91: "cmp r25,%0,0") ! 92: ! 93: (define_insn "tstdf" ! 94: [(set (cc0) ! 95: (match_operand:DF 0 "register_operand" "r"))] ! 96: "" ! 97: "* ! 98: { ! 99: cc_status.flags |= CC_IN_FCCR; ! 100: return \"fcmp.sds r25,%0,r0\"; ! 101: }") ! 102: ! 103: (define_insn "tstsf" ! 104: [(set (cc0) ! 105: (match_operand:SF 0 "register_operand" "r"))] ! 106: "" ! 107: "* ! 108: { ! 109: cc_status.flags |= CC_IN_FCCR; ! 110: return \"fcmp.sss r25,%0,r0\"; ! 111: }") ! 112: ! 113: ;; These control RTL generation for conditional jump insns ! 114: ;; and match them for register allocation. ! 115: ! 116: (define_insn "beq" ! 117: [(set (pc) ! 118: (if_then_else (eq (cc0) ! 119: (const_int 0)) ! 120: (label_ref (match_operand 0 "" "")) ! 121: (pc)))] ! 122: "" ! 123: "bb1 eq,r25,%l0") ! 124: ! 125: (define_peephole ! 126: [(set (cc0) ! 127: (match_operand:SI 0 "register_operand" "r")) ! 128: (set (pc) ! 129: (if_then_else (eq (cc0) ! 130: (const_int 0)) ! 131: (label_ref (match_operand 1 "" "")) ! 132: (pc)))] ! 133: "" ! 134: "* ! 135: { ! 136: CC_STATUS_INIT; ! 137: return \"bcnd eq0,%0,%l1\"; ! 138: }") ! 139: ! 140: (define_insn "bne" ! 141: [(set (pc) ! 142: (if_then_else (ne (cc0) ! 143: (const_int 0)) ! 144: (label_ref (match_operand 0 "" "")) ! 145: (pc)))] ! 146: "" ! 147: "bb1 ne,r25,%l0") ! 148: ! 149: (define_peephole ! 150: [(set (cc0) ! 151: (match_operand:SI 0 "register_operand" "r")) ! 152: (set (pc) ! 153: (if_then_else (ne (cc0) ! 154: (const_int 0)) ! 155: (label_ref (match_operand 1 "" "")) ! 156: (pc)))] ! 157: "" ! 158: "* ! 159: { ! 160: CC_STATUS_INIT; ! 161: return \"bcnd ne0,%0,%l1\"; ! 162: }") ! 163: ! 164: (define_insn "bgt" ! 165: [(set (pc) ! 166: (if_then_else (gt (cc0) ! 167: (const_int 0)) ! 168: (label_ref (match_operand 0 "" "")) ! 169: (pc)))] ! 170: "" ! 171: "bb1 gt,r25,%l0") ! 172: ! 173: (define_insn "bgtu" ! 174: [(set (pc) ! 175: (if_then_else (gtu (cc0) ! 176: (const_int 0)) ! 177: (label_ref (match_operand 0 "" "")) ! 178: (pc)))] ! 179: "" ! 180: "bb1 hi,r25,%l0") ! 181: ! 182: (define_insn "blt" ! 183: [(set (pc) ! 184: (if_then_else (lt (cc0) ! 185: (const_int 0)) ! 186: (label_ref (match_operand 0 "" "")) ! 187: (pc)))] ! 188: "" ! 189: "bb1 lt,r25,%l0") ! 190: ! 191: (define_insn "bltu" ! 192: [(set (pc) ! 193: (if_then_else (ltu (cc0) ! 194: (const_int 0)) ! 195: (label_ref (match_operand 0 "" "")) ! 196: (pc)))] ! 197: "" ! 198: "bb1 lo,r25,%l0") ! 199: ! 200: (define_insn "bge" ! 201: [(set (pc) ! 202: (if_then_else (ge (cc0) ! 203: (const_int 0)) ! 204: (label_ref (match_operand 0 "" "")) ! 205: (pc)))] ! 206: "" ! 207: "bb1 ge,r25,%l0") ! 208: ! 209: (define_insn "bgeu" ! 210: [(set (pc) ! 211: (if_then_else (geu (cc0) ! 212: (const_int 0)) ! 213: (label_ref (match_operand 0 "" "")) ! 214: (pc)))] ! 215: "" ! 216: "bb1 hs,r25,%l0") ! 217: ! 218: (define_insn "ble" ! 219: [(set (pc) ! 220: (if_then_else (le (cc0) ! 221: (const_int 0)) ! 222: (label_ref (match_operand 0 "" "")) ! 223: (pc)))] ! 224: "" ! 225: "bb1 le,r25,%l0") ! 226: ! 227: (define_insn "bleu" ! 228: [(set (pc) ! 229: (if_then_else (leu (cc0) ! 230: (const_int 0)) ! 231: (label_ref (match_operand 0 "" "")) ! 232: (pc)))] ! 233: "" ! 234: "bb1 ls,r25,%l0") ! 235: ! 236: ;; These match inverted jump insns for register allocation. ! 237: ! 238: (define_insn "" ! 239: [(set (pc) ! 240: (if_then_else (eq (cc0) ! 241: (const_int 0)) ! 242: (pc) ! 243: (label_ref (match_operand 0 "" ""))))] ! 244: "" ! 245: "bb0 eq,r25,%l0") ! 246: ! 247: (define_peephole ! 248: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 249: (set (pc) ! 250: (if_then_else (eq (cc0) ! 251: (const_int 0)) ! 252: (pc) ! 253: (label_ref (match_operand 1 "" ""))))] ! 254: "" ! 255: "* ! 256: { ! 257: CC_STATUS_INIT; ! 258: return \"bcnd ne0,%0,%l1\"; ! 259: }") ! 260: ! 261: (define_insn "" ! 262: [(set (pc) ! 263: (if_then_else (ne (cc0) ! 264: (const_int 0)) ! 265: (pc) ! 266: (label_ref (match_operand 0 "" ""))))] ! 267: "" ! 268: "bb0 ne,r25,%l0") ! 269: ! 270: (define_peephole ! 271: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 272: (set (pc) ! 273: (if_then_else (ne (cc0) ! 274: (const_int 0)) ! 275: (pc) ! 276: (label_ref (match_operand 1 "" ""))))] ! 277: "" ! 278: "* ! 279: { ! 280: CC_STATUS_INIT; ! 281: return \"bcnd eq0,%0,%l1\"; ! 282: }") ! 283: ! 284: (define_insn "" ! 285: [(set (pc) ! 286: (if_then_else (gt (cc0) ! 287: (const_int 0)) ! 288: (pc) ! 289: (label_ref (match_operand 0 "" ""))))] ! 290: "" ! 291: "bb0 gt,r25,%l0") ! 292: ! 293: (define_insn "" ! 294: [(set (pc) ! 295: (if_then_else (gtu (cc0) ! 296: (const_int 0)) ! 297: (pc) ! 298: (label_ref (match_operand 0 "" ""))))] ! 299: "" ! 300: "bb0 hi,r25,%l0") ! 301: ! 302: (define_insn "" ! 303: [(set (pc) ! 304: (if_then_else (lt (cc0) ! 305: (const_int 0)) ! 306: (pc) ! 307: (label_ref (match_operand 0 "" ""))))] ! 308: "" ! 309: "bb0 lt,r25,%l0") ! 310: ! 311: (define_insn "" ! 312: [(set (pc) ! 313: (if_then_else (ltu (cc0) ! 314: (const_int 0)) ! 315: (pc) ! 316: (label_ref (match_operand 0 "" ""))))] ! 317: "" ! 318: "bb0 lo,r25,%l0") ! 319: ! 320: (define_insn "" ! 321: [(set (pc) ! 322: (if_then_else (ge (cc0) ! 323: (const_int 0)) ! 324: (pc) ! 325: (label_ref (match_operand 0 "" ""))))] ! 326: "" ! 327: "bb0 ge,r25,%l0") ! 328: ! 329: (define_insn "" ! 330: [(set (pc) ! 331: (if_then_else (geu (cc0) ! 332: (const_int 0)) ! 333: (pc) ! 334: (label_ref (match_operand 0 "" ""))))] ! 335: "" ! 336: "bb0 hs,r25,%l0") ! 337: ! 338: (define_insn "" ! 339: [(set (pc) ! 340: (if_then_else (le (cc0) ! 341: (const_int 0)) ! 342: (pc) ! 343: (label_ref (match_operand 0 "" ""))))] ! 344: "" ! 345: "bb0 le,r25,%l0") ! 346: ! 347: (define_insn "" ! 348: [(set (pc) ! 349: (if_then_else (leu (cc0) ! 350: (const_int 0)) ! 351: (pc) ! 352: (label_ref (match_operand 0 "" ""))))] ! 353: "" ! 354: "bb0 ls,r25,%l0") ! 355: ! 356: ;; Move instructions ! 357: ! 358: (define_insn "swapsi" ! 359: [(set (match_operand:SI 0 "general_operand" "g") ! 360: (match_operand:SI 1 "general_operand" "g")) ! 361: (set (match_dup 1) (match_dup 0))] ! 362: "" ! 363: "* ! 364: { ! 365: if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! 366: { ! 367: CC_STATUS_INIT; ! 368: return \"ld r25,%0\;xmem r25,%1\;st r25,%0\"; ! 369: } ! 370: if (! REG_P (operands[1])) ! 371: return \"xmem %0,%1\"; ! 372: if (REG_P (operands[0])) ! 373: { ! 374: if (REGNO (operands[0]) == REGNO (operands[1])) ! 375: return \"\"; ! 376: return \"xor %0,%0,%1\;xor %1,%1,%0\;xor %0,%0,%1\"; ! 377: } ! 378: return \"xmem %1,%0\"; ! 379: }") ! 380: ! 381: (define_peephole ! 382: [(set (match_operand:SI 0 "register_operand" "=r") ! 383: (match_operand:SI 1 "memory_operand" "m")) ! 384: (set (match_operand:SI 2 "register_operand" "=r") ! 385: (match_operand:SI 3 "memory_operand" "m")) ! 386: (set (match_dup 1) (match_dup 2)) ! 387: (set (match_dup 3) (match_dup 0))] ! 388: "" ! 389: "* ! 390: { ! 391: CC_STATUS_INIT; ! 392: return \"ld r25,%1\;xmem r25,%3\;st r25,%1\"; ! 393: }") ! 394: ! 395: (define_insn "swapqi" ! 396: [(set (match_operand:QI 0 "general_operand" "g") ! 397: (match_operand:QI 1 "general_operand" "g")) ! 398: (set (match_dup 1) (match_dup 0))] ! 399: "" ! 400: "* ! 401: { ! 402: if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM) ! 403: { ! 404: CC_STATUS_INIT; ! 405: return \"ld.bu r25,%0\;xmem.bu r25,%1\;st.bu r25,%0\"; ! 406: } ! 407: if (! REG_P (operands[1])) ! 408: return \"xmem.bu %0,%1\"; ! 409: if (REG_P (operands[0])) ! 410: { ! 411: if (REGNO (operands[0]) == REGNO (operands[1])) ! 412: return \"\"; ! 413: return \"xor %0,%0,%1\;xor %1,%1,%0\;xor %0,%0,%1\"; ! 414: } ! 415: return \"xmem.bu %1,%0\"; ! 416: }") ! 417: ! 418: (define_peephole ! 419: [(set (match_operand:QI 0 "register_operand" "=r") ! 420: (match_operand:QI 1 "memory_operand" "m")) ! 421: (set (match_operand:QI 2 "register_operand" "=r") ! 422: (match_operand:QI 3 "memory_operand" "m")) ! 423: (set (match_dup 1) (match_dup 2)) ! 424: (set (match_dup 3) (match_dup 0))] ! 425: "" ! 426: "* ! 427: { ! 428: CC_STATUS_INIT; ! 429: return \"ld.bu r25,%1\;xmem.bu r25,%3\;st.bu r25,%1\"; ! 430: }") ! 431: ! 432: (define_insn "" ! 433: [(set (match_operand:SI 0 "general_operand" "g") ! 434: (const_int 0))] ! 435: "" ! 436: "* ! 437: { ! 438: if (REG_P (operands[0])) ! 439: return \"or %0,r0,0\"; ! 440: return \"st r0,%0\"; ! 441: }") ! 442: ! 443: (define_insn "movsi" ! 444: [(set (match_operand:SI 0 "general_operand" "=g,r") ! 445: (match_operand:SI 1 "general_operand" "r,mi"))] ! 446: "" ! 447: "* ! 448: { ! 449: if (REG_P (operands[0])) ! 450: { ! 451: if (GET_CODE (operands[1]) == MEM) ! 452: return \"ld %0,%1\"; ! 453: if (GET_CODE (operands[1]) == CONST_INT) ! 454: return output_store_const_int (SImode, operands); ! 455: if (GET_CODE (operands[1]) == LABEL_REF ! 456: || GET_CODE (operands[1]) == SYMBOL_REF) ! 457: return \"lda %0,r0,%1\"; ! 458: return \"or %0,r0,%1\"; ! 459: } ! 460: return \"st %1,%0\"; ! 461: }") ! 462: ! 463: ;; Simulate pre inc. Post inc/dec is automatically optimized ! 464: ;; by sheer luck. ?? In which phase should this really be done?? ! 465: (define_insn "" ! 466: [(set (match_operand:SI 0 "register_operand" "r") ! 467: (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "r") ! 468: (match_operand:SI 2 "arith_operand" "rI")))) ! 469: (set (match_dup 1) ! 470: (plus:SI (match_dup 1) ! 471: (match_dup 2)))] ! 472: "" ! 473: "ld %0,%1,%2\\t;; pipelined!\;addu %1,%1,%2\\t;; /") ! 474: ! 475: (define_insn "" ! 476: [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "r") ! 477: (match_operand:SI 1 "arith_operand" "rI"))) ! 478: (match_operand:SI 2 "register_operand" "r")) ! 479: (set (match_dup 0) ! 480: (plus:SI (match_dup 0) ! 481: (match_dup 1)))] ! 482: "" ! 483: "st %2,%0,%1\\t;; pipelined!\;addu %0,%0,%1\\t;; /") ! 484: ! 485: (define_insn "" ! 486: [(set (match_operand:HI 0 "general_operand" "g") ! 487: (const_int 0))] ! 488: "" ! 489: "* ! 490: { ! 491: if (REG_P (operands[0])) ! 492: return \"or %0,r0,0\"; ! 493: return \"st.h r0,%0\"; ! 494: }") ! 495: ! 496: (define_insn "movhi" ! 497: [(set (match_operand:HI 0 "general_operand" "=g,r") ! 498: (match_operand:HI 1 "general_operand" "r,mn"))] ! 499: "" ! 500: "* ! 501: { ! 502: if (REG_P (operands[0])) ! 503: { ! 504: if (GET_CODE (operands[1]) == MEM) ! 505: return \"ld.h %0,%1\"; ! 506: if (GET_CODE (operands[1]) == CONST_INT) ! 507: return output_store_const_int (HImode, operands); ! 508: return \"or %0,r0,%1\"; ! 509: } ! 510: return \"st.h %1,%0\"; ! 511: }") ! 512: ! 513: (define_insn "" ! 514: [(set (match_operand:SI 0 "register_operand" "r") ! 515: (sign_extend:SI ! 516: (mem:HI (plus:SI (match_operand:SI 1 "register_operand" "r") ! 517: (match_operand:SI 2 "arith_operand" "rI"))))) ! 518: (set (match_dup 1) ! 519: (plus:SI (match_dup 1) ! 520: (match_dup 2)))] ! 521: "" ! 522: "ld.h %0,%1,%2\\t;; pipelined!\;addu %1,%1,%2\\t;; /") ! 523: ! 524: (define_insn "" ! 525: [(set (match_operand:SI 0 "register_operand" "r") ! 526: (zero_extend:SI ! 527: (mem:HI (plus:SI (match_operand:SI 1 "register_operand" "r") ! 528: (match_operand:SI 2 "arith_operand" "rI"))))) ! 529: (set (match_dup 1) ! 530: (plus:SI (match_dup 1) ! 531: (match_dup 2)))] ! 532: "" ! 533: "ld.hu %0,%1,%2\\t;; pipelined!\;addu %1,%1,%2\\t;; /") ! 534: ! 535: (define_insn "" ! 536: [(set (mem:HI (plus:SI (match_operand:SI 0 "register_operand" "r") ! 537: (match_operand:SI 1 "arith_operand" "rI"))) ! 538: (match_operand:SI 2 "register_operand" "r")) ! 539: (set (match_dup 0) ! 540: (plus:SI (match_dup 0) ! 541: (match_dup 1)))] ! 542: "" ! 543: "st.h %2,%0,%1\\t;; pipelined!\;addu %0,%0,%1\\t;; /") ! 544: ! 545: (define_insn "" ! 546: [(set (match_operand:QI 0 "general_operand" "g") ! 547: (const_int 0))] ! 548: "" ! 549: "* ! 550: { ! 551: if (REG_P (operands[0])) ! 552: return \"or %0,r0,0\"; ! 553: return \"st.b r0,%0\"; ! 554: }") ! 555: ! 556: (define_insn "movqi" ! 557: [(set (match_operand:QI 0 "general_operand" "=g,r") ! 558: (match_operand:QI 1 "general_operand" "r,mn"))] ! 559: "" ! 560: "* ! 561: { ! 562: if (REG_P (operands[0])) ! 563: { ! 564: if (GET_CODE (operands[1]) == MEM) ! 565: return \"ld.b %0,%1\"; ! 566: if (GET_CODE (operands[1]) == CONST_INT) ! 567: return output_store_const_int (QImode, operands); ! 568: return \"or %0,r0,%1\"; ! 569: } ! 570: return \"st.b %1,%0\"; ! 571: }") ! 572: ! 573: (define_insn "" ! 574: [(set (match_operand:SI 0 "register_operand" "r") ! 575: (sign_extend:SI ! 576: (mem:QI (plus:SI (match_operand:SI 1 "register_operand" "r") ! 577: (match_operand:SI 2 "arith_operand" "rI"))))) ! 578: (set (match_dup 1) ! 579: (plus:SI (match_dup 1) ! 580: (match_dup 2)))] ! 581: "" ! 582: "ld.b %0,%1,%2\\t;; pipelined!\;addu %1,%1,%2\\t;; /") ! 583: ! 584: (define_insn "" ! 585: [(set (match_operand:SI 0 "register_operand" "r") ! 586: (zero_extend:SI ! 587: (mem:QI (plus:SI (match_operand:SI 1 "register_operand" "r") ! 588: (match_operand:SI 2 "arith_operand" "rI"))))) ! 589: (set (match_dup 1) ! 590: (plus:SI (match_dup 1) ! 591: (match_dup 2)))] ! 592: "" ! 593: "ld.bu %0,%1,%2\\t;; pipelined!\;addu %1,%1,%2\\t;; /") ! 594: ! 595: (define_insn "" ! 596: [(set (mem:QI (plus:SI (match_operand:SI 0 "register_operand" "r") ! 597: (match_operand:SI 1 "arith_operand" "rI"))) ! 598: (match_operand:SI 2 "register_operand" "r")) ! 599: (set (match_dup 0) ! 600: (plus:SI (match_dup 0) ! 601: (match_dup 1)))] ! 602: "" ! 603: "st.b %2,%0,%1\\t;; pipelined!\;addu %0,%0,%1\\t;; /") ! 604: ! 605: ;; The definition of this insn does not really explain what it does, ! 606: ;; but it should suffice ! 607: ;; that anything generated as this insn will be recognized as one ! 608: ;; and that it won't successfully combine with anything. ! 609: (define_insn "movstrsi" ! 610: [(set (match_operand:BLK 0 "general_operand" "=g") ! 611: (match_operand:BLK 1 "general_operand" "g")) ! 612: (use (match_operand:SI 2 "arith32_operand" "rn")) ! 613: (clobber (reg:SI 10)) ! 614: (clobber (reg:SI 11)) ! 615: (clobber (reg:SI 12))] ! 616: "" ! 617: "* output_block_move (operands);") ! 618: ! 619: ;; This pattern forces (set (reg:DF ...) (const_double ...)) ! 620: ;; to be reloaded by putting the constant into memory. ! 621: ;; It must come before the more general movdf pattern. ! 622: (define_insn "" ! 623: [(set (match_operand:DF 0 "general_operand" "=r,o") ! 624: (match_operand:DF 1 "" "mG,G"))] ! 625: "GET_CODE (operands[1]) == CONST_DOUBLE" ! 626: "* ! 627: { ! 628: if (operands[1] == dconst0_rtx && GET_CODE (operands[0]) == REG) ! 629: { ! 630: operands[1] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1); ! 631: return \"add %0,r0,0\;add %1,r0,0\"; ! 632: } ! 633: if (operands[1] == dconst0_rtx && GET_CODE (operands[0]) == MEM) ! 634: { ! 635: operands[1] = adj_offsettable_operand (operands[0], 4); ! 636: return \"st r0,%0\;st r0,%1\"; ! 637: } ! 638: return output_move_double (operands); ! 639: } ! 640: ") ! 641: ! 642: (define_insn "movdf" ! 643: [(set (match_operand:DF 0 "general_operand" "=r,m") ! 644: (match_operand:DF 1 "general_operand" "rm,r"))] ! 645: "" ! 646: "* return output_move_double (operands);") ! 647: ! 648: (define_insn "movdi" ! 649: [(set (match_operand:DI 0 "general_operand" "=r,m") ! 650: (match_operand:DI 1 "general_operand" "rm,r"))] ! 651: "" ! 652: "* return output_move_double (operands);") ! 653: ! 654: (define_insn "movsf" ! 655: [(set (match_operand:SF 0 "general_operand" "=g,r") ! 656: (match_operand:SF 1 "general_operand" "r,mF"))] ! 657: "" ! 658: "* ! 659: { ! 660: if (REG_P (operands[0])) ! 661: { ! 662: if (GET_CODE (operands[1]) == MEM) ! 663: return \"ld %0,%1\"; ! 664: if (GET_CODE (operands[1]) == CONST_DOUBLE) ! 665: return output_store_const_float (SFmode, operands); ! 666: return \"or %0,r0,%1\"; ! 667: } ! 668: return \"st %1,%0\"; ! 669: }") ! 670: ! 671: ;;- load effective address ! 672: (define_insn "" ! 673: [(set (match_operand:SI 0 "register_operand" "=r") ! 674: (match_operand:QI 1 "address_operand" "p"))] ! 675: "" ! 676: "lda.b %0,%a1") ! 677: ! 678: (define_insn "" ! 679: [(set (match_operand:SI 0 "register_operand" "=r") ! 680: (match_operand:HI 1 "address_operand" "p"))] ! 681: "" ! 682: "lda.w %0,%a1") ! 683: ! 684: (define_insn "" ! 685: [(set (match_operand:SI 0 "register_operand" "=r") ! 686: (match_operand:SI 1 "address_operand" "p"))] ! 687: "" ! 688: "lda %0,%a1") ! 689: ! 690: (define_insn "" ! 691: [(set (match_operand:SI 0 "register_operand" "=r") ! 692: (match_operand:DI 1 "address_operand" "p"))] ! 693: "" ! 694: "lda.d %0,%a1") ! 695: ! 696: (define_insn "" ! 697: [(set (match_operand:SI 0 "register_operand" "=r") ! 698: (match_operand:SF 1 "address_operand" "p"))] ! 699: "" ! 700: "lda %0,%a1") ! 701: ! 702: (define_insn "" ! 703: [(set (match_operand:SI 0 "register_operand" "=r") ! 704: (match_operand:DF 1 "address_operand" "p"))] ! 705: "" ! 706: "lda.d %0,%a1") ! 707: ! 708: ;;- truncation instructions ! 709: (define_insn "truncsiqi2" ! 710: [(set (match_operand:QI 0 "general_operand" "=g") ! 711: (truncate:QI ! 712: (match_operand:SI 1 "register_operand" "r")))] ! 713: "" ! 714: "* ! 715: { ! 716: if (GET_CODE (operands[0]) == MEM) ! 717: return \"st.b %1,%0\"; ! 718: return \"or %0,r0,%1\"; ! 719: }") ! 720: ! 721: (define_insn "trunchiqi2" ! 722: [(set (match_operand:QI 0 "general_operand" "=g") ! 723: (truncate:QI ! 724: (match_operand:HI 1 "register_operand" "r")))] ! 725: "" ! 726: "* ! 727: { ! 728: if (GET_CODE (operands[0]) == MEM) ! 729: return \"st.b %1,%0\"; ! 730: return \"or %0,r0,%1\"; ! 731: }") ! 732: ! 733: (define_insn "truncsihi2" ! 734: [(set (match_operand:HI 0 "general_operand" "=g") ! 735: (truncate:HI ! 736: (match_operand:SI 1 "register_operand" "r")))] ! 737: "" ! 738: "* ! 739: { ! 740: if (GET_CODE (operands[0]) == MEM) ! 741: return \"st.h %1,%0\"; ! 742: return \"or %0,r0,%1\"; ! 743: }") ! 744: ! 745: ;;- zero extension instructions ! 746: ! 747: ;; Note that the one starting from HImode comes before those for QImode ! 748: ;; so that a constant operand will match HImode, not QImode. ! 749: ! 750: (define_insn "zero_extendhisi2" ! 751: [(set (match_operand:SI 0 "register_operand" "=r") ! 752: (zero_extend:SI ! 753: (match_operand:HI 1 "general_operand" "g")))] ! 754: "" ! 755: "* ! 756: { ! 757: if (REG_P (operands[1])) ! 758: return \"mask %0,%1,0xffff\"; ! 759: if (GET_CODE (operands[1]) == CONST_INT) ! 760: return output_store_const_int (SImode, operands); ! 761: return \"ld.hu %0,%1\"; ! 762: }") ! 763: ! 764: (define_insn "zero_extendqihi2" ! 765: [(set (match_operand:HI 0 "register_operand" "=r") ! 766: (zero_extend:HI ! 767: (match_operand:QI 1 "general_operand" "g")))] ! 768: "" ! 769: "* ! 770: { ! 771: if (REG_P (operands[1])) ! 772: return \"mask %0,%1,0xff\"; ! 773: if (GET_CODE (operands[1]) == CONST_INT) ! 774: return output_store_const_int (SImode, operands); ! 775: return \"ld.bu %0,%1\"; ! 776: }") ! 777: ! 778: (define_insn "zero_extendqisi2" ! 779: [(set (match_operand:SI 0 "register_operand" "=r") ! 780: (zero_extend:SI ! 781: (match_operand:QI 1 "general_operand" "g")))] ! 782: "" ! 783: "* ! 784: { ! 785: if (REG_P (operands[1])) ! 786: return \"mask %0,%1,0xff\"; ! 787: if (GET_CODE (operands[1]) == CONST_INT) ! 788: return output_store_const_int (SImode, operands); ! 789: return \"ld.bu %0,%1\"; ! 790: }") ! 791: ! 792: ;;- sign extension instructions ! 793: ;; Note that the one starting from HImode comes before those for QImode ! 794: ;; so that a constant operand will match HImode, not QImode. ! 795: ! 796: (define_insn "extendhisi2" ! 797: [(set (match_operand:SI 0 "register_operand" "=r") ! 798: (sign_extend:SI ! 799: (match_operand:HI 1 "general_operand" "g")))] ! 800: "" ! 801: "* ! 802: { ! 803: if (REG_P (operands[1])) ! 804: return \"ext %0,%1,16<0>\"; ! 805: if (GET_CODE (operands[1]) == CONST_INT) ! 806: return output_store_const_int (SImode, operands); ! 807: return \"ld.h %0,%1\"; ! 808: }") ! 809: ! 810: (define_insn "extendqihi2" ! 811: [(set (match_operand:HI 0 "register_operand" "=r") ! 812: (sign_extend:HI ! 813: (match_operand:QI 1 "general_operand" "g")))] ! 814: "" ! 815: "* ! 816: { ! 817: if (REG_P (operands[1])) ! 818: return \"ext %0,%1,8<0>\"; ! 819: if (GET_CODE (operands[1]) == CONST_INT) ! 820: return output_store_const_int (SImode, operands); ! 821: return \"ld.b %0,%1\"; ! 822: }") ! 823: ! 824: (define_insn "extendqisi2" ! 825: [(set (match_operand:SI 0 "register_operand" "=r") ! 826: (sign_extend:SI ! 827: (match_operand:QI 1 "general_operand" "g")))] ! 828: "" ! 829: "* ! 830: { ! 831: if (REG_P (operands[1])) ! 832: return \"ext %0,%1,8<0>\"; ! 833: if (GET_CODE (operands[1]) == CONST_INT) ! 834: return output_store_const_int (SImode, operands); ! 835: return \"ld.b %0,%1\"; ! 836: }") ! 837: ! 838: ;; Conversions between float and double. ! 839: ! 840: (define_insn "extendsfdf2" ! 841: [(set (match_operand:DF 0 "general_operand" "=r") ! 842: (float_extend:DF ! 843: (match_operand:SF 1 "general_operand" "r")))] ! 844: "" ! 845: "fadd.dss %0,r0,%1") ! 846: ! 847: (define_insn "truncdfsf2" ! 848: [(set (match_operand:SF 0 "general_operand" "=r") ! 849: (float_truncate:SF ! 850: (match_operand:DF 1 "general_operand" "r")))] ! 851: "" ! 852: "fadd.ssd %0,r0,%1") ! 853: ;; Conversions between floating point and integer ! 854: ! 855: (define_insn "floatsidf2" ! 856: [(set (match_operand:DF 0 "general_operand" "=r") ! 857: (float:DF (match_operand:SI 1 "general_operand" "r")))] ! 858: "" ! 859: "flt.ds %0,%1") ! 860: ! 861: (define_insn "floatsisf2" ! 862: [(set (match_operand:SF 0 "general_operand" "=r") ! 863: (float:SF (match_operand:SI 1 "general_operand" "r")))] ! 864: "" ! 865: "flt.ss %0,%1") ! 866: ! 867: (define_insn "fixdfsi2" ! 868: [(set (match_operand:SI 0 "general_operand" "=r") ! 869: (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "r"))))] ! 870: "" ! 871: "int.sd %0,%1") ! 872: ! 873: (define_insn "fixsfsi2" ! 874: [(set (match_operand:SI 0 "general_operand" "=r") ! 875: (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "r"))))] ! 876: "" ! 877: "int.ss %0,%1") ! 878: ! 879: ;;- arithmetic instructions ! 880: ;;- add instructions ! 881: (define_insn "addsi3" ! 882: [(set (match_operand:SI 0 "register_operand" "=r") ! 883: (plus:SI (match_operand:SI 1 "arith32_operand" "%r") ! 884: (match_operand:SI 2 "arith32_operand" "rn")))] ! 885: "" ! 886: "* ! 887: { ! 888: unsigned int i; ! 889: ! 890: if (REG_P (operands[2])) ! 891: return \"addu %0,%1,%2\"; ! 892: i = INTVAL (operands[2]); ! 893: if (INT_FITS_16_BITS (i)) ! 894: return \"addu %0,%1,%2\"; ! 895: if (INT_FITS_16_BITS (-i)) ! 896: { ! 897: operands[2] = gen_rtx (CONST_INT, VOIDmode, -i); ! 898: return \"subu %0,%1,%2\"; ! 899: } ! 900: return \"or.u %0,r0,hi16(%2)\;or %0,%0,lo16(%2)\;addu %0,%1,%0\"; ! 901: }") ! 902: ! 903: (define_insn "adddf3" ! 904: [(set (match_operand:DF 0 "register_operand" "=r") ! 905: (plus:DF (match_operand:DF 1 "register_operand" "%r") ! 906: (match_operand:DF 2 "register_operand" "r")))] ! 907: "" ! 908: "fadd.ddd %0,%1,%2") ! 909: ! 910: ;; a bunch more can go in here! ! 911: ! 912: (define_insn "addsf3" ! 913: [(set (match_operand:SF 0 "register_operand" "=r") ! 914: (plus:SF (match_operand:SF 1 "register_operand" "%r") ! 915: (match_operand:SF 2 "register_operand" "r")))] ! 916: "" ! 917: "fadd.sss %0,%1,%2") ! 918: ! 919: ;;- subtract instructions ! 920: (define_insn "subsi3" ! 921: [(set (match_operand:SI 0 "register_operand" "=r") ! 922: (minus:SI (match_operand:SI 1 "register_operand" "r") ! 923: (match_operand:SI 2 "arith32_operand" "rn")))] ! 924: "" ! 925: "* ! 926: { ! 927: unsigned int i; ! 928: ! 929: if (REG_P (operands[2])) ! 930: return \"subu %0,%1,%2\"; ! 931: i = INTVAL (operands[2]); ! 932: if (INT_FITS_16_BITS (i)) ! 933: return \"subu %0,%1,%2\"; ! 934: if (INT_FITS_16_BITS (-i)) ! 935: { ! 936: operands[2] = gen_rtx (CONST_INT, VOIDmode, -i); ! 937: return \"addu %0,%1,%2\"; ! 938: } ! 939: return \"or.u %0,r0,hi16(%2)\;or %0,%0,lo16(%2)\;subu %0,%1,%0\"; ! 940: }") ! 941: ! 942: (define_insn "subdf3" ! 943: [(set (match_operand:DF 0 "register_operand" "=r") ! 944: (minus:DF (match_operand:DF 1 "register_operand" "%r") ! 945: (match_operand:DF 2 "register_operand" "r")))] ! 946: "" ! 947: "fsub.ddd %0,%1,%2") ! 948: ! 949: (define_insn "subsf3" ! 950: [(set (match_operand:SF 0 "register_operand" "=r") ! 951: (minus:SF (match_operand:SF 1 "register_operand" "%r") ! 952: (match_operand:SF 2 "register_operand" "r")))] ! 953: "" ! 954: "fsub.sss %0,%1,%2") ! 955: ! 956: ;;- multiply instructions ! 957: (define_insn "mulsi3" ! 958: [(set (match_operand:SI 0 "register_operand" "=r") ! 959: (mult:SI (match_operand:SI 1 "register_operand" "%r") ! 960: (match_operand:SI 2 "arith32_operand" "rn")))] ! 961: "" ! 962: "* ! 963: { ! 964: unsigned int i; ! 965: ! 966: if (REG_P (operands[2])) ! 967: return \"mul %0,%1,%2\"; ! 968: i = INTVAL (operands[2]); ! 969: if (INT_FITS_16_BITS (i)) ! 970: return \"mul %0,%1,%2\"; ! 971: return \"or.u %0,r0,hi16(%2)\;or %0,%0,lo16(%2)\;mul %0,%1,%0\"; ! 972: }") ! 973: ! 974: (define_insn "umulsi3" ! 975: [(set (match_operand:SI 0 "register_operand" "=r") ! 976: (umult:SI (match_operand:SI 1 "register_operand" "%r") ! 977: (match_operand:SI 2 "arith_operand" "rI")))] ! 978: "" ! 979: "mul %0,%1,%2") ! 980: ! 981: (define_insn "muldf3" ! 982: [(set (match_operand:DF 0 "register_operand" "=r") ! 983: (mult:DF (match_operand:DF 1 "register_operand" "%r") ! 984: (match_operand:DF 2 "register_operand" "r")))] ! 985: "" ! 986: "fmul.ddd %0,%1,%2") ! 987: ! 988: (define_insn "mulsf3" ! 989: [(set (match_operand:SF 0 "register_operand" "=r") ! 990: (mult:SF (match_operand:SF 1 "register_operand" "%r") ! 991: (match_operand:SF 2 "register_operand" "r")))] ! 992: "" ! 993: "fmul.sss %0,%1,%2") ! 994: ! 995: ;;- divide instructions ! 996: (define_insn "divsi3" ! 997: [(set (match_operand:SI 0 "register_operand" "=r") ! 998: (div:SI (match_operand:SI 1 "register_operand" "r") ! 999: (match_operand:SI 2 "arith32_operand" "rn")))] ! 1000: "" ! 1001: "* ! 1002: { ! 1003: unsigned int i; ! 1004: ! 1005: if (REG_P (operands[2])) ! 1006: return \"div %0,%1,%2\"; ! 1007: i = INTVAL (operands[2]); ! 1008: if (INT_FITS_16_BITS (i)) ! 1009: return \"div %0,%1,%2\"; ! 1010: return \"or.u %0,r0,hi16(%2)\;or %0,%0,lo16(%2)\;div %0,%1,%0\"; ! 1011: }") ! 1012: ! 1013: ! 1014: (define_insn "udivsi3" ! 1015: [(set (match_operand:SI 0 "register_operand" "=r") ! 1016: (udiv:SI (match_operand:SI 1 "register_operand" "r") ! 1017: (match_operand:SI 2 "arith_operand" "rI")))] ! 1018: "" ! 1019: "div %0,%1,%2") ! 1020: ! 1021: (define_insn "divdf3" ! 1022: [(set (match_operand:DF 0 "register_operand" "=r") ! 1023: (div:DF (match_operand:DF 1 "register_operand" "r") ! 1024: (match_operand:DF 2 "register_operand" "r")))] ! 1025: "" ! 1026: "fdiv.ddd %0,%1,%2") ! 1027: ! 1028: (define_insn "divsf3" ! 1029: [(set (match_operand:SF 0 "register_operand" "=r") ! 1030: (div:SF (match_operand:SF 1 "register_operand" "r") ! 1031: (match_operand:SF 2 "register_operand" "r")))] ! 1032: "" ! 1033: "fdiv.sss %0,%1,%2") ! 1034: ! 1035: ;; Remainder instructions. ! 1036: ! 1037: (define_insn "modsi3" ! 1038: [(set (match_operand:SI 0 "register_operand" "=r") ! 1039: (mod:SI (match_operand:SI 1 "register_operand" "r") ! 1040: (match_operand:SI 2 "arith32_operand" "rn")))] ! 1041: "" ! 1042: "* ! 1043: { ! 1044: unsigned int i; ! 1045: ! 1046: if (REG_P (operands[2])) ! 1047: return \"div %0,%1,%2\;mul %0,%0,%2\;sub %0,%1,%0\"; ! 1048: i = INTVAL (operands[2]); ! 1049: if (INT_FITS_16_BITS (i)) ! 1050: return \"div %0,%1,%2\;mul %0,%0,%2\;sub %0,%1,%0\"; ! 1051: if (INT_FITS_16_BITS (-i)) ! 1052: fatal (\"implement negative case for mod\"); ! 1053: fatal (\"implement 32 bit case for mod\"); ! 1054: }") ! 1055: ! 1056: (define_insn "umodsi3" ! 1057: [(set (match_operand:SI 0 "register_operand" "=r") ! 1058: (umod:SI (match_operand:SI 1 "register_operand" "r") ! 1059: (match_operand:SI 2 "arith_operand" "rI")))] ! 1060: "" ! 1061: "* ! 1062: { ! 1063: unsigned int i; ! 1064: ! 1065: if (REG_P (operands[2])) ! 1066: return \"div %0,%1,%2\;mul %0,%0,%2\;sub %0,%1,%0\"; ! 1067: i = INTVAL (operands[2]); ! 1068: if (INT_FITS_16_BITS (i)) ! 1069: return \"div %0,%1,%2\;mul %0,%0,%2\;sub %0,%1,%0\"; ! 1070: if (INT_FITS_16_BITS (-i)) ! 1071: fatal (\"implement negative case for umod\"); ! 1072: fatal (\"implement 32 bit case for umod\"); ! 1073: }") ! 1074: ! 1075: (define_insn "divmodsi4" ! 1076: [(set (match_operand:SI 0 "register_operand" "=r") ! 1077: (div:SI (match_operand:SI 1 "register_operand" "r") ! 1078: (match_operand:SI 2 "arith_operand" "rI"))) ! 1079: (set (match_operand:SI 3 "register_operand" "=r") ! 1080: (mod:SI (match_dup 1) (match_dup 2)))] ! 1081: "" ! 1082: "div %0,%1,%2\;mul %3,%0,%2\;sub %3,%1,%3") ! 1083: ! 1084: (define_insn "udivmodsi4" ! 1085: [(set (match_operand:SI 0 "register_operand" "=r") ! 1086: (udiv:SI (match_operand:SI 1 "register_operand" "r") ! 1087: (match_operand:SI 2 "arith_operand" "rI"))) ! 1088: (set (match_operand:SI 3 "register_operand" "=r") ! 1089: (umod:SI (match_dup 1) (match_dup 2)))] ! 1090: "" ! 1091: "div %0,%1,%2\;mul %3,%0,%2\;sub %3,%1,%3") ! 1092: ! 1093: ;;- and instructions (with complement also) ! 1094: (define_insn "andsi3" ! 1095: [(set (match_operand:SI 0 "register_operand" "=r") ! 1096: (and:SI (match_operand:SI 1 "register_operand" "%r") ! 1097: (match_operand:SI 2 "arith32_operand" "rn")))] ! 1098: "" ! 1099: "* ! 1100: { ! 1101: unsigned int i; ! 1102: ! 1103: if (REG_P (operands[2])) ! 1104: return \"and %0,%1,%2\"; ! 1105: i = INTVAL (operands[2]); ! 1106: if (INT_FITS_16_BITS (i)) ! 1107: return \"mask %0,%1,%2\"; ! 1108: if (INT_FITS_16_BITS (-i)) ! 1109: { ! 1110: operands[2] = gen_rtx (CONST_INT, VOIDmode, i & 0xffff); ! 1111: return \"and %0,%1,%2\"; ! 1112: } ! 1113: return \"and.u %0,%1,hi16(%2)\;and %0,%1,lo16(%2)\"; ! 1114: }") ! 1115: ! 1116: (define_insn "andcbsi3" ! 1117: [(set (match_operand:SI 0 "register_operand" "=r") ! 1118: (and:SI (match_operand:SI 1 "register_operand" "%r") ! 1119: (not:SI (match_operand:SI 2 "register_operand" "r"))))] ! 1120: "" ! 1121: "and.c %0,%1,%2") ! 1122: ! 1123: ;;- Bit set (inclusive or) instructions (with complement also) ! 1124: (define_insn "iorsi3" ! 1125: [(set (match_operand:SI 0 "register_operand" "=r") ! 1126: (ior:SI (match_operand:SI 1 "register_operand" "%r") ! 1127: (match_operand:SI 2 "arith32_operand" "rn")))] ! 1128: "" ! 1129: "* ! 1130: { ! 1131: unsigned int i; ! 1132: ! 1133: if (REG_P (operands[2])) ! 1134: return \"or %0,%1,%2\"; ! 1135: i = INTVAL (operands[2]); ! 1136: if (INT_FITS_16_BITS (i)) ! 1137: return \"or %0,%1,%2\"; ! 1138: return \"or.u %0,%1,hi16(%2)\;or %0,%1,lo16(%2)\"; ! 1139: }") ! 1140: ! 1141: (define_insn "iorcbsi3" ! 1142: [(set (match_operand:SI 0 "register_operand" "=r") ! 1143: (ior:SI (match_operand:SI 1 "register_operand" "%r") ! 1144: (not:SI (match_operand:SI 2 "register_operand" "r"))))] ! 1145: "" ! 1146: "or.c %0,%1,%2") ! 1147: ! 1148: ;;- xor instructions (with complement also) ! 1149: (define_insn "xorsi3" ! 1150: [(set (match_operand:SI 0 "register_operand" "=r") ! 1151: (xor:SI (match_operand:SI 1 "register_operand" "%r") ! 1152: (match_operand:SI 2 "arith32_operand" "rn")))] ! 1153: "" ! 1154: "* ! 1155: { ! 1156: unsigned int i; ! 1157: ! 1158: if (REG_P (operands[2])) ! 1159: return \"xor %0,%1,%2\"; ! 1160: i = INTVAL (operands[2]); ! 1161: if (INT_FITS_16_BITS (i)) ! 1162: return \"xor %0,%1,%2\"; ! 1163: if ((i & 0xffff) == 0) ! 1164: return \"xor.u %0,%1,hi16(%2)\"; ! 1165: return \"xor.u %0,%1,hi16(%2)\;xor %0,%1,lo16(%2)\"; ! 1166: }") ! 1167: ! 1168: (define_insn "xorcbsi3" ! 1169: [(set (match_operand:SI 0 "register_operand" "=r") ! 1170: (xor:SI (match_operand:SI 1 "register_operand" "%r") ! 1171: (not:SI (match_operand:SI 2 "register_operand" "r"))))] ! 1172: "" ! 1173: "xor.c %0,%1,%2") ! 1174: ! 1175: ;;- one complement instructions ! 1176: (define_insn "one_cmplsi2" ! 1177: [(set (match_operand:SI 0 "register_operand" "=r") ! 1178: (not:SI (match_operand:SI 1 "register_operand" "r")))] ! 1179: "" ! 1180: "xor.c %0,%1,r0") ! 1181: ! 1182: ;; Optimized special case of shifting. ! 1183: ;; Must precede the general case. ! 1184: ! 1185: (define_insn "" ! 1186: [(set (match_operand:SI 0 "register_operand" "=r") ! 1187: (ashiftrt:SI (match_operand:SI 1 "memory_operand" "m") ! 1188: (const_int 24)))] ! 1189: "" ! 1190: "ld.b %0,%1") ! 1191: ! 1192: (define_insn "" ! 1193: [(set (match_operand:SI 0 "register_operand" "=r") ! 1194: (lshiftrt:SI (match_operand:SI 1 "memory_operand" "m") ! 1195: (const_int 24)))] ! 1196: "" ! 1197: "ld.bu %0,%1") ! 1198: ! 1199: ;;- arithmetic shift instructions ! 1200: (define_insn "ashlsi3" ! 1201: [(set (match_operand:SI 0 "register_operand" "=r") ! 1202: (ashift:SI (match_operand:SI 1 "register_operand" "r") ! 1203: (match_operand:SI 2 "arith_operand" "rI")))] ! 1204: "" ! 1205: "* ! 1206: { ! 1207: if (GET_CODE (operands[2]) == CONST_INT) ! 1208: return \"mak %0,%1,0<%2>\"; ! 1209: return \"mask %0,%2,0x1f\;mak %0,%1,%0\"; ! 1210: }") ! 1211: ! 1212: (define_insn "ashrsi3" ! 1213: [(set (match_operand:SI 0 "register_operand" "=r") ! 1214: (ashiftrt:SI (match_operand:SI 1 "register_operand" "r") ! 1215: (match_operand:SI 2 "arith_operand" "rI")))] ! 1216: "" ! 1217: "* ! 1218: { ! 1219: if (GET_CODE (operands[2]) == CONST_INT) ! 1220: return \"ext %0,%1,0<%2>\"; ! 1221: return \"mask %0,%2,0x1f\;ext %0,%1,%0\"; ! 1222: }") ! 1223: ! 1224: ;;- logical shift instructions ! 1225: (define_insn "lshrsi3" ! 1226: [(set (match_operand:SI 0 "register_operand" "=r") ! 1227: (lshiftrt:SI (match_operand:SI 1 "register_operand" "r") ! 1228: (match_operand:SI 2 "arith_operand" "rI")))] ! 1229: "" ! 1230: "* ! 1231: { ! 1232: if (GET_CODE (operands[2]) == CONST_INT) ! 1233: return \"extu %0,%1,0<%2>\"; ! 1234: return \"mask %0,%2,0x1f\;extu %0,%1,%0\"; ! 1235: }") ! 1236: ! 1237: ;;- rotate instructions ! 1238: ! 1239: (define_insn "rotlsi3" ! 1240: [(set (match_operand:SI 0 "register_operand" "=r") ! 1241: (rotate:SI (match_operand:SI 1 "register_operand" "r") ! 1242: (match_operand:SI 2 "arith_operand" "rI")))] ! 1243: "" ! 1244: "* ! 1245: { ! 1246: if (GET_CODE (operands[2]) == CONST_INT) ! 1247: { ! 1248: operands[2] = gen_rtx (CONST_INT, SImode, 32 - INTVAL (operands[2])); ! 1249: return \"rot %0,%1,%2\"; ! 1250: } ! 1251: return \"or %0,r0,32\;sub %0,%2,%0\;rot %0,%1,%0\"; ! 1252: }") ! 1253: ! 1254: (define_insn "rotrsi3" ! 1255: [(set (match_operand:SI 0 "register_operand" "=r") ! 1256: (rotatert:SI (match_operand:SI 1 "register_operand" "r") ! 1257: (match_operand:SI 2 "arith_operand" "rI")))] ! 1258: "" ! 1259: "rot %0,%1,%2") ! 1260: ! 1261: ;; Special cases of bit-field insns which we should ! 1262: ;; recognize in preference to the general case. ! 1263: ;; These handle aligned 8-bit and 16-bit fields, ! 1264: ;; which can usually be done with move instructions. ! 1265: ! 1266: (define_insn "" ! 1267: [(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+ro") ! 1268: (match_operand:SI 1 "int5_operand" "K") ! 1269: (match_operand:SI 2 "int5_operand" "K")) ! 1270: (match_operand:SI 3 "register_operand" "r"))] ! 1271: "(INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16) ! 1272: && INTVAL (operands[2]) % INTVAL (operands[1]) == 0" ! 1273: "* ! 1274: { ! 1275: if (REG_P (operands[0])) ! 1276: { ! 1277: if (INTVAL (operands[1]) + INTVAL (operands[2]) != 32) ! 1278: return \"mak %0,%3,%1<%2>\"; ! 1279: } ! 1280: else ! 1281: operands[0] ! 1282: = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8); ! 1283: ! 1284: if (GET_CODE (operands[3]) == MEM) ! 1285: operands[3] = adj_offsettable_operand (operands[3], ! 1286: (32 - INTVAL (operands[1])) / 8); ! 1287: if (INTVAL (operands[1]) == 8) ! 1288: return \"st.b %3,%0\"; ! 1289: return \"st.w %3,%0\"; ! 1290: }") ! 1291: ! 1292: (define_insn "" ! 1293: [(set (match_operand:SI 0 "register_operand" "=&r") ! 1294: (zero_extract:SI (match_operand:SI 1 "general_operand" "ro") ! 1295: (match_operand:SI 2 "int5_operand" "K") ! 1296: (match_operand:SI 3 "int5_operand" "K")))] ! 1297: "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16) ! 1298: && INTVAL (operands[3]) % INTVAL (operands[2]) == 0" ! 1299: "* ! 1300: { ! 1301: if (REG_P (operands[1])) ! 1302: { ! 1303: if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32) ! 1304: return \"extu %0,%1,%2<%3>\"; ! 1305: } ! 1306: else ! 1307: operands[1] ! 1308: = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8); ! 1309: ! 1310: if (GET_CODE (operands[0]) == MEM) ! 1311: operands[0] = adj_offsettable_operand (operands[0], ! 1312: (32 - INTVAL (operands[1])) / 8); ! 1313: if (INTVAL (operands[2]) == 8) ! 1314: return \"ld.bu %0,%1\"; ! 1315: return \"ld.hu %0,%1\"; ! 1316: }") ! 1317: ! 1318: (define_insn "" ! 1319: [(set (match_operand:SI 0 "register_operand" "=r") ! 1320: (sign_extract:SI (match_operand:SI 1 "general_operand" "ro") ! 1321: (match_operand:SI 2 "int5_operand" "K") ! 1322: (match_operand:SI 3 "int5_operand" "K")))] ! 1323: "(INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16) ! 1324: && INTVAL (operands[3]) % INTVAL (operands[2]) == 0" ! 1325: "* ! 1326: { ! 1327: if (REG_P (operands[1])) ! 1328: { ! 1329: if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32) ! 1330: return \"extu %0,%1,%2<%3>\"; ! 1331: } ! 1332: else ! 1333: operands[1] ! 1334: = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8); ! 1335: ! 1336: if (INTVAL (operands[2]) == 8) ! 1337: return \"ld.b %0,%1\"; ! 1338: return \"ld.h %0,%1\"; ! 1339: }") ! 1340: ! 1341: ;; Bit field instructions. ! 1342: ! 1343: (define_insn "extv" ! 1344: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 1345: (sign_extract:SI (match_operand:QI 1 "register_operand" "r,r") ! 1346: (match_operand:SI 2 "arith_operand" "K,rK") ! 1347: (match_operand:SI 3 "arith_operand" "K,&r")))] ! 1348: "" ! 1349: "* ! 1350: { ! 1351: if (GET_CODE (operands[3]) == CONST_INT) ! 1352: return \"ext %0,%1,%2<%3>\"; ! 1353: if (GET_CODE (operands[2]) == CONST_INT) ! 1354: { ! 1355: operands[2] = gen_rtx (CONST_INT, VOIDmode, ! 1356: (INTVAL (operands[2]) & 0x1f) << 5); ! 1357: return \"mask %3,%3,0x1f\;or %3,%3,%2\;ext %0,%1,%3\"; ! 1358: } ! 1359: return \"mak %0,%2,5<5>\;mask %3,%3,0x1f\;or %3,%3,%0\;ext %0,%1,%3\"; ! 1360: }") ! 1361: ! 1362: (define_insn "" ! 1363: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 1364: (sign_extract:SI (match_operand:SI 1 "register_operand" "r,r") ! 1365: (match_operand:SI 2 "arith_operand" "K,rK") ! 1366: (match_operand:SI 3 "arith_operand" "K,&r")))] ! 1367: "" ! 1368: "* ! 1369: { ! 1370: if (GET_CODE (operands[3]) == CONST_INT) ! 1371: return \"ext %0,%1,%2<%3>\"; ! 1372: if (GET_CODE (operands[2]) == CONST_INT) ! 1373: { ! 1374: operands[2] = gen_rtx (CONST_INT, VOIDmode, ! 1375: (INTVAL (operands[2]) & 0x1f) << 5); ! 1376: return \"mask %3,%3,0x1f\;or %3,%3,%2\;ext %0,%1,%3\"; ! 1377: } ! 1378: return \"mak %0,%2,5<5>\;mask %3,%3,0x1f\;or %3,%3,%0\;ext %0,%1,%3\"; ! 1379: }") ! 1380: ! 1381: (define_insn "extzv" ! 1382: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 1383: (zero_extract:SI (match_operand:QI 1 "register_operand" "r,r") ! 1384: (match_operand:SI 2 "arith_operand" "K,Kr") ! 1385: (match_operand:SI 3 "arith_operand" "K,&r")))] ! 1386: "" ! 1387: "* ! 1388: { ! 1389: if (GET_CODE (operands[3]) == CONST_INT) ! 1390: return \"extu %0,%1,%2<%3>\"; ! 1391: if (GET_CODE (operands[2]) == CONST_INT) ! 1392: { ! 1393: operands[2] = gen_rtx (CONST_INT, VOIDmode, ! 1394: (INTVAL (operands[2]) & 0x1f) << 5); ! 1395: return \"mask %3,%3,0x1f\;or %3,%3,%2\;extu %0,%1,%3\"; ! 1396: } ! 1397: return \"mak %0,%2,5<5>\;mask %3,%3,0x1f\;or %3,%3,%0\;ext %0,%1,%3\"; ! 1398: }") ! 1399: ! 1400: (define_insn "" ! 1401: [(set (match_operand:SI 0 "register_operand" "=r,r") ! 1402: (zero_extract:SI (match_operand:SI 1 "register_operand" "r,r") ! 1403: (match_operand:SI 2 "arith_operand" "K,Kr") ! 1404: (match_operand:SI 3 "arith_operand" "K,&r")))] ! 1405: "" ! 1406: "* ! 1407: { ! 1408: if (GET_CODE (operands[3]) == CONST_INT) ! 1409: return \"extu %0,%1,%2<%3>\"; ! 1410: if (GET_CODE (operands[2]) == CONST_INT) ! 1411: { ! 1412: operands[2] = gen_rtx (CONST_INT, VOIDmode, ! 1413: (INTVAL (operands[2]) & 0x1f) << 5); ! 1414: return \"mask %3,%3,0x1f\;or %3,%3,%2\;extu %0,%1,%3\"; ! 1415: } ! 1416: return \"mak %0,%2,5<5>\;mask %3,%3,0x1f\;or %3,%3,%0\;ext %0,%1,%3\"; ! 1417: }") ! 1418: ! 1419: (define_insn "" ! 1420: [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "r,r,r") ! 1421: (match_operand:SI 1 "arith_operand" "K,K,&r") ! 1422: (match_operand:SI 2 "arith_operand" "K,&r,&")) ! 1423: (const_int 0))] ! 1424: "" ! 1425: "* ! 1426: { ! 1427: if (GET_CODE (operands[2]) == CONST_INT) ! 1428: return \"clr %0,%0,%1<%2>\"; ! 1429: if (GET_CODE (operands[1]) == CONST_INT) ! 1430: { ! 1431: operands[1] = gen_rtx (CONST_INT, VOIDmode, ! 1432: (INTVAL (operands[1]) & 0x1f) << 5); ! 1433: return \"mask %2,%2,0x1f\;or %2,%2,%1\;clr %0,%0,%2\"; ! 1434: } ! 1435: return \"mak %1,%1,5<5>\;mask %2,%2,0x1f\;or %2,%2,%1\;clr %0,%0,%2\"; ! 1436: }") ! 1437: ! 1438: (define_insn "" ! 1439: [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "r,r,r") ! 1440: (match_operand:SI 1 "arith_operand" "K,K,&r") ! 1441: (match_operand:SI 2 "arith_operand" "K,&r,&r")) ! 1442: (const_int -1))] ! 1443: "" ! 1444: "* ! 1445: { ! 1446: if (GET_CODE (operands[2]) == CONST_INT) ! 1447: return \"set %0,%0,%1<%2>\"; ! 1448: if (GET_CODE (operands[1]) == CONST_INT) ! 1449: { ! 1450: operands[1] = gen_rtx (CONST_INT, VOIDmode, ! 1451: (INTVAL (operands[1]) & 0x1f) << 5); ! 1452: return \"mask %2,%2,0x1f\;or %2,%2,%1\;set %0,%0,%2\"; ! 1453: } ! 1454: return \"mak %1,%1,5<5>\;mask %2,%2,0x1f\;or %2,%2,%1\;set %0,%0,%2\"; ! 1455: }") ! 1456: ! 1457: (define_insn "insv" ! 1458: [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "r,r,r") ! 1459: (match_operand:SI 1 "arith_operand" "K,K,&r") ! 1460: (match_operand:SI 2 "arith_operand" "K,&r,&r")) ! 1461: (match_operand:SI 3 "register_operand" "&r,&r,r"))] ! 1462: "" ! 1463: "* ! 1464: { ! 1465: if (GET_CODE (operands[2]) == CONST_INT) ! 1466: return \"mak %3,%3,%1<%2>\;clr %0,%0,%1<%2>\;or %0,%0,%3\"; ! 1467: if (GET_CODE (operands[1]) == CONST_INT) ! 1468: { ! 1469: operands[1] = gen_rtx (CONST_INT, VOIDmode, ! 1470: (INTVAL (operands[1]) & 0x1f) << 5); ! 1471: return \"mask %2,%2,0x1f\;or %2,%2,%1\;mak %3,%3,%2\;clr %0,%0,%2\;or %0,%0,%3\"; ! 1472: } ! 1473: return \"mak %1,%1,5<5>\;mask %2,%2,0x1f\;or %2,%2,%1\;mak %1,%3,%2\;clr %0,%0,%2\;or %0,%0,%1\"; ! 1474: }") ! 1475: ! 1476: ;; negate insns ! 1477: (define_insn "negsi2" ! 1478: [(set (match_operand:SI 0 "register_operand" "=r") ! 1479: (neg:SI (match_operand:SI 1 "arith_operand" "rI")))] ! 1480: "" ! 1481: "sub %0,r0,%1") ! 1482: ! 1483: (define_insn "negdf2" ! 1484: [(set (match_operand:DF 0 "register_operand" "=r") ! 1485: (neg:DF (match_operand:DF 1 "register_operand" "r")))] ! 1486: "" ! 1487: "fsub.dsd %0,r0,%1") ! 1488: ! 1489: (define_insn "negsf2" ! 1490: [(set (match_operand:SF 0 "register_operand" "=r") ! 1491: (neg:SF (match_operand:SF 1 "register_operand" "r")))] ! 1492: "" ! 1493: "fsub.sss %0,r0,%1") ! 1494: ! 1495: ;; Store condition code values into registers ! 1496: (define_insn "seq" ! 1497: [(set (match_operand:SI 0 "general_operand" "=g") ! 1498: (eq (cc0) (const_int 0)))] ! 1499: "" ! 1500: "* ! 1501: { ! 1502: CC_STATUS_INIT; ! 1503: if (REG_P (operands[0])) ! 1504: return \"extu %0,r25,1<eq>\"; ! 1505: return \"extu r25,r25,1<eq>\;st r25,%0\"; ! 1506: }") ! 1507: ! 1508: (define_peephole ! 1509: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1510: (set (match_operand:SI 1 "general_operand" "=g") ! 1511: (eq (cc0) (const_int 0)))] ! 1512: "" ! 1513: "* ! 1514: { ! 1515: CC_STATUS_INIT; ! 1516: if (REG_P (operands[1])) ! 1517: return \"cmp r25,%0,0\;extu %1,r25,1<eq>\"; ! 1518: return \"cmp r25,%0,0\;extu r25,r25,1<eq>\;st r25,%1\"; ! 1519: }") ! 1520: ! 1521: (define_peephole ! 1522: [(set (cc0) ! 1523: (compare ! 1524: (match_operand:SI 0 "arith_operand" "r") ! 1525: (match_operand:SI 1 "arith_operand" "rI"))) ! 1526: (set (match_operand:SI 2 "general_operand" "=g") ! 1527: (eq (cc0) (const_int 0)))] ! 1528: "" ! 1529: "* ! 1530: { ! 1531: CC_STATUS_INIT; ! 1532: if (REG_P (operands[2])) ! 1533: return \"cmp r25,%0,%1\;extu %2,r25,1<eq>\"; ! 1534: return \"cmp r25,%0,%1\;extu r25,r25,1<eq>\;st r25,%2\"; ! 1535: }") ! 1536: ! 1537: (define_insn "sne" ! 1538: [(set (match_operand:SI 0 "general_operand" "=g") ! 1539: (ne (cc0) (const_int 0)))] ! 1540: "" ! 1541: "* ! 1542: { ! 1543: CC_STATUS_INIT; ! 1544: if (REG_P (operands[0])) ! 1545: return \"extu %0,r25,1<ne>\"; ! 1546: return \"extu r25,r25,1<ne>\;st r25,%0\"; ! 1547: }") ! 1548: ! 1549: (define_peephole ! 1550: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1551: (set (match_operand:SI 1 "general_operand" "=g") ! 1552: (ne (cc0) (const_int 0)))] ! 1553: "" ! 1554: "* ! 1555: { ! 1556: CC_STATUS_INIT; ! 1557: if (REG_P (operands[1])) ! 1558: return \"cmp r25,%0,0\;extu %1,r25,1<ne>\"; ! 1559: return \"cmp r25,%0,0\;extu r25,r25,1<ne>\;st r25,%1\"; ! 1560: }") ! 1561: ! 1562: (define_peephole ! 1563: [(set (cc0) ! 1564: (compare ! 1565: (match_operand:SI 0 "arith_operand" "r") ! 1566: (match_operand:SI 1 "arith_operand" "rI"))) ! 1567: (set (match_operand:SI 2 "general_operand" "=g") ! 1568: (ne (cc0) (const_int 0)))] ! 1569: "" ! 1570: "* ! 1571: { ! 1572: CC_STATUS_INIT; ! 1573: if (REG_P (operands[2])) ! 1574: return \"cmp r25,%0,%1\;extu %2,r25,1<ne>\"; ! 1575: return \"cmp r25,%0,%1\;extu r25,r25,1<ne>\;st r25,%2\"; ! 1576: }") ! 1577: ! 1578: (define_insn "sgt" ! 1579: [(set (match_operand:SI 0 "general_operand" "=g") ! 1580: (gt (cc0) (const_int 0)))] ! 1581: "" ! 1582: "* ! 1583: { ! 1584: CC_STATUS_INIT; ! 1585: if (REG_P (operands[0])) ! 1586: return \"extu %0,r25,1<gt>\"; ! 1587: return \"extu r25,r25,1<gt>\;st r25,%0\"; ! 1588: }") ! 1589: ! 1590: (define_peephole ! 1591: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1592: (set (match_operand:SI 1 "general_operand" "=g") ! 1593: (gt (cc0) (const_int 0)))] ! 1594: "" ! 1595: "* ! 1596: { ! 1597: CC_STATUS_INIT; ! 1598: if (REG_P (operands[1])) ! 1599: return \"cmp r25,%0,0\;extu %1,r25,1<gt>\"; ! 1600: return \"cmp r25,%0,0\;extu r25,r25,1<gt>\;st r25,%1\"; ! 1601: }") ! 1602: ! 1603: (define_peephole ! 1604: [(set (cc0) ! 1605: (compare ! 1606: (match_operand:SI 0 "arith_operand" "r") ! 1607: (match_operand:SI 1 "arith_operand" "rI"))) ! 1608: (set (match_operand:SI 2 "general_operand" "=g") ! 1609: (gt (cc0) (const_int 0)))] ! 1610: "" ! 1611: "* ! 1612: { ! 1613: CC_STATUS_INIT; ! 1614: if (REG_P (operands[2])) ! 1615: return \"cmp r25,%0,%1\;extu %2,r25,1<gt>\"; ! 1616: return \"cmp r25,%0,%1\;extu r25,r25,1<gt>\;st r25,%2\"; ! 1617: }") ! 1618: ! 1619: (define_insn "sgtu" ! 1620: [(set (match_operand:SI 0 "general_operand" "=g") ! 1621: (gtu (cc0) (const_int 0)))] ! 1622: "" ! 1623: "* ! 1624: { ! 1625: CC_STATUS_INIT; ! 1626: if (REG_P (operands[0])) ! 1627: return \"extu %0,r25,1<hi>\"; ! 1628: return \"extu r25,r25,1<hi>\;st r25,%0\"; ! 1629: }") ! 1630: ! 1631: (define_peephole ! 1632: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1633: (set (match_operand:SI 1 "general_operand" "=g") ! 1634: (gtu (cc0) (const_int 0)))] ! 1635: "" ! 1636: "* ! 1637: { ! 1638: CC_STATUS_INIT; ! 1639: if (REG_P (operands[1])) ! 1640: return \"cmp r25,%0,0\;extu %1,r25,1<hi>\"; ! 1641: return \"cmp r25,%0,0\;extu r25,r25,1<hi>\;st r25,%1\"; ! 1642: }") ! 1643: ! 1644: (define_peephole ! 1645: [(set (cc0) ! 1646: (compare ! 1647: (match_operand:SI 0 "arith_operand" "r") ! 1648: (match_operand:SI 1 "arith_operand" "rI"))) ! 1649: (set (match_operand:SI 2 "general_operand" "=g") ! 1650: (gtu (cc0) (const_int 0)))] ! 1651: "" ! 1652: "* ! 1653: { ! 1654: CC_STATUS_INIT; ! 1655: if (REG_P (operands[2])) ! 1656: return \"cmp r25,%0,%1\;extu %2,r25,1<hi>\"; ! 1657: return \"cmp r25,%0,%1\;extu r25,r25,1<hi>\;st r25,%2\"; ! 1658: }") ! 1659: ! 1660: (define_insn "slt" ! 1661: [(set (match_operand:SI 0 "general_operand" "=g") ! 1662: (lt (cc0) (const_int 0)))] ! 1663: "" ! 1664: "* ! 1665: { ! 1666: CC_STATUS_INIT; ! 1667: if (REG_P (operands[0])) ! 1668: return \"extu %0,r25,1<lt>\"; ! 1669: return \"extu r25,r25,1<lt>\;st r25,%0\"; ! 1670: }") ! 1671: ! 1672: (define_peephole ! 1673: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1674: (set (match_operand:SI 1 "general_operand" "=g") ! 1675: (lt (cc0) (const_int 0)))] ! 1676: "" ! 1677: "* ! 1678: { ! 1679: CC_STATUS_INIT; ! 1680: if (REG_P (operands[1])) ! 1681: return \"cmp r25,%0,0\;extu %1,r25,1<lt>\"; ! 1682: return \"cmp r25,%0,0\;extu r25,r25,1<lt>\;st r25,%1\"; ! 1683: }") ! 1684: ! 1685: (define_peephole ! 1686: [(set (cc0) ! 1687: (compare ! 1688: (match_operand:SI 0 "arith_operand" "r") ! 1689: (match_operand:SI 1 "arith_operand" "rI"))) ! 1690: (set (match_operand:SI 2 "general_operand" "=g") ! 1691: (lt (cc0) (const_int 0)))] ! 1692: "" ! 1693: "* ! 1694: { ! 1695: CC_STATUS_INIT; ! 1696: if (REG_P (operands[2])) ! 1697: return \"cmp r25,%0,%1\;extu %2,r25,1<lt>\"; ! 1698: return \"cmp r25,%0,%1\;extu r25,r25,1<lt>\;st r25,%2\"; ! 1699: }") ! 1700: ! 1701: (define_insn "sltu" ! 1702: [(set (match_operand:SI 0 "general_operand" "=g") ! 1703: (ltu (cc0) (const_int 0)))] ! 1704: "" ! 1705: "* ! 1706: { ! 1707: CC_STATUS_INIT; ! 1708: if (REG_P (operands[0])) ! 1709: return \"extu %0,r25,1<lo>\"; ! 1710: return \"extu r25,r25,1<lo>\;st r25,%0\"; ! 1711: }") ! 1712: ! 1713: (define_peephole ! 1714: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1715: (set (match_operand:SI 1 "general_operand" "=g") ! 1716: (ltu (cc0) (const_int 0)))] ! 1717: "" ! 1718: "* ! 1719: { ! 1720: CC_STATUS_INIT; ! 1721: if (REG_P (operands[1])) ! 1722: return \"cmp r25,%0,0\;extu %1,r25,1<lo>\"; ! 1723: return \"cmp r25,%0,0\;extu r25,r25,1<lo>\;st r25,%1\"; ! 1724: }") ! 1725: ! 1726: (define_peephole ! 1727: [(set (cc0) ! 1728: (compare ! 1729: (match_operand:SI 0 "arith_operand" "r") ! 1730: (match_operand:SI 1 "arith_operand" "rI"))) ! 1731: (set (match_operand:SI 2 "general_operand" "=g") ! 1732: (ltu (cc0) (const_int 0)))] ! 1733: "" ! 1734: "* ! 1735: { ! 1736: CC_STATUS_INIT; ! 1737: if (REG_P (operands[2])) ! 1738: return \"cmp r25,%0,%1\;extu %2,r25,1<lo>\"; ! 1739: return \"cmp r25,%0,%1\;extu r25,r25,1<lo>\;st r25,%2\"; ! 1740: }") ! 1741: ! 1742: (define_insn "sge" ! 1743: [(set (match_operand:SI 0 "general_operand" "=g") ! 1744: (ge (cc0) (const_int 0)))] ! 1745: "" ! 1746: "* ! 1747: { ! 1748: CC_STATUS_INIT; ! 1749: if (REG_P (operands[0])) ! 1750: return \"extu %0,r25,1<ge>\"; ! 1751: return \"extu r25,r25,1<ge>\;st r25,%0\"; ! 1752: }") ! 1753: ! 1754: (define_peephole ! 1755: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1756: (set (match_operand:SI 1 "general_operand" "=g") ! 1757: (ge (cc0) (const_int 0)))] ! 1758: "" ! 1759: "* ! 1760: { ! 1761: CC_STATUS_INIT; ! 1762: if (REG_P (operands[1])) ! 1763: return \"cmp r25,%0,0\;extu %1,r25,1<ge>\"; ! 1764: return \"cmp r25,%0,0\;extu r25,r25,1<ge>\;st r25,%1\"; ! 1765: }") ! 1766: ! 1767: (define_peephole ! 1768: [(set (cc0) ! 1769: (compare ! 1770: (match_operand:SI 0 "arith_operand" "r") ! 1771: (match_operand:SI 1 "arith_operand" "rI"))) ! 1772: (set (match_operand:SI 2 "general_operand" "=g") ! 1773: (ge (cc0) (const_int 0)))] ! 1774: "" ! 1775: "* ! 1776: { ! 1777: CC_STATUS_INIT; ! 1778: if (REG_P (operands[2])) ! 1779: return \"cmp r25,%0,%1\;extu %2,r25,1<ge>\"; ! 1780: return \"cmp r25,%0,%1\;extu r25,r25,1<ge>\;st r25,%2\"; ! 1781: }") ! 1782: ! 1783: (define_insn "sgeu" ! 1784: [(set (match_operand:SI 0 "general_operand" "=g") ! 1785: (geu (cc0) (const_int 0)))] ! 1786: "" ! 1787: "* ! 1788: { ! 1789: CC_STATUS_INIT; ! 1790: if (REG_P (operands[0])) ! 1791: return \"extu %0,r25,1<hs>\"; ! 1792: return \"extu r25,r25,1<hs>\;st r25,%0\"; ! 1793: }") ! 1794: ! 1795: (define_peephole ! 1796: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1797: (set (match_operand:SI 1 "general_operand" "=g") ! 1798: (geu (cc0) (const_int 0)))] ! 1799: "" ! 1800: "* ! 1801: { ! 1802: CC_STATUS_INIT; ! 1803: if (REG_P (operands[1])) ! 1804: return \"cmp r25,%0,0\;extu %1,r25,1<hs>\"; ! 1805: return \"cmp r25,%0,0\;extu r25,r25,1<hs>\;st r25,%1\"; ! 1806: }") ! 1807: ! 1808: (define_peephole ! 1809: [(set (cc0) ! 1810: (compare ! 1811: (match_operand:SI 0 "arith_operand" "r") ! 1812: (match_operand:SI 1 "arith_operand" "rI"))) ! 1813: (set (match_operand:SI 2 "general_operand" "=g") ! 1814: (geu (cc0) (const_int 0)))] ! 1815: "" ! 1816: "* ! 1817: { ! 1818: CC_STATUS_INIT; ! 1819: if (REG_P (operands[2])) ! 1820: return \"cmp r25,%0,%1\;extu %2,r25,1<hs>\"; ! 1821: return \"cmp r25,%0,%1\;extu r25,r25,1<hs>\;st r25,%2\"; ! 1822: }") ! 1823: ! 1824: (define_insn "sle" ! 1825: [(set (match_operand:SI 0 "general_operand" "=g") ! 1826: (le (cc0) (const_int 0)))] ! 1827: "" ! 1828: "* ! 1829: { ! 1830: CC_STATUS_INIT; ! 1831: if (REG_P (operands[0])) ! 1832: return \"extu %0,r25,1<le>\"; ! 1833: return \"extu r25,r25,1<le>\;st r25,%0\"; ! 1834: }") ! 1835: ! 1836: (define_peephole ! 1837: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1838: (set (match_operand:SI 1 "general_operand" "=g") ! 1839: (le (cc0) (const_int 0)))] ! 1840: "" ! 1841: "* ! 1842: { ! 1843: CC_STATUS_INIT; ! 1844: if (REG_P (operands[1])) ! 1845: return \"cmp r25,%0,0\;extu %1,r25,1<le>\"; ! 1846: return \"cmp r25,%0,0\;extu r25,r25,1<le>\;st r25,%1\"; ! 1847: }") ! 1848: ! 1849: (define_peephole ! 1850: [(set (cc0) ! 1851: (compare ! 1852: (match_operand:SI 0 "arith_operand" "r") ! 1853: (match_operand:SI 1 "arith_operand" "rI"))) ! 1854: (set (match_operand:SI 2 "general_operand" "=g") ! 1855: (le (cc0) (const_int 0)))] ! 1856: "" ! 1857: "* ! 1858: { ! 1859: CC_STATUS_INIT; ! 1860: if (REG_P (operands[2])) ! 1861: return \"cmp r25,%0,%1\;extu %2,r25,1<le>\"; ! 1862: return \"cmp r25,%0,%1\;extu r25,r25,1<le>\;st r25,%2\"; ! 1863: }") ! 1864: ! 1865: (define_insn "sleu" ! 1866: [(set (match_operand:SI 0 "general_operand" "=g") ! 1867: (leu (cc0) (const_int 0)))] ! 1868: "" ! 1869: "* ! 1870: { ! 1871: CC_STATUS_INIT; ! 1872: if (REG_P (operands[0])) ! 1873: return \"extu %0,r25,1<ls>\"; ! 1874: return \"extu r25,r25,1<ls>\;st r25,%0\"; ! 1875: }") ! 1876: ! 1877: (define_peephole ! 1878: [(set (cc0) (match_operand:SI 0 "register_operand" "r")) ! 1879: (set (match_operand:SI 1 "general_operand" "=g") ! 1880: (leu (cc0) (const_int 0)))] ! 1881: "" ! 1882: "* ! 1883: { ! 1884: CC_STATUS_INIT; ! 1885: if (REG_P (operands[1])) ! 1886: return \"cmp r25,%0,0\;extu %1,r25,1<ls>\"; ! 1887: return \"cmp r25,%0,0\;extu r25,r25,1<ls>\;st r25,%1\"; ! 1888: }") ! 1889: ! 1890: (define_peephole ! 1891: [(set (cc0) ! 1892: (compare ! 1893: (match_operand:SI 0 "arith_operand" "r") ! 1894: (match_operand:SI 1 "arith_operand" "rI"))) ! 1895: (set (match_operand:SI 2 "general_operand" "=g") ! 1896: (leu (cc0) (const_int 0)))] ! 1897: "" ! 1898: "* ! 1899: { ! 1900: CC_STATUS_INIT; ! 1901: if (REG_P (operands[2])) ! 1902: return \"cmp r25,%0,%1\;extu %2,r25,1<ls>\"; ! 1903: return \"cmp r25,%0,%1\;extu r25,r25,1<ls>\;st r25,%2\"; ! 1904: }") ! 1905: ! 1906: ! 1907: ;; Unconditional and other jump instructions ! 1908: (define_insn "jump" ! 1909: [(set (pc) ! 1910: (label_ref (match_operand 0 "" "")))] ! 1911: "" ! 1912: "br %l0") ! 1913: ! 1914: (define_insn "" ! 1915: [(set (pc) ! 1916: (label_ref (match_operand 0 "" ""))) ! 1917: (clobber (const_int 1))] ! 1918: "" ! 1919: "br.n %l0") ! 1920: ! 1921: (define_insn "tablejump" ! 1922: [(set (pc) (match_operand:SI 0 "register_operand" "r")) ! 1923: (use (label_ref (match_operand 1 "" "")))] ! 1924: "" ! 1925: "jmp %0") ! 1926: ! 1927: ;;- jump to subroutine ! 1928: (define_insn "call" ! 1929: [(call (match_operand:SI 0 "memory_operand" "m") ! 1930: (match_operand:SI 1 "general_operand" "g")) ! 1931: (use (reg:SI 1))] ! 1932: ;;- Don't use operand 1 for most machines. ! 1933: "" ! 1934: "* ! 1935: { ! 1936: operands[0] = XEXP (operands[0], 0); ! 1937: if (REG_P (operands[0])) ! 1938: return \"jsr %0\"; ! 1939: return \"bsr %0\"; ! 1940: }") ! 1941: ! 1942: (define_insn "" ! 1943: [(call (match_operand:SI 0 "memory_operand" "m") ! 1944: (match_operand:SI 1 "general_operand" "g")) ! 1945: (clobber (const_int 1)) ! 1946: (use (reg:SI 1))] ! 1947: ;;- Don't use operand 1 for most machines. ! 1948: "" ! 1949: "* ! 1950: { ! 1951: operands[0] = XEXP (operands[0], 0); ! 1952: if (REG_P (operands[0])) ! 1953: return \"jsr.n %0\"; ! 1954: return \"bsr.n %0\"; ! 1955: }") ! 1956: ! 1957: ;;- jump to subroutine ! 1958: (define_insn "call_value" ! 1959: [(set (match_operand 0 "" "=r") ! 1960: (call (match_operand:SI 1 "memory_operand" "m") ! 1961: (match_operand:SI 2 "general_operand" "g"))) ! 1962: (use (reg:SI 1))] ! 1963: ;;- Don't use operand 2 for most machines. ! 1964: "" ! 1965: "* ! 1966: { ! 1967: operands[1] = XEXP (operands[1], 0); ! 1968: if (REG_P (operands[1])) ! 1969: return \"jsr %1\"; ! 1970: return \"bsr %1\"; ! 1971: }") ! 1972: ! 1973: (define_insn "" ! 1974: [(set (match_operand 0 "" "=r") ! 1975: (call (match_operand:SI 1 "memory_operand" "m") ! 1976: (match_operand:SI 2 "general_operand" "g"))) ! 1977: (use (reg:SI 1)) ! 1978: (clobber (const_int 2))] ! 1979: ;;- Don't use operand 2 for most machines. ! 1980: "" ! 1981: "* ! 1982: { ! 1983: operands[1] = XEXP (operands[1], 0); ! 1984: if (REG_P (operands[1])) ! 1985: return \"jsr.n %1\"; ! 1986: return \"bsr.n %1\"; ! 1987: }") ! 1988: ! 1989: ;; A memory ref with constant address is not normally valid. ! 1990: ;; But it is valid in a call insns. This pattern allows the ! 1991: ;; loading of the address to combine with the call. ! 1992: (define_insn "" ! 1993: [(call (mem:SI (match_operand:SI 0 "" "i")) ! 1994: (match_operand:SI 1 "general_operand" "g")) ! 1995: (use (reg:SI 1))] ! 1996: ;;- Don't use operand 1 for most machines. ! 1997: "GET_CODE (operands[0]) == SYMBOL_REF" ! 1998: "bsr %0") ! 1999: ! 2000: (define_insn "" ! 2001: [(call (mem:SI (match_operand:SI 0 "" "i")) ! 2002: (match_operand:SI 1 "general_operand" "g")) ! 2003: (clobber (const_int 1)) ! 2004: (use (reg:SI 1))] ! 2005: ;;- Don't use operand 1 for most machines. ! 2006: "GET_CODE (operands[0]) == SYMBOL_REF" ! 2007: "bsr.n %0") ! 2008: ! 2009: (define_insn "nop" ! 2010: [(const_int 0)] ! 2011: "" ! 2012: "nop") ! 2013: ! 2014: ;; Recognize jbs and jbc instructions. ! 2015: ! 2016: (define_insn "" ! 2017: [(set (pc) ! 2018: (if_then_else ! 2019: (ne (sign_extract:SI (match_operand:SI 0 "register_operand" "r") ! 2020: (const_int 1) ! 2021: (match_operand:SI 1 "int5_operand" "K")) ! 2022: (const_int 0)) ! 2023: (label_ref (match_operand 2 "" "")) ! 2024: (pc)))] ! 2025: "" ! 2026: "bb1 %1,%0,%l2") ! 2027: ! 2028: (define_insn "" ! 2029: [(set (pc) ! 2030: (if_then_else ! 2031: (eq (sign_extract:SI (match_operand:SI 0 "register_operand" "r") ! 2032: (const_int 1) ! 2033: (match_operand:SI 1 "int5_operand" "K")) ! 2034: (const_int 0)) ! 2035: (label_ref (match_operand 2 "" "")) ! 2036: (pc)))] ! 2037: "" ! 2038: "bb0 %1,%0,%l2") ! 2039: ! 2040: (define_insn "" ! 2041: [(set (pc) ! 2042: (if_then_else ! 2043: (ne (sign_extract:SI (match_operand:SI 0 "register_operand" "r") ! 2044: (const_int 1) ! 2045: (match_operand:SI 1 "int5_operand" "K")) ! 2046: (const_int 0)) ! 2047: (pc) ! 2048: (label_ref (match_operand 2 "" ""))))] ! 2049: "" ! 2050: "bb0 %1,%0,%l2") ! 2051: ! 2052: (define_insn "" ! 2053: [(set (pc) ! 2054: (if_then_else ! 2055: (eq (sign_extract:SI (match_operand:SI 0 "register_operand" "r") ! 2056: (const_int 1) ! 2057: (match_operand:SI 1 "int5_operand" "K")) ! 2058: (const_int 0)) ! 2059: (pc) ! 2060: (label_ref (match_operand 2 "" ""))))] ! 2061: "" ! 2062: "bb1 %1,%0,%l2") ! 2063: ! 2064: (define_insn "" ! 2065: [(set (pc) ! 2066: (if_then_else ! 2067: (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r") ! 2068: (const_int 1) ! 2069: (match_operand:SI 1 "int5_operand" "K")) ! 2070: (const_int 0)) ! 2071: (label_ref (match_operand 2 "" "")) ! 2072: (pc)))] ! 2073: "" ! 2074: "bb1 %1,%0,%l2") ! 2075: ! 2076: (define_insn "" ! 2077: [(set (pc) ! 2078: (if_then_else ! 2079: (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r") ! 2080: (const_int 1) ! 2081: (match_operand:SI 1 "int5_operand" "K")) ! 2082: (const_int 0)) ! 2083: (label_ref (match_operand 2 "" "")) ! 2084: (pc)))] ! 2085: "" ! 2086: "bb0 %1,%0,%l2") ! 2087: ! 2088: (define_insn "" ! 2089: [(set (pc) ! 2090: (if_then_else ! 2091: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2092: (match_operand:SI 1 "int5_operand" "K")) ! 2093: (const_int 0)) ! 2094: (pc) ! 2095: (label_ref (match_operand 2 "" ""))))] ! 2096: "exact_log2 (INTVAL (operands[1])) >= 0" ! 2097: "* ! 2098: { ! 2099: operands[1] ! 2100: = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); ! 2101: return \"bb1 %1,%0,%l2\"; ! 2102: }") ! 2103: ! 2104: (define_insn "" ! 2105: [(set (pc) ! 2106: (if_then_else ! 2107: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2108: (match_operand:SI 1 "int5_operand" "K")) ! 2109: (const_int 0)) ! 2110: (label_ref (match_operand 2 "" "")) ! 2111: (pc)))] ! 2112: "exact_log2 (INTVAL (operands[1])) >= 0" ! 2113: "* ! 2114: { ! 2115: operands[1] ! 2116: = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); ! 2117: return \"bb0 %1,%0,%l2\"; ! 2118: }") ! 2119: ! 2120: (define_insn "" ! 2121: [(set (pc) ! 2122: (if_then_else ! 2123: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2124: (match_operand:SI 1 "int5_operand" "K")) ! 2125: (const_int 0)) ! 2126: (pc) ! 2127: (label_ref (match_operand 2 "" ""))))] ! 2128: "exact_log2 (INTVAL (operands[1])) >= 0" ! 2129: "* ! 2130: { ! 2131: operands[1] ! 2132: = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); ! 2133: return \"bb0 %1,%0,%l2\"; ! 2134: }") ! 2135: ! 2136: (define_insn "" ! 2137: [(set (pc) ! 2138: (if_then_else ! 2139: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2140: (match_operand:SI 1 "int5_operand" "K")) ! 2141: (const_int 0)) ! 2142: (label_ref (match_operand 2 "" "")) ! 2143: (pc)))] ! 2144: "exact_log2 (INTVAL (operands[1])) >= 0" ! 2145: "* ! 2146: { ! 2147: operands[1] ! 2148: = gen_rtx (CONST_INT, VOIDmode, exact_log2 (INTVAL (operands[1]))); ! 2149: return \"bb1 %1,%0,%l2\"; ! 2150: }") ! 2151: ! 2152: (define_insn "" ! 2153: [(set (pc) ! 2154: (if_then_else ! 2155: (ne (sign_extract:SI (match_operand:SI 0 "general_operand" "r") ! 2156: (const_int 1) ! 2157: (match_operand:SI 1 "int5_operand" "K")) ! 2158: (const_int 0)) ! 2159: (pc) ! 2160: (label_ref (match_operand 2 "" ""))))] ! 2161: "" ! 2162: "bb0 %1,%0,%l2") ! 2163: ! 2164: (define_insn "" ! 2165: [(set (pc) ! 2166: (if_then_else ! 2167: (eq (sign_extract:SI (match_operand:SI 0 "general_operand" "r") ! 2168: (const_int 1) ! 2169: (match_operand:SI 1 "int5_operand" "K")) ! 2170: (const_int 0)) ! 2171: (pc) ! 2172: (label_ref (match_operand 2 "" ""))))] ! 2173: "" ! 2174: "bb1 %1,%0,%l2") ! 2175: ! 2176: (define_insn "" ! 2177: [(set (pc) ! 2178: (if_then_else ! 2179: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2180: (const_int 1)) ! 2181: (const_int 0)) ! 2182: (label_ref (match_operand 1 "" "")) ! 2183: (pc)))] ! 2184: "" ! 2185: "bb1 0,%0,%l1") ! 2186: ! 2187: (define_insn "" ! 2188: [(set (pc) ! 2189: (if_then_else ! 2190: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2191: (const_int 1)) ! 2192: (const_int 0)) ! 2193: (label_ref (match_operand 1 "" "")) ! 2194: (pc)))] ! 2195: "" ! 2196: "bb0 0,%0,%l1") ! 2197: ! 2198: (define_insn "" ! 2199: [(set (pc) ! 2200: (if_then_else ! 2201: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2202: (const_int 1)) ! 2203: (const_int 0)) ! 2204: (pc) ! 2205: (label_ref (match_operand 1 "" ""))))] ! 2206: "" ! 2207: "bb0 0,%0,%l1") ! 2208: ! 2209: (define_insn "" ! 2210: [(set (pc) ! 2211: (if_then_else ! 2212: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2213: (const_int 1)) ! 2214: (const_int 0)) ! 2215: (pc) ! 2216: (label_ref (match_operand 1 "" ""))))] ! 2217: "" ! 2218: "bb1 0,%0,%l1") ! 2219: ! 2220: ;; These four entries allow a jlbc or jlbs,to be made ! 2221: ;; by combination with a bic. ! 2222: (define_insn "" ! 2223: [(set (pc) ! 2224: (if_then_else ! 2225: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2226: (not:SI (const_int -2))) ! 2227: (const_int 0)) ! 2228: (label_ref (match_operand 1 "" "")) ! 2229: (pc)))] ! 2230: "" ! 2231: "bb1 0,%0,%l1") ! 2232: ! 2233: (define_insn "" ! 2234: [(set (pc) ! 2235: (if_then_else ! 2236: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2237: (not:SI (const_int -2))) ! 2238: (const_int 0)) ! 2239: (label_ref (match_operand 1 "" "")) ! 2240: (pc)))] ! 2241: "" ! 2242: "bb0 0,%0,%l1") ! 2243: ! 2244: (define_insn "" ! 2245: [(set (pc) ! 2246: (if_then_else ! 2247: (ne (and:SI (match_operand:SI 0 "register_operand" "r") ! 2248: (not:SI (const_int -2))) ! 2249: (const_int 0)) ! 2250: (pc) ! 2251: (label_ref (match_operand 1 "" ""))))] ! 2252: "" ! 2253: "bb0 0,%0,%l1") ! 2254: ! 2255: (define_insn "" ! 2256: [(set (pc) ! 2257: (if_then_else ! 2258: (eq (and:SI (match_operand:SI 0 "register_operand" "r") ! 2259: (not:SI (const_int -2))) ! 2260: (const_int 0)) ! 2261: (pc) ! 2262: (label_ref (match_operand 1 "" ""))))] ! 2263: "" ! 2264: "bb1 0,%0,%l1") ! 2265: ;;- Local variables: ! 2266: ;;- mode:emacs-lisp ! 2267: ;;- comment-start: ";;- " ! 2268: ;;- eval: (set-syntax-table (copy-sequence (syntax-table))) ! 2269: ;;- eval: (modify-syntax-entry ?[ "(]") ! 2270: ;;- eval: (modify-syntax-entry ?] ")[") ! 2271: ;;- eval: (modify-syntax-entry ?{ "(}") ! 2272: ;;- eval: (modify-syntax-entry ?} "){") ! 2273: ;;- End:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.