Annotation of GNUtools/cc/config/i370/i370.md, revision 1.1.1.1

1.1       root        1: ;;- Machine description for GNU compiler -- System/370 version.
                      2: ;;   Copyright (C) 1989, 1993 Free Software Foundation, Inc.
                      3: ;;   Contributed by Jan Stein ([email protected]).
                      4: ;;   Modifed for MVS C/370 by Dave Pitts ([email protected])
                      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")
                   2003:        (minus:QI (match_operand:QI 1 "general_operand" "%0")
                   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")
                   2024:        (minus:QI (match_operand:QI 1 "register_operand" "%0")
                   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: ; lshldi3 instruction pattern(s).
                   3376: ;
                   3377: 
                   3378: (define_insn "lshldi3"
                   3379:   [(set (match_operand:DI 0 "general_operand" "=d")
                   3380:        (lshift: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 \"SLDL      %0,0(%2)\";
                   3389:   return \"SLDL        %0,%c2\";
                   3390: }")
                   3391: 
                   3392: ;
                   3393: ; lshrdi3 instruction pattern(s).
                   3394: ;
                   3395: 
                   3396: (define_insn "lshrdi3"
                   3397:   [(set (match_operand:DI 0 "general_operand" "=d")
                   3398:        (lshiftrt:DI (match_operand:DI 1 "general_operand" "0")
                   3399:                     (match_operand:SI 2 "general_operand" "Ja")))]
                   3400:   ""
                   3401:   "*
                   3402: {
                   3403:   check_label_emit ();
                   3404:   mvs_check_page (0, 4, 0);
                   3405:   if (REG_P (operands[2])) 
                   3406:     return \"SRDL      %0,0(%2)\";
                   3407:   return \"SRDL        %0,%c2\";
                   3408: }")
                   3409: 
                   3410: ;
                   3411: ; lshlsi3 instruction pattern(s).
                   3412: ;
                   3413: 
                   3414: (define_insn "lshlsi3"
                   3415:   [(set (match_operand:SI 0 "general_operand" "=d")
                   3416:        (lshift:SI (match_operand:SI 1 "general_operand" "0")
                   3417:                   (match_operand:SI 2 "general_operand" "Ja")))]
                   3418:   ""
                   3419:   "*
                   3420: {
                   3421:   check_label_emit ();
                   3422:   mvs_check_page (0, 4, 0);
                   3423:   if (REG_P (operands[2])) 
                   3424:     return \"SLL       %0,0(%2)\";
                   3425:   return \"SLL %0,%c2\";
                   3426: }")
                   3427: 
                   3428: ;
                   3429: ; lshrsi3 instruction pattern(s).
                   3430: ;
                   3431: 
                   3432: (define_insn "lshrsi3"
                   3433:   [(set (match_operand:SI 0 "general_operand" "=d")
                   3434:        (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
                   3435:                     (match_operand:SI 2 "general_operand" "Ja")))]
                   3436:   ""
                   3437:   "*
                   3438: {
                   3439:   check_label_emit ();
                   3440:   mvs_check_page (0, 4, 0);
                   3441:   if (REG_P (operands[2])) 
                   3442:     return \"SRL       %0,0(%2)\";
                   3443:   return \"SRL %0,%c2\";
                   3444: }")
                   3445: 
                   3446: ;
                   3447: ; lshlhi3 instruction pattern(s).
                   3448: ;
                   3449: 
                   3450: (define_insn "lshlhi3"
                   3451:   [(set (match_operand:HI 0 "general_operand" "=d")
                   3452:        (lshift:HI (match_operand:HI 1 "general_operand" "0")
                   3453:                   (match_operand:SI 2 "general_operand" "Ja")))]
                   3454:   ""
                   3455:   "*
                   3456: {
                   3457:   check_label_emit ();
                   3458:   CC_STATUS_INIT;
                   3459:   mvs_check_page (0, 4, 0);
                   3460:   if (REG_P (operands[2])) 
                   3461:     return \"SLL       %0,0(%2)\";
                   3462:   return \"SLL %0,%c2\";
                   3463: }")
                   3464: 
                   3465: ;
                   3466: ; lshrhi3 instruction pattern(s).
                   3467: ;
                   3468: 
                   3469: (define_insn "lshrhi3"
                   3470:   [(set (match_operand:HI 0 "general_operand" "=d")
                   3471:        (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
                   3472:                     (match_operand:SI 2 "general_operand" "Ja")))]
                   3473:   ""
                   3474:   "*
                   3475: {
                   3476:   check_label_emit ();
                   3477:   CC_STATUS_INIT;
                   3478:   if (REG_P (operands[2]))
                   3479:     {
                   3480:       mvs_check_page (0, 8, 4);
                   3481:       return \"N       %0,=X'0000FFFF'\;SRL    %0,0(%2)\";
                   3482:     }
                   3483:   mvs_check_page (0, 8, 4);
                   3484:   return \"N   %0,=X'0000FFFF'\;SRL    %0,%c2\";
                   3485: }")
                   3486: 
                   3487: ;
                   3488: ; lshlqi3 instruction pattern(s).
                   3489: ;
                   3490: 
                   3491: (define_insn "lshlqi3"
                   3492:   [(set (match_operand:QI 0 "general_operand" "=d")
                   3493:        (lshift:QI (match_operand:QI 1 "general_operand" "0")
                   3494:                   (match_operand:SI 2 "general_operand" "Ja")))]
                   3495:   ""
                   3496:   "*
                   3497: {
                   3498:   check_label_emit ();
                   3499:   mvs_check_page (0, 4, 0);
                   3500:   if (REG_P (operands[2])) 
                   3501:     return \"SLL       %0,0(%2)\";
                   3502:   return \"SLL %0,%c2\";
                   3503: }")
                   3504: 
                   3505: ;
                   3506: ; lshrqi3 instruction pattern(s).
                   3507: ;
                   3508: 
                   3509: (define_insn "lshrqi3"
                   3510:   [(set (match_operand:QI 0 "general_operand" "=d")
                   3511:        (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
                   3512:                     (match_operand:SI 2 "general_operand" "Ja")))]
                   3513:   ""
                   3514:   "*
                   3515: {
                   3516:   check_label_emit ();
                   3517:   CC_STATUS_INIT;
                   3518:   mvs_check_page (0, 8, 4);
                   3519:   if (REG_P (operands[2])) 
                   3520:     return \"N %0,=X'000000FF'\;SRL    %0,0(%2)\";
                   3521:   return \"N   %0,=X'000000FF'\;SRL    %0,%c2\";
                   3522: }")
                   3523: 
                   3524: ;;
                   3525: ;;- Conditional jump instructions.
                   3526: ;;
                   3527: 
                   3528: ;
                   3529: ; beq instruction pattern(s).
                   3530: ;
                   3531: 
                   3532: (define_insn "beq"
                   3533:   [(set (pc)
                   3534:        (if_then_else (eq (cc0)
                   3535:                          (const_int 0))
                   3536:                      (label_ref (match_operand 0 "" ""))
                   3537:                      (pc)))]
                   3538:   ""
                   3539:   "*
                   3540: {
                   3541:   check_label_emit ();
                   3542:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3543:     {
                   3544:       mvs_check_page (0, 6, 4);
                   3545:       return \"L       14,=A(%l0)\;BER 14\";
                   3546:     }
                   3547:   if (mvs_check_page (0, 4, 0))
                   3548:     {
                   3549:       mvs_check_page (0, 2, 4);
                   3550:       return \"L       14,=A(%l0)\;BER 14\";
                   3551:     }
                   3552:   return \"BE  %l0\";
                   3553: }")
                   3554: 
                   3555: ;
                   3556: ; bne instruction pattern(s).
                   3557: ;
                   3558: 
                   3559: (define_insn "bne"
                   3560:   [(set (pc)
                   3561:        (if_then_else (ne (cc0)
                   3562:                          (const_int 0))
                   3563:                      (label_ref (match_operand 0 "" ""))
                   3564:                      (pc)))]
                   3565:   ""
                   3566:   "*
                   3567: {
                   3568:   check_label_emit ();
                   3569:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3570:     {
                   3571:       mvs_check_page (0, 6, 4);
                   3572:       return \"L       14,=A(%l0)\;BNER        14\";
                   3573:     }
                   3574:   if (mvs_check_page (0, 4, 0))
                   3575:     {
                   3576:       mvs_check_page (0, 2, 4);
                   3577:       return \"L       14,=A(%l0)\;BNER        14\";
                   3578:     }
                   3579:   return \"BNE %l0\";
                   3580: }")
                   3581: 
                   3582: ;
                   3583: ; bgt instruction pattern(s).
                   3584: ;
                   3585: 
                   3586: (define_insn "bgt"
                   3587:   [(set (pc)
                   3588:        (if_then_else (gt (cc0)
                   3589:                          (const_int 0))
                   3590:                      (label_ref (match_operand 0 "" ""))
                   3591:                      (pc)))]
                   3592:   ""
                   3593:   "*
                   3594: {
                   3595:   check_label_emit ();
                   3596:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3597:     {
                   3598:       mvs_check_page (0, 6, 4);
                   3599:       return \"L       14,=A(%l0)\;BHR 14\";
                   3600:     }
                   3601:   if (mvs_check_page (0, 4, 0))
                   3602:     {
                   3603:       mvs_check_page (0, 2, 4);
                   3604:       return \"L       14,=A(%l0)\;BHR 14\";
                   3605:     }
                   3606:   return \"BH  %l0\";
                   3607: }")
                   3608: 
                   3609: ;
                   3610: ; bgtu instruction pattern(s).
                   3611: ;
                   3612: 
                   3613: (define_insn "bgtu"
                   3614:   [(set (pc)
                   3615:        (if_then_else (gtu (cc0)
                   3616:                           (const_int 0))
                   3617:                      (label_ref (match_operand 0 "" ""))
                   3618:                      (pc)))]
                   3619:   ""
                   3620:   "*
                   3621: {
                   3622:   check_label_emit ();
                   3623:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3624:     {
                   3625:       mvs_check_page (0, 6, 4);
                   3626:       return \"L       14,=A(%l0)\;BHR 14\";
                   3627:     }
                   3628:   if (mvs_check_page (0, 4, 0))
                   3629:     {
                   3630:       mvs_check_page (0, 2, 4);
                   3631:       return \"L       14,=A(%l0)\;BHR 14\";
                   3632:     }
                   3633:   return \"BH  %l0\";
                   3634: }")
                   3635: 
                   3636: ;
                   3637: ; blt instruction pattern(s).
                   3638: ;
                   3639: 
                   3640: (define_insn "blt"
                   3641:   [(set (pc)
                   3642:        (if_then_else (lt (cc0)
                   3643:                          (const_int 0))
                   3644:                      (label_ref (match_operand 0 "" ""))
                   3645:                      (pc)))]
                   3646:   ""
                   3647:   "*
                   3648: {
                   3649:   check_label_emit ();
                   3650:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3651:     {
                   3652:       mvs_check_page (0, 6, 4);
                   3653:       return \"L       14,=A(%l0)\;BLR 14\";
                   3654:     }
                   3655:   if (mvs_check_page (0, 4, 0))
                   3656:     {
                   3657:       mvs_check_page (0, 2, 4);
                   3658:       return \"L       14,=A(%l0)\;BLR 14\";
                   3659:     }
                   3660:   return \"BL  %l0\";
                   3661: }")
                   3662: 
                   3663: ;
                   3664: ; bltu instruction pattern(s).
                   3665: ;
                   3666: 
                   3667: (define_insn "bltu"
                   3668:   [(set (pc)
                   3669:        (if_then_else (ltu (cc0)
                   3670:                           (const_int 0))
                   3671:                      (label_ref (match_operand 0 "" ""))
                   3672:                      (pc)))]
                   3673:   ""
                   3674:   "*
                   3675: {
                   3676:   check_label_emit ();
                   3677:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3678:     {
                   3679:       mvs_check_page (0, 6, 4);
                   3680:       return \"L       14,=A(%l0)\;BLR 14\";
                   3681:     }
                   3682:   if (mvs_check_page (0, 4, 0))
                   3683:     {
                   3684:       mvs_check_page (0, 2, 4);
                   3685:       return \"L       14,=A(%l0)\;BLR 14\";
                   3686:     }
                   3687:   return \"BL  %l0\";
                   3688: }")
                   3689: 
                   3690: ;
                   3691: ; bge instruction pattern(s).
                   3692: ;
                   3693: 
                   3694: (define_insn "bge"
                   3695:   [(set (pc)
                   3696:        (if_then_else (ge (cc0)
                   3697:                          (const_int 0))
                   3698:                      (label_ref (match_operand 0 "" ""))
                   3699:                      (pc)))]
                   3700:   ""
                   3701:   "*
                   3702: {
                   3703:   check_label_emit ();
                   3704:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3705:     {
                   3706:       mvs_check_page (0, 6, 4);
                   3707:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3708:     }
                   3709:   if (mvs_check_page (0, 4, 0))
                   3710:     {
                   3711:       mvs_check_page (0, 2, 4);
                   3712:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3713:     }
                   3714:   return \"BNL %l0\";
                   3715: }")
                   3716: 
                   3717: ;
                   3718: ; bgeu instruction pattern(s).
                   3719: ;
                   3720: 
                   3721: (define_insn "bgeu"
                   3722:   [(set (pc)
                   3723:        (if_then_else (geu (cc0)
                   3724:                           (const_int 0))
                   3725:                      (label_ref (match_operand 0 "" ""))
                   3726:                      (pc)))]
                   3727:   ""
                   3728:   "*
                   3729: {
                   3730:   check_label_emit ();
                   3731:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3732:     {
                   3733:       mvs_check_page (0, 6, 4);
                   3734:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3735:     }
                   3736:   if (mvs_check_page (0, 4, 0))
                   3737:     {
                   3738:       mvs_check_page (0, 2, 4);
                   3739:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3740:     }
                   3741:   return \"BNL %l0\";
                   3742: }")
                   3743: 
                   3744: ;
                   3745: ; ble instruction pattern(s).
                   3746: ;
                   3747: 
                   3748: (define_insn "ble"
                   3749:   [(set (pc)
                   3750:        (if_then_else (le (cc0)
                   3751:                          (const_int 0))
                   3752:                      (label_ref (match_operand 0 "" ""))
                   3753:                      (pc)))]
                   3754:   ""
                   3755:   "*
                   3756: {
                   3757:   check_label_emit ();
                   3758:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3759:     {
                   3760:       mvs_check_page (0, 6, 4);
                   3761:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3762:     }
                   3763:   if (mvs_check_page (0, 4, 0))
                   3764:     {
                   3765:       mvs_check_page (0, 2, 4);
                   3766:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3767:     }
                   3768:   return \"BNH %l0\";
                   3769: }")
                   3770: 
                   3771: ;
                   3772: ; bleu instruction pattern(s).
                   3773: ;
                   3774: 
                   3775: (define_insn "bleu"
                   3776:   [(set (pc)
                   3777:        (if_then_else (leu (cc0)
                   3778:                           (const_int 0))
                   3779:                      (label_ref (match_operand 0 "" ""))
                   3780:                      (pc)))]
                   3781:   ""
                   3782:   "*
                   3783: {
                   3784:   check_label_emit ();
                   3785:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3786:     {
                   3787:       mvs_check_page (0, 6, 4);
                   3788:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3789:     }
                   3790:   if (mvs_check_page (0, 4, 0))
                   3791:     {
                   3792:       mvs_check_page (0, 2, 4);
                   3793:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3794:     }
                   3795:   return \"BNH %l0\";
                   3796: }")
                   3797: 
                   3798: ;;
                   3799: ;;- Negated conditional jump instructions.
                   3800: ;;
                   3801: 
                   3802: (define_insn ""
                   3803:   [(set (pc)
                   3804:        (if_then_else (eq (cc0)
                   3805:                          (const_int 0))
                   3806:                      (pc)
                   3807:                      (label_ref (match_operand 0 "" ""))))]
                   3808:   ""
                   3809:   "*
                   3810: {
                   3811:   check_label_emit ();
                   3812:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3813:     {
                   3814:       mvs_check_page (0, 6, 4);
                   3815:       return \"L       14,=A(%l0)\;BNER        14\";
                   3816:     }
                   3817:   if (mvs_check_page (0, 4, 0))
                   3818:     {
                   3819:       mvs_check_page (0, 2, 4);
                   3820:       return \"L       14,=A(%l0)\;BNER        14\";
                   3821:     }
                   3822:   return \"BNE %l0\";
                   3823: }")
                   3824: 
                   3825: (define_insn ""
                   3826:   [(set (pc)
                   3827:        (if_then_else (ne (cc0)
                   3828:                          (const_int 0))
                   3829:                      (pc)
                   3830:                      (label_ref (match_operand 0 "" ""))))]
                   3831:   ""
                   3832:   "*
                   3833: {
                   3834:   check_label_emit ();
                   3835:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3836:     {
                   3837:       mvs_check_page (0, 6, 4);
                   3838:       return \"L       14,=A(%l0)\;BER 14\";
                   3839:     }
                   3840:   if (mvs_check_page (0, 4, 0))
                   3841:     {
                   3842:       mvs_check_page (0, 2, 4);
                   3843:       return \"L       14,=A(%l0)\;BER 14\";
                   3844:     }
                   3845:   return \"BE  %l0\";
                   3846: }")
                   3847: 
                   3848: (define_insn ""
                   3849:   [(set (pc)
                   3850:        (if_then_else (gt (cc0)
                   3851:                          (const_int 0))
                   3852:                      (pc)
                   3853:                      (label_ref (match_operand 0 "" ""))))]
                   3854:   ""
                   3855:   "*
                   3856: {
                   3857:   check_label_emit ();
                   3858:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3859:     {
                   3860:       mvs_check_page (0, 6, 4);
                   3861:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3862:     }
                   3863:   if (mvs_check_page (0, 4, 0))
                   3864:     {
                   3865:       mvs_check_page (0, 2, 4);
                   3866:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3867:     }
                   3868:   return \"BNH %l0\";
                   3869: }")
                   3870: 
                   3871: (define_insn ""
                   3872:   [(set (pc)
                   3873:        (if_then_else (gtu (cc0)
                   3874:                           (const_int 0))
                   3875:                      (pc)
                   3876:                      (label_ref (match_operand 0 "" ""))))]
                   3877:   ""
                   3878:   "*
                   3879: {
                   3880:   check_label_emit ();
                   3881:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3882:     {
                   3883:       mvs_check_page (0, 6, 4);
                   3884:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3885:     }
                   3886:   if (mvs_check_page (0, 4, 0))
                   3887:     {
                   3888:       mvs_check_page (0, 2, 4);
                   3889:       return \"L       14,=A(%l0)\;BNHR        14\";
                   3890:     }
                   3891:   return \"BNH %l0\";
                   3892: }")
                   3893: 
                   3894: (define_insn ""
                   3895:   [(set (pc)
                   3896:        (if_then_else (lt (cc0)
                   3897:                          (const_int 0))
                   3898:                      (pc)
                   3899:                      (label_ref (match_operand 0 "" ""))))]
                   3900:   ""
                   3901:   "*
                   3902: {
                   3903:   check_label_emit ();
                   3904:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3905:     {
                   3906:       mvs_check_page (0, 6, 4);
                   3907:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3908:     }
                   3909:   if (mvs_check_page (0, 4, 0))
                   3910:     {
                   3911:       mvs_check_page (0, 2, 4);
                   3912:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3913:     }
                   3914:   return \"BNL %l0\";
                   3915: }")
                   3916: 
                   3917: (define_insn ""
                   3918:   [(set (pc)
                   3919:        (if_then_else (ltu (cc0)
                   3920:                           (const_int 0))
                   3921:                      (pc)
                   3922:                      (label_ref (match_operand 0 "" ""))))]
                   3923:   ""
                   3924:   "*
                   3925: {
                   3926:   check_label_emit ();
                   3927:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3928:     {
                   3929:       mvs_check_page (0, 6, 4);
                   3930:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3931:     }
                   3932:   if (mvs_check_page (0, 4, 0))
                   3933:     {
                   3934:       mvs_check_page (0, 2, 4);
                   3935:       return \"L       14,=A(%l0)\;BNLR        14\";
                   3936:     }
                   3937:   return \"BNL %l0\";
                   3938: }")
                   3939: 
                   3940: (define_insn ""
                   3941:   [(set (pc)
                   3942:        (if_then_else (ge (cc0)
                   3943:                          (const_int 0))
                   3944:                      (pc)
                   3945:                      (label_ref (match_operand 0 "" ""))))]
                   3946:   ""
                   3947:   "*
                   3948: {
                   3949:   check_label_emit ();
                   3950:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3951:     {
                   3952:       mvs_check_page (0, 6, 4);
                   3953:       return \"L       14,=A(%l0)\;BLR 14\";
                   3954:     }
                   3955:   if (mvs_check_page (0, 4, 0))
                   3956:     {
                   3957:       mvs_check_page (0, 2, 4);
                   3958:       return \"L       14,=A(%l0)\;BLR 14\";
                   3959:     }
                   3960:   return \"BL  %l0\";
                   3961: }")
                   3962: 
                   3963: (define_insn ""
                   3964:   [(set (pc)
                   3965:        (if_then_else (geu (cc0)
                   3966:                           (const_int 0))
                   3967:                      (pc)
                   3968:                      (label_ref (match_operand 0 "" ""))))]
                   3969:   ""
                   3970:   "*
                   3971: {
                   3972:   check_label_emit ();
                   3973:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3974:     {
                   3975:       mvs_check_page (0, 6, 4);
                   3976:       return \"L       14,=A(%l0)\;BLR 14\";
                   3977:     }
                   3978:   if (mvs_check_page (0, 4, 0))
                   3979:     {
                   3980:       mvs_check_page (0, 2, 4);
                   3981:       return \"L       14,=A(%l0)\;BLR 14\";
                   3982:     }
                   3983:   return \"BL  %l0\";
                   3984: }")
                   3985: 
                   3986: (define_insn ""
                   3987:   [(set (pc)
                   3988:        (if_then_else (le (cc0)
                   3989:                          (const_int 0))
                   3990:                      (pc)
                   3991:                      (label_ref (match_operand 0 "" ""))))]
                   3992:   ""
                   3993:   "*
                   3994: {
                   3995:   check_label_emit ();
                   3996:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   3997:     {
                   3998:       mvs_check_page (0, 6, 4);
                   3999:       return \"L       14,=A(%l0)\;BHR 14\";
                   4000:     }
                   4001:   if (mvs_check_page (0, 4, 0))
                   4002:     {
                   4003:       mvs_check_page (0, 2, 4);
                   4004:       return \"L       14,=A(%l0)\;BHR 14\";
                   4005:     }
                   4006:   return \"BH  %l0\";
                   4007: }")
                   4008: 
                   4009: (define_insn ""
                   4010:   [(set (pc)
                   4011:        (if_then_else (leu (cc0)
                   4012:                           (const_int 0))
                   4013:                      (pc)
                   4014:                      (label_ref (match_operand 0 "" ""))))]
                   4015:   ""
                   4016:   "*
                   4017: {
                   4018:   check_label_emit ();
                   4019:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   4020:     {
                   4021:       mvs_check_page (0, 6, 4);
                   4022:       return \"L       14,=A(%l0)\;BHR 14\";
                   4023:     }
                   4024:   if (mvs_check_page (0, 4, 0))
                   4025:     {
                   4026:       mvs_check_page (0, 2, 4);
                   4027:       return \"L       14,=A(%l0)\;BHR 14\";
                   4028:     }
                   4029:   return \"BH  %l0\";
                   4030: }")
                   4031: 
                   4032: ;;
                   4033: ;;- Subtract one and jump if not zero.
                   4034: ;;
                   4035: 
                   4036: (define_insn ""
                   4037:   [(set (pc)
                   4038:        (if_then_else
                   4039:         (ne (plus:SI (match_operand:SI 0 "register_operand" "+d")
                   4040:                      (const_int -1))
                   4041:             (const_int 0))
                   4042:         (label_ref (match_operand 1 "" ""))
                   4043:         (pc)))
                   4044:    (set (match_dup 0)
                   4045:        (plus:SI (match_dup 0)
                   4046:                 (const_int -1)))]
                   4047:   ""
                   4048:   "*
                   4049: {
                   4050:   check_label_emit ();
                   4051:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[1])))
                   4052:     {
                   4053:       mvs_check_page (0, 6, 4);
                   4054:       return \"L       14,=A(%l1)\;BCTR        %0,14\";
                   4055:     }
                   4056:   if (mvs_check_page (0, 4, 0))
                   4057:     {
                   4058:       mvs_check_page (0, 2, 4);
                   4059:       return \"L       14,=A(%l1)\;BCTR        %0,14\";
                   4060:     }
                   4061:   return \"BCT %0,%l1\";
                   4062: }")
                   4063: 
                   4064: (define_insn ""
                   4065:   [(set (pc)
                   4066:        (if_then_else
                   4067:         (eq (plus:SI (match_operand:SI 0 "register_operand" "+d")
                   4068:                      (const_int -1))
                   4069:             (const_int 0))
                   4070:         (pc)
                   4071:         (label_ref (match_operand 1 "" ""))))
                   4072:    (set (match_dup 0)
                   4073:        (plus:SI (match_dup 0)
                   4074:                 (const_int -1)))]
                   4075:   ""
                   4076:   "*
                   4077: {
                   4078:   check_label_emit ();
                   4079:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[1])))
                   4080:     {
                   4081:       mvs_check_page (0, 6, 4);
                   4082:       return \"L       14,=A(%l1)\;BCTR        %0,14\";
                   4083:     }
                   4084:   if (mvs_check_page (0, 4, 0))
                   4085:     {
                   4086:       mvs_check_page (0, 2, 4);
                   4087:       return \"L       14,=A(%l1)\;BCTR        %0,14\";
                   4088:     }
                   4089:   return \"BCT %0,%l1\";
                   4090: }")
                   4091: 
                   4092: ;;
                   4093: ;;- Unconditional jump instructions.
                   4094: ;;
                   4095: 
                   4096: ;
                   4097: ; jump instruction pattern(s).
                   4098: ;
                   4099: 
                   4100: (define_insn "jump"
                   4101:   [(set (pc)
                   4102:        (label_ref (match_operand 0 "" "")))]
                   4103:   ""
                   4104:   "*
                   4105: {
                   4106:   check_label_emit ();
                   4107:   if (!mvs_check_label (CODE_LABEL_NUMBER (operands[0])))
                   4108:     {
                   4109:       mvs_check_page (0, 6, 4);
                   4110:       return \"L       14,=A(%l0)\;BR  14\";
                   4111:     }
                   4112:   if (mvs_check_page (0, 4, 0))
                   4113:     {
                   4114:       mvs_check_page (0, 2, 4);
                   4115:       return \"L       14,=A(%l0)\;BR  14\";
                   4116:     }
                   4117:   return \"B   %l0\";
                   4118: }")
                   4119: 
                   4120: ;
                   4121: ; indirect-jump instruction pattern(s).
                   4122: ;
                   4123: 
                   4124: (define_insn "indirect_jump"
                   4125:   [(set (pc) (match_operand:SI 0 "general_operand" "r"))]
                   4126:   "(GET_CODE (operands[0]) != MEM )"
                   4127:   "*
                   4128: {
                   4129:   check_label_emit ();
                   4130:   mvs_check_page (0, 2, 0);
                   4131:   return \"BR  %0\";
                   4132: }")
                   4133: 
                   4134: ;
                   4135: ; tablejump instruction pattern(s).
                   4136: ;
                   4137: 
                   4138: (define_insn "tablejump"
                   4139:   [(set (pc)
                   4140:        (match_operand:SI 0 "general_operand" "am"))
                   4141:    (use (label_ref (match_operand 1 "" "")))]
                   4142:   ""
                   4143:   "*
                   4144: {
                   4145:   check_label_emit ();
                   4146:   if (REG_P (operands[0]))
                   4147:     {
                   4148:       mvs_check_page (0, 6, 0);
                   4149:       return \"BR      %0\;DS  0F\";
                   4150:     }
                   4151:   mvs_check_page (0, 10, 0);
                   4152:   return \"L   14,%0\;BR       14\;DS  0F\";
                   4153: }")
                   4154: 
                   4155: ;;
                   4156: ;;- Jump to subroutine.
                   4157: ;;
                   4158: ;; For the C/370 environment the internal functions, ie. sqrt, are called with
                   4159: ;; a non-standard form.  So, we must fix it here.  There's no BM like IBM.
                   4160: ;;
                   4161: 
                   4162: ;
                   4163: ; call instruction pattern(s).
                   4164: ;
                   4165: 
                   4166: (define_insn "call"
                   4167:   [(call (match_operand:QI 0 "memory_operand" "m")
                   4168:         (match_operand:SI 1 "immediate_operand" "i"))]
                   4169:   ""
                   4170:   "*
                   4171: {
                   4172:   static char temp[128];
                   4173:   int i = STACK_POINTER_OFFSET;
                   4174: 
                   4175:   check_label_emit ();
                   4176:   if (mvs_function_check (XSTR (operands[0], 0)))
                   4177:     {
                   4178:       mvs_check_page (0, 22, 4);
                   4179:       sprintf ( temp, \"LA     1,136(,13)\;ST  1,%d(,13)\;LA   1,%d(,13)\;L    15,%%0\;BALR    14,15\;LD       0,136(,13)\",
                   4180:             i - 4, i - 4 );
                   4181:     }
                   4182:   else
                   4183:     {
                   4184:       mvs_check_page (0, 10, 4);
                   4185:       sprintf ( temp, \"LA     1,%d(,13)\;L    15,%%0\;BALR    14,15\", i );
                   4186:     }
                   4187:   return temp;
                   4188: }")
                   4189: 
                   4190: ;
                   4191: ; call_value instruction pattern(s).
                   4192: ;
                   4193: 
                   4194: (define_insn "call_value"
                   4195:   [(set (match_operand 0 "" "rf")
                   4196:        (call (match_operand:QI 1 "memory_operand" "m")
                   4197:              (match_operand:SI 2 "general_operand" "i")))]
                   4198:   ""
                   4199:   "*
                   4200: {
                   4201:   static char temp[128];
                   4202:   int i = STACK_POINTER_OFFSET;
                   4203: 
                   4204:   check_label_emit ();
                   4205:   if (mvs_function_check (XSTR (operands[1], 0)))
                   4206:     {
                   4207:       mvs_check_page (0, 22, 4);
                   4208:       sprintf ( temp, \"LA     1,136(,13)\;ST  1,%d(,13)\;LA   1,%d(,13)\;L    15,%%1\;BALR    14,15\;LD       0,136(,13)\",
                   4209:           i - 4, i - 4 );
                   4210:     }
                   4211:   else
                   4212:     {
                   4213:       mvs_check_page (0, 10, 4);
                   4214:       sprintf ( temp, \"LA     1,%d(,13)\;L    15,%%1\;BALR    14,15\", i );
                   4215:     }
                   4216:   return temp;
                   4217: }")
                   4218: 
                   4219: (define_insn ""
                   4220:   [(call (mem:QI (match_operand:SI 0 "" "i"))
                   4221:         (match_operand:SI 1 "general_operand" "g"))]
                   4222:   "GET_CODE (operands[0]) == SYMBOL_REF"
                   4223:   "*
                   4224: {
                   4225:   static char temp[128];
                   4226:   int i = STACK_POINTER_OFFSET;
                   4227: 
                   4228:   check_label_emit ();
                   4229:   if (mvs_function_check (XSTR (operands[0], 0)))
                   4230:     {
                   4231:       mvs_check_page (0, 22, 4);
                   4232:       sprintf ( temp, \"LA     1,136(,13)\;ST  1,%d(,13)\;LA   1,%d(,13)\;L    15,%%0\;BALR    14,15\;LD       0,136(,13)\",
                   4233:           i - 4, i - 4 );
                   4234:     }
                   4235:   else
                   4236:     {
                   4237:       mvs_check_page (0, 10, 4);
                   4238:       sprintf ( temp, \"LA     1,%d(,13)\;L    15,%%0\;BALR    14,15\", i );
                   4239:     }
                   4240:   return temp;
                   4241: }")
                   4242: 
                   4243: (define_insn ""
                   4244:   [(set (match_operand 0 "" "rf")
                   4245:        (call (mem:QI (match_operand:SI 1 "" "i"))
                   4246:              (match_operand:SI 2 "general_operand" "g")))]
                   4247:   "GET_CODE (operands[1]) == SYMBOL_REF"
                   4248:   "*
                   4249: {
                   4250:   static char temp[128];
                   4251:   int i = STACK_POINTER_OFFSET;
                   4252: 
                   4253:   check_label_emit ();
                   4254:   if (mvs_function_check (XSTR (operands[1], 0)))
                   4255:     {
                   4256:       mvs_check_page (0, 22, 4);
                   4257:       sprintf ( temp, \"LA     1,136(,13)\;ST  1,%d(,13)\;LA   1,%d(,13)\;L    15,%%1\;BALR    14,15\;LD       0,136(,13)\",
                   4258:           i - 4, i - 4 );
                   4259:     }
                   4260:   else
                   4261:     {
                   4262:       mvs_check_page (0, 10, 4);
                   4263:       sprintf ( temp, \"LA     1,%d(,13)\;L    15,%%1\;BALR    14,15\", i );
                   4264:     }
                   4265:   return temp;
                   4266: }")
                   4267: 
                   4268: 
                   4269: ;;
                   4270: ;;- Miscellaneous instructions.
                   4271: ;;
                   4272: 
                   4273: ;
                   4274: ; nop instruction pattern(s).
                   4275: ;
                   4276: 
                   4277: (define_insn "nop"
                   4278:   [(const_int 0)]
                   4279:   ""
                   4280:   "*
                   4281: {
                   4282:   check_label_emit ();
                   4283:   mvs_check_page (0, 2, 0);
                   4284:   return \"LR  0,0\";
                   4285: }")
                   4286: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.