|
|
1.1 root 1: ;;- Machine description for GNU compiler -- System/370 version. 1.1.1.2 ! root 2: ;; Copyright (C) 1989, 1993, 1994 Free Software Foundation, Inc. ! 3: ;; Contributed by Jan Stein ([email protected]). ! 4: ;; Modifed for MVS C/370 by Dave Pitts ([email protected]) 1.1 root 5: 6: ;; This file is part of GNU CC. 7: 8: ;; GNU CC is free software; you can redistribute it and/or modify 9: ;; it under the terms of the GNU General Public License as published by 10: ;; the Free Software Foundation; either version 2, or (at your option) 11: ;; any later version. 12: 13: ;; GNU CC is distributed in the hope that it will be useful, 14: ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 15: ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16: ;; GNU General Public License for more details. 17: 18: ;; You should have received a copy of the GNU General Public License 19: ;; along with GNU CC; see the file COPYING. If not, write to 20: ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 21: 22: ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code 23: ;;- updates for most instructions. 24: 25: ;; 26: ;; Special constraints for 370 machine description: 27: ;; 28: ;; a -- Any address register from 1 to 15. 29: ;; d -- Any register from 0 to 15. 30: ;; I -- An 8-bit constant (0..255). 31: ;; J -- A 12-bit constant (0..4095). 32: ;; K -- A 16-bit constant (-32768..32767). 33: ;; 34: ;; Special formats used for outputting 370 instructions. 35: ;; 36: ;; %B -- Print a constant byte integer. 37: ;; %H -- Print a signed 16-bit constant. 38: ;; %L -- Print least significant word of a CONST_DOUBLE. 39: ;; %M -- Print most significant word of a CONST_DOUBLE. 40: ;; %N -- Print next register (second word of a DImode reg). 41: ;; %O -- Print the offset of a memory reference (PLUS (REG) (CONST_INT)). 42: ;; %R -- Print the register of a memory reference (PLUS (REG) (CONST_INT)). 43: ;; %X -- Print a constant byte integer in hex. 44: ;; 45: ;; We have a special contraint for pattern matching. 46: ;; 47: ;; s_operand -- Matches a valid S operand in a RS, SI or SS type instruction. 48: ;; 49: ;; r_or_s_operand -- Matches a register or a valid S operand in a RS, SI 50: ;; or SS type instruction or a register 51: ;; 52: ;; For MVS C/370 we use the following stack locations for: 53: ;; 54: ;; 136 - internal function result buffer 55: ;; 140 - numeric conversion buffer 56: ;; 144 - pointer to internal function result buffer 57: ;; 148 - start of automatic variables and function arguments 58: ;; 59: ;; To support programs larger than a page, 4096 bytes, PAGE_REGISTER points 60: ;; to a page origin table, all internal labels are generated to reload the 61: ;; BASE_REGISTER knowing what page it is on and all branch instructions go 62: ;; directly to the target if it is known that the target is on the current 63: ;; page (essentially backward references). All forward references and off 64: ;; page references are handled by loading the address of target into a 65: ;; register and branching indirectly. 66: ;; 67: ;; Some *di patterns have been commented out per advice from RMS, as gcc 68: ;; will generate the right things to do. 69: ;; 70: 71: ;; 72: ;;- Test instructions. 73: ;; 74: 75: ; 76: ; tstdi instruction pattern(s). 77: ; 78: 79: (define_insn "tstdi" 80: [(set (cc0) 81: (match_operand:DI 0 "register_operand" "d"))] 82: "" 83: "* 84: { 85: check_label_emit (); 86: mvs_check_page (0, 4, 0); 87: return \"SRDA %0,0\"; 88: }") 89: 90: ; 91: ; tstsi instruction pattern(s). 92: ; 93: 94: (define_insn "tstsi" 95: [(set (cc0) 96: (match_operand:SI 0 "register_operand" "d"))] 97: "" 98: "* 99: { 100: check_label_emit (); 101: mvs_check_page (0, 2, 0); 102: return \"LTR %0,%0\"; 103: }") 104: 105: ; 106: ; tsthi instruction pattern(s). 107: ; 108: 109: (define_insn "tsthi" 110: [(set (cc0) 111: (match_operand:HI 0 "register_operand" "d"))] 112: "" 113: "* 114: { 115: check_label_emit (); 116: mvs_check_page (0, 4, 2); 117: return \"CH %0,=H'0'\"; 118: }") 119: 120: ; 121: ; tstqi instruction pattern(s). 122: ; 123: 124: (define_insn "" 125: [(set (cc0) 126: (match_operand:QI 0 "r_or_s_operand" "dm"))] 127: "unsigned_jump_follows_p (insn)" 128: "* 129: { 130: check_label_emit (); 131: if (REG_P (operands[0])) 132: { 133: mvs_check_page (0, 4, 4); 134: return \"N %0,=X'000000FF'\"; 135: } 136: mvs_check_page (0, 4, 0); 137: return \"CLI %0,0\"; 138: }") 139: 140: (define_insn "tstqi" 141: [(set (cc0) 142: (match_operand:QI 0 "register_operand" "d"))] 143: "" 144: "* 145: { 146: check_label_emit (); 147: if (unsigned_jump_follows_p (insn)) 148: { 149: mvs_check_page (0, 4, 4); 150: return \"N %0,=X'000000FF'\"; 151: } 152: mvs_check_page (0, 8, 0); 153: return \"SLL %0,24\;SRA %0,24\"; 154: }") 155: 156: ; 157: ; tstdf instruction pattern(s). 158: ; 159: 160: (define_insn "tstdf" 161: [(set (cc0) 162: (match_operand:DF 0 "general_operand" "f"))] 163: "" 164: "* 165: { 166: check_label_emit (); 167: mvs_check_page (0, 2, 0); 168: return \"LTDR %0,%0\"; 169: }") 170: 171: ; 172: ; tstsf instruction pattern(s). 173: ; 174: 175: (define_insn "tstsf" 176: [(set (cc0) 177: (match_operand:SF 0 "general_operand" "f"))] 178: "" 179: "* 180: { 181: check_label_emit (); 182: mvs_check_page (0, 2, 0); 183: return \"LTER %0,%0\"; 184: }") 185: 186: ;; 187: ;;- Compare instructions. 188: ;; 189: 190: ; 191: ; cmpdi instruction pattern(s). 192: ; 193: 194: ;(define_insn "cmpdi" 195: ; [(set (cc0) 196: ; (compare (match_operand:DI 0 "register_operand" "d") 197: ; (match_operand:DI 1 "general_operand" "")))] 198: ; "" 199: ; "* 200: ;{ 201: ; check_label_emit (); 202: ; if (REG_P (operands[1])) 203: ; { 204: ; mvs_check_page (0, 8, 0); 205: ; if (unsigned_jump_follows_p (insn)) 206: ; return \"CLR %0,%1\;BNE *+6\;CLR %N0,%N1\"; 207: ; return \"CR %0,%1\;BNE *+6\;CLR %N0,%N1\"; 208: ; } 209: ; mvs_check_page (0, 12, 0); 210: ; if (unsigned_jump_follows_p (insn)) 211: ; return \"CL %0,%M1\;BNE *+8\;CL %N0,%L1\"; 212: ; return \"C %0,%M1\;BNE *+8\;CL %N0,%L1\"; 213: ;}") 214: 215: ; 216: ; cmpsi instruction pattern(s). 217: ; 218: 219: (define_insn "cmpsi" 220: [(set (cc0) 221: (compare (match_operand:SI 0 "register_operand" "d") 222: (match_operand:SI 1 "general_operand" "")))] 223: "" 224: "* 225: { 226: check_label_emit (); 227: if (REG_P (operands[1])) 228: { 229: mvs_check_page (0, 2, 0); 230: if (unsigned_jump_follows_p (insn)) 231: return \"CLR %0,%1\"; 232: return \"CR %0,%1\"; 233: } 234: if (GET_CODE (operands[1]) == CONST_INT) 235: { 236: mvs_check_page (0, 4, 4); 237: if (unsigned_jump_follows_p (insn)) 238: return \"CL %0,=F'%c1'\"; 239: return \"C %0,=F'%c1'\"; 240: } 241: mvs_check_page (0, 4, 0); 242: if (unsigned_jump_follows_p (insn)) 243: return \"CL %0,%1\"; 244: return \"C %0,%1\"; 245: }") 246: 247: ; 248: ; cmphi instruction pattern(s). 249: ; 250: 251: (define_insn "cmphi" 252: [(set (cc0) 253: (compare (match_operand:HI 0 "register_operand" "d") 254: (match_operand:HI 1 "general_operand" "")))] 255: "" 256: "* 257: { 258: check_label_emit (); 259: if (REG_P (operands[1])) 260: { 261: mvs_check_page (0, 8, 0); 262: if (unsigned_jump_follows_p (insn)) 263: return \"STH %1,140(,13)\;CLM %0,3,140(13)\"; 264: return \"STH %1,140(,13)\;CH %0,140(,13)\"; 265: } 266: if (GET_CODE (operands[1]) == CONST_INT) 267: { 268: mvs_check_page (0, 4, 2); 269: return \"CH %0,=H'%h1'\"; 270: } 271: mvs_check_page (0, 4, 0); 272: return \"CH %0,%1\"; 273: }") 274: 275: ; 276: ; cmpqi instruction pattern(s). 277: ; 278: 279: (define_insn "" 280: [(set (cc0) 281: (compare (match_operand:QI 0 "r_or_s_operand" "g") 282: (match_operand:QI 1 "r_or_s_operand" "g")))] 283: "unsigned_jump_follows_p (insn)" 284: "* 285: { 286: check_label_emit (); 287: if (REG_P (operands[0])) 288: { 289: if (REG_P (operands[1])) 290: { 291: mvs_check_page (0, 8, 0); 292: return \"STC %1,140(,13)\;CLM %0,1,140(13)\"; 293: } 294: if (GET_CODE (operands[1]) == CONST_INT) 295: { 296: mvs_check_page (0, 4, 1); 297: return \"CLM %0,1,=X'%X1'\"; 298: } 299: mvs_check_page (0, 4, 0); 300: return \"CLM %0,1,%1\"; 301: } 302: else if (GET_CODE (operands[0]) == CONST_INT) 303: { 304: cc_status.flags |= CC_REVERSED; 305: if (REG_P (operands[1])) 306: { 307: mvs_check_page (0, 4, 1); 308: return \"CLM %1,1,=X'%X0'\"; 309: } 310: mvs_check_page (0, 4, 0); 311: return \"CLI %1,%B0\"; 312: } 313: if (GET_CODE (operands[1]) == CONST_INT) 314: { 315: mvs_check_page (0, 4, 0); 316: return \"CLI %0,%B1\"; 317: } 318: if (GET_CODE (operands[1]) == MEM) 319: { 320: mvs_check_page (0, 6, 0); 321: return \"CLC %O0(1,%R0),%1\"; 322: } 323: cc_status.flags |= CC_REVERSED; 324: mvs_check_page (0, 4, 0); 325: return \"CLM %1,1,%0\"; 326: }") 327: 328: (define_insn "cmpqi" 329: [(set (cc0) 330: (compare (match_operand:QI 0 "register_operand" "d") 331: (match_operand:QI 1 "general_operand" "di")))] 332: "" 333: "* 334: { 335: check_label_emit (); 336: if (unsigned_jump_follows_p (insn)) 337: { 338: if (REG_P (operands[1])) 339: { 340: mvs_check_page (0, 4, 0); 341: return \"CLM %0,1,%1\"; 342: } 343: if (GET_CODE (operands[1]) == CONST_INT) 344: { 345: mvs_check_page (0, 4, 1); 346: return \"CLM %0,1,=X'%X1'\"; 347: } 348: mvs_check_page (0, 8, 0); 349: return \"STC %1,140(,13)\;CLM %0,1,140(13)\"; 350: } 351: if (REG_P (operands[1])) 352: { 353: mvs_check_page (0, 18, 0); 354: return \"SLL %0,24\;SRA %0,24\;SLL %1,24\;SRA %1,24\;CR %0,%1\"; 355: } 356: mvs_check_page (0, 12, 0); 357: return \"SLL %0,24\;SRA %0,24\;C %0,%1\"; 358: }") 359: 360: ; 361: ; cmpdf instruction pattern(s). 362: ; 363: 364: (define_insn "cmpdf" 365: [(set (cc0) 366: (compare (match_operand:DF 0 "general_operand" "f,mF") 367: (match_operand:DF 1 "general_operand" "fmF,f")))] 368: "" 369: "* 370: { 371: check_label_emit (); 372: if (FP_REG_P (operands[0])) 373: { 374: if (FP_REG_P (operands[1])) 375: { 376: mvs_check_page (0, 2, 0); 377: return \"CDR %0,%1\"; 378: } 379: mvs_check_page (0, 4, 0); 380: return \"CD %0,%1\"; 381: } 382: cc_status.flags |= CC_REVERSED; 383: mvs_check_page (0, 4, 0); 384: return \"CD %1,%0\"; 385: }") 386: 387: ; 388: ; cmpsf instruction pattern(s). 389: ; 390: 391: (define_insn "cmpsf" 392: [(set (cc0) 393: (compare (match_operand:SF 0 "general_operand" "f,mF") 394: (match_operand:SF 1 "general_operand" "fmF,f")))] 395: "" 396: "* 397: { 398: check_label_emit (); 399: if (FP_REG_P (operands[0])) 400: { 401: if (FP_REG_P (operands[1])) 402: { 403: mvs_check_page (0, 2, 0); 404: return \"CER %0,%1\"; 405: } 406: mvs_check_page (0, 4, 0); 407: return \"CE %0,%1\"; 408: } 409: cc_status.flags |= CC_REVERSED; 410: mvs_check_page (0, 4, 0); 411: return \"CE %1,%0\"; 412: }") 413: 414: ; 415: ; cmpstrsi instruction pattern(s). 416: ; 417: 418: (define_expand "cmpstrsi" 419: [(set (match_operand:SI 0 "general_operand" "") 420: (compare (match_operand:BLK 1 "general_operand" "") 421: (match_operand:BLK 2 "general_operand" ""))) 422: (use (match_operand:SI 3 "general_operand" "")) 423: (use (match_operand:SI 4 "" ""))] 424: "" 425: " 426: { 427: rtx op1, op2; 428: 429: op1 = XEXP (operands[1], 0); 430: if (GET_CODE (op1) == REG 431: || (GET_CODE (op1) == PLUS && GET_CODE (XEXP (op1, 0)) == REG 432: && GET_CODE (XEXP (op1, 1)) == CONST_INT 433: && (unsigned) INTVAL (XEXP (op1, 1)) < 4096)) 434: { 435: op1 = operands[1]; 436: } 437: else 438: { 439: op1 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op1)); 440: } 441: 442: op2 = XEXP (operands[2], 0); 443: if (GET_CODE (op2) == REG 444: || (GET_CODE (op2) == PLUS && GET_CODE (XEXP (op2, 0)) == REG 445: && GET_CODE (XEXP (op2, 1)) == CONST_INT 446: && (unsigned) INTVAL (XEXP (op2, 1)) < 4096)) 447: { 448: op2 = operands[2]; 449: } 450: else 451: { 452: op2 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op2)); 453: } 454: 455: if (GET_CODE (operands[3]) == CONST_INT && INTVAL (operands[3]) < 256) 456: { 457: emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, 458: gen_rtx (SET, VOIDmode, operands[0], 459: gen_rtx (COMPARE, VOIDmode, op1, op2)), 460: gen_rtx (USE, VOIDmode, operands[3])))); 461: } 462: else 463: { 464: rtx reg1 = gen_reg_rtx (DImode); 465: rtx reg2 = gen_reg_rtx (DImode); 466: rtx subreg = gen_rtx (SUBREG, SImode, reg1, 1); 467: 468: emit_insn (gen_rtx (SET, VOIDmode, subreg, operands[3])); 469: emit_insn (gen_rtx (SET, VOIDmode, gen_rtx (SUBREG, SImode, reg2, 1), 470: subreg)); 471: emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (5, 472: gen_rtx (SET, VOIDmode, operands[0], 473: gen_rtx (COMPARE, VOIDmode, op1, op2)), 474: gen_rtx (USE, VOIDmode, reg1), 475: gen_rtx (USE, VOIDmode, reg2), 476: gen_rtx (CLOBBER, VOIDmode, reg1), 477: gen_rtx (CLOBBER, VOIDmode, reg2)))); 478: } 479: DONE; 480: }") 481: 482: ; Compare a block that is less than 256 bytes in length. 483: 484: (define_insn "" 485: [(set (match_operand:SI 0 "register_operand" "d") 486: (compare (match_operand:BLK 1 "s_operand" "m") 487: (match_operand:BLK 2 "s_operand" "m"))) 488: (use (match_operand:QI 3 "immediate_operand" "I"))] 489: "((unsigned) INTVAL (operands[3]) < 256)" 490: "* 491: { 492: check_label_emit (); 493: mvs_check_page (0, 22, 0); 494: return \"LA %0,1\;CLC %O1(%c3,%R1),%2\;BH *+12\;BL *+6\;SLR %0,%0\;LNR %0,%0\"; 495: }") 496: 497: ; Compare a block that is larger than 255 bytes in length. 498: 499: (define_insn "" 500: [(set (match_operand:SI 0 "register_operand" "d") 501: (compare (match_operand:BLK 1 "general_operand" "m") 502: (match_operand:BLK 2 "general_operand" "m"))) 503: (use (match_operand:DI 3 "register_operand" "d")) 504: (use (match_operand:DI 4 "register_operand" "d")) 505: (clobber (match_dup 3)) 506: (clobber (match_dup 4))] 507: "" 508: "* 509: { 510: check_label_emit (); 511: mvs_check_page (0, 26, 0); 512: return \"LA %3,%1\;LA %4,%2\;LA %0,1\;CLCL %3,%4\;BH *+12\;BL *+6\;SLR %0,%0\;LNR %0,%0\"; 513: }") 514: 515: ;; 516: ;;- Move instructions. 517: ;; 518: 519: ; 520: ; movdi instruction pattern(s). 521: ; 522: 523: (define_insn "" 524: [(set (match_operand:DI 0 "r_or_s_operand" "=dm") 525: (match_operand:DI 1 "r_or_s_operand" "dim*fF"))] 526: "TARGET_CHAR_INSTRUCTIONS" 527: "* 528: { 529: check_label_emit (); 530: if (REG_P (operands[0])) 531: { 532: if (FP_REG_P (operands[1])) 533: { 534: mvs_check_page (0, 8, 0); 535: return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; 536: } 537: if (REG_P (operands[1])) 538: { 539: mvs_check_page (0, 4, 0); 540: return \"LR %0,%1\;LR %N0,%N1\"; 541: } 542: if (operands[1] == const0_rtx) 543: { 544: CC_STATUS_INIT; 545: mvs_check_page (0, 4, 0); 546: return \"SLR %0,%0\;SLR %N0,%N0\"; 547: } 548: if (GET_CODE (operands[1]) == CONST_INT 549: && (unsigned) INTVAL (operands[1]) < 4096) 550: { 551: CC_STATUS_INIT; 552: mvs_check_page (0, 6, 0); 553: return \"SLR %0,%0\;LA %N0,%c1\"; 554: } 555: if (GET_CODE (operands[1]) == CONST_INT) 556: { 557: CC_STATUS_SET (operands[0], operands[1]); 558: mvs_check_page (0, 8, 0); 559: return \"L %0,%1\;SRDA %0,32\"; 560: } 561: mvs_check_page (0, 4, 0); 562: return \"LM %0,%N0,%1\"; 563: } 564: else if (FP_REG_P (operands[1])) 565: { 566: mvs_check_page (0, 4, 0); 567: return \"STD %1,%0\"; 568: } 569: else if (REG_P (operands[1])) 570: { 571: mvs_check_page (0, 4, 0); 572: return \"STM %1,%N1,%0\"; 573: } 574: mvs_check_page (0, 6, 0); 575: return \"MVC %O0(8,%R0),%1\"; 576: }") 577: 578: (define_insn "movdi" 579: [(set (match_operand:DI 0 "general_operand" "=dm") 580: (match_operand:DI 1 "general_operand" "dim*fF"))] 581: "" 582: "* 583: { 584: check_label_emit (); 585: if (REG_P (operands[0])) 586: { 587: if (FP_REG_P (operands[1])) 588: { 589: mvs_check_page (0, 8, 0); 590: return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; 591: } 592: if (REG_P (operands[1])) 593: { 594: mvs_check_page (0, 4, 0); 595: return \"LR %0,%1\;LR %N0,%N1\"; 596: } 597: if (operands[1] == const0_rtx) 598: { 599: CC_STATUS_INIT; 600: mvs_check_page (0, 4, 0); 601: return \"SLR %0,%0\;SLR %N0,%N0\"; 602: } 603: if (GET_CODE (operands[1]) == CONST_INT 604: && (unsigned) INTVAL (operands[1]) < 4096) 605: { 606: CC_STATUS_INIT; 607: mvs_check_page (0, 6, 0); 608: return \"SLR %0,%0\;LA %N0,%c1\"; 609: } 610: if (GET_CODE (operands[1]) == CONST_INT) 611: { 612: CC_STATUS_SET (operands[0], operands[1]); 613: mvs_check_page (0, 8, 0); 614: return \"L %0,%1\;SRDA %0,32\"; 615: } 616: mvs_check_page (0, 4, 0); 617: return \"LM %0,%N0,%1\"; 618: } 619: else if (FP_REG_P (operands[1])) 620: { 621: mvs_check_page (0, 4, 0); 622: return \"STD %1,%0\"; 623: } 624: mvs_check_page (0, 4, 0); 625: return \"STM %1,%N1,%0\"; 626: }") 627: 628: ; 629: ; movsi instruction pattern(s). 630: ; 631: 632: (define_insn "" 633: [(set (match_operand:SI 0 "r_or_s_operand" "=dm,dm") 634: (match_operand:SI 1 "r_or_s_operand" "dim,*fF"))] 635: "TARGET_CHAR_INSTRUCTIONS" 636: "* 637: { 638: check_label_emit (); 639: if (REG_P (operands[0])) 640: { 641: if (FP_REG_P (operands[1])) 642: { 643: mvs_check_page (0, 8, 0); 644: return \"STE %1,140(,13)\;L %0,140(,13)\"; 645: } 646: if (REG_P (operands[1])) 647: { 648: mvs_check_page (0, 2, 0); 649: return \"LR %0,%1\"; 650: } 651: if (operands[1] == const0_rtx) 652: { 653: CC_STATUS_INIT; 654: mvs_check_page (0, 2, 0); 655: return \"SLR %0,%0\"; 656: } 657: if (GET_CODE (operands[1]) == CONST_INT 658: && (unsigned) INTVAL (operands[1]) < 4096) 659: { 660: mvs_check_page (0, 4, 0); 661: return \"LA %0,%c1\"; 662: } 663: mvs_check_page (0, 4, 0); 664: return \"L %0,%1\"; 665: } 666: else if (FP_REG_P (operands[1])) 667: { 668: mvs_check_page (0, 4, 0); 669: return \"STE %1,%0\"; 670: } 671: else if (REG_P (operands[1])) 672: { 673: mvs_check_page (0, 4, 0); 674: return \"ST %1,%0\"; 675: } 676: mvs_check_page (0, 6, 0); 677: return \"MVC %O0(4,%R0),%1\"; 678: }") 679: 680: (define_insn "movsi" 681: [(set (match_operand:SI 0 "general_operand" "=d,dm") 682: (match_operand:SI 1 "general_operand" "dimF,*fd"))] 683: "" 684: "* 685: { 686: check_label_emit (); 687: if (REG_P (operands[0])) 688: { 689: if (FP_REG_P (operands[1])) 690: { 691: mvs_check_page (0, 8, 0); 692: return \"STE %1,140(,13)\;L %0,140(,13)\"; 693: } 694: if (REG_P (operands[1])) 695: { 696: mvs_check_page (0, 2, 0); 697: return \"LR %0,%1\"; 698: } 699: if (operands[1] == const0_rtx) 700: { 701: CC_STATUS_INIT; 702: mvs_check_page (0, 2, 0); 703: return \"SLR %0,%0\"; 704: } 705: if (GET_CODE (operands[1]) == CONST_INT 706: && (unsigned) INTVAL (operands[1]) < 4096) 707: { 708: mvs_check_page (0, 4, 0); 709: return \"LA %0,%c1\"; 710: } 711: mvs_check_page (0, 4, 0); 712: return \"L %0,%1\"; 713: } 714: else if (FP_REG_P (operands[1])) 715: { 716: mvs_check_page (0, 4, 0); 717: return \"STE %1,%0\"; 718: } 719: mvs_check_page (0, 4, 0); 720: return \"ST %1,%0\"; 721: }") 722: 723: ;(define_expand "movsi" 724: ; [(set (match_operand:SI 0 "general_operand" "=d,dm") 725: ; (match_operand:SI 1 "general_operand" "dimF,*fd"))] 726: ; "" 727: ; " 728: ;{ 729: ; rtx op0, op1; 730: ; 731: ; op0 = operands[0]; 732: ; if (GET_CODE (op0) == CONST 733: ; && GET_CODE (XEXP (XEXP (op0, 0), 0)) == SYMBOL_REF 734: ; && SYMBOL_REF_FLAG (XEXP (XEXP (op0, 0), 0))) 735: ; { 736: ; op0 = gen_rtx (MEM, SImode, copy_to_mode_reg (SImode, XEXP (op0, 0))); 737: ; } 738: ; 739: ; op1 = operands[1]; 740: ; if (GET_CODE (op1) == CONST 741: ; && GET_CODE (XEXP (XEXP (op1, 0), 0)) == SYMBOL_REF 742: ; && SYMBOL_REF_FLAG (XEXP (XEXP (op1, 0), 0))) 743: ; { 744: ; op1 = gen_rtx (MEM, SImode, copy_to_mode_reg (SImode, XEXP (op1, 0))); 745: ; } 746: ; 747: ; emit_insn (gen_rtx (SET, VOIDmode, op0, op1)); 748: ; DONE; 749: ;}") 750: 751: ; 752: ; movhi instruction pattern(s). 753: ; 754: 755: (define_insn "" 756: [(set (match_operand:HI 0 "r_or_s_operand" "=g") 757: (match_operand:HI 1 "r_or_s_operand" "g"))] 758: "TARGET_CHAR_INSTRUCTIONS" 759: "* 760: { 761: check_label_emit (); 762: if (REG_P (operands[0])) 763: { 764: if (REG_P (operands[1])) 765: { 766: mvs_check_page (0, 2, 0); 767: return \"LR %0,%1\"; 768: } 769: if (operands[1] == const0_rtx) 770: { 771: CC_STATUS_INIT; 772: mvs_check_page (0, 2, 0); 773: return \"SLR %0,%0\"; 774: } 775: if (GET_CODE (operands[1]) == CONST_INT 776: && (unsigned) INTVAL (operands[1]) < 4096) 777: { 778: mvs_check_page (0, 4, 0); 779: return \"LA %0,%c1\"; 780: } 781: if (GET_CODE (operands[1]) == CONST_INT) 782: { 783: mvs_check_page (0, 4, 2); 784: return \"LH %0,=H'%h1'\"; 785: } 786: mvs_check_page (0, 4, 0); 787: return \"LH %0,%1\"; 788: } 789: else if (REG_P (operands[1])) 790: { 791: mvs_check_page (0, 4, 0); 792: return \"STH %1,%0\"; 793: } 794: if (GET_CODE (operands[1]) == CONST_INT) 795: { 796: mvs_check_page (0, 6, 0); 797: return \"MVC %O0(2,%R0),=H'%h1'\"; 798: } 799: mvs_check_page (0, 6, 0); 800: return \"MVC %O0(2,%R0),%1\"; 801: }") 802: 803: (define_insn "movhi" 804: [(set (match_operand:HI 0 "general_operand" "=d,m") 805: (match_operand:HI 1 "general_operand" "g,d"))] 806: "" 807: "* 808: { 809: check_label_emit (); 810: if (REG_P (operands[0])) 811: { 812: if (REG_P (operands[1])) 813: { 814: mvs_check_page (0, 2, 0); 815: return \"LR %0,%1\"; 816: } 817: if (operands[1] == const0_rtx) 818: { 819: CC_STATUS_INIT; 820: mvs_check_page (0, 2, 0); 821: return \"SLR %0,%0\"; 822: } 823: if (GET_CODE (operands[1]) == CONST_INT 824: && (unsigned) INTVAL (operands[1]) < 4096) 825: { 826: mvs_check_page (0, 4, 0); 827: return \"LA %0,%c1\"; 828: } 829: if (GET_CODE (operands[1]) == CONST_INT) 830: { 831: mvs_check_page (0, 4, 2); 832: return \"LH %0,=H'%h1'\"; 833: } 834: mvs_check_page (0, 4, 0); 835: return \"LH %0,%1\"; 836: } 837: mvs_check_page (0, 4, 0); 838: return \"STH %1,%0\"; 839: }") 840: 841: ; 842: ; movqi instruction pattern(s). 843: ; 844: 845: (define_insn "" 846: [(set (match_operand:QI 0 "r_or_s_operand" "=g") 847: (match_operand:QI 1 "r_or_s_operand" "g"))] 848: "TARGET_CHAR_INSTRUCTIONS" 849: "* 850: { 851: check_label_emit (); 852: if (REG_P (operands[0])) 853: { 854: if (REG_P (operands[1])) 855: { 856: mvs_check_page (0, 2, 0); 857: return \"LR %0,%1\"; 858: } 859: if (operands[1] == const0_rtx) 860: { 861: CC_STATUS_INIT; 862: mvs_check_page (0, 2, 0); 863: return \"SLR %0,%0\"; 864: } 865: if (GET_CODE (operands[1]) == CONST_INT) 866: { 867: if (INTVAL (operands[1]) >= 0) 868: { 869: mvs_check_page (0, 4, 0); 870: return \"LA %0,%c1\"; 871: } 872: mvs_check_page (0, 4, 0); 873: return \"L %0,=F'%c1'\"; 874: } 875: mvs_check_page (0, 4, 0); 876: return \"IC %0,%1\"; 877: } 878: else if (REG_P (operands[1])) 879: { 880: mvs_check_page (0, 4, 0); 881: return \"STC %1,%0\"; 882: } 883: else if (GET_CODE (operands[1]) == CONST_INT) 884: { 885: mvs_check_page (0, 4, 0); 886: return \"MVI %0,%B1\"; 887: } 888: mvs_check_page (0, 6, 0); 889: return \"MVC %O0(1,%R0),%1\"; 890: }") 891: 892: (define_insn "movqi" 893: [(set (match_operand:QI 0 "general_operand" "=d,m") 894: (match_operand:QI 1 "general_operand" "g,d"))] 895: "" 896: "* 897: { 898: check_label_emit (); 899: if (REG_P (operands[0])) 900: { 901: if (REG_P (operands[1])) 902: { 903: mvs_check_page (0, 2, 0); 904: return \"LR %0,%1\"; 905: } 906: if (operands[1] == const0_rtx) 907: { 908: CC_STATUS_INIT; 909: mvs_check_page (0, 2, 0); 910: return \"SLR %0,%0\"; 911: } 912: if (GET_CODE (operands[1]) == CONST_INT) 913: { 914: if (INTVAL (operands[1]) >= 0) 915: { 916: mvs_check_page (0, 4, 0); 917: return \"LA %0,%c1\"; 918: } 919: mvs_check_page (0, 4, 0); 920: return \"L %0,=F'%c1'\"; 921: } 922: mvs_check_page (0, 4, 0); 923: return \"IC %0,%1\"; 924: } 925: mvs_check_page (0, 4, 0); 926: return \"STC %1,%0\"; 927: }") 928: 929: ; 930: ; movestrictqi instruction pattern(s). 931: ; 932: 933: (define_insn "movestrictqi" 934: [(set (strict_low_part (match_operand:QI 0 "general_operand" "=d")) 935: (match_operand:QI 1 "general_operand" "g"))] 936: "" 937: "* 938: { 939: check_label_emit (); 940: if (REG_P (operands[1])) 941: { 942: mvs_check_page (0, 8, 0); 943: return \"STC %1,140(,13)\;IC %0,140(,13)\"; 944: } 945: mvs_check_page (0, 4, 0); 946: return \"IC %0,%1\"; 947: }") 948: 949: ; 950: ; movstricthi instruction pattern(s). 951: ; 952: 953: (define_insn "" 954: [(set (strict_low_part (match_operand:HI 0 "register_operand" "=d")) 955: (match_operand:HI 1 "r_or_s_operand" "g"))] 956: "" 957: "* 958: { 959: check_label_emit (); 960: if (REG_P (operands[1])) 961: { 962: mvs_check_page (0, 8, 0); 963: return \"STH %1,140(,13)\;ICM %0,3,140(13)\"; 964: } 965: else if (GET_CODE (operands[1]) == CONST_INT) 966: { 967: mvs_check_page (0, 4, 2); 968: return \"ICM %0,3,=H'%h1'\"; 969: } 970: mvs_check_page (0, 4, 0); 971: return \"ICM %0,3,%1\"; 972: }") 973: 974: (define_insn "movestricthi" 975: [(set (strict_low_part (match_operand:HI 0 "general_operand" "=dm")) 976: (match_operand:HI 1 "general_operand" "d"))] 977: "" 978: "* 979: { 980: check_label_emit (); 981: if (REG_P (operands[0])) 982: { 983: mvs_check_page (0, 8, 0); 984: return \"STH %1,140(,13)\;ICM %0,3,140(13)\"; 985: } 986: mvs_check_page (0, 4, 0); 987: return \"STH %1,%0\"; 988: }") 989: 990: ; 991: ; movdf instruction pattern(s). 992: ; 993: 994: (define_insn "" 995: [(set (match_operand:DF 0 "r_or_s_operand" "=fm,fm,*dm") 996: (match_operand:DF 1 "r_or_s_operand" "fmF,*dm,fmF"))] 997: "TARGET_CHAR_INSTRUCTIONS" 998: "* 999: { 1000: check_label_emit (); 1001: if (FP_REG_P (operands[0])) 1002: { 1003: if (FP_REG_P (operands[1])) 1004: { 1005: mvs_check_page (0, 2, 0); 1006: return \"LDR %0,%1\"; 1007: } 1008: if (REG_P (operands[1])) 1009: { 1010: mvs_check_page (0, 8, 0); 1011: return \"STM %1,%N1,140(13)\;LD %0,140(,13)\"; 1012: } 1013: if (operands[1] == const0_rtx) 1014: { 1015: CC_STATUS_SET (operands[0], operands[1]); 1016: mvs_check_page (0, 2, 0); 1017: return \"SDR %0,%0\"; 1018: } 1019: mvs_check_page (0, 4, 0); 1020: return \"LD %0,%1\"; 1021: } 1022: if (REG_P (operands[0])) 1023: { 1024: if (FP_REG_P (operands[1])) 1025: { 1026: mvs_check_page (0, 12, 0); 1027: return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; 1028: } 1029: mvs_check_page (0, 4, 0); 1030: return \"LM %0,%N0,%1\"; 1031: } 1032: else if (FP_REG_P (operands[1])) 1033: { 1034: mvs_check_page (0, 4, 0); 1035: return \"STD %1,%0\"; 1036: } 1037: else if (REG_P (operands[1])) 1038: { 1039: mvs_check_page (0, 4, 0); 1040: return \"STM %1,%N1,%0\"; 1041: } 1042: mvs_check_page (0, 6, 0); 1043: return \"MVC %O0(8,%R0),%1\"; 1044: }") 1045: 1046: (define_insn "movdf" 1047: [(set (match_operand:DF 0 "general_operand" "=f,fm,m,*d") 1048: (match_operand:DF 1 "general_operand" "fmF,*d,f,fmF"))] 1049: "" 1050: "* 1051: { 1052: check_label_emit (); 1053: if (FP_REG_P (operands[0])) 1054: { 1055: if (FP_REG_P (operands[1])) 1056: { 1057: mvs_check_page (0, 2, 0); 1058: return \"LDR %0,%1\"; 1059: } 1060: if (REG_P (operands[1])) 1061: { 1062: mvs_check_page (0, 8, 0); 1063: return \"STM %1,%N1,140(13)\;LD %0,140(,13)\"; 1064: } 1065: if (operands[1] == const0_rtx) 1066: { 1067: CC_STATUS_SET (operands[0], operands[1]); 1068: mvs_check_page (0, 2, 0); 1069: return \"SDR %0,%0\"; 1070: } 1071: mvs_check_page (0, 4, 0); 1072: return \"LD %0,%1\"; 1073: } 1074: else if (REG_P (operands[0])) 1075: { 1076: if (FP_REG_P (operands[1])) 1077: { 1078: mvs_check_page (0, 12, 0); 1079: return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; 1080: } 1081: mvs_check_page (0, 4, 0); 1082: return \"LM %0,%N0,%1\"; 1083: } 1084: else if (FP_REG_P (operands[1])) 1085: { 1086: mvs_check_page (0, 4, 0); 1087: return \"STD %1,%0\"; 1088: } 1089: mvs_check_page (0, 4, 0); 1090: return \"STM %1,%N1,%0\"; 1091: }") 1092: 1093: ; 1094: ; movsf instruction pattern(s). 1095: ; 1096: 1097: (define_insn "" 1098: [(set (match_operand:SF 0 "r_or_s_operand" "=fm,fm,*dm") 1099: (match_operand:SF 1 "r_or_s_operand" "fmF,*dm,fmF"))] 1100: "TARGET_CHAR_INSTRUCTIONS" 1101: "* 1102: { 1103: check_label_emit (); 1104: if (FP_REG_P (operands[0])) 1105: { 1106: if (FP_REG_P (operands[1])) 1107: { 1108: mvs_check_page (0, 2, 0); 1109: return \"LER %0,%1\"; 1110: } 1111: if (REG_P (operands[1])) 1112: { 1113: mvs_check_page (0, 8, 0); 1114: return \"ST %1,140(,13)\;LE %0,140(,13)\"; 1115: } 1116: if (operands[1] == const0_rtx) 1117: { 1118: CC_STATUS_SET (operands[0], operands[1]); 1119: mvs_check_page (0, 2, 0); 1120: return \"SER %0,%0\"; 1121: } 1122: mvs_check_page (0, 4, 0); 1123: return \"LE %0,%1\"; 1124: } 1125: else if (REG_P (operands[0])) 1126: { 1127: if (FP_REG_P (operands[1])) 1128: { 1129: mvs_check_page (0, 8, 0); 1130: return \"STE %1,140(,13)\;L %0,140(,13)\"; 1131: } 1132: mvs_check_page (0, 4, 0); 1133: return \"L %0,%1\"; 1134: } 1135: else if (FP_REG_P (operands[1])) 1136: { 1137: mvs_check_page (0, 4, 0); 1138: return \"STE %1,%0\"; 1139: } 1140: else if (REG_P (operands[1])) 1141: { 1142: mvs_check_page (0, 4, 0); 1143: return \"ST %1,%0\"; 1144: } 1145: mvs_check_page (0, 6, 0); 1146: return \"MVC %O0(4,%R0),%1\"; 1147: }") 1148: 1149: (define_insn "movsf" 1150: [(set (match_operand:SF 0 "general_operand" "=f,fm,m,*d") 1151: (match_operand:SF 1 "general_operand" "fmF,*d,f,fmF"))] 1152: "" 1153: "* 1154: { 1155: check_label_emit (); 1156: if (FP_REG_P (operands[0])) 1157: { 1158: if (FP_REG_P (operands[1])) 1159: { 1160: mvs_check_page (0, 2, 0); 1161: return \"LER %0,%1\"; 1162: } 1163: if (REG_P (operands[1])) 1164: { 1165: mvs_check_page (0, 8, 0); 1166: return \"ST %1,140(,13)\;LE %0,140(,13)\"; 1167: } 1168: if (operands[1] == const0_rtx) 1169: { 1170: CC_STATUS_SET (operands[0], operands[1]); 1171: mvs_check_page (0, 2, 0); 1172: return \"SER %0,%0\"; 1173: } 1174: mvs_check_page (0, 4, 0); 1175: return \"LE %0,%1\"; 1176: } 1177: else if (REG_P (operands[0])) 1178: { 1179: if (FP_REG_P (operands[1])) 1180: { 1181: mvs_check_page (0, 8, 0); 1182: return \"STE %1,140(,13)\;L %0,140(,13)\"; 1183: } 1184: mvs_check_page (0, 4, 0); 1185: return \"L %0,%1\"; 1186: } 1187: else if (FP_REG_P (operands[1])) 1188: { 1189: mvs_check_page (0, 4, 0); 1190: return \"STE %1,%0\"; 1191: } 1192: mvs_check_page (0, 4, 0); 1193: return \"ST %1,%0\"; 1194: }") 1195: 1196: ; 1197: ; movstrsi instruction pattern(s). 1198: ; 1199: 1200: (define_expand "movstrsi" 1201: [(set (match_operand:BLK 0 "general_operand" "") 1202: (match_operand:BLK 1 "general_operand" "")) 1203: (use (match_operand:SI 2 "general_operand" "")) 1204: (match_operand 3 "" "")] 1205: "" 1206: " 1207: { 1208: rtx op0, op1; 1209: 1210: op0 = XEXP (operands[0], 0); 1211: if (GET_CODE (op0) == REG 1212: || (GET_CODE (op0) == PLUS && GET_CODE (XEXP (op0, 0)) == REG 1213: && GET_CODE (XEXP (op0, 1)) == CONST_INT 1214: && (unsigned) INTVAL (XEXP (op0, 1)) < 4096)) 1215: { 1216: op0 = operands[0]; 1217: } 1218: else 1219: { 1220: op0 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op0)); 1221: } 1222: 1223: op1 = XEXP (operands[1], 0); 1224: if (GET_CODE (op1) == REG 1225: || (GET_CODE (op1) == PLUS && GET_CODE (XEXP (op1, 0)) == REG 1226: && GET_CODE (XEXP (op1, 1)) == CONST_INT 1227: && (unsigned) INTVAL (XEXP (op1, 1)) < 4096)) 1228: { 1229: op1 = operands[1]; 1230: } 1231: else 1232: { 1233: op1 = gen_rtx (MEM, BLKmode, copy_to_mode_reg (SImode, op1)); 1234: } 1235: 1236: if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) < 256) 1237: { 1238: emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, 1239: gen_rtx (SET, VOIDmode, op0, op1), 1240: gen_rtx (USE, VOIDmode, operands[2])))); 1241: } 1242: else 1243: { 1244: rtx reg1 = gen_reg_rtx (DImode); 1245: rtx reg2 = gen_reg_rtx (DImode); 1246: rtx subreg = gen_rtx (SUBREG, SImode, reg1, 1); 1247: 1248: emit_insn (gen_rtx (SET, VOIDmode, subreg, operands[2])); 1249: emit_insn (gen_rtx (SET, VOIDmode, gen_rtx (SUBREG, SImode, reg2, 1), 1250: subreg)); 1251: emit_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (5, 1252: gen_rtx (SET, VOIDmode, op0, op1), 1253: gen_rtx (USE, VOIDmode, reg1), 1254: gen_rtx (USE, VOIDmode, reg2), 1255: gen_rtx (CLOBBER, VOIDmode, reg1), 1256: gen_rtx (CLOBBER, VOIDmode, reg2)))); 1257: } 1258: DONE; 1259: }") 1260: 1261: ; Move a block that is less than 256 bytes in length. 1262: 1263: (define_insn "" 1264: [(set (match_operand:BLK 0 "s_operand" "=m") 1265: (match_operand:BLK 1 "s_operand" "m")) 1266: (use (match_operand 2 "immediate_operand" "I"))] 1267: "((unsigned) INTVAL (operands[2]) < 256)" 1268: "* 1269: { 1270: check_label_emit (); 1271: mvs_check_page (0, 6, 0); 1272: return \"MVC %O0(%c2,%R0),%1\"; 1273: }") 1274: 1275: ; Move a block that is larger than 255 bytes in length. 1276: 1277: (define_insn "" 1278: [(set (match_operand:BLK 0 "general_operand" "=m") 1279: (match_operand:BLK 1 "general_operand" "m")) 1280: (use (match_operand:DI 2 "register_operand" "d")) 1281: (use (match_operand:DI 3 "register_operand" "d")) 1282: (clobber (match_dup 2)) 1283: (clobber (match_dup 3))] 1284: "" 1285: "* 1286: { 1287: check_label_emit (); 1288: mvs_check_page (0, 10, 0); 1289: return \"LA %2,%0\;LA %3,%1\;MVCL %2,%3\"; 1290: }") 1291: 1292: ;; 1293: ;;- Conversion instructions. 1294: ;; 1295: 1296: ; 1297: ; extendsidi2 instruction pattern(s). 1298: ; 1299: 1300: (define_expand "extendsidi2" 1301: [(set (match_operand:DI 0 "general_operand" "") 1302: (sign_extend:DI (match_operand:SI 1 "general_operand" "")))] 1303: "" 1304: " 1305: { 1306: if (GET_CODE (operands[1]) != CONST_INT) 1307: { 1308: emit_insn (gen_rtx (SET, VOIDmode, 1309: operand_subword (operands[0], 0, 1, DImode), operands[1])); 1310: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 1311: gen_rtx (ASHIFTRT, DImode, operands[0], 1312: gen_rtx (CONST_INT, SImode, 32)))); 1313: } 1314: else 1315: { 1316: if (INTVAL (operands[1]) < 0) 1317: { 1318: emit_insn (gen_rtx (SET, VOIDmode, 1319: operand_subword (operands[0], 0, 1, DImode), 1320: gen_rtx (CONST_INT, SImode, -1))); 1321: } 1322: else 1323: { 1324: emit_insn (gen_rtx (SET, VOIDmode, 1325: operand_subword (operands[0], 0, 1, DImode), 1326: gen_rtx (CONST_INT, SImode, 0))); 1327: } 1328: emit_insn (gen_rtx (SET, VOIDmode, gen_lowpart (SImode, operands[0]), 1329: operands[1])); 1330: } 1331: DONE; 1332: }") 1333: 1334: ; 1335: ; extendhisi2 instruction pattern(s). 1336: ; 1337: 1338: (define_insn "extendhisi2" 1339: [(set (match_operand:SI 0 "general_operand" "=d,m") 1340: (sign_extend:SI (match_operand:HI 1 "general_operand" "g,d")))] 1341: "" 1342: "* 1343: { 1344: check_label_emit (); 1345: if (REG_P (operands[0])) 1346: { 1347: if (REG_P (operands[1])) 1348: if (REGNO (operands[0]) != REGNO (operands[1])) 1349: { 1350: mvs_check_page (0, 2, 0); 1351: return \"LR %0,%1\;SLL %0,16\;SRA %0,16\"; 1352: } 1353: else 1354: return \"\"; /* Should be empty. 16-bits regs are always 32-bits. */ 1355: if (operands[1] == const0_rtx) 1356: { 1357: CC_STATUS_INIT; 1358: mvs_check_page (0, 2, 0); 1359: return \"SLR %0,%0\"; 1360: } 1361: if (GET_CODE (operands[1]) == CONST_INT 1362: && (unsigned) INTVAL (operands[1]) < 4096) 1363: { 1364: mvs_check_page (0, 4, 0); 1365: return \"LA %0,%c1\"; 1366: } 1367: if (GET_CODE (operands[1]) == CONST_INT) 1368: { 1369: mvs_check_page (0, 4, 2); 1370: return \"LH %0,=H'%h1'\"; 1371: } 1372: mvs_check_page (0, 4, 0); 1373: return \"LH %0,%1\"; 1374: } 1375: mvs_check_page (0, 4, 0); 1376: return \"SLL %0,16\;SRA %0,16\;ST %1,%0\"; 1377: }") 1378: 1379: ; 1380: ; extendqisi2 instruction pattern(s). 1381: ; 1382: 1383: (define_insn "extendqisi2" 1384: [(set (match_operand:SI 0 "general_operand" "=d") 1385: (sign_extend:SI (match_operand:QI 1 "general_operand" "0mi")))] 1386: "" 1387: "* 1388: { 1389: check_label_emit (); 1390: CC_STATUS_SET (operands[0], operands[1]); 1391: if (REG_P (operands[1])) 1392: { 1393: mvs_check_page (0, 8, 0); 1394: return \"SLL %0,24\;SRA %0,24\"; 1395: } 1396: if (s_operand (operands[1])) 1397: { 1398: mvs_check_page (0, 8, 0); 1399: return \"ICM %0,8,%1\;SRA %0,24\"; 1400: } 1401: mvs_check_page (0, 12, 0); 1402: return \"IC %0,%1\;SLL %0,24\;SRA %0,24\"; 1403: }") 1404: 1405: ; 1406: ; extendqihi2 instruction pattern(s). 1407: ; 1408: 1409: (define_insn "extendqihi2" 1410: [(set (match_operand:HI 0 "general_operand" "=d") 1411: (sign_extend:HI (match_operand:QI 1 "general_operand" "0m")))] 1412: "" 1413: "* 1414: { 1415: check_label_emit (); 1416: CC_STATUS_SET (operands[0], operands[1]); 1417: if (REG_P (operands[1])) 1418: { 1419: mvs_check_page (0, 8, 0); 1420: return \"SLL %0,24\;SRA %0,24\"; 1421: } 1422: if (s_operand (operands[1])) 1423: { 1424: mvs_check_page (0, 8, 0); 1425: return \"ICM %0,8,%1\;SRA %0,24\"; 1426: } 1427: mvs_check_page (0, 12, 0); 1428: return \"IC %0,%1\;SLL %0,24\;SRA %0,24\"; 1429: }") 1430: 1431: ; 1432: ; zero_extendsidi2 instruction pattern(s). 1433: ; 1434: 1435: (define_expand "zero_extendsidi2" 1436: [(set (match_operand:DI 0 "general_operand" "") 1437: (zero_extend:DI (match_operand:SI 1 "general_operand" "")))] 1438: "" 1439: " 1440: { 1441: emit_insn (gen_rtx (SET, VOIDmode, 1442: operand_subword (operands[0], 0, 1, DImode), operands[1])); 1443: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 1444: gen_rtx (LSHIFTRT, DImode, operands[0], 1445: gen_rtx (CONST_INT, SImode, 32)))); 1446: DONE; 1447: }") 1448: 1449: ; 1450: ; zero_extendhisi2 instruction pattern(s). 1451: ; 1452: 1453: (define_insn "zero_extendhisi2" 1454: [(set (match_operand:SI 0 "general_operand" "=d") 1455: (zero_extend:SI (match_operand:HI 1 "general_operand" "0")))] 1456: "" 1457: "* 1458: { 1459: check_label_emit (); 1460: CC_STATUS_SET (operands[0], operands[1]); 1461: mvs_check_page (0, 4, 4); 1462: return \"N %1,=X'0000FFFF'\"; 1463: }") 1464: 1465: ; 1466: ; zero_extendqisi2 instruction pattern(s). 1467: ; 1468: 1469: (define_insn "zero_extendqisi2" 1470: [(set (match_operand:SI 0 "general_operand" "=d,&d") 1471: (zero_extend:SI (match_operand:QI 1 "general_operand" "0i,m")))] 1472: "" 1473: "* 1474: { 1475: check_label_emit (); 1476: if (REG_P (operands[1])) 1477: { 1478: CC_STATUS_SET (operands[0], operands[1]); 1479: mvs_check_page (0, 4, 4); 1480: return \"N %0,=X'000000FF'\"; 1481: } 1482: if (GET_CODE (operands[1]) == CONST_INT) 1483: { 1484: mvs_check_page (0, 4, 0); 1485: return \"LA %0,%c1\"; 1486: } 1487: CC_STATUS_INIT; 1488: mvs_check_page (0, 8, 0); 1489: return \"SLR %0,%0\;IC %0,%1\"; 1490: }") 1491: 1492: ; 1493: ; zero_extendqihi2 instruction pattern(s). 1494: ; 1495: 1496: (define_insn "zero_extendqihi2" 1497: [(set (match_operand:HI 0 "general_operand" "=d,&d") 1498: (zero_extend:HI (match_operand:QI 1 "general_operand" "0i,m")))] 1499: "" 1500: "* 1501: { 1502: check_label_emit (); 1503: if (REG_P (operands[1])) 1504: { 1505: CC_STATUS_SET (operands[0], operands[1]); 1506: mvs_check_page (0, 4, 4); 1507: return \"N %0,=X'000000FF'\"; 1508: } 1509: if (GET_CODE (operands[1]) == CONST_INT) 1510: { 1511: mvs_check_page (0, 4, 0); 1512: return \"LA %0,%c1\"; 1513: } 1514: CC_STATUS_INIT; 1515: mvs_check_page (0, 8, 0); 1516: return \"SLR %0,%0\;IC %0,%1\"; 1517: }") 1518: 1519: ; 1520: ; truncsihi2 instruction pattern(s). 1521: ; 1522: 1523: (define_insn "truncsihi2" 1524: [(set (match_operand:HI 0 "general_operand" "=d,m") 1525: (truncate:HI (match_operand:SI 1 "general_operand" "0,d")))] 1526: "" 1527: "* 1528: { 1529: check_label_emit (); 1530: if (REG_P (operands[0])) 1531: { 1532: CC_STATUS_SET (operands[0], operands[1]); 1533: mvs_check_page (0, 8, 0); 1534: return \"SLL %0,16\;SRA %0,16\"; 1535: } 1536: mvs_check_page (0, 4, 0); 1537: return \"STH %1,%0\"; 1538: }") 1539: 1540: ; 1541: ; fix_truncdfsi2 instruction pattern(s). 1542: ; 1543: 1544: (define_insn "fix_truncdfsi2" 1545: [(set (match_operand:SI 0 "general_operand" "=d") 1546: (fix:SI (truncate:DF (match_operand:DF 1 "general_operand" "f")))) 1547: (clobber (reg:DF 16))] 1548: "" 1549: "* 1550: { 1551: check_label_emit (); 1552: CC_STATUS_INIT; 1553: if (REGNO (operands[1]) == 16) 1554: { 1555: mvs_check_page (0, 12, 8); 1556: return \"AD 0,=XL8'4F08000000000000'\;STD 0,140(,13)\;L %0,144(,13)\"; 1557: } 1558: mvs_check_page (0, 14, 8); 1559: return \"LDR 0,%1\;AD 0,=XL8'4F08000000000000'\;STD 0,140(,13)\;L %0,144(,13)\"; 1560: }") 1561: 1562: ; 1563: ; floatsidf2 instruction pattern(s). 1564: ; 1565: ; Uses the float field of the TCA. 1566: ; 1567: 1568: (define_insn "floatsidf2" 1569: [(set (match_operand:DF 0 "general_operand" "=f") 1570: (float:DF (match_operand:SI 1 "general_operand" "d")))] 1571: "" 1572: "* 1573: { 1574: check_label_emit (); 1575: CC_STATUS_INIT; 1576: mvs_check_page (0, 16, 8); 1577: return \"ST %1,508(,12)\;XI 508(12),128\;LD %0,504(,12)\;SD %0,=XL8'4E00000080000000'\"; 1578: }") 1579: 1580: ; 1581: ; truncdfsf2 instruction pattern(s). 1582: ; 1583: 1584: (define_insn "truncdfsf2" 1585: [(set (match_operand:SF 0 "general_operand" "=f") 1586: (float_truncate:SF (match_operand:DF 1 "general_operand" "f")))] 1587: "" 1588: "* 1589: { 1590: check_label_emit (); 1591: mvs_check_page (0, 2, 0); 1592: return \"LRER %0,%1\"; 1593: }") 1594: 1595: ; 1596: ; extendsfdf2 instruction pattern(s). 1597: ; 1598: 1599: (define_insn "extendsfdf2" 1600: [(set (match_operand:DF 0 "general_operand" "=f") 1601: (float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))] 1602: "" 1603: "* 1604: { 1605: check_label_emit (); 1606: CC_STATUS_SET (0, const0_rtx); 1607: if (FP_REG_P (operands[1])) 1608: { 1609: if (REGNO (operands[0]) == REGNO (operands[1])) 1610: { 1611: mvs_check_page (0, 10, 0); 1612: return \"STE %1,140(,13)\;SDR %0,%0\;LE %0,140(,13)\"; 1613: } 1614: mvs_check_page (0, 4, 0); 1615: return \"SDR %0,%0\;LER %0,%1\"; 1616: } 1617: mvs_check_page (0, 6, 0); 1618: return \"SDR %0,%0\;LE %0,%1\"; 1619: }") 1620: 1621: ;; 1622: ;;- Add instructions. 1623: ;; 1624: 1625: ; 1626: ; adddi3 instruction pattern(s). 1627: ; 1628: 1629: (define_expand "adddi3" 1630: [(set (match_operand:DI 0 "general_operand" "") 1631: (plus:DI (match_operand:DI 1 "general_operand" "") 1632: (match_operand:DI 2 "general_operand" "")))] 1633: "" 1634: " 1635: { 1636: rtx label = gen_label_rtx (); 1637: rtx op0_high = operand_subword (operands[0], 0, 1, DImode); 1638: rtx op0_low = gen_lowpart (SImode, operands[0]); 1639: 1640: emit_insn (gen_rtx (SET, VOIDmode, op0_high, 1641: gen_rtx (PLUS, SImode, 1642: operand_subword (operands[1], 0, 1, DImode), 1643: operand_subword (operands[2], 0, 1, DImode)))); 1644: emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, 1645: gen_rtx (SET, VOIDmode, op0_low, 1646: gen_rtx (PLUS, SImode, gen_lowpart (SImode, operands[1]), 1647: gen_lowpart (SImode, operands[2]))), 1648: gen_rtx (USE, VOIDmode, gen_rtx (LABEL_REF, VOIDmode, label))))); 1649: emit_insn (gen_rtx (SET, VOIDmode, op0_high, 1650: gen_rtx (PLUS, SImode, op0_high, 1651: gen_rtx (CONST_INT, SImode, 1)))); 1652: emit_label (label); 1653: DONE; 1654: }") 1655: 1656: (define_insn "" 1657: [(set (match_operand:SI 0 "general_operand" "=d") 1658: (plus:SI (match_operand:SI 1 "general_operand" "%0") 1659: (match_operand:SI 2 "general_operand" "g"))) 1660: (use (label_ref (match_operand 3 "" "")))] 1661: "" 1662: "* 1663: { 1664: int onpage; 1665: 1666: check_label_emit (); 1667: onpage = mvs_check_label (CODE_LABEL_NUMBER (operands[3])); 1668: if (REG_P (operands[2])) 1669: { 1670: if (!onpage) 1671: { 1672: mvs_check_page (0, 8, 4); 1673: return \"ALR %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1674: } 1675: if (mvs_check_page (0, 6, 0)) 1676: { 1677: mvs_check_page (0, 2, 4); 1678: return \"ALR %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1679: } 1680: return \"ALR %0,%2\;BC 12,%l3\"; 1681: } 1682: if (!onpage) 1683: { 1684: mvs_check_page (0, 10, 4); 1685: return \"AL %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1686: } 1687: if (mvs_check_page (0, 8 ,0)) 1688: { 1689: mvs_check_page (0, 2, 4); 1690: return \"AL %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1691: } 1692: return \"AL %0,%2\;BC 12,%l3\"; 1693: }") 1694: 1695: ; 1696: ; addsi3 instruction pattern(s). 1697: ; 1698: ; The following insn is used when it is known that operand one is an address, 1699: ; frame, stack or argument pointer, and operand two is a constant that is 1700: ; small enough to fit in the displacement field. 1701: ; Notice that we can't allow the frame pointer to used as a normal register 1702: ; because of this insn. 1703: ; 1704: 1705: (define_insn "" 1706: [(set (match_operand:SI 0 "register_operand" "=d") 1707: (plus:SI (match_operand:SI 1 "general_operand" "%a") 1708: (match_operand:SI 2 "immediate_operand" "J")))] 1709: "((REGNO (operands[1]) == FRAME_POINTER_REGNUM || REGNO (operands[1]) == ARG_POINTER_REGNUM || REGNO (operands[1]) == STACK_POINTER_REGNUM) && (unsigned) INTVAL (operands[2]) < 4096)" 1710: "* 1711: { 1712: check_label_emit (); 1713: CC_STATUS_INIT; 1714: mvs_check_page (0, 4, 0); 1715: return \"LA %0,%c2(,%1)\"; 1716: }") 1717: 1718: ; This insn handles additions that are relative to the frame pointer. 1719: 1720: (define_insn "" 1721: [(set (match_operand:SI 0 "register_operand" "=d") 1722: (plus:SI (match_operand:SI 1 "register_operand" "%a") 1723: (match_operand:SI 2 "immediate_operand" "i")))] 1724: "REGNO (operands[1]) == FRAME_POINTER_REGNUM" 1725: "* 1726: { 1727: check_label_emit (); 1728: if ((unsigned) INTVAL (operands[2]) < 4096) 1729: { 1730: mvs_check_page (0, 4, 0); 1731: return \"LA %0,%c2(,%1)\"; 1732: } 1733: if (REGNO (operands[1]) == REGNO (operands[0])) 1734: { 1735: mvs_check_page (0, 4, 0); 1736: return \"A %0,%2\"; 1737: } 1738: mvs_check_page (0, 6, 0); 1739: return \"L %0,%2\;AR %0,%1\"; 1740: }") 1741: 1742: (define_insn "addsi3" 1743: [(set (match_operand:SI 0 "general_operand" "=d") 1744: (plus:SI (match_operand:SI 1 "general_operand" "%0") 1745: (match_operand:SI 2 "general_operand" "g")))] 1746: "" 1747: "* 1748: { 1749: check_label_emit (); 1750: if (REG_P (operands[2])) 1751: { 1752: mvs_check_page (0, 2, 0); 1753: return \"AR %0,%2\"; 1754: } 1755: if (GET_CODE (operands[2]) == CONST_INT) 1756: { 1757: if (INTVAL (operands[2]) == -1) 1758: { 1759: CC_STATUS_INIT; 1760: mvs_check_page (0, 2, 0); 1761: return \"BCTR %0,0\"; 1762: } 1763: } 1764: mvs_check_page (0, 4, 0); 1765: return \"A %0,%2\"; 1766: }") 1767: 1768: ; 1769: ; addhi3 instruction pattern(s). 1770: ; 1771: 1772: (define_insn "addhi3" 1773: [(set (match_operand:HI 0 "general_operand" "=d") 1774: (plus:HI (match_operand:HI 1 "general_operand" "%0") 1775: (match_operand:HI 2 "general_operand" "dmi")))] 1776: "" 1777: "* 1778: { 1779: check_label_emit (); 1780: if (REG_P (operands[2])) 1781: { 1782: mvs_check_page (0, 2, 0); 1783: return \"STH %2,140(,13)\;AH %0,140(,13)\"; 1784: } 1785: if (GET_CODE (operands[2]) == CONST_INT) 1786: { 1787: if (INTVAL (operands[2]) == -1) 1788: { 1789: CC_STATUS_INIT; 1790: mvs_check_page (0, 2, 0); 1791: return \"BCTR %0,0\"; 1792: } 1793: mvs_check_page (0, 4, 2); 1794: return \"AH %0,=H'%h2'\"; 1795: } 1796: mvs_check_page (0, 4, 0); 1797: return \"AH %0,%2\"; 1798: }") 1799: 1800: ; 1801: ; addqi3 instruction pattern(s). 1802: ; 1803: 1804: (define_insn "addqi3" 1805: [(set (match_operand:QI 0 "general_operand" "=d") 1806: (plus:QI (match_operand:QI 1 "general_operand" "%a") 1807: (match_operand:QI 2 "general_operand" "ai")))] 1808: "" 1809: "* 1810: { 1811: check_label_emit (); 1812: CC_STATUS_INIT; 1813: mvs_check_page (0, 4, 0); 1814: if (REG_P (operands[2])) 1815: return \"LA %0,0(%1,%2)\"; 1816: return \"LA %0,%B2(,%1)\"; 1817: }") 1818: 1819: ; 1820: ; adddf3 instruction pattern(s). 1821: ; 1822: 1823: (define_insn "adddf3" 1824: [(set (match_operand:DF 0 "general_operand" "=f") 1825: (plus:DF (match_operand:DF 1 "general_operand" "%0") 1826: (match_operand:DF 2 "general_operand" "fmF")))] 1827: "" 1828: "* 1829: { 1830: check_label_emit (); 1831: if (FP_REG_P (operands[2])) 1832: { 1833: mvs_check_page (0, 2, 0); 1834: return \"ADR %0,%2\"; 1835: } 1836: mvs_check_page (0, 4, 0); 1837: return \"AD %0,%2\"; 1838: }") 1839: 1840: ; 1841: ; addsf3 instruction pattern(s). 1842: ; 1843: 1844: (define_insn "addsf3" 1845: [(set (match_operand:SF 0 "general_operand" "=f") 1846: (plus:SF (match_operand:SF 1 "general_operand" "%0") 1847: (match_operand:SF 2 "general_operand" "fmF")))] 1848: "" 1849: "* 1850: { 1851: check_label_emit (); 1852: if (FP_REG_P (operands[2])) 1853: { 1854: mvs_check_page (0, 2, 0); 1855: return \"AER %0,%2\"; 1856: } 1857: mvs_check_page (0, 4, 0); 1858: return \"AE %0,%2\"; 1859: }") 1860: 1861: ;; 1862: ;;- Subtract instructions. 1863: ;; 1864: 1865: ; 1866: ; subdi3 instruction pattern(s). 1867: ; 1868: 1869: (define_expand "subdi3" 1870: [(set (match_operand:DI 0 "general_operand" "") 1871: (minus:DI (match_operand:DI 1 "general_operand" "") 1872: (match_operand:DI 2 "general_operand" "")))] 1873: "" 1874: " 1875: { 1876: rtx label = gen_label_rtx (); 1877: rtx op0_high = operand_subword (operands[0], 0, 1, DImode); 1878: rtx op0_low = gen_lowpart (SImode, operands[0]); 1879: 1880: emit_insn (gen_rtx (SET, VOIDmode, op0_high, 1881: gen_rtx (MINUS, SImode, 1882: operand_subword (operands[1], 0, 1, DImode), 1883: operand_subword (operands[2], 0, 1, DImode)))); 1884: emit_jump_insn (gen_rtx (PARALLEL, VOIDmode, gen_rtvec (2, 1885: gen_rtx (SET, VOIDmode, op0_low, 1886: gen_rtx (MINUS, SImode, 1887: gen_lowpart (SImode, operands[1]), 1888: gen_lowpart (SImode, operands[2]))), 1889: gen_rtx (USE, VOIDmode, 1890: gen_rtx (LABEL_REF, VOIDmode, label))))); 1891: emit_insn (gen_rtx (SET, VOIDmode, op0_high, 1892: gen_rtx (MINUS, SImode, op0_high, 1893: gen_rtx (CONST_INT, SImode, 1)))); 1894: emit_label (label); 1895: DONE; 1896: }") 1897: 1898: (define_insn "" 1899: [(set (match_operand:SI 0 "general_operand" "=d") 1900: (minus:SI (match_operand:SI 1 "general_operand" "0") 1901: (match_operand:SI 2 "general_operand" "g"))) 1902: (use (label_ref (match_operand 3 "" "")))] 1903: "" 1904: "* 1905: { 1906: int onpage; 1907: 1908: check_label_emit (); 1909: CC_STATUS_INIT; 1910: onpage = mvs_check_label (CODE_LABEL_NUMBER (operands[3])); 1911: if (REG_P (operands[2])) 1912: { 1913: if (!onpage) 1914: { 1915: mvs_check_page (0, 8, 4); 1916: return \"SLR %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1917: } 1918: if (mvs_check_page (0, 6, 0)) 1919: { 1920: mvs_check_page (0, 2, 4); 1921: return \"SLR %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1922: } 1923: return \"SLR %0,%2\;BC 12,%l3\"; 1924: } 1925: if (!onpage) 1926: { 1927: mvs_check_page (0, 10, 4); 1928: return \"SL %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1929: } 1930: if (mvs_check_page (0, 8, 0)) 1931: { 1932: mvs_check_page (0, 2, 4); 1933: return \"SL %0,%2\;L 14,=A(%l3)\;BCR 12,14\"; 1934: } 1935: return \"SL %0,%2\;BC 12,%l3\"; 1936: }") 1937: 1938: ; 1939: ; subsi3 instruction pattern(s). 1940: ; 1941: 1942: (define_insn "subsi3" 1943: [(set (match_operand:SI 0 "general_operand" "=d") 1944: (minus:SI (match_operand:SI 1 "general_operand" "0") 1945: (match_operand:SI 2 "general_operand" "g")))] 1946: "" 1947: "* 1948: { 1949: check_label_emit (); 1950: if (REG_P (operands[2])) 1951: { 1952: mvs_check_page (0, 2, 0); 1953: return \"SR %0,%2\"; 1954: } 1955: if (operands[2] == const1_rtx) 1956: { 1957: CC_STATUS_INIT; 1958: mvs_check_page (0, 2, 0); 1959: return \"BCTR %0,0\"; 1960: } 1961: mvs_check_page (0, 4, 0); 1962: return \"S %0,%2\"; 1963: }") 1964: 1965: ; 1966: ; subhi3 instruction pattern(s). 1967: ; 1968: 1969: (define_insn "subhi3" 1970: [(set (match_operand:HI 0 "general_operand" "=d") 1971: (minus:HI (match_operand:HI 1 "general_operand" "0") 1972: (match_operand:HI 2 "general_operand" "g")))] 1973: "" 1974: "* 1975: { 1976: check_label_emit (); 1977: if (REG_P (operands[2])) 1978: { 1979: mvs_check_page (0, 2, 0); 1980: return \"STH %2,140(,13)\;SH %0,140(,13)\"; 1981: } 1982: if (operands[2] == const1_rtx) 1983: { 1984: CC_STATUS_INIT; 1985: mvs_check_page (0, 2, 0); 1986: return \"BCTR %0,0\"; 1987: } 1988: if (GET_CODE (operands[2]) == CONST_INT) 1989: { 1990: mvs_check_page (0, 4, 2); 1991: return \"SH %0,=H'%h2'\"; 1992: } 1993: mvs_check_page (0, 4, 0); 1994: return \"SH %0,%2\"; 1995: }") 1996: 1997: ; 1998: ; subqi3 instruction pattern(s). 1999: ; 2000: 2001: (define_expand "subqi3" 2002: [(set (match_operand:QI 0 "general_operand" "=d") 1.1.1.2 ! root 2003: (minus:QI (match_operand:QI 1 "general_operand" "0") 1.1 root 2004: (match_operand:QI 2 "general_operand" "di")))] 2005: "" 2006: " 2007: { 2008: if (REG_P (operands[2])) 2009: { 2010: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2011: gen_rtx (MINUS, QImode, operands[1], operands[2]))); 2012: } 2013: else 2014: { 2015: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2016: gen_rtx (PLUS, QImode, operands[1], 2017: negate_rtx (QImode, operands[2])))); 2018: } 2019: DONE; 2020: }") 2021: 2022: (define_insn "" 2023: [(set (match_operand:QI 0 "register_operand" "=d") 1.1.1.2 ! root 2024: (minus:QI (match_operand:QI 1 "register_operand" "0") 1.1 root 2025: (match_operand:QI 2 "register_operand" "d")))] 2026: "" 2027: "* 2028: { 2029: check_label_emit (); 2030: CC_STATUS_INIT; 2031: mvs_check_page (0, 2, 0); 2032: return \"SR %0,%2\"; 2033: }") 2034: 2035: ; 2036: ; subdf3 instruction pattern(s). 2037: ; 2038: 2039: (define_insn "subdf3" 2040: [(set (match_operand:DF 0 "general_operand" "=f") 2041: (minus:DF (match_operand:DF 1 "general_operand" "0") 2042: (match_operand:DF 2 "general_operand" "fmF")))] 2043: "" 2044: "* 2045: { 2046: check_label_emit (); 2047: if (FP_REG_P (operands[2])) 2048: { 2049: mvs_check_page (0, 2, 0); 2050: return \"SDR %0,%2\"; 2051: } 2052: mvs_check_page (0, 4, 0); 2053: return \"SD %0,%2\"; 2054: }") 2055: 2056: ; 2057: ; subsf3 instruction pattern(s). 2058: ; 2059: 2060: (define_insn "subsf3" 2061: [(set (match_operand:SF 0 "general_operand" "=f") 2062: (minus:SF (match_operand:SF 1 "general_operand" "0") 2063: (match_operand:SF 2 "general_operand" "fmF")))] 2064: "" 2065: "* 2066: { 2067: check_label_emit (); 2068: if (FP_REG_P (operands[2])) 2069: { 2070: mvs_check_page (0, 2, 0); 2071: return \"SER %0,%2\"; 2072: } 2073: mvs_check_page (0, 4, 0); 2074: return \"SE %0,%2\"; 2075: }") 2076: 2077: ;; 2078: ;;- Multiply instructions. 2079: ;; 2080: 2081: ; 2082: ; mulsi3 instruction pattern(s). 2083: ; 2084: 2085: (define_expand "mulsi3" 2086: [(set (match_operand:SI 0 "general_operand" "") 2087: (mult:SI (match_operand:SI 1 "general_operand" "") 2088: (match_operand:SI 2 "general_operand" "")))] 2089: "" 2090: " 2091: { 2092: if (GET_CODE (operands[1]) == CONST_INT 2093: && CONST_OK_FOR_LETTER_P (INTVAL (operands[1]), 'K')) 2094: { 2095: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2096: gen_rtx (MULT, SImode, operands[2], operands[1]))); 2097: } 2098: else if (GET_CODE (operands[2]) == CONST_INT 2099: && CONST_OK_FOR_LETTER_P (INTVAL (operands[2]), 'K')) 2100: { 2101: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2102: gen_rtx (MULT, SImode, operands[1], operands[2]))); 2103: } 2104: else 2105: { 2106: rtx r = gen_reg_rtx (DImode); 2107: 2108: emit_insn (gen_rtx (SET, VOIDmode, 2109: gen_rtx (SUBREG, SImode, r, 1), operands[1])); 2110: emit_insn (gen_rtx (SET, VOIDmode, r, 2111: gen_rtx (MULT, SImode, r, operands[2]))); 2112: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2113: gen_rtx (SUBREG, SImode, r, 1))); 2114: } 2115: DONE; 2116: }") 2117: 2118: (define_insn "" 2119: [(set (match_operand:SI 0 "register_operand" "=d") 2120: (mult:SI (match_operand:SI 1 "general_operand" "%0") 2121: (match_operand:SI 2 "immediate_operand" "K")))] 2122: "" 2123: "* 2124: { 2125: check_label_emit (); 2126: mvs_check_page (0, 4, 0); 2127: return \"MH %0,%2\"; 2128: }") 2129: 2130: (define_insn "" 2131: [(set (match_operand:DI 0 "register_operand" "=d") 2132: (mult:SI (match_operand:DI 1 "general_operand" "%0") 2133: (match_operand:SI 2 "general_operand" "g")))] 2134: "" 2135: "* 2136: { 2137: check_label_emit (); 2138: if (REG_P (operands[2])) 2139: { 2140: mvs_check_page (0, 2, 0); 2141: return \"MR %0,%2\"; 2142: } 2143: mvs_check_page (0, 4, 0); 2144: return \"M %0,%2\"; 2145: }") 2146: 2147: ; 2148: ; muldf3 instruction pattern(s). 2149: ; 2150: 2151: (define_insn "muldf3" 2152: [(set (match_operand:DF 0 "general_operand" "=f") 2153: (mult:DF (match_operand:DF 1 "general_operand" "%0") 2154: (match_operand:DF 2 "general_operand" "fmF")))] 2155: "" 2156: "* 2157: { 2158: check_label_emit (); 2159: if (FP_REG_P (operands[2])) 2160: { 2161: mvs_check_page (0, 2, 0); 2162: return \"MDR %0,%2\"; 2163: } 2164: mvs_check_page (0, 4, 0); 2165: return \"MD %0,%2\"; 2166: }") 2167: 2168: ; 2169: ; mulsf3 instruction pattern(s). 2170: ; 2171: 2172: (define_insn "mulsf3" 2173: [(set (match_operand:SF 0 "general_operand" "=f") 2174: (mult:SF (match_operand:SF 1 "general_operand" "%0") 2175: (match_operand:SF 2 "general_operand" "fmF")))] 2176: "" 2177: "* 2178: { 2179: check_label_emit (); 2180: if (FP_REG_P (operands[2])) 2181: { 2182: mvs_check_page (0, 2, 0); 2183: return \"MER %0,%2\"; 2184: } 2185: mvs_check_page (0, 4, 0); 2186: return \"ME %0,%2\"; 2187: }") 2188: 2189: ;; 2190: ;;- Divide instructions. 2191: ;; 2192: 2193: ; 2194: ; divsi3 instruction pattern(s). 2195: ; 2196: 2197: (define_expand "divsi3" 2198: [(set (match_operand:SI 0 "general_operand" "") 2199: (div:SI (match_operand:SI 1 "general_operand" "") 2200: (match_operand:SI 2 "general_operand" "")))] 2201: "" 2202: " 2203: { 2204: rtx r = gen_reg_rtx (DImode); 2205: 2206: emit_insn (gen_extendsidi2 (r, operands[1])); 2207: emit_insn (gen_rtx (SET, VOIDmode, r, 2208: gen_rtx (DIV, SImode, r, operands[2]))); 2209: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2210: gen_rtx (SUBREG, SImode, r, 1))); 2211: DONE; 2212: }") 2213: 2214: 2215: ; 2216: ; udivsi3 instruction pattern(s). 2217: ; 2218: 2219: (define_expand "udivsi3" 2220: [(set (match_operand:SI 0 "general_operand" "") 2221: (udiv:SI (match_operand:SI 1 "general_operand" "") 2222: (match_operand:SI 2 "general_operand" "")))] 2223: "" 2224: " 2225: { 2226: rtx dr = gen_reg_rtx (DImode); 2227: rtx dr_0 = gen_rtx (SUBREG, SImode, dr, 0); 2228: rtx dr_1 = gen_rtx (SUBREG, SImode, dr, 1); 2229: 2230: 2231: if (GET_CODE (operands[2]) == CONST_INT) 2232: { 2233: if (INTVAL (operands[2]) > 0) 2234: { 2235: emit_insn (gen_zero_extendsidi2 (dr, operands[1])); 2236: emit_insn (gen_rtx (SET, VOIDmode, dr, 2237: gen_rtx (DIV, SImode, dr, operands[2]))); 2238: } 2239: else 2240: { 2241: rtx label1 = gen_label_rtx (); 2242: 2243: emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); 2244: emit_insn (gen_rtx (SET, VOIDmode, dr_1, const0_rtx)); 2245: emit_insn (gen_cmpsi (dr_0, operands[2])); 2246: emit_jump_insn (gen_bltu (label1)); 2247: emit_insn (gen_rtx (SET, VOIDmode, dr_1, const1_rtx)); 2248: emit_label (label1); 2249: } 2250: } 2251: else 2252: { 2253: rtx label1 = gen_label_rtx (); 2254: rtx label2 = gen_label_rtx (); 2255: rtx label3 = gen_label_rtx (); 2256: rtx sr = gen_reg_rtx (SImode); 2257: 2258: emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); 2259: emit_insn (gen_rtx (SET, VOIDmode, sr, operands[2])); 2260: emit_insn (gen_rtx (SET, VOIDmode, dr_1, const0_rtx)); 2261: emit_insn (gen_cmpsi (sr, dr_0)); 2262: emit_jump_insn (gen_bgtu (label3)); 2263: emit_insn (gen_cmpsi (sr, const1_rtx)); 2264: emit_jump_insn (gen_blt (label2)); 2265: emit_jump_insn (gen_beq (label1)); 2266: emit_insn (gen_rtx (SET, VOIDmode, dr, 2267: gen_rtx (LSHIFTRT, DImode, dr, 2268: gen_rtx (CONST_INT, SImode, 32)))); 2269: emit_insn (gen_rtx (SET, VOIDmode, dr, 2270: gen_rtx (DIV, SImode, dr, sr))); 2271: emit_jump_insn (gen_jump (label3)); 2272: emit_label (label1); 2273: emit_insn (gen_rtx (SET, VOIDmode, dr_1, dr_0)); 2274: emit_jump_insn (gen_jump (label3)); 2275: emit_label (label2); 2276: emit_insn (gen_rtx (SET, VOIDmode, dr_1, const1_rtx)); 2277: emit_label (label3); 2278: } 2279: emit_insn (gen_rtx (SET, VOIDmode, operands[0], dr_1)); 2280: 2281: DONE; 2282: }") 2283: 2284: ; This is used by divsi3 & udivsi3. 2285: 2286: (define_insn "" 2287: [(set (match_operand:DI 0 "register_operand" "=d") 2288: (div:SI (match_operand:DI 1 "register_operand" "0") 2289: (match_operand:SI 2 "general_operand" "")))] 2290: "" 2291: "* 2292: { 2293: check_label_emit (); 2294: if (REG_P (operands[2])) 2295: { 2296: mvs_check_page (0, 2, 0); 2297: return \"DR %0,%2\"; 2298: } 2299: mvs_check_page (0, 4, 0); 2300: return \"D %0,%2\"; 2301: }") 2302: 2303: ; 2304: ; divdf3 instruction pattern(s). 2305: ; 2306: 2307: (define_insn "divdf3" 2308: [(set (match_operand:DF 0 "general_operand" "=f") 2309: (div:DF (match_operand:DF 1 "general_operand" "0") 2310: (match_operand:DF 2 "general_operand" "fmF")))] 2311: "" 2312: "* 2313: { 2314: check_label_emit (); 2315: if (FP_REG_P (operands[2])) 2316: { 2317: mvs_check_page (0, 2, 0); 2318: return \"DDR %0,%2\"; 2319: } 2320: mvs_check_page (0, 4, 0); 2321: return \"DD %0,%2\"; 2322: }") 2323: 2324: ; 2325: ; divsf3 instruction pattern(s). 2326: ; 2327: 2328: (define_insn "divsf3" 2329: [(set (match_operand:SF 0 "general_operand" "=f") 2330: (div:SF (match_operand:SF 1 "general_operand" "0") 2331: (match_operand:SF 2 "general_operand" "fmF")))] 2332: "" 2333: "* 2334: { 2335: check_label_emit (); 2336: if (FP_REG_P (operands[2])) 2337: { 2338: mvs_check_page (0, 2, 0); 2339: return \"DER %0,%2\"; 2340: } 2341: mvs_check_page (0, 4, 0); 2342: return \"DE %0,%2\"; 2343: }") 2344: 2345: ;; 2346: ;;- Modulo instructions. 2347: ;; 2348: 2349: ; 2350: ; modsi3 instruction pattern(s). 2351: ; 2352: 2353: (define_expand "modsi3" 2354: [(set (match_operand:SI 0 "general_operand" "") 2355: (mod:SI (match_operand:SI 1 "general_operand" "") 2356: (match_operand:SI 2 "general_operand" "")))] 2357: "" 2358: " 2359: { 2360: rtx r = gen_reg_rtx (DImode); 2361: 2362: emit_insn (gen_extendsidi2 (r, operands[1])); 2363: emit_insn (gen_rtx (SET, VOIDmode, r, 2364: gen_rtx (MOD, SImode, r, operands[2]))); 2365: emit_insn (gen_rtx (SET, VOIDmode, operands[0], 2366: gen_rtx (SUBREG, SImode, r, 0))); 2367: DONE; 2368: }") 2369: 2370: ; 2371: ; umodsi3 instruction pattern(s). 2372: ; 2373: 2374: (define_expand "umodsi3" 2375: [(set (match_operand:SI 0 "general_operand" "") 2376: (umod:SI (match_operand:SI 1 "general_operand" "") 2377: (match_operand:SI 2 "general_operand" "")))] 2378: "" 2379: " 2380: { 2381: rtx dr = gen_reg_rtx (DImode); 2382: rtx dr_0 = gen_rtx (SUBREG, SImode, dr, 0); 2383: rtx dr_1 = gen_rtx (SUBREG, SImode, dr, 1); 2384: 2385: emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); 2386: 2387: if (GET_CODE (operands[2]) == CONST_INT) 2388: { 2389: if (INTVAL (operands[2]) > 0) 2390: { 2391: emit_insn (gen_rtx (SET, VOIDmode, dr, 2392: gen_rtx (LSHIFTRT, DImode, dr, 2393: gen_rtx (CONST_INT, SImode, 32)))); 2394: emit_insn (gen_rtx (SET, VOIDmode, dr, 2395: gen_rtx (MOD, SImode, dr, operands[2]))); 2396: } 2397: else 2398: { 2399: rtx label1 = gen_label_rtx (); 2400: rtx sr = gen_reg_rtx (SImode); 2401: 2402: emit_insn (gen_rtx (SET, VOIDmode, sr, operands[2])); 2403: emit_insn (gen_cmpsi (dr_0, sr)); 2404: emit_jump_insn (gen_bltu (label1)); 2405: emit_insn (gen_rtx (SET, VOIDmode, sr, gen_rtx (ABS, SImode, sr))); 2406: emit_insn (gen_rtx (SET, VOIDmode, dr_0, 2407: gen_rtx (PLUS, SImode, dr_0, sr))); 2408: emit_label (label1); 2409: } 2410: } 2411: else 2412: { 2413: rtx label1 = gen_label_rtx (); 2414: rtx label2 = gen_label_rtx (); 2415: rtx label3 = gen_label_rtx (); 2416: rtx sr = gen_reg_rtx (SImode); 2417: 2418: emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); 2419: emit_insn (gen_rtx (SET, VOIDmode, sr, operands[2])); 2420: emit_insn (gen_cmpsi (sr, dr_0)); 2421: emit_jump_insn (gen_bgtu (label3)); 2422: emit_insn (gen_cmpsi (sr, const1_rtx)); 2423: emit_jump_insn (gen_blt (label2)); 2424: emit_jump_insn (gen_beq (label1)); 2425: emit_insn (gen_rtx (SET, VOIDmode, dr, 2426: gen_rtx (LSHIFTRT, DImode, dr, 2427: gen_rtx (CONST_INT, SImode, 32)))); 2428: emit_insn (gen_rtx (SET, VOIDmode, dr, gen_rtx (MOD, SImode, dr, sr))); 2429: emit_jump_insn (gen_jump (label3)); 2430: emit_label (label1); 2431: emit_insn (gen_rtx (SET, VOIDmode, dr_0, const0_rtx)); 2432: emit_jump_insn (gen_jump (label3)); 2433: emit_label (label2); 2434: emit_insn (gen_rtx (SET, VOIDmode, dr_0, 2435: gen_rtx (MINUS, SImode, dr_0, sr))); 2436: emit_label (label3); 2437: 2438: } 2439: emit_insn (gen_rtx (SET, VOIDmode, operands[0], dr_0)); 2440: 2441: DONE; 2442: }") 2443: 2444: ; This is used by modsi3 & umodsi3. 2445: 2446: (define_insn "" 2447: [(set (match_operand:DI 0 "register_operand" "=d") 2448: (mod:SI (match_operand:DI 1 "register_operand" "0") 2449: (match_operand:SI 2 "general_operand" "")))] 2450: "" 2451: "* 2452: { 2453: check_label_emit (); 2454: if (REG_P (operands[2])) 2455: { 2456: mvs_check_page (0, 2, 0); 2457: return \"DR %0,%2\"; 2458: } 2459: mvs_check_page (0, 4, 0); 2460: return \"D %0,%2\"; 2461: }") 2462: 2463: ;; 2464: ;;- And instructions. 2465: ;; 2466: 2467: ; 2468: ; anddi3 instruction pattern(s). 2469: ; 2470: 2471: ;(define_expand "anddi3" 2472: ; [(set (match_operand:DI 0 "general_operand" "") 2473: ; (and:DI (match_operand:DI 1 "general_operand" "") 2474: ; (match_operand:DI 2 "general_operand" "")))] 2475: ; "" 2476: ; " 2477: ;{ 2478: ; rtx gen_andsi3(); 2479: ; 2480: ; emit_insn (gen_andsi3 (operand_subword (operands[0], 0, 1, DImode), 2481: ; operand_subword (operands[1], 0, 1, DImode), 2482: ; operand_subword (operands[2], 0, 1, DImode))); 2483: ; emit_insn (gen_andsi3 (gen_lowpart (SImode, operands[0]), 2484: ; gen_lowpart (SImode, operands[1]), 2485: ; gen_lowpart (SImode, operands[2]))); 2486: ; DONE; 2487: ;}") 2488: 2489: ; 2490: ; andsi3 instruction pattern(s). 2491: ; 2492: 2493: (define_insn "" 2494: [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") 2495: (and:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") 2496: (match_operand:SI 2 "r_or_s_operand" "g,mi")))] 2497: "TARGET_CHAR_INSTRUCTIONS" 2498: "* 2499: { 2500: check_label_emit (); 2501: if (REG_P (operands[2])) 2502: { 2503: mvs_check_page (0, 2, 0); 2504: return \"NR %0,%2\"; 2505: } 2506: if (REG_P (operands[0])) 2507: { 2508: mvs_check_page (0, 4, 0); 2509: return \"N %0,%2\"; 2510: } 2511: CC_STATUS_INIT; 2512: mvs_check_page (0, 6, 0); 2513: return \"NC %O0(4,%R0),%2\"; 2514: }") 2515: 2516: (define_insn "andsi3" 2517: [(set (match_operand:SI 0 "general_operand" "=d") 2518: (and:SI (match_operand:SI 1 "general_operand" "%0") 2519: (match_operand:SI 2 "general_operand" "g")))] 2520: "" 2521: "* 2522: { 2523: check_label_emit (); 2524: if (REG_P (operands[2])) 2525: { 2526: mvs_check_page (0, 2, 0); 2527: return \"NR %0,%2\"; 2528: } 2529: mvs_check_page (0, 4, 0); 2530: return \"N %0,%2\"; 2531: }") 2532: 2533: ; 2534: ; andhi3 instruction pattern(s). 2535: ; 2536: 2537: (define_insn "" 2538: [(set (match_operand:HI 0 "r_or_s_operand" "=d,m") 2539: (and:HI (match_operand:HI 1 "r_or_s_operand" "%0,0") 2540: (match_operand:HI 2 "r_or_s_operand" "di,mi")))] 2541: "TARGET_CHAR_INSTRUCTIONS" 2542: "* 2543: { 2544: check_label_emit (); 2545: if (REG_P (operands[2])) 2546: { 2547: mvs_check_page (0, 2, 0); 2548: return \"NR %0,%2\"; 2549: } 2550: if (REG_P (operands[0])) 2551: { 2552: mvs_check_page (0, 4, 0); 2553: return \"N %0,%H2\"; 2554: } 2555: CC_STATUS_INIT; 2556: if (GET_CODE (operands[2]) == CONST_INT) 2557: { 2558: mvs_check_page (0, 6, 2); 2559: return \"NC %O0(2,%R0),=H'%h2'\"; 2560: } 2561: mvs_check_page (0, 6, 0); 2562: return \"NC %O0(2,%R0),%2\"; 2563: }") 2564: 2565: (define_insn "andhi3" 2566: [(set (match_operand:HI 0 "general_operand" "=d") 2567: (and:HI (match_operand:HI 1 "general_operand" "%0") 2568: (match_operand:HI 2 "general_operand" "di")))] 2569: "" 2570: "* 2571: { 2572: check_label_emit (); 2573: if (GET_CODE (operands[2]) == CONST_INT) 2574: { 2575: mvs_check_page (0, 4, 0); 2576: return \"N %0,%H2\"; 2577: } 2578: mvs_check_page (0, 2, 0); 2579: return \"NR %0,%2\"; 2580: }") 2581: 2582: ; 2583: ; andqi3 instruction pattern(s). 2584: ; 2585: 2586: (define_insn "" 2587: [(set (match_operand:QI 0 "r_or_s_operand" "=d,m") 2588: (and:QI (match_operand:QI 1 "r_or_s_operand" "%0,0") 2589: (match_operand:QI 2 "r_or_s_operand" "di,mi")))] 2590: "TARGET_CHAR_INSTRUCTIONS" 2591: "* 2592: { 2593: check_label_emit (); 2594: CC_STATUS_INIT; 2595: if (REG_P (operands[2])) 2596: { 2597: mvs_check_page (0, 2, 0); 2598: return \"NR %0,%2\"; 2599: } 2600: if (REG_P (operands[0])) 2601: { 2602: mvs_check_page (0, 4, 0); 2603: return \"N %0,%2\"; 2604: } 2605: if (GET_CODE (operands[2]) == CONST_INT) 2606: { 2607: mvs_check_page (0, 4, 0); 2608: return \"NI %0,%B2\"; 2609: } 2610: mvs_check_page (0, 6, 0); 2611: return \"NC %O0(1,%R0),%2\"; 2612: }") 2613: 2614: (define_insn "andqi3" 2615: [(set (match_operand:QI 0 "general_operand" "=d") 2616: (and:QI (match_operand:QI 1 "general_operand" "%0") 2617: (match_operand:QI 2 "general_operand" "di")))] 2618: "" 2619: "* 2620: { 2621: check_label_emit (); 2622: CC_STATUS_INIT; 2623: if (GET_CODE (operands[2]) == CONST_INT) 2624: { 2625: mvs_check_page (0, 4, 0); 2626: return \"N %0,%2\"; 2627: } 2628: mvs_check_page (0, 2, 0); 2629: return \"NR %0,%2\"; 2630: }") 2631: 2632: ;; 2633: ;;- Bit set (inclusive or) instructions. 2634: ;; 2635: 2636: ; 2637: ; iordi3 instruction pattern(s). 2638: ; 2639: 2640: ;(define_expand "iordi3" 2641: ; [(set (match_operand:DI 0 "general_operand" "") 2642: ; (ior:DI (match_operand:DI 1 "general_operand" "") 2643: ; (match_operand:DI 2 "general_operand" "")))] 2644: ; "" 2645: ; " 2646: ;{ 2647: ; rtx gen_iorsi3(); 2648: ; 2649: ; emit_insn (gen_iorsi3 (operand_subword (operands[0], 0, 1, DImode), 2650: ; operand_subword (operands[1], 0, 1, DImode), 2651: ; operand_subword (operands[2], 0, 1, DImode))); 2652: ; emit_insn (gen_iorsi3 (gen_lowpart (SImode, operands[0]), 2653: ; gen_lowpart (SImode, operands[1]), 2654: ; gen_lowpart (SImode, operands[2]))); 2655: ; DONE; 2656: ;}") 2657: 2658: ; 2659: ; iorsi3 instruction pattern(s). 2660: ; 2661: 2662: (define_insn "" 2663: [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") 2664: (ior:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") 2665: (match_operand:SI 2 "r_or_s_operand" "g,mi")))] 2666: "TARGET_CHAR_INSTRUCTIONS" 2667: "* 2668: { 2669: check_label_emit (); 2670: if (REG_P (operands[2])) 2671: { 2672: mvs_check_page (0, 2, 0); 2673: return \"OR %0,%2\"; 2674: } 2675: if (REG_P (operands[0])) 2676: { 2677: mvs_check_page (0, 4, 0); 2678: return \"O %0,%2\"; 2679: } 2680: CC_STATUS_INIT; 2681: mvs_check_page (0, 6, 0); 2682: return \"OC %O0(4,%R0),%2\"; 2683: }") 2684: 2685: (define_insn "iorsi3" 2686: [(set (match_operand:SI 0 "general_operand" "=d") 2687: (ior:SI (match_operand:SI 1 "general_operand" "%0") 2688: (match_operand:SI 2 "general_operand" "g")))] 2689: "" 2690: "* 2691: { 2692: check_label_emit (); 2693: if (REG_P (operands[2])) 2694: { 2695: mvs_check_page (0, 2, 0); 2696: return \"OR %0,%2\"; 2697: } 2698: mvs_check_page (0, 4, 0); 2699: return \"O %0,%2\"; 2700: }") 2701: 2702: ; 2703: ; iorhi3 instruction pattern(s). 2704: ; 2705: 2706: (define_insn "" 2707: [(set (match_operand:HI 0 "r_or_s_operand" "=d,m") 2708: (ior:HI (match_operand:HI 1 "r_or_s_operand" "%0,0") 2709: (match_operand:HI 2 "r_or_s_operand" "di,mi")))] 2710: "TARGET_CHAR_INSTRUCTIONS" 2711: "* 2712: { 2713: check_label_emit (); 2714: if (REG_P (operands[2])) 2715: { 2716: mvs_check_page (0, 2, 0); 2717: return \"OR %0,%2\"; 2718: } 2719: if (REG_P (operands[0])) 2720: { 2721: mvs_check_page (0, 4, 0); 2722: return \"O %0,%H2\"; 2723: } 2724: CC_STATUS_INIT; 2725: if (GET_CODE (operands[2]) == CONST_INT) 2726: { 2727: mvs_check_page (0, 6, 2); 2728: return \"OC %O0(2,%R0),=H'%h2'\"; 2729: } 2730: mvs_check_page (0, 6, 0); 2731: return \"OC %O0(2,%R0),%2\"; 2732: }") 2733: 2734: (define_insn "iorhi3" 2735: [(set (match_operand:HI 0 "general_operand" "=d") 2736: (ior:HI (match_operand:HI 1 "general_operand" "%0") 2737: (match_operand:HI 2 "general_operand" "di")))] 2738: "" 2739: "* 2740: { 2741: check_label_emit (); 2742: if (GET_CODE (operands[2]) == CONST_INT) 2743: { 2744: mvs_check_page (0, 4, 0); 2745: return \"O %0,%H2\"; 2746: } 2747: mvs_check_page (0, 2, 0); 2748: return \"OR %0,%2\"; 2749: }") 2750: 2751: ; 2752: ; iorqi3 instruction pattern(s). 2753: ; 2754: 2755: (define_insn "" 2756: [(set (match_operand:QI 0 "r_or_s_operand" "=d,m") 2757: (ior:QI (match_operand:QI 1 "r_or_s_operand" "%0,0") 2758: (match_operand:QI 2 "r_or_s_operand" "di,mi")))] 2759: "TARGET_CHAR_INSTRUCTIONS" 2760: "* 2761: { 2762: check_label_emit (); 2763: CC_STATUS_INIT; 2764: if (REG_P (operands[2])) 2765: { 2766: mvs_check_page (0, 2, 0); 2767: return \"OR %0,%2\"; 2768: } 2769: if (REG_P (operands[0])) 2770: { 2771: mvs_check_page (0, 4, 0); 2772: return \"O %0,%2\"; 2773: } 2774: CC_STATUS_INIT; 2775: if (GET_CODE (operands[2]) == CONST_INT) 2776: { 2777: mvs_check_page (0, 4, 0); 2778: return \"OI %0,%B2\"; 2779: } 2780: mvs_check_page (0, 6, 0); 2781: return \"OC %O0(1,%R0),%2\"; 2782: }") 2783: 2784: (define_insn "iorqi3" 2785: [(set (match_operand:QI 0 "general_operand" "=d") 2786: (ior:QI (match_operand:QI 1 "general_operand" "%0") 2787: (match_operand:QI 2 "general_operand" "di")))] 2788: "" 2789: "* 2790: { 2791: check_label_emit (); 2792: CC_STATUS_INIT; 2793: if (GET_CODE (operands[2]) == CONST_INT) 2794: { 2795: mvs_check_page (0, 4, 0); 2796: return \"O %0,%2\"; 2797: } 2798: mvs_check_page (0, 2, 0); 2799: return \"OR %0,%2\"; 2800: }") 2801: 2802: ;; 2803: ;;- Xor instructions. 2804: ;; 2805: 2806: ; 2807: ; xordi3 instruction pattern(s). 2808: ; 2809: 2810: ;(define_expand "xordi3" 2811: ; [(set (match_operand:DI 0 "general_operand" "") 2812: ; (xor:DI (match_operand:DI 1 "general_operand" "") 2813: ; (match_operand:DI 2 "general_operand" "")))] 2814: ; "" 2815: ; " 2816: ;{ 2817: ; rtx gen_xorsi3(); 2818: ; 2819: ; emit_insn (gen_xorsi3 (operand_subword (operands[0], 0, 1, DImode), 2820: ; operand_subword (operands[1], 0, 1, DImode), 2821: ; operand_subword (operands[2], 0, 1, DImode))); 2822: ; emit_insn (gen_xorsi3 (gen_lowpart (SImode, operands[0]), 2823: ; gen_lowpart (SImode, operands[1]), 2824: ; gen_lowpart (SImode, operands[2]))); 2825: ; DONE; 2826: ;}") 2827: 2828: ; 2829: ; xorsi3 instruction pattern(s). 2830: ; 2831: 2832: (define_insn "" 2833: [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") 2834: (xor:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") 2835: (match_operand:SI 2 "r_or_s_operand" "g,mi")))] 2836: "TARGET_CHAR_INSTRUCTIONS" 2837: "* 2838: { 2839: check_label_emit (); 2840: if (REG_P (operands[2])) 2841: { 2842: mvs_check_page (0, 2, 0); 2843: return \"XR %0,%2\"; 2844: } 2845: if (REG_P (operands[0])) 2846: { 2847: mvs_check_page (0, 4, 0); 2848: return \"X %0,%2\"; 2849: } 2850: CC_STATUS_INIT; 2851: mvs_check_page (0, 6, 0); 2852: return \"XC %O0(4,%R0),%2\"; 2853: }") 2854: 2855: (define_insn "xorsi3" 2856: [(set (match_operand:SI 0 "general_operand" "=d") 2857: (xor:SI (match_operand:SI 1 "general_operand" "%0") 2858: (match_operand:SI 2 "general_operand" "g")))] 2859: "" 2860: "* 2861: { 2862: check_label_emit (); 2863: if (REG_P (operands[2])) 2864: { 2865: mvs_check_page (0, 2, 0); 2866: return \"XR %0,%2\"; 2867: } 2868: mvs_check_page (0, 4, 0); 2869: return \"X %0,%2\"; 2870: }") 2871: 2872: ; 2873: ; xorhi3 instruction pattern(s). 2874: ; 2875: 2876: (define_insn "" 2877: [(set (match_operand:HI 0 "r_or_s_operand" "=d,m") 2878: (xor:HI (match_operand:HI 1 "r_or_s_operand" "%0,0") 2879: (match_operand:HI 2 "r_or_s_operand" "di,mi")))] 2880: "TARGET_CHAR_INSTRUCTIONS" 2881: "* 2882: { 2883: check_label_emit (); 2884: if (REG_P (operands[2])) 2885: { 2886: mvs_check_page (0, 2, 0); 2887: return \"XR %0,%2\"; 2888: } 2889: if (REG_P (operands[0])) 2890: { 2891: mvs_check_page (0, 4, 0); 2892: return \"X %0,%H2\"; 2893: } 2894: CC_STATUS_INIT; 2895: if (GET_CODE (operands[2]) == CONST_INT) 2896: { 2897: mvs_check_page (0, 6, 2); 2898: return \"XC %O0(2,%R0),=H'%h2'\"; 2899: } 2900: mvs_check_page (0, 6, 0); 2901: return \"XC %O0(2,%R0),%2\"; 2902: }") 2903: 2904: (define_insn "xorhi3" 2905: [(set (match_operand:HI 0 "general_operand" "=d") 2906: (xor:HI (match_operand:HI 1 "general_operand" "%0") 2907: (match_operand:HI 2 "general_operand" "di")))] 2908: "" 2909: "* 2910: { 2911: check_label_emit (); 2912: if (GET_CODE (operands[2]) == CONST_INT) 2913: { 2914: mvs_check_page (0, 4, 0); 2915: return \"X %0,%2\"; 2916: } 2917: mvs_check_page (0, 2, 0); 2918: return \"XR %0,%2\"; 2919: }") 2920: 2921: ; 2922: ; xorqi3 instruction pattern(s). 2923: ; 2924: 2925: (define_insn "" 2926: [(set (match_operand:QI 0 "r_or_s_operand" "=d,m") 2927: (xor:QI (match_operand:QI 1 "r_or_s_operand" "%0,0") 2928: (match_operand:QI 2 "r_or_s_operand" "di,mi")))] 2929: "TARGET_CHAR_INSTRUCTIONS" 2930: "* 2931: { 2932: check_label_emit (); 2933: CC_STATUS_INIT; 2934: if (REG_P (operands[2])) 2935: { 2936: mvs_check_page (0, 2, 0); 2937: return \"XR %0,%2\"; 2938: } 2939: if (REG_P (operands[0])) 2940: { 2941: mvs_check_page (0, 4, 0); 2942: return \"X %0,%2\"; 2943: } 2944: if (GET_CODE (operands[2]) == CONST_INT) 2945: { 2946: mvs_check_page (0, 4, 0); 2947: return \"XI %0,%B2\"; 2948: } 2949: mvs_check_page (0, 6, 0); 2950: return \"XC %O0(1,%R0),%2\"; 2951: }") 2952: 2953: (define_insn "xorqi3" 2954: [(set (match_operand:QI 0 "general_operand" "=d") 2955: (xor:QI (match_operand:QI 1 "general_operand" "%0") 2956: (match_operand:QI 2 "general_operand" "di")))] 2957: "" 2958: "* 2959: { 2960: check_label_emit (); 2961: CC_STATUS_INIT; 2962: if (GET_CODE (operands[2]) == CONST_INT) 2963: { 2964: mvs_check_page (0, 4, 0); 2965: return \"X %0,%2\"; 2966: } 2967: mvs_check_page (0, 2, 0); 2968: return \"XR %0,%2\"; 2969: }") 2970: 2971: ;; 2972: ;;- Negate instructions. 2973: ;; 2974: 2975: ; 2976: ; negsi2 instruction pattern(s). 2977: ; 2978: 2979: (define_insn "negsi2" 2980: [(set (match_operand:SI 0 "general_operand" "=d") 2981: (neg:SI (match_operand:SI 1 "general_operand" "d")))] 2982: "" 2983: "* 2984: { 2985: check_label_emit (); 2986: mvs_check_page (0, 2, 0); 2987: return \"LCR %0,%1\"; 2988: }") 2989: 2990: ; 2991: ; neghi2 instruction pattern(s). 2992: ; 2993: 2994: (define_insn "neghi2" 2995: [(set (match_operand:HI 0 "general_operand" "=d") 2996: (neg:HI (match_operand:HI 1 "general_operand" "d")))] 2997: "" 2998: "* 2999: { 3000: check_label_emit (); 3001: mvs_check_page (0, 10, 0); 3002: return \"SLL %1,16\;SRA %1,16\;LCR %0,%1\"; 3003: }") 3004: 3005: ; 3006: ; negdf2 instruction pattern(s). 3007: ; 3008: 3009: (define_insn "negdf2" 3010: [(set (match_operand:DF 0 "general_operand" "=f") 3011: (neg:DF (match_operand:DF 1 "general_operand" "f")))] 3012: "" 3013: "* 3014: { 3015: check_label_emit (); 3016: mvs_check_page (0, 2, 0); 3017: return \"LCDR %0,%1\"; 3018: }") 3019: 3020: ; 3021: ; negsf2 instruction pattern(s). 3022: ; 3023: 3024: (define_insn "negsf2" 3025: [(set (match_operand:SF 0 "general_operand" "=f") 3026: (neg:SF (match_operand:SF 1 "general_operand" "f")))] 3027: "" 3028: "* 3029: { 3030: check_label_emit (); 3031: mvs_check_page (0, 2, 0); 3032: return \"LCER %0,%1\"; 3033: }") 3034: 3035: ;; 3036: ;;- Absolute value instructions. 3037: ;; 3038: 3039: ; 3040: ; abssi2 instruction pattern(s). 3041: ; 3042: 3043: (define_insn "abssi2" 3044: [(set (match_operand:SI 0 "general_operand" "=d") 3045: (abs:SI (match_operand:SI 1 "general_operand" "d")))] 3046: "" 3047: "* 3048: { 3049: check_label_emit (); 3050: mvs_check_page (0, 2, 0); 3051: return \"LPR %0,%1\"; 3052: }") 3053: 3054: ; 3055: ; abshi2 instruction pattern(s). 3056: ; 3057: 3058: (define_insn "abshi2" 3059: [(set (match_operand:HI 0 "general_operand" "=d") 3060: (abs:HI (match_operand:HI 1 "general_operand" "d")))] 3061: "" 3062: "* 3063: { 3064: check_label_emit (); 3065: mvs_check_page (0, 10, 0); 3066: return \"SLL %1,16\;SRA %1,16\;LPR %0,%1\"; 3067: }") 3068: 3069: ; 3070: ; absdf2 instruction pattern(s). 3071: ; 3072: 3073: (define_insn "absdf2" 3074: [(set (match_operand:DF 0 "general_operand" "=f") 3075: (abs:DF (match_operand:DF 1 "general_operand" "f")))] 3076: "" 3077: "* 3078: { 3079: check_label_emit (); 3080: mvs_check_page (0, 2, 0); 3081: return \"LPDR %0,%1\"; 3082: }") 3083: 3084: ; 3085: ; abssf2 instruction pattern(s). 3086: ; 3087: 3088: (define_insn "abssf2" 3089: [(set (match_operand:SF 0 "general_operand" "=f") 3090: (abs:SF (match_operand:SF 1 "general_operand" "f")))] 3091: "" 3092: "* 3093: { 3094: check_label_emit (); 3095: mvs_check_page (0, 2, 0); 3096: return \"LPER %0,%1\"; 3097: }") 3098: 3099: ;; 3100: ;;- One complement instructions. 3101: ;; 3102: 3103: ; 3104: ; one_cmpldi2 instruction pattern(s). 3105: ; 3106: 3107: ;(define_expand "one_cmpldi2" 3108: ; [(set (match_operand:DI 0 "general_operand" "") 3109: ; (not:DI (match_operand:DI 1 "general_operand" "")))] 3110: ; "" 3111: ; " 3112: ;{ 3113: ; rtx gen_one_cmplsi2(); 3114: ; 3115: ; emit_insn (gen_one_cmplsi2 (operand_subword (operands[0], 0, 1, DImode), 3116: ; operand_subword (operands[1], 0, 1, DImode))); 3117: ; emit_insn (gen_one_cmplsi2 (gen_lowpart (SImode, operands[0]), 3118: ; gen_lowpart (SImode, operands[1]))); 3119: ; DONE; 3120: ;}") 3121: 3122: ; 3123: ; one_cmplsi2 instruction pattern(s). 3124: ; 3125: 3126: (define_insn "" 3127: [(set (match_operand:SI 0 "r_or_s_operand" "=dm") 3128: (not:SI (match_operand:SI 1 "r_or_s_operand" "0")))] 3129: "TARGET_CHAR_INSTRUCTIONS" 3130: "* 3131: { 3132: check_label_emit (); 3133: if (REG_P (operands[0])) 3134: { 3135: mvs_check_page (0, 4, 4); 3136: return \"X %0,=F'-1'\"; 3137: } 3138: CC_STATUS_INIT; 3139: mvs_check_page (0, 6, 4); 3140: return \"XC %O0(4,%R0),=F'-1'\"; 3141: }") 3142: 3143: (define_insn "one_cmplsi2" 3144: [(set (match_operand:SI 0 "general_operand" "=d") 3145: (not:SI (match_operand:SI 1 "general_operand" "0")))] 3146: "" 3147: "* 3148: { 3149: check_label_emit (); 3150: mvs_check_page (0, 4, 4); 3151: return \"X %0,=F'-1'\"; 3152: }") 3153: 3154: ; 3155: ; one_cmplhi2 instruction pattern(s). 3156: ; 3157: 3158: (define_insn "" 3159: [(set (match_operand:HI 0 "r_or_s_operand" "=dm") 3160: (not:HI (match_operand:HI 1 "r_or_s_operand" "0")))] 3161: "TARGET_CHAR_INSTRUCTIONS" 3162: "* 3163: { 3164: check_label_emit (); 3165: if (REG_P (operands[0])) 3166: { 3167: mvs_check_page (0, 4, 4); 3168: return \"X %0,=F'-1'\"; 3169: } 3170: CC_STATUS_INIT; 3171: mvs_check_page (0, 6, 4); 3172: return \"XC %O0(2,%R0),=X'FFFF'\"; 3173: }") 3174: 3175: (define_insn "one_cmplhi2" 3176: [(set (match_operand:HI 0 "general_operand" "=d") 3177: (not:HI (match_operand:HI 1 "general_operand" "0")))] 3178: "" 3179: "* 3180: { 3181: check_label_emit (); 3182: mvs_check_page (0, 4, 4); 3183: return \"X %0,=F'-1'\"; 3184: }") 3185: 3186: ; 3187: ; one_cmplqi2 instruction pattern(s). 3188: ; 3189: 3190: (define_insn "" 3191: [(set (match_operand:QI 0 "r_or_s_operand" "=dm") 3192: (not:QI (match_operand:QI 1 "r_or_s_operand" "0")))] 3193: "TARGET_CHAR_INSTRUCTIONS" 3194: "* 3195: { 3196: check_label_emit (); 3197: CC_STATUS_INIT; 3198: if (REG_P (operands[0])) 3199: { 3200: mvs_check_page (0, 4, 4); 3201: return \"X %0,=F'-1'\"; 3202: } 3203: mvs_check_page (0, 4, 0); 3204: return \"XI %0,255\"; 3205: }") 3206: 3207: (define_insn "one_cmplqi2" 3208: [(set (match_operand:QI 0 "general_operand" "=d") 3209: (not:QI (match_operand:QI 1 "general_operand" "0")))] 3210: "" 3211: "* 3212: { 3213: check_label_emit (); 3214: CC_STATUS_INIT; 3215: mvs_check_page (0, 4, 4); 3216: return \"X %0,=F'-1'\"; 3217: }") 3218: 3219: ;; 3220: ;;- Arithmetic shift instructions. 3221: ;; 3222: 3223: ; 3224: ; ashldi3 instruction pattern(s). 3225: ; 3226: 3227: (define_insn "ashldi3" 3228: [(set (match_operand:DI 0 "general_operand" "=d") 3229: (ashift:DI (match_operand:DI 1 "general_operand" "0") 3230: (match_operand:SI 2 "general_operand" "Ja")))] 3231: "" 3232: "* 3233: { 3234: check_label_emit (); 3235: CC_STATUS_INIT; 3236: mvs_check_page (0, 4, 0); 3237: if (REG_P (operands[2])) 3238: return \"SLDA %0,0(%2)\"; 3239: return \"SLDA %0,%c2\"; 3240: }") 3241: 3242: ; 3243: ; ashrdi3 instruction pattern(s). 3244: ; 3245: 3246: (define_insn "ashrdi3" 3247: [(set (match_operand:DI 0 "register_operand" "=d") 3248: (ashiftrt:DI (match_operand:DI 1 "general_operand" "0") 3249: (match_operand:SI 2 "general_operand" "Ja")))] 3250: "" 3251: "* 3252: { 3253: check_label_emit (); 3254: mvs_check_page (0, 4, 0); 3255: if (REG_P (operands[2])) 3256: return \"SRDA %0,0(%2)\"; 3257: return \"SRDA %0,%c2\"; 3258: }") 3259: 3260: ; 3261: ; ashlsi3 instruction pattern(s). 3262: ; 3263: 3264: (define_insn "ashlsi3" 3265: [(set (match_operand:SI 0 "general_operand" "=d") 3266: (ashift:SI (match_operand:SI 1 "general_operand" "0") 3267: (match_operand:SI 2 "general_operand" "Ja")))] 3268: "" 3269: "* 3270: { 3271: check_label_emit (); 3272: CC_STATUS_INIT; 3273: mvs_check_page (0, 4, 0); 3274: if (REG_P (operands[2])) 3275: return \"SLL %0,0(%2)\"; 3276: return \"SLL %0,%c2\"; 3277: }") 3278: 3279: ; 3280: ; ashrsi3 instruction pattern(s). 3281: ; 3282: 3283: (define_insn "ashrsi3" 3284: [(set (match_operand:SI 0 "general_operand" "=d") 3285: (ashiftrt:SI (match_operand:SI 1 "general_operand" "0") 3286: (match_operand:SI 2 "general_operand" "Ja")))] 3287: "" 3288: "* 3289: { 3290: check_label_emit (); 3291: mvs_check_page (0, 4, 0); 3292: if (REG_P (operands[2])) 3293: return \"SRA %0,0(%2)\"; 3294: return \"SRA %0,%c2\"; 3295: }") 3296: 3297: ; 3298: ; ashlhi3 instruction pattern(s). 3299: ; 3300: 3301: (define_insn "ashlhi3" 3302: [(set (match_operand:HI 0 "general_operand" "=d") 3303: (ashift:HI (match_operand:HI 1 "general_operand" "0") 3304: (match_operand:SI 2 "general_operand" "Ja")))] 3305: "" 3306: "* 3307: { 3308: check_label_emit (); 3309: mvs_check_page (0, 8, 0); 3310: if (REG_P (operands[2])) 3311: return \"SLL %0,16(%2)\;SRA %0,16\"; 3312: return \"SLL %0,16+%c2\;SRA %0,16\"; 3313: }") 3314: 3315: ; 3316: ; ashrhi3 instruction pattern(s). 3317: ; 3318: 3319: (define_insn "ashrhi3" 3320: [(set (match_operand:HI 0 "general_operand" "=d") 3321: (ashiftrt:HI (match_operand:HI 1 "general_operand" "0") 3322: (match_operand:SI 2 "general_operand" "Ja")))] 3323: "" 3324: "* 3325: { 3326: check_label_emit (); 3327: mvs_check_page (0, 4, 0); 3328: if (REG_P (operands[2])) 3329: return \"SLL %0,16\;SRA %0,16(%2)\"; 3330: return \"SLL %0,16\;SRA %0,16+%c2\"; 3331: }") 3332: 3333: ; 3334: ; ashlqi3 instruction pattern(s). 3335: ; 3336: 3337: (define_insn "ashlqi3" 3338: [(set (match_operand:QI 0 "general_operand" "=d") 3339: (ashift:QI (match_operand:QI 1 "general_operand" "0") 3340: (match_operand:SI 2 "general_operand" "Ja")))] 3341: "" 3342: "* 3343: { 3344: check_label_emit (); 3345: CC_STATUS_INIT; 3346: mvs_check_page (0, 4, 0); 3347: if (REG_P (operands[2])) 3348: return \"SLL %0,0(%2)\"; 3349: return \"SLL %0,%c2\"; 3350: }") 3351: 3352: ; 3353: ; ashrqi3 instruction pattern(s). 3354: ; 3355: 3356: (define_insn "ashrqi3" 3357: [(set (match_operand:QI 0 "general_operand" "=d") 3358: (ashiftrt:QI (match_operand:QI 1 "general_operand" "0") 3359: (match_operand:SI 2 "general_operand" "Ja")))] 3360: "" 3361: "* 3362: { 3363: check_label_emit (); 3364: mvs_check_page (0, 8, 0); 3365: if (REG_P (operands[2])) 3366: return \"SLL %0,24\;SRA %0,24(%2)\"; 3367: return \"SLL %0,24\;SRA %0,24+%c2\"; 3368: }") 3369: 3370: ;; 3371: ;;- Logical shift instructions. 3372: ;; 3373: 3374: ; 3375: ; lshrdi3 instruction pattern(s). 3376: ; 3377: 3378: (define_insn "lshrdi3" 3379: [(set (match_operand:DI 0 "general_operand" "=d") 3380: (lshiftrt:DI (match_operand:DI 1 "general_operand" "0") 3381: (match_operand:SI 2 "general_operand" "Ja")))] 3382: "" 3383: "* 3384: { 3385: check_label_emit (); 3386: mvs_check_page (0, 4, 0); 3387: if (REG_P (operands[2])) 3388: return \"SRDL %0,0(%2)\"; 3389: return \"SRDL %0,%c2\"; 3390: }") 3391: 3392: 3393: ; 3394: ; lshrsi3 instruction pattern(s). 3395: ; 3396: 3397: (define_insn "lshrsi3" 3398: [(set (match_operand:SI 0 "general_operand" "=d") 3399: (lshiftrt:SI (match_operand:SI 1 "general_operand" "0") 3400: (match_operand:SI 2 "general_operand" "Ja")))] 3401: "" 3402: "* 3403: { 3404: check_label_emit (); 3405: mvs_check_page (0, 4, 0); 3406: if (REG_P (operands[2])) 3407: return \"SRL %0,0(%2)\"; 3408: return \"SRL %0,%c2\"; 3409: }") 3410: 3411: ; 3412: ; lshrhi3 instruction pattern(s). 3413: ; 3414: 3415: (define_insn "lshrhi3" 3416: [(set (match_operand:HI 0 "general_operand" "=d") 3417: (lshiftrt:HI (match_operand:HI 1 "general_operand" "0") 3418: (match_operand:SI 2 "general_operand" "Ja")))] 3419: "" 3420: "* 3421: { 3422: check_label_emit (); 3423: CC_STATUS_INIT; 3424: if (REG_P (operands[2])) 3425: { 3426: mvs_check_page (0, 8, 4); 3427: return \"N %0,=X'0000FFFF'\;SRL %0,0(%2)\"; 3428: } 3429: mvs_check_page (0, 8, 4); 3430: return \"N %0,=X'0000FFFF'\;SRL %0,%c2\"; 3431: }") 3432: 3433: ; 3434: ; lshrqi3 instruction pattern(s). 3435: ; 3436: 3437: (define_insn "lshrqi3" 3438: [(set (match_operand:QI 0 "general_operand" "=d") 3439: (lshiftrt:QI (match_operand:QI 1 "general_operand" "0") 3440: (match_operand:SI 2 "general_operand" "Ja")))] 3441: "" 3442: "* 3443: { 3444: check_label_emit (); 3445: CC_STATUS_INIT; 3446: mvs_check_page (0, 8, 4); 3447: if (REG_P (operands[2])) 3448: return \"N %0,=X'000000FF'\;SRL %0,0(%2)\"; 3449: return \"N %0,=X'000000FF'\;SRL %0,%c2\"; 3450: }") 3451: 3452: ;; 3453: ;;- Conditional jump instructions. 3454: ;; 3455: 3456: ; 3457: ; beq instruction pattern(s). 3458: ; 3459: 3460: (define_insn "beq" 3461: [(set (pc) 3462: (if_then_else (eq (cc0) 3463: (const_int 0)) 3464: (label_ref (match_operand 0 "" "")) 3465: (pc)))] 3466: "" 3467: "* 3468: { 3469: check_label_emit (); 3470: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3471: { 3472: mvs_check_page (0, 6, 4); 3473: return \"L 14,=A(%l0)\;BER 14\"; 3474: } 3475: if (mvs_check_page (0, 4, 0)) 3476: { 3477: mvs_check_page (0, 2, 4); 3478: return \"L 14,=A(%l0)\;BER 14\"; 3479: } 3480: return \"BE %l0\"; 3481: }") 3482: 3483: ; 3484: ; bne instruction pattern(s). 3485: ; 3486: 3487: (define_insn "bne" 3488: [(set (pc) 3489: (if_then_else (ne (cc0) 3490: (const_int 0)) 3491: (label_ref (match_operand 0 "" "")) 3492: (pc)))] 3493: "" 3494: "* 3495: { 3496: check_label_emit (); 3497: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3498: { 3499: mvs_check_page (0, 6, 4); 3500: return \"L 14,=A(%l0)\;BNER 14\"; 3501: } 3502: if (mvs_check_page (0, 4, 0)) 3503: { 3504: mvs_check_page (0, 2, 4); 3505: return \"L 14,=A(%l0)\;BNER 14\"; 3506: } 3507: return \"BNE %l0\"; 3508: }") 3509: 3510: ; 3511: ; bgt instruction pattern(s). 3512: ; 3513: 3514: (define_insn "bgt" 3515: [(set (pc) 3516: (if_then_else (gt (cc0) 3517: (const_int 0)) 3518: (label_ref (match_operand 0 "" "")) 3519: (pc)))] 3520: "" 3521: "* 3522: { 3523: check_label_emit (); 3524: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3525: { 3526: mvs_check_page (0, 6, 4); 3527: return \"L 14,=A(%l0)\;BHR 14\"; 3528: } 3529: if (mvs_check_page (0, 4, 0)) 3530: { 3531: mvs_check_page (0, 2, 4); 3532: return \"L 14,=A(%l0)\;BHR 14\"; 3533: } 3534: return \"BH %l0\"; 3535: }") 3536: 3537: ; 3538: ; bgtu instruction pattern(s). 3539: ; 3540: 3541: (define_insn "bgtu" 3542: [(set (pc) 3543: (if_then_else (gtu (cc0) 3544: (const_int 0)) 3545: (label_ref (match_operand 0 "" "")) 3546: (pc)))] 3547: "" 3548: "* 3549: { 3550: check_label_emit (); 3551: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3552: { 3553: mvs_check_page (0, 6, 4); 3554: return \"L 14,=A(%l0)\;BHR 14\"; 3555: } 3556: if (mvs_check_page (0, 4, 0)) 3557: { 3558: mvs_check_page (0, 2, 4); 3559: return \"L 14,=A(%l0)\;BHR 14\"; 3560: } 3561: return \"BH %l0\"; 3562: }") 3563: 3564: ; 3565: ; blt instruction pattern(s). 3566: ; 3567: 3568: (define_insn "blt" 3569: [(set (pc) 3570: (if_then_else (lt (cc0) 3571: (const_int 0)) 3572: (label_ref (match_operand 0 "" "")) 3573: (pc)))] 3574: "" 3575: "* 3576: { 3577: check_label_emit (); 3578: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3579: { 3580: mvs_check_page (0, 6, 4); 3581: return \"L 14,=A(%l0)\;BLR 14\"; 3582: } 3583: if (mvs_check_page (0, 4, 0)) 3584: { 3585: mvs_check_page (0, 2, 4); 3586: return \"L 14,=A(%l0)\;BLR 14\"; 3587: } 3588: return \"BL %l0\"; 3589: }") 3590: 3591: ; 3592: ; bltu instruction pattern(s). 3593: ; 3594: 3595: (define_insn "bltu" 3596: [(set (pc) 3597: (if_then_else (ltu (cc0) 3598: (const_int 0)) 3599: (label_ref (match_operand 0 "" "")) 3600: (pc)))] 3601: "" 3602: "* 3603: { 3604: check_label_emit (); 3605: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3606: { 3607: mvs_check_page (0, 6, 4); 3608: return \"L 14,=A(%l0)\;BLR 14\"; 3609: } 3610: if (mvs_check_page (0, 4, 0)) 3611: { 3612: mvs_check_page (0, 2, 4); 3613: return \"L 14,=A(%l0)\;BLR 14\"; 3614: } 3615: return \"BL %l0\"; 3616: }") 3617: 3618: ; 3619: ; bge instruction pattern(s). 3620: ; 3621: 3622: (define_insn "bge" 3623: [(set (pc) 3624: (if_then_else (ge (cc0) 3625: (const_int 0)) 3626: (label_ref (match_operand 0 "" "")) 3627: (pc)))] 3628: "" 3629: "* 3630: { 3631: check_label_emit (); 3632: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3633: { 3634: mvs_check_page (0, 6, 4); 3635: return \"L 14,=A(%l0)\;BNLR 14\"; 3636: } 3637: if (mvs_check_page (0, 4, 0)) 3638: { 3639: mvs_check_page (0, 2, 4); 3640: return \"L 14,=A(%l0)\;BNLR 14\"; 3641: } 3642: return \"BNL %l0\"; 3643: }") 3644: 3645: ; 3646: ; bgeu instruction pattern(s). 3647: ; 3648: 3649: (define_insn "bgeu" 3650: [(set (pc) 3651: (if_then_else (geu (cc0) 3652: (const_int 0)) 3653: (label_ref (match_operand 0 "" "")) 3654: (pc)))] 3655: "" 3656: "* 3657: { 3658: check_label_emit (); 3659: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3660: { 3661: mvs_check_page (0, 6, 4); 3662: return \"L 14,=A(%l0)\;BNLR 14\"; 3663: } 3664: if (mvs_check_page (0, 4, 0)) 3665: { 3666: mvs_check_page (0, 2, 4); 3667: return \"L 14,=A(%l0)\;BNLR 14\"; 3668: } 3669: return \"BNL %l0\"; 3670: }") 3671: 3672: ; 3673: ; ble instruction pattern(s). 3674: ; 3675: 3676: (define_insn "ble" 3677: [(set (pc) 3678: (if_then_else (le (cc0) 3679: (const_int 0)) 3680: (label_ref (match_operand 0 "" "")) 3681: (pc)))] 3682: "" 3683: "* 3684: { 3685: check_label_emit (); 3686: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3687: { 3688: mvs_check_page (0, 6, 4); 3689: return \"L 14,=A(%l0)\;BNHR 14\"; 3690: } 3691: if (mvs_check_page (0, 4, 0)) 3692: { 3693: mvs_check_page (0, 2, 4); 3694: return \"L 14,=A(%l0)\;BNHR 14\"; 3695: } 3696: return \"BNH %l0\"; 3697: }") 3698: 3699: ; 3700: ; bleu instruction pattern(s). 3701: ; 3702: 3703: (define_insn "bleu" 3704: [(set (pc) 3705: (if_then_else (leu (cc0) 3706: (const_int 0)) 3707: (label_ref (match_operand 0 "" "")) 3708: (pc)))] 3709: "" 3710: "* 3711: { 3712: check_label_emit (); 3713: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3714: { 3715: mvs_check_page (0, 6, 4); 3716: return \"L 14,=A(%l0)\;BNHR 14\"; 3717: } 3718: if (mvs_check_page (0, 4, 0)) 3719: { 3720: mvs_check_page (0, 2, 4); 3721: return \"L 14,=A(%l0)\;BNHR 14\"; 3722: } 3723: return \"BNH %l0\"; 3724: }") 3725: 3726: ;; 3727: ;;- Negated conditional jump instructions. 3728: ;; 3729: 3730: (define_insn "" 3731: [(set (pc) 3732: (if_then_else (eq (cc0) 3733: (const_int 0)) 3734: (pc) 3735: (label_ref (match_operand 0 "" ""))))] 3736: "" 3737: "* 3738: { 3739: check_label_emit (); 3740: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3741: { 3742: mvs_check_page (0, 6, 4); 3743: return \"L 14,=A(%l0)\;BNER 14\"; 3744: } 3745: if (mvs_check_page (0, 4, 0)) 3746: { 3747: mvs_check_page (0, 2, 4); 3748: return \"L 14,=A(%l0)\;BNER 14\"; 3749: } 3750: return \"BNE %l0\"; 3751: }") 3752: 3753: (define_insn "" 3754: [(set (pc) 3755: (if_then_else (ne (cc0) 3756: (const_int 0)) 3757: (pc) 3758: (label_ref (match_operand 0 "" ""))))] 3759: "" 3760: "* 3761: { 3762: check_label_emit (); 3763: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3764: { 3765: mvs_check_page (0, 6, 4); 3766: return \"L 14,=A(%l0)\;BER 14\"; 3767: } 3768: if (mvs_check_page (0, 4, 0)) 3769: { 3770: mvs_check_page (0, 2, 4); 3771: return \"L 14,=A(%l0)\;BER 14\"; 3772: } 3773: return \"BE %l0\"; 3774: }") 3775: 3776: (define_insn "" 3777: [(set (pc) 3778: (if_then_else (gt (cc0) 3779: (const_int 0)) 3780: (pc) 3781: (label_ref (match_operand 0 "" ""))))] 3782: "" 3783: "* 3784: { 3785: check_label_emit (); 3786: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3787: { 3788: mvs_check_page (0, 6, 4); 3789: return \"L 14,=A(%l0)\;BNHR 14\"; 3790: } 3791: if (mvs_check_page (0, 4, 0)) 3792: { 3793: mvs_check_page (0, 2, 4); 3794: return \"L 14,=A(%l0)\;BNHR 14\"; 3795: } 3796: return \"BNH %l0\"; 3797: }") 3798: 3799: (define_insn "" 3800: [(set (pc) 3801: (if_then_else (gtu (cc0) 3802: (const_int 0)) 3803: (pc) 3804: (label_ref (match_operand 0 "" ""))))] 3805: "" 3806: "* 3807: { 3808: check_label_emit (); 3809: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3810: { 3811: mvs_check_page (0, 6, 4); 3812: return \"L 14,=A(%l0)\;BNHR 14\"; 3813: } 3814: if (mvs_check_page (0, 4, 0)) 3815: { 3816: mvs_check_page (0, 2, 4); 3817: return \"L 14,=A(%l0)\;BNHR 14\"; 3818: } 3819: return \"BNH %l0\"; 3820: }") 3821: 3822: (define_insn "" 3823: [(set (pc) 3824: (if_then_else (lt (cc0) 3825: (const_int 0)) 3826: (pc) 3827: (label_ref (match_operand 0 "" ""))))] 3828: "" 3829: "* 3830: { 3831: check_label_emit (); 3832: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3833: { 3834: mvs_check_page (0, 6, 4); 3835: return \"L 14,=A(%l0)\;BNLR 14\"; 3836: } 3837: if (mvs_check_page (0, 4, 0)) 3838: { 3839: mvs_check_page (0, 2, 4); 3840: return \"L 14,=A(%l0)\;BNLR 14\"; 3841: } 3842: return \"BNL %l0\"; 3843: }") 3844: 3845: (define_insn "" 3846: [(set (pc) 3847: (if_then_else (ltu (cc0) 3848: (const_int 0)) 3849: (pc) 3850: (label_ref (match_operand 0 "" ""))))] 3851: "" 3852: "* 3853: { 3854: check_label_emit (); 3855: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3856: { 3857: mvs_check_page (0, 6, 4); 3858: return \"L 14,=A(%l0)\;BNLR 14\"; 3859: } 3860: if (mvs_check_page (0, 4, 0)) 3861: { 3862: mvs_check_page (0, 2, 4); 3863: return \"L 14,=A(%l0)\;BNLR 14\"; 3864: } 3865: return \"BNL %l0\"; 3866: }") 3867: 3868: (define_insn "" 3869: [(set (pc) 3870: (if_then_else (ge (cc0) 3871: (const_int 0)) 3872: (pc) 3873: (label_ref (match_operand 0 "" ""))))] 3874: "" 3875: "* 3876: { 3877: check_label_emit (); 3878: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3879: { 3880: mvs_check_page (0, 6, 4); 3881: return \"L 14,=A(%l0)\;BLR 14\"; 3882: } 3883: if (mvs_check_page (0, 4, 0)) 3884: { 3885: mvs_check_page (0, 2, 4); 3886: return \"L 14,=A(%l0)\;BLR 14\"; 3887: } 3888: return \"BL %l0\"; 3889: }") 3890: 3891: (define_insn "" 3892: [(set (pc) 3893: (if_then_else (geu (cc0) 3894: (const_int 0)) 3895: (pc) 3896: (label_ref (match_operand 0 "" ""))))] 3897: "" 3898: "* 3899: { 3900: check_label_emit (); 3901: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3902: { 3903: mvs_check_page (0, 6, 4); 3904: return \"L 14,=A(%l0)\;BLR 14\"; 3905: } 3906: if (mvs_check_page (0, 4, 0)) 3907: { 3908: mvs_check_page (0, 2, 4); 3909: return \"L 14,=A(%l0)\;BLR 14\"; 3910: } 3911: return \"BL %l0\"; 3912: }") 3913: 3914: (define_insn "" 3915: [(set (pc) 3916: (if_then_else (le (cc0) 3917: (const_int 0)) 3918: (pc) 3919: (label_ref (match_operand 0 "" ""))))] 3920: "" 3921: "* 3922: { 3923: check_label_emit (); 3924: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3925: { 3926: mvs_check_page (0, 6, 4); 3927: return \"L 14,=A(%l0)\;BHR 14\"; 3928: } 3929: if (mvs_check_page (0, 4, 0)) 3930: { 3931: mvs_check_page (0, 2, 4); 3932: return \"L 14,=A(%l0)\;BHR 14\"; 3933: } 3934: return \"BH %l0\"; 3935: }") 3936: 3937: (define_insn "" 3938: [(set (pc) 3939: (if_then_else (leu (cc0) 3940: (const_int 0)) 3941: (pc) 3942: (label_ref (match_operand 0 "" ""))))] 3943: "" 3944: "* 3945: { 3946: check_label_emit (); 3947: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 3948: { 3949: mvs_check_page (0, 6, 4); 3950: return \"L 14,=A(%l0)\;BHR 14\"; 3951: } 3952: if (mvs_check_page (0, 4, 0)) 3953: { 3954: mvs_check_page (0, 2, 4); 3955: return \"L 14,=A(%l0)\;BHR 14\"; 3956: } 3957: return \"BH %l0\"; 3958: }") 3959: 3960: ;; 3961: ;;- Subtract one and jump if not zero. 3962: ;; 3963: 3964: (define_insn "" 3965: [(set (pc) 3966: (if_then_else 3967: (ne (plus:SI (match_operand:SI 0 "register_operand" "+d") 3968: (const_int -1)) 3969: (const_int 0)) 3970: (label_ref (match_operand 1 "" "")) 3971: (pc))) 3972: (set (match_dup 0) 3973: (plus:SI (match_dup 0) 3974: (const_int -1)))] 3975: "" 3976: "* 3977: { 3978: check_label_emit (); 3979: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[1]))) 3980: { 3981: mvs_check_page (0, 6, 4); 3982: return \"L 14,=A(%l1)\;BCTR %0,14\"; 3983: } 3984: if (mvs_check_page (0, 4, 0)) 3985: { 3986: mvs_check_page (0, 2, 4); 3987: return \"L 14,=A(%l1)\;BCTR %0,14\"; 3988: } 3989: return \"BCT %0,%l1\"; 3990: }") 3991: 3992: (define_insn "" 3993: [(set (pc) 3994: (if_then_else 3995: (eq (plus:SI (match_operand:SI 0 "register_operand" "+d") 3996: (const_int -1)) 3997: (const_int 0)) 3998: (pc) 3999: (label_ref (match_operand 1 "" "")))) 4000: (set (match_dup 0) 4001: (plus:SI (match_dup 0) 4002: (const_int -1)))] 4003: "" 4004: "* 4005: { 4006: check_label_emit (); 4007: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[1]))) 4008: { 4009: mvs_check_page (0, 6, 4); 4010: return \"L 14,=A(%l1)\;BCTR %0,14\"; 4011: } 4012: if (mvs_check_page (0, 4, 0)) 4013: { 4014: mvs_check_page (0, 2, 4); 4015: return \"L 14,=A(%l1)\;BCTR %0,14\"; 4016: } 4017: return \"BCT %0,%l1\"; 4018: }") 4019: 4020: ;; 4021: ;;- Unconditional jump instructions. 4022: ;; 4023: 4024: ; 4025: ; jump instruction pattern(s). 4026: ; 4027: 4028: (define_insn "jump" 4029: [(set (pc) 4030: (label_ref (match_operand 0 "" "")))] 4031: "" 4032: "* 4033: { 4034: check_label_emit (); 4035: if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0]))) 4036: { 4037: mvs_check_page (0, 6, 4); 4038: return \"L 14,=A(%l0)\;BR 14\"; 4039: } 4040: if (mvs_check_page (0, 4, 0)) 4041: { 4042: mvs_check_page (0, 2, 4); 4043: return \"L 14,=A(%l0)\;BR 14\"; 4044: } 4045: return \"B %l0\"; 4046: }") 4047: 4048: ; 4049: ; indirect-jump instruction pattern(s). 4050: ; 4051: 4052: (define_insn "indirect_jump" 4053: [(set (pc) (match_operand:SI 0 "general_operand" "r"))] 4054: "(GET_CODE (operands[0]) != MEM )" 4055: "* 4056: { 4057: check_label_emit (); 4058: mvs_check_page (0, 2, 0); 4059: return \"BR %0\"; 4060: }") 4061: 4062: ; 4063: ; tablejump instruction pattern(s). 4064: ; 4065: 4066: (define_insn "tablejump" 4067: [(set (pc) 4068: (match_operand:SI 0 "general_operand" "am")) 4069: (use (label_ref (match_operand 1 "" "")))] 4070: "" 4071: "* 4072: { 4073: check_label_emit (); 4074: if (REG_P (operands[0])) 4075: { 4076: mvs_check_page (0, 6, 0); 4077: return \"BR %0\;DS 0F\"; 4078: } 4079: mvs_check_page (0, 10, 0); 4080: return \"L 14,%0\;BR 14\;DS 0F\"; 4081: }") 4082: 4083: ;; 4084: ;;- Jump to subroutine. 4085: ;; 4086: ;; For the C/370 environment the internal functions, ie. sqrt, are called with 4087: ;; a non-standard form. So, we must fix it here. There's no BM like IBM. 4088: ;; 4089: 4090: ; 4091: ; call instruction pattern(s). 4092: ; 4093: 4094: (define_insn "call" 4095: [(call (match_operand:QI 0 "memory_operand" "m") 4096: (match_operand:SI 1 "immediate_operand" "i"))] 4097: "" 4098: "* 4099: { 4100: static char temp[128]; 4101: int i = STACK_POINTER_OFFSET; 4102: 4103: check_label_emit (); 4104: if (mvs_function_check (XSTR (operands[0], 0))) 4105: { 4106: mvs_check_page (0, 22, 4); 4107: sprintf ( temp, \"LA 1,136(,13)\;ST 1,%d(,13)\;LA 1,%d(,13)\;L 15,%%0\;BALR 14,15\;LD 0,136(,13)\", 4108: i - 4, i - 4 ); 4109: } 4110: else 4111: { 4112: mvs_check_page (0, 10, 4); 4113: sprintf ( temp, \"LA 1,%d(,13)\;L 15,%%0\;BALR 14,15\", i ); 4114: } 4115: return temp; 4116: }") 4117: 4118: ; 4119: ; call_value instruction pattern(s). 4120: ; 4121: 4122: (define_insn "call_value" 4123: [(set (match_operand 0 "" "rf") 4124: (call (match_operand:QI 1 "memory_operand" "m") 4125: (match_operand:SI 2 "general_operand" "i")))] 4126: "" 4127: "* 4128: { 4129: static char temp[128]; 4130: int i = STACK_POINTER_OFFSET; 4131: 4132: check_label_emit (); 4133: if (mvs_function_check (XSTR (operands[1], 0))) 4134: { 4135: mvs_check_page (0, 22, 4); 4136: sprintf ( temp, \"LA 1,136(,13)\;ST 1,%d(,13)\;LA 1,%d(,13)\;L 15,%%1\;BALR 14,15\;LD 0,136(,13)\", 4137: i - 4, i - 4 ); 4138: } 4139: else 4140: { 4141: mvs_check_page (0, 10, 4); 4142: sprintf ( temp, \"LA 1,%d(,13)\;L 15,%%1\;BALR 14,15\", i ); 4143: } 4144: return temp; 4145: }") 4146: 4147: (define_insn "" 4148: [(call (mem:QI (match_operand:SI 0 "" "i")) 4149: (match_operand:SI 1 "general_operand" "g"))] 4150: "GET_CODE (operands[0]) == SYMBOL_REF" 4151: "* 4152: { 4153: static char temp[128]; 4154: int i = STACK_POINTER_OFFSET; 4155: 4156: check_label_emit (); 4157: if (mvs_function_check (XSTR (operands[0], 0))) 4158: { 4159: mvs_check_page (0, 22, 4); 4160: sprintf ( temp, \"LA 1,136(,13)\;ST 1,%d(,13)\;LA 1,%d(,13)\;L 15,%%0\;BALR 14,15\;LD 0,136(,13)\", 4161: i - 4, i - 4 ); 4162: } 4163: else 4164: { 4165: mvs_check_page (0, 10, 4); 4166: sprintf ( temp, \"LA 1,%d(,13)\;L 15,%%0\;BALR 14,15\", i ); 4167: } 4168: return temp; 4169: }") 4170: 4171: (define_insn "" 4172: [(set (match_operand 0 "" "rf") 4173: (call (mem:QI (match_operand:SI 1 "" "i")) 4174: (match_operand:SI 2 "general_operand" "g")))] 4175: "GET_CODE (operands[1]) == SYMBOL_REF" 4176: "* 4177: { 4178: static char temp[128]; 4179: int i = STACK_POINTER_OFFSET; 4180: 4181: check_label_emit (); 4182: if (mvs_function_check (XSTR (operands[1], 0))) 4183: { 4184: mvs_check_page (0, 22, 4); 4185: sprintf ( temp, \"LA 1,136(,13)\;ST 1,%d(,13)\;LA 1,%d(,13)\;L 15,%%1\;BALR 14,15\;LD 0,136(,13)\", 4186: i - 4, i - 4 ); 4187: } 4188: else 4189: { 4190: mvs_check_page (0, 10, 4); 4191: sprintf ( temp, \"LA 1,%d(,13)\;L 15,%%1\;BALR 14,15\", i ); 4192: } 4193: return temp; 4194: }") 4195: 4196: 4197: ;; 4198: ;;- Miscellaneous instructions. 4199: ;; 4200: 4201: ; 4202: ; nop instruction pattern(s). 4203: ; 4204: 4205: (define_insn "nop" 4206: [(const_int 0)] 4207: "" 4208: "* 4209: { 4210: check_label_emit (); 4211: mvs_check_page (0, 2, 0); 4212: return \"LR 0,0\"; 4213: }") 4214:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.