This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

S/390: Some cleanup


Hello,

this cleans up the s390.md file by defining symbolic constants for the
remaining unspec uses, and by writing the output control string as
brace block whereever this is simpler.  No functional changes.

Bootstrapped/regtested on s390-ibm-linux and s390x-ibm-linux.

Bye,
Ulrich

ChangeLog:

	* config/s390/s390.md (UNSPEC_ROUND, UNSPEC_SETHIGH, 
	UNSPECV_BLOCKAGE): New constants.
	("*sethighqisi", "*sethighhisi", "*sethiqidi_64", "*sethiqidi_31",
	"*extractqi", "*extracthi", "*extendqidi2" splitter, "*extendqisi2"
	splitter, "fix_truncdfdi2_ieee", "fix_truncdfsi2_ieee",
	"fix_truncsfdi2", "fix_truncsfsi2", "blockage"): Use them.

	(all insns and expanders): Write output control string as brace block
	where appropriate.  Remove \-escapes for doublequote characters.



Index: gcc/config/s390/s390.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.md,v
retrieving revision 1.64
diff -c -p -r1.64 s390.md
*** gcc/config/s390/s390.md	22 Jul 2003 17:38:14 -0000	1.64
--- gcc/config/s390/s390.md	30 Jul 2003 20:58:13 -0000
***************
*** 50,56 ****
  ;;
  
  (define_constants
!   [; GOT/PLT and lt-relative accesses
     (UNSPEC_LTREL_OFFSET		100)
     (UNSPEC_LTREL_BASE		101)
     (UNSPEC_GOTENT		110)
--- 50,60 ----
  ;;
  
  (define_constants
!   [; Miscellaneous
!    (UNSPEC_ROUND		1)
!    (UNSPEC_SETHIGH		10)
! 
!    ; GOT/PLT and lt-relative accesses
     (UNSPEC_LTREL_OFFSET		100)
     (UNSPEC_LTREL_BASE		101)
     (UNSPEC_GOTENT		110)
***************
*** 81,87 ****
  ;;
  
  (define_constants
!   [; Literal pool
     (UNSPECV_POOL		200)
     (UNSPECV_POOL_START		201)
     (UNSPECV_POOL_END		202)
--- 85,94 ----
  ;;
  
  (define_constants
!   [; Blockage
!    (UNSPECV_BLOCKAGE		0)
! 
!    ; Literal pool
     (UNSPECV_POOL		200)
     (UNSPECV_POOL_START		201)
     (UNSPECV_POOL_END		202)
***************
*** 304,351 ****
          (compare:CC (match_operand:DI 0 "register_operand" "")
                      (match_operand:DI 1 "general_operand" "")))]
    "TARGET_64BIT"
-   "
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! }")
  
  (define_expand "cmpsi"
    [(set (reg:CC 33)
          (compare:CC (match_operand:SI 0 "register_operand" "")
                      (match_operand:SI 1 "general_operand" "")))]
    ""
-   "
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! }")
  
  (define_expand "cmpdf"
    [(set (reg:CC 33)
          (compare:CC (match_operand:DF 0 "register_operand" "")
                      (match_operand:DF 1 "general_operand" "")))]
    "TARGET_HARD_FLOAT"
-   "
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! }")
  
  (define_expand "cmpsf"
    [(set (reg:CC 33)
          (compare:CC (match_operand:SF 0 "register_operand" "")
                      (match_operand:SF 1 "general_operand" "")))]
    "TARGET_HARD_FLOAT"
-   "
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! }")
  
  
  ; Test-under-Mask (zero_extract) instructions
--- 311,354 ----
          (compare:CC (match_operand:DI 0 "register_operand" "")
                      (match_operand:DI 1 "general_operand" "")))]
    "TARGET_64BIT"
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! })
  
  (define_expand "cmpsi"
    [(set (reg:CC 33)
          (compare:CC (match_operand:SI 0 "register_operand" "")
                      (match_operand:SI 1 "general_operand" "")))]
    ""
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! })
  
  (define_expand "cmpdf"
    [(set (reg:CC 33)
          (compare:CC (match_operand:DF 0 "register_operand" "")
                      (match_operand:DF 1 "general_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! })
  
  (define_expand "cmpsf"
    [(set (reg:CC 33)
          (compare:CC (match_operand:SF 0 "register_operand" "")
                      (match_operand:SF 1 "general_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
    s390_compare_op0 = operands[0];
    s390_compare_op1 = operands[1];
    DONE;
! })
  
  
  ; Test-under-Mask (zero_extract) instructions
***************
*** 361,367 ****
     && INTVAL (operands[1]) + INTVAL (operands[2]) <= 64
     && (INTVAL (operands[1]) + INTVAL (operands[2]) - 1) >> 4
        == INTVAL (operands[2]) >> 4"
-   "*
  {
    int part = INTVAL (operands[2]) >> 4;
    int block = (1 << INTVAL (operands[1])) - 1;
--- 364,369 ----
***************
*** 371,383 ****
  
    switch (part)
      {
!       case 0: return \"tmhh\\t%0,%x2\";
!       case 1: return \"tmhl\\t%0,%x2\";
!       case 2: return \"tmlh\\t%0,%x2\";
!       case 3: return \"tmll\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmsi_ext"
--- 373,385 ----
  
    switch (part)
      {
!       case 0: return "tmhh\\t%0,%x2";
!       case 1: return "tmhl\\t%0,%x2";
!       case 2: return "tmlh\\t%0,%x2";
!       case 3: return "tmll\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmsi_ext"
***************
*** 391,397 ****
     && INTVAL (operands[1]) + INTVAL (operands[2]) <= 32
     && (INTVAL (operands[1]) + INTVAL (operands[2]) - 1) >> 4
        == INTVAL (operands[2]) >> 4"
-   "*
  {
    int part = INTVAL (operands[2]) >> 4;
    int block = (1 << INTVAL (operands[1])) - 1;
--- 393,398 ----
***************
*** 401,411 ****
  
    switch (part)
      {
!       case 0: return \"tmh\\t%0,%x2\";
!       case 1: return \"tml\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmqi_ext"
--- 402,412 ----
  
    switch (part)
      {
!       case 0: return "tmh\\t%0,%x2";
!       case 1: return "tml\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmqi_ext"
***************
*** 417,430 ****
    "s390_match_ccmode(insn, CCTmode)
     && INTVAL (operands[1]) >= 1 && INTVAL (operands[2]) >= 0
     && INTVAL (operands[1]) + INTVAL (operands[2]) <= 8"
-   "*
  {
    int block = (1 << INTVAL (operands[1])) - 1;
    int shift = 8 - INTVAL (operands[1]) - INTVAL (operands[2]);
  
    operands[2] = GEN_INT (block << shift);
!   return which_alternative == 0 ? \"tm\\t%0,%b2\" : \"tmy\\t%0,%b2\";
! }"
    [(set_attr "op_type" "SI,SIY")])
  
  ; Test-under-Mask instructions
--- 418,430 ----
    "s390_match_ccmode(insn, CCTmode)
     && INTVAL (operands[1]) >= 1 && INTVAL (operands[2]) >= 0
     && INTVAL (operands[1]) + INTVAL (operands[2]) <= 8"
  {
    int block = (1 << INTVAL (operands[1])) - 1;
    int shift = 8 - INTVAL (operands[1]) - INTVAL (operands[2]);
  
    operands[2] = GEN_INT (block << shift);
!   return which_alternative == 0 ? "tm\\t%0,%b2" : "tmy\\t%0,%b2";
! }
    [(set_attr "op_type" "SI,SIY")])
  
  ; Test-under-Mask instructions
***************
*** 437,451 ****
    "TARGET_64BIT
     && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], DImode, 0) >= 0"
-   "*
  {
    int part = s390_single_qi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], DImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? \"tm\\t%0,%b1\" : \"tmy\\t%0,%b1\";
! }"
    [(set_attr "op_type" "SI,SIY")])
  
  (define_insn "*tmsi_mem"
--- 437,450 ----
    "TARGET_64BIT
     && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], DImode, 0) >= 0"
  {
    int part = s390_single_qi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], DImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? "tm\\t%0,%b1" : "tmy\\t%0,%b1";
! }
    [(set_attr "op_type" "SI,SIY")])
  
  (define_insn "*tmsi_mem"
***************
*** 455,469 ****
                   (match_operand:SI 2 "immediate_operand" "n,n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], SImode, 0) >= 0"
-   "*
  {
    int part = s390_single_qi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], SImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? \"tm\\t%0,%b1\" : \"tmy\\t%0,%b1\";
! }"
    [(set_attr "op_type" "SI")])
  
  (define_insn "*tmhi_mem"
--- 454,467 ----
                   (match_operand:SI 2 "immediate_operand" "n,n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], SImode, 0) >= 0"
  {
    int part = s390_single_qi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], SImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? "tm\\t%0,%b1" : "tmy\\t%0,%b1";
! }
    [(set_attr "op_type" "SI")])
  
  (define_insn "*tmhi_mem"
***************
*** 473,487 ****
                   (match_operand:SI 2 "immediate_operand" "n,n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], HImode, 0) >= 0"
-   "*
  {
    int part = s390_single_qi (operands[1], HImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], HImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? \"tm\\t%0,%b1\" : \"tmy\\t%0,%b1\";
! }"
    [(set_attr "op_type" "SI")])
  
  (define_insn "*tmqi_mem"
--- 471,484 ----
                   (match_operand:SI 2 "immediate_operand" "n,n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 0))
     && s390_single_qi (operands[1], HImode, 0) >= 0"
  {
    int part = s390_single_qi (operands[1], HImode, 0);
    operands[1] = GEN_INT (s390_extract_qi (operands[1], HImode, part));
  
    operands[0] = gen_rtx_MEM (QImode,
  			     plus_constant (XEXP (operands[0], 0), part));
!   return which_alternative == 0 ? "tm\\t%0,%b1" : "tmy\\t%0,%b1";
! }
    [(set_attr "op_type" "SI")])
  
  (define_insn "*tmqi_mem"
***************
*** 503,522 ****
    "TARGET_64BIT
     && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1))
     && s390_single_hi (operands[1], DImode, 0) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], DImode, part));
  
    switch (part)
      {
!       case 0: return \"tmhh\\t%0,%x1\";
!       case 1: return \"tmhl\\t%0,%x1\";
!       case 2: return \"tmlh\\t%0,%x1\";
!       case 3: return \"tmll\\t%0,%x1\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmsi_reg"
--- 500,518 ----
    "TARGET_64BIT
     && s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1))
     && s390_single_hi (operands[1], DImode, 0) >= 0"
  {
    int part = s390_single_hi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], DImode, part));
  
    switch (part)
      {
!       case 0: return "tmhh\\t%0,%x1";
!       case 1: return "tmhl\\t%0,%x1";
!       case 2: return "tmlh\\t%0,%x1";
!       case 3: return "tmll\\t%0,%x1";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmsi_reg"
***************
*** 526,543 ****
                   (match_operand:SI 2 "immediate_operand" "n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1))
     && s390_single_hi (operands[1], SImode, 0) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], SImode, part));
  
    switch (part)
      {
!       case 0: return \"tmh\\t%0,%x1\";
!       case 1: return \"tml\\t%0,%x1\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmhi_full"
--- 522,538 ----
                   (match_operand:SI 2 "immediate_operand" "n")))]
    "s390_match_ccmode (insn, s390_tm_ccmode (operands[1], operands[2], 1))
     && s390_single_hi (operands[1], SImode, 0) >= 0"
  {
    int part = s390_single_hi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], SImode, part));
  
    switch (part)
      {
!       case 0: return "tmh\\t%0,%x1";
!       case 1: return "tml\\t%0,%x1";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*tmhi_full"
***************
*** 1036,1042 ****
    [(set (match_operand:DI 0 "general_operand" "")
          (match_operand:DI 1 "general_operand" ""))]
    ""
-   "
  {
    /* Handle symbolic constants.  */
    if (TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
--- 1031,1036 ----
***************
*** 1049,1055 ****
        && (!legitimate_reload_constant_p (operands[1])
            || FP_REG_P (operands[0])))
      operands[1] = force_const_mem (DImode, operands[1]);
! }")
  
  (define_insn "*movdi_lhi"
    [(set (match_operand:DI 0 "register_operand" "=d")
--- 1043,1049 ----
        && (!legitimate_reload_constant_p (operands[1])
            || FP_REG_P (operands[0])))
      operands[1] = force_const_mem (DImode, operands[1]);
! })
  
  (define_insn "*movdi_lhi"
    [(set (match_operand:DI 0 "register_operand" "=d")
***************
*** 1066,1085 ****
          (match_operand:DI 1 "immediate_operand" "n"))]
    "TARGET_64BIT && s390_single_hi (operands[1], DImode, 0) >= 0
     && !FP_REG_P (operands[0])"
-   "*
  {
    int part = s390_single_hi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], DImode, part));
  
    switch (part)
      {
!       case 0: return \"llihh\\t%0,%x1\";
!       case 1: return \"llihl\\t%0,%x1\";
!       case 2: return \"llilh\\t%0,%x1\";
!       case 3: return \"llill\\t%0,%x1\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*movdi_lay"
--- 1060,1078 ----
          (match_operand:DI 1 "immediate_operand" "n"))]
    "TARGET_64BIT && s390_single_hi (operands[1], DImode, 0) >= 0
     && !FP_REG_P (operands[0])"
  {
    int part = s390_single_hi (operands[1], DImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], DImode, part));
  
    switch (part)
      {
!       case 0: return "llihh\\t%0,%x1";
!       case 1: return "llihl\\t%0,%x1";
!       case 2: return "llilh\\t%0,%x1";
!       case 3: return "llill\\t%0,%x1";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*movdi_lay"
***************
*** 1210,1216 ****
    [(set (match_operand:SI 0 "general_operand" "")
          (match_operand:SI 1 "general_operand" ""))]
    ""
-   "
  {
    /* Handle symbolic constants.  */
    if (!TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
--- 1203,1208 ----
***************
*** 1236,1242 ****
        && (!legitimate_reload_constant_p (operands[1])
            || FP_REG_P (operands[0])))
      operands[1] = force_const_mem (SImode, operands[1]);
! }")
  
  (define_insn "*movsi_lhi"
    [(set (match_operand:SI 0 "register_operand" "=d")
--- 1228,1234 ----
        && (!legitimate_reload_constant_p (operands[1])
            || FP_REG_P (operands[0])))
      operands[1] = force_const_mem (SImode, operands[1]);
! })
  
  (define_insn "*movsi_lhi"
    [(set (match_operand:SI 0 "register_operand" "=d")
***************
*** 1252,1269 ****
          (match_operand:SI 1 "immediate_operand" "n"))]
    "TARGET_64BIT && s390_single_hi (operands[1], SImode, 0) >= 0
     && !FP_REG_P (operands[0])"
-   "*
  {
    int part = s390_single_hi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], SImode, part));
  
    switch (part)
      {
!       case 0: return \"llilh\\t%0,%x1\";
!       case 1: return \"llill\\t%0,%x1\";
        default: abort ();
      }
! }"
    [(set_attr "op_type" "RI")])
  
  (define_insn "*movsi_lay"
--- 1244,1260 ----
          (match_operand:SI 1 "immediate_operand" "n"))]
    "TARGET_64BIT && s390_single_hi (operands[1], SImode, 0) >= 0
     && !FP_REG_P (operands[0])"
  {
    int part = s390_single_hi (operands[1], SImode, 0);
    operands[1] = GEN_INT (s390_extract_hi (operands[1], SImode, part));
  
    switch (part)
      {
!       case 0: return "llilh\\t%0,%x1";
!       case 1: return "llill\\t%0,%x1";
        default: abort ();
      }
! }
    [(set_attr "op_type" "RI")])
  
  (define_insn "*movsi_lay"
***************
*** 1432,1445 ****
    [(set (match_operand:DF 0 "nonimmediate_operand" "")
          (match_operand:DF 1 "general_operand"  ""))]
    ""
-   "
  {
    /* During and after reload, we need to force constants
       to the literal pool ourselves, if necessary.  */
    if ((reload_in_progress || reload_completed)
        && CONSTANT_P (operands[1]))
      operands[1] = force_const_mem (DFmode, operands[1]);
! }")
  
  (define_insn "*movdf_64"
    [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,R,T,d,d,m,?Q")
--- 1423,1435 ----
    [(set (match_operand:DF 0 "nonimmediate_operand" "")
          (match_operand:DF 1 "general_operand"  ""))]
    ""
  {
    /* During and after reload, we need to force constants
       to the literal pool ourselves, if necessary.  */
    if ((reload_in_progress || reload_completed)
        && CONSTANT_P (operands[1]))
      operands[1] = force_const_mem (DFmode, operands[1]);
! })
  
  (define_insn "*movdf_64"
    [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,R,T,d,d,m,?Q")
***************
*** 1537,1550 ****
    [(set (match_operand:SF 0 "nonimmediate_operand" "")
          (match_operand:SF 1 "general_operand"  ""))]
    ""
-   "
  {
    /* During and after reload, we need to force constants
       to the literal pool ourselves, if necessary.  */
    if ((reload_in_progress || reload_completed)
        && CONSTANT_P (operands[1]))
      operands[1] = force_const_mem (SFmode, operands[1]);
! }")
  
  (define_insn "*movsf"
    [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f,R,T,d,d,d,R,T,?Q")
--- 1527,1539 ----
    [(set (match_operand:SF 0 "nonimmediate_operand" "")
          (match_operand:SF 1 "general_operand"  ""))]
    ""
  {
    /* During and after reload, we need to force constants
       to the literal pool ourselves, if necessary.  */
    if ((reload_in_progress || reload_completed)
        && CONSTANT_P (operands[1]))
      operands[1] = force_const_mem (SFmode, operands[1]);
! })
  
  (define_insn "*movsf"
    [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f,R,T,d,d,d,R,T,?Q")
***************
*** 1574,1580 ****
  			  (match_operand 1 "" ""))
  		     (use (match_operand 2 "" ""))])]
    ""
-   "
  {
    int regno;
    int count;
--- 1563,1568 ----
***************
*** 1627,1645 ****
  		     change_address (operands[1], Pmode,
  				     plus_constant (from,
  						    off + i * UNITS_PER_WORD)));
! }")
  
  (define_insn "*load_multiple_di"
    [(match_parallel 0 "load_multiple_operation"
  		   [(set (match_operand:DI 1 "register_operand" "=r")
  			 (match_operand:DI 2 "s_operand" "QS"))])]
    ""
-   "*
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1);
!   return \"lmg\\t%1,%0,%2\";
! }"
     [(set_attr "op_type" "RSY")
      (set_attr "type"    "lm")])
  
--- 1615,1632 ----
  		     change_address (operands[1], Pmode,
  				     plus_constant (from,
  						    off + i * UNITS_PER_WORD)));
! })
  
  (define_insn "*load_multiple_di"
    [(match_parallel 0 "load_multiple_operation"
  		   [(set (match_operand:DI 1 "register_operand" "=r")
  			 (match_operand:DI 2 "s_operand" "QS"))])]
    ""
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[1]) + words - 1);
!   return "lmg\\t%1,%0,%2";
! }
     [(set_attr "op_type" "RSY")
      (set_attr "type"    "lm")])
  
***************
*** 1648,1659 ****
  		   [(set (match_operand:SI 1 "register_operand" "=r,r")
  			 (match_operand:SI 2 "s_operand" "Q,S"))])]
    ""
-   "*
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + words - 1);
!   return which_alternative == 0 ? \"lm\\t%1,%0,%2\" : \"lmy\\t%1,%0,%2\";
! }"
     [(set_attr "op_type" "RS,RSY")
      (set_attr "type"    "lm")])
  
--- 1635,1645 ----
  		   [(set (match_operand:SI 1 "register_operand" "=r,r")
  			 (match_operand:SI 2 "s_operand" "Q,S"))])]
    ""
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (SImode, REGNO (operands[1]) + words - 1);
!   return which_alternative == 0 ? "lm\\t%1,%0,%2" : "lmy\\t%1,%0,%2";
! }
     [(set_attr "op_type" "RS,RSY")
      (set_attr "type"    "lm")])
  
***************
*** 1666,1672 ****
  			  (match_operand 1 "" ""))
  		     (use (match_operand 2 "" ""))])]
    ""
-   "
  {
    int regno;
    int count;
--- 1652,1657 ----
***************
*** 1721,1739 ****
  				     plus_constant (to,
  						    off + i * UNITS_PER_WORD)),
  		     gen_rtx_REG (Pmode, regno + i));
! }")
  
  (define_insn "*store_multiple_di"
    [(match_parallel 0 "store_multiple_operation"
  		   [(set (match_operand:DI 1 "s_operand" "=QS")
  			 (match_operand:DI 2 "register_operand" "r"))])]
    ""
-   "*
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);
!   return \"stmg\\t%2,%0,%1\";
! }"
     [(set_attr "op_type" "RSY")
      (set_attr "type"    "stm")])
  
--- 1706,1723 ----
  				     plus_constant (to,
  						    off + i * UNITS_PER_WORD)),
  		     gen_rtx_REG (Pmode, regno + i));
! })
  
  (define_insn "*store_multiple_di"
    [(match_parallel 0 "store_multiple_operation"
  		   [(set (match_operand:DI 1 "s_operand" "=QS")
  			 (match_operand:DI 2 "register_operand" "r"))])]
    ""
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (DImode, REGNO (operands[2]) + words - 1);
!   return "stmg\\t%2,%0,%1";
! }
     [(set_attr "op_type" "RSY")
      (set_attr "type"    "stm")])
  
***************
*** 1743,1754 ****
  		   [(set (match_operand:SI 1 "s_operand" "=Q,S")
  			 (match_operand:SI 2 "register_operand" "r,r"))])]
    ""
-   "*
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (SImode, REGNO (operands[2]) + words - 1);
!   return which_alternative == 0 ? \"stm\\t%2,%0,%1\" : \"stmy\\t%2,%0,%1\";
! }"
     [(set_attr "op_type" "RS,RSY")
      (set_attr "type"    "stm")])
  
--- 1727,1737 ----
  		   [(set (match_operand:SI 1 "s_operand" "=Q,S")
  			 (match_operand:SI 2 "register_operand" "r,r"))])]
    ""
  {
    int words = XVECLEN (operands[0], 0);
    operands[0] = gen_rtx_REG (SImode, REGNO (operands[2]) + words - 1);
!   return which_alternative == 0 ? "stm\\t%2,%0,%1" : "stmy\\t%2,%0,%1";
! }
     [(set_attr "op_type" "RS,RSY")
      (set_attr "type"    "stm")])
  
***************
*** 1785,1806 ****
     (use (match_operand:DI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:DI 3 "=X,&a"))]
    "TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"mvc\\t%O0(%b2+1,%R0),%1\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%3,.+10\", operands);
! 	output_asm_insn (\"mvc\\t%O0(1,%R0),%1\", operands);
! 	return \"ex\\t%2,0(%3)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 1768,1788 ----
     (use (match_operand:DI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:DI 3 "=X,&a"))]
    "TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "mvc\\t%O0(%b2+1,%R0),%1";
  
        case 1:
! 	output_asm_insn ("bras\\t%3,.+10", operands);
! 	output_asm_insn ("mvc\\t%O0(1,%R0),%1", operands);
! 	return "ex\\t%2,0(%3)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 1812,1833 ****
     (use (match_operand:SI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:SI 3 "=X,&a"))]
    "!TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"mvc\\t%O0(%b2+1,%R0),%1\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%3,.+10\", operands);
! 	output_asm_insn (\"mvc\\t%O0(1,%R0),%1\", operands);
! 	return \"ex\\t%2,0(%3)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 1794,1814 ----
     (use (match_operand:SI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:SI 3 "=X,&a"))]
    "!TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "mvc\\t%O0(%b2+1,%R0),%1";
  
        case 1:
! 	output_asm_insn ("bras\\t%3,.+10", operands);
! 	output_asm_insn ("mvc\\t%O0(1,%R0),%1", operands);
! 	return "ex\\t%2,0(%3)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 1901,1922 ****
     (clobber (match_scratch:DI 2 "=X,&a"))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"xc\\t%O0(%b1+1,%R0),%0\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%2,.+10\", operands);
! 	output_asm_insn (\"xc\\t%O0(1,%R0),%0\", operands);
! 	return \"ex\\t%1,0(%2)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 1882,1902 ----
     (clobber (match_scratch:DI 2 "=X,&a"))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "xc\\t%O0(%b1+1,%R0),%0";
  
        case 1:
! 	output_asm_insn ("bras\\t%2,.+10", operands);
! 	output_asm_insn ("xc\\t%O0(1,%R0),%0", operands);
! 	return "ex\\t%1,0(%2)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 1929,1950 ****
     (clobber (match_scratch:SI 2 "=X,&a"))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"xc\\t%O0(%b1+1,%R0),%0\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%2,.+10\", operands);
! 	output_asm_insn (\"xc\\t%O0(1,%R0),%0\", operands);
! 	return \"ex\\t%1,0(%2)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 1909,1929 ----
     (clobber (match_scratch:SI 2 "=X,&a"))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "xc\\t%O0(%b1+1,%R0),%0";
  
        case 1:
! 	output_asm_insn ("bras\\t%2,.+10", operands);
! 	output_asm_insn ("xc\\t%O0(1,%R0),%0", operands);
! 	return "ex\\t%1,0(%2)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 2016,2037 ****
     (use (match_operand:DI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:DI 3 "=X,&a"))]
    "TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"clc\\t%O0(%b2+1,%R0),%1\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%3,.+10\", operands);
! 	output_asm_insn (\"clc\\t%O0(1,%R0),%1\", operands);
! 	return \"ex\\t%2,0(%3)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 1995,2015 ----
     (use (match_operand:DI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:DI 3 "=X,&a"))]
    "TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "clc\\t%O0(%b2+1,%R0),%1";
  
        case 1:
! 	output_asm_insn ("bras\\t%3,.+10", operands);
! 	output_asm_insn ("clc\\t%O0(1,%R0),%1", operands);
! 	return "ex\\t%2,0(%3)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 2044,2065 ****
     (use (match_operand:SI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:SI 3 "=X,&a"))]
    "!TARGET_64BIT"
-   "*
  {
    switch (which_alternative)
      {
        case 0:
! 	return \"clc\\t%O0(%b2+1,%R0),%1\";
  
        case 1:
! 	output_asm_insn (\"bras\\t%3,.+10\", operands);
! 	output_asm_insn (\"clc\\t%O0(1,%R0),%1\", operands);
! 	return \"ex\\t%2,0(%3)\";
  
        default:
          abort ();
      }
! }"
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
--- 2022,2042 ----
     (use (match_operand:SI 2 "nonmemory_operand" "n,a"))
     (clobber (match_scratch:SI 3 "=X,&a"))]
    "!TARGET_64BIT"
  {
    switch (which_alternative)
      {
        case 0:
! 	return "clc\\t%O0(%b2+1,%R0),%1";
  
        case 1:
! 	output_asm_insn ("bras\\t%3,.+10", operands);
! 	output_asm_insn ("clc\\t%O0(1,%R0),%1", operands);
! 	return "ex\\t%2,0(%3)";
  
        default:
          abort ();
      }
! }
    [(set_attr "op_type" "SS,NN")
     (set_attr "type"    "cs,cs")
     (set_attr "atype"   "*,agen")
***************
*** 2099,2112 ****
    [(set (match_operand:SI 0 "register_operand" "=d")
          (compare:SI (reg:CCS 33) (const_int 0)))]
    ""
-   "*
  {
!    output_asm_insn (\"lhi\\t%0,1\", operands);
!    output_asm_insn (\"jh\\t.+12\", operands);
!    output_asm_insn (\"jl\\t.+6\", operands);
!    output_asm_insn (\"sr\\t%0,%0\", operands);
!    return \"lcr\\t%0,%0\";
! }"
    [(set_attr "op_type" "NN")
     (set_attr "length"  "16")
     (set_attr "type"    "other")])
--- 2076,2088 ----
    [(set (match_operand:SI 0 "register_operand" "=d")
          (compare:SI (reg:CCS 33) (const_int 0)))]
    ""
  {
!    output_asm_insn ("lhi\\t%0,1", operands);
!    output_asm_insn ("jh\\t.+12", operands);
!    output_asm_insn ("jl\\t.+6", operands);
!    output_asm_insn ("sr\\t%0,%0", operands);
!    return "lcr\\t%0,%0";
! }
    [(set_attr "op_type" "NN")
     (set_attr "length"  "16")
     (set_attr "type"    "other")])
***************
*** 2115,2128 ****
    [(set (match_operand:DI 0 "register_operand" "=d")
          (compare:DI (reg:CCS 33) (const_int 0)))]
    "TARGET_64BIT"
-   "*
  {
!    output_asm_insn (\"lghi\\t%0,1\", operands);
!    output_asm_insn (\"jh\\t.+12\", operands);
!    output_asm_insn (\"jl\\t.+6\", operands);
!    output_asm_insn (\"sgr\\t%0,%0\", operands);
!    return \"lcgr\\t%0,%0\";
! }"
    [(set_attr "op_type" "NN")
     (set_attr "length"  "22")
     (set_attr "type"    "other")])
--- 2091,2103 ----
    [(set (match_operand:DI 0 "register_operand" "=d")
          (compare:DI (reg:CCS 33) (const_int 0)))]
    "TARGET_64BIT"
  {
!    output_asm_insn ("lghi\\t%0,1", operands);
!    output_asm_insn ("jh\\t.+12", operands);
!    output_asm_insn ("jl\\t.+6", operands);
!    output_asm_insn ("sgr\\t%0,%0", operands);
!    return "lcgr\\t%0,%0";
! }
    [(set_attr "op_type" "NN")
     (set_attr "length"  "22")
     (set_attr "type"    "other")])
***************
*** 2134,2140 ****
  
  (define_insn "*sethighqisi"
    [(set (match_operand:SI 0 "register_operand" "=d,d")
!         (unspec:SI [(match_operand:QI 1 "s_operand" "Q,S")] 10))
     (clobber (reg:CC 33))]
    ""
    "@
--- 2109,2115 ----
  
  (define_insn "*sethighqisi"
    [(set (match_operand:SI 0 "register_operand" "=d,d")
!         (unspec:SI [(match_operand:QI 1 "s_operand" "Q,S")] UNSPEC_SETHIGH))
     (clobber (reg:CC 33))]
    ""
    "@
***************
*** 2144,2150 ****
  
  (define_insn "*sethighhisi"
    [(set (match_operand:SI 0 "register_operand" "=d,d")
!         (unspec:SI [(match_operand:HI 1 "s_operand" "Q,S")] 10))
     (clobber (reg:CC 33))]
    ""
    "@
--- 2119,2125 ----
  
  (define_insn "*sethighhisi"
    [(set (match_operand:SI 0 "register_operand" "=d,d")
!         (unspec:SI [(match_operand:HI 1 "s_operand" "Q,S")] UNSPEC_SETHIGH))
     (clobber (reg:CC 33))]
    ""
    "@
***************
*** 2154,2160 ****
  
  (define_insn "*sethighqidi_64"
    [(set (match_operand:DI 0 "register_operand" "=d")
!         (unspec:DI [(match_operand:QI 1 "s_operand" "QS")] 10))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
    "icmh\\t%0,8,%1"
--- 2129,2135 ----
  
  (define_insn "*sethighqidi_64"
    [(set (match_operand:DI 0 "register_operand" "=d")
!         (unspec:DI [(match_operand:QI 1 "s_operand" "QS")] UNSPEC_SETHIGH))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
    "icmh\\t%0,8,%1"
***************
*** 2162,2168 ****
  
  (define_insn "*sethighqidi_31"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
!         (unspec:DI [(match_operand:QI 1 "s_operand" "Q,S")] 10))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
    "@
--- 2137,2143 ----
  
  (define_insn "*sethighqidi_31"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
!         (unspec:DI [(match_operand:QI 1 "s_operand" "Q,S")] UNSPEC_SETHIGH))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
    "@
***************
*** 2181,2194 ****
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] 10))
       (clobber (reg:CC 33))])
      (set (match_dup 0) (lshiftrt:SI (match_dup 0) (match_dup 2)))]
-   "
  {
    operands[2] = GEN_INT (32 - INTVAL (operands[2]));
    operands[1] = change_address (operands[1], QImode, 0);
! }"
    [(set_attr "atype"   "agen")])
  
  (define_insn_and_split "*extracthi"
--- 2156,2168 ----
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_SETHIGH))
       (clobber (reg:CC 33))])
      (set (match_dup 0) (lshiftrt:SI (match_dup 0) (match_dup 2)))]
  {
    operands[2] = GEN_INT (32 - INTVAL (operands[2]));
    operands[1] = change_address (operands[1], QImode, 0);
! }
    [(set_attr "atype"   "agen")])
  
  (define_insn_and_split "*extracthi"
***************
*** 2202,2215 ****
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] 10))
       (clobber (reg:CC 33))])
      (set (match_dup 0) (lshiftrt:SI (match_dup 0) (match_dup 2)))]
-   "
  {
    operands[2] = GEN_INT (32 - INTVAL (operands[2]));
    operands[1] = change_address (operands[1], HImode, 0);
! }"
    [(set_attr "atype"   "agen")])
  
  ;
--- 2176,2188 ----
    "#"
    "&& reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_SETHIGH))
       (clobber (reg:CC 33))])
      (set (match_dup 0) (lshiftrt:SI (match_dup 0) (match_dup 2)))]
  {
    operands[2] = GEN_INT (32 - INTVAL (operands[2]));
    operands[1] = change_address (operands[1], HImode, 0);
! }
    [(set_attr "atype"   "agen")])
  
  ;
***************
*** 2315,2321 ****
          (sign_extend:DI (match_operand:QI 1 "s_operand" "")))]
    "TARGET_64BIT && !TARGET_LONG_DISPLACEMENT && !reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:DI [(match_dup 1)] 10))
       (clobber (reg:CC 33))])
     (parallel
      [(set (match_dup 0) (ashiftrt:DI (match_dup 0) (const_int 56)))
--- 2288,2294 ----
          (sign_extend:DI (match_operand:QI 1 "s_operand" "")))]
    "TARGET_64BIT && !TARGET_LONG_DISPLACEMENT && !reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_SETHIGH))
       (clobber (reg:CC 33))])
     (parallel
      [(set (match_dup 0) (ashiftrt:DI (match_dup 0) (const_int 56)))
***************
*** 2377,2383 ****
          (sign_extend:SI (match_operand:QI 1 "s_operand" "")))]
    "(!TARGET_64BIT || !TARGET_LONG_DISPLACEMENT) && !reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] 10))
       (clobber (reg:CC 33))])
     (parallel
      [(set (match_dup 0) (ashiftrt:SI (match_dup 0) (const_int 24)))
--- 2350,2356 ----
          (sign_extend:SI (match_operand:QI 1 "s_operand" "")))]
    "(!TARGET_64BIT || !TARGET_LONG_DISPLACEMENT) && !reload_completed"
    [(parallel
!     [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_SETHIGH))
       (clobber (reg:CC 33))])
     (parallel
      [(set (match_dup 0) (ashiftrt:SI (match_dup 0) (const_int 24)))
***************
*** 2600,2606 ****
    [(set (match_operand:DI 0 "register_operand" "")
          (unsigned_fix:DI (match_operand:DF 1 "register_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    rtx label1 = gen_label_rtx ();
    rtx label2 = gen_label_rtx ();
--- 2573,2578 ----
***************
*** 2609,2619 ****
  
    emit_insn (gen_cmpdf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"9223372036854775808.0\", DFmode), DFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subdf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"18446744073709551616.0\", DFmode), DFmode)));
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], temp, GEN_INT(7)));
    emit_jump (label2);
  
--- 2581,2591 ----
  
    emit_insn (gen_cmpdf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("9223372036854775808.0", DFmode), DFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subdf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("18446744073709551616.0", DFmode), DFmode)));
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], temp, GEN_INT(7)));
    emit_jump (label2);
  
***************
*** 2621,2643 ****
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    emit_label (label2);
    DONE;
! }")
  
  (define_expand "fix_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:DF 1 "nonimmediate_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    operands[1] = force_reg (DFmode, operands[1]);
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    DONE;
! }")
  
  (define_insn "fix_truncdfdi2_ieee"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (fix:DI (match_operand:DF 1 "register_operand" "f")))
!    (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] 1)
     (clobber (reg:CC 33))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cgdbr\\t%0,%h2,%1"
--- 2593,2614 ----
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    emit_label (label2);
    DONE;
! })
  
  (define_expand "fix_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:DF 1 "nonimmediate_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
  {
    operands[1] = force_reg (DFmode, operands[1]);
    emit_insn (gen_fix_truncdfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    DONE;
! })
  
  (define_insn "fix_truncdfdi2_ieee"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (fix:DI (match_operand:DF 1 "register_operand" "f")))
!    (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC 33))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cgdbr\\t%0,%h2,%1"
***************
*** 2652,2658 ****
    [(set (match_operand:SI 0 "register_operand" "")
          (unsigned_fix:SI (match_operand:DF 1 "register_operand" "")))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    rtx label1 = gen_label_rtx ();
    rtx label2 = gen_label_rtx ();
--- 2623,2628 ----
***************
*** 2661,2671 ****
    operands[1] = force_reg (DFmode,operands[1]);
    emit_insn (gen_cmpdf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"2147483648.0\", DFmode), DFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subdf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"4294967296.0\", DFmode), DFmode)));
    emit_insn (gen_fix_truncdfsi2_ieee (operands[0], temp, GEN_INT (7)));
    emit_jump (label2);
  
--- 2631,2641 ----
    operands[1] = force_reg (DFmode,operands[1]);
    emit_insn (gen_cmpdf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("2147483648.0", DFmode), DFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subdf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("4294967296.0", DFmode), DFmode)));
    emit_insn (gen_fix_truncdfsi2_ieee (operands[0], temp, GEN_INT (7)));
    emit_jump (label2);
  
***************
*** 2673,2685 ****
    emit_insn (gen_fix_truncdfsi2_ieee (operands[0], operands[1], GEN_INT (5)));
    emit_label (label2);
    DONE;
! }")
  
  (define_expand "fix_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "")
          (fix:SI (match_operand:DF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
-   "
  {
    if (TARGET_IBM_FLOAT)
      {
--- 2643,2654 ----
    emit_insn (gen_fix_truncdfsi2_ieee (operands[0], operands[1], GEN_INT (5)));
    emit_label (label2);
    DONE;
! })
  
  (define_expand "fix_truncdfsi2"
    [(set (match_operand:SI 0 "register_operand" "")
          (fix:SI (match_operand:DF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
    if (TARGET_IBM_FLOAT)
      {
***************
*** 2700,2711 ****
      }
  
    DONE;
! }")
  
  (define_insn "fix_truncdfsi2_ieee"
    [(set (match_operand:SI 0 "register_operand" "=d")
          (fix:SI (match_operand:DF 1 "register_operand" "f")))
!     (unspec:SI [(match_operand:SI 2 "immediate_operand" "K")] 1)
      (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cfdbr\\t%0,%h2,%1"
--- 2669,2680 ----
      }
  
    DONE;
! })
  
  (define_insn "fix_truncdfsi2_ieee"
    [(set (match_operand:SI 0 "register_operand" "=d")
          (fix:SI (match_operand:DF 1 "register_operand" "f")))
!     (unspec:SI [(match_operand:SI 2 "immediate_operand" "K")] UNSPEC_ROUND)
      (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cfdbr\\t%0,%h2,%1"
***************
*** 2720,2733 ****
     (use (match_operand:BLK 4 "memory_operand" "m"))
     (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
-   "*
  {
!    output_asm_insn (\"sd\\t%1,%2\", operands);
!    output_asm_insn (\"aw\\t%1,%3\", operands);
!    output_asm_insn (\"std\\t%1,%4\", operands);
!    output_asm_insn (\"xi\\t%N4,128\", operands);
!    return \"l\\t%0,%N4\";
! }"
    [(set_attr "op_type" "NN")
     (set_attr "type"    "ftoi")
     (set_attr "atype"   "agen")
--- 2689,2701 ----
     (use (match_operand:BLK 4 "memory_operand" "m"))
     (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
  {
!    output_asm_insn ("sd\\t%1,%2", operands);
!    output_asm_insn ("aw\\t%1,%3", operands);
!    output_asm_insn ("std\\t%1,%4", operands);
!    output_asm_insn ("xi\\t%N4,128", operands);
!    return "l\\t%0,%N4";
! }
    [(set_attr "op_type" "NN")
     (set_attr "type"    "ftoi")
     (set_attr "atype"   "agen")
***************
*** 2741,2747 ****
    [(set (match_operand:DI 0 "register_operand" "")
          (unsigned_fix:DI (match_operand:SF 1 "register_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    rtx label1 = gen_label_rtx ();
    rtx label2 = gen_label_rtx ();
--- 2709,2714 ----
***************
*** 2750,2761 ****
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_cmpsf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"9223372036854775808.0\", SFmode), SFmode)));
    emit_jump_insn (gen_blt (label1));
  
    emit_insn (gen_subsf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"18446744073709551616.0\", SFmode), SFmode)));
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], temp, GEN_INT(7)));
    emit_jump (label2);
  
--- 2717,2728 ----
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_cmpsf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("9223372036854775808.0", SFmode), SFmode)));
    emit_jump_insn (gen_blt (label1));
  
    emit_insn (gen_subsf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("18446744073709551616.0", SFmode), SFmode)));
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], temp, GEN_INT(7)));
    emit_jump (label2);
  
***************
*** 2763,2785 ****
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    emit_label (label2);
    DONE;
! }")
  
  (define_expand "fix_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    DONE;
! }")
  
  (define_insn "fix_truncsfdi2_ieee"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (fix:DI (match_operand:SF 1 "register_operand"  "f")))
!    (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] 1)
     (clobber (reg:CC 33))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cgebr\\t%0,%h2,%1"
--- 2730,2751 ----
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    emit_label (label2);
    DONE;
! })
  
  (define_expand "fix_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand" "")
          (fix:DI (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
  {
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_fix_truncsfdi2_ieee (operands[0], operands[1], GEN_INT(5)));
    DONE;
! })
  
  (define_insn "fix_truncsfdi2_ieee"
    [(set (match_operand:DI 0 "register_operand" "=d")
          (fix:DI (match_operand:SF 1 "register_operand"  "f")))
!    (unspec:DI [(match_operand:DI 2 "immediate_operand" "K")] UNSPEC_ROUND)
     (clobber (reg:CC 33))]
    "TARGET_64BIT && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cgebr\\t%0,%h2,%1"
***************
*** 2794,2800 ****
    [(set (match_operand:SI 0 "register_operand" "")
          (unsigned_fix:SI (match_operand:SF 1 "register_operand" "")))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
-   "
  {
    rtx label1 = gen_label_rtx ();
    rtx label2 = gen_label_rtx ();
--- 2760,2765 ----
***************
*** 2803,2813 ****
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_cmpsf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"2147483648.0\", SFmode), SFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subsf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF (\"4294967296.0\", SFmode), SFmode)));
    emit_insn (gen_fix_truncsfsi2_ieee (operands[0], temp, GEN_INT (7)));
    emit_jump (label2);
  
--- 2768,2778 ----
    operands[1] = force_reg (SFmode, operands[1]);
    emit_insn (gen_cmpsf (operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("2147483648.0", SFmode), SFmode)));
    emit_jump_insn (gen_blt (label1));
    emit_insn (gen_subsf3 (temp, operands[1],
  	CONST_DOUBLE_FROM_REAL_VALUE (
!           REAL_VALUE_ATOF ("4294967296.0", SFmode), SFmode)));
    emit_insn (gen_fix_truncsfsi2_ieee (operands[0], temp, GEN_INT (7)));
    emit_jump (label2);
  
***************
*** 2815,2827 ****
    emit_insn (gen_fix_truncsfsi2_ieee (operands[0], operands[1], GEN_INT (5)));
    emit_label (label2);
    DONE;
! }")
  
  (define_expand "fix_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "")
          (fix:SI (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
-   "
  {
    if (TARGET_IBM_FLOAT)
      {
--- 2780,2791 ----
    emit_insn (gen_fix_truncsfsi2_ieee (operands[0], operands[1], GEN_INT (5)));
    emit_label (label2);
    DONE;
! })
  
  (define_expand "fix_truncsfsi2"
    [(set (match_operand:SI 0 "register_operand" "")
          (fix:SI (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
    if (TARGET_IBM_FLOAT)
      {
***************
*** 2837,2848 ****
      }
  
    DONE;
! }")
  
  (define_insn "fix_truncsfsi2_ieee"
    [(set (match_operand:SI 0 "register_operand" "=d")
          (fix:SI (match_operand:SF 1 "register_operand" "f")))
!     (unspec:SI [(match_operand:SI 2 "immediate_operand" "K")] 1)
      (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cfebr\\t%0,%h2,%1"
--- 2801,2812 ----
      }
  
    DONE;
! })
  
  (define_insn "fix_truncsfsi2_ieee"
    [(set (match_operand:SI 0 "register_operand" "=d")
          (fix:SI (match_operand:SF 1 "register_operand" "f")))
!     (unspec:SI [(match_operand:SI 2 "immediate_operand" "K")] UNSPEC_ROUND)
      (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT"
    "cfebr\\t%0,%h2,%1"
***************
*** 2885,2891 ****
            (float:DF (match_operand:SI 1 "register_operand" "")))
       (clobber (reg:CC 33))])]
    "TARGET_HARD_FLOAT"
-   "
  {
    if (TARGET_IBM_FLOAT)
      {
--- 2849,2854 ----
***************
*** 2897,2903 ****
        emit_insn (gen_floatsidf2_ibm (operands[0], operands[1], two31, temp));
        DONE;
      }
! }")
  
  (define_insn "floatsidf2_ieee"
    [(set (match_operand:DF 0 "register_operand" "=f")
--- 2860,2866 ----
        emit_insn (gen_floatsidf2_ibm (operands[0], operands[1], two31, temp));
        DONE;
      }
! })
  
  (define_insn "floatsidf2_ieee"
    [(set (match_operand:DF 0 "register_operand" "=f")
***************
*** 2915,2928 ****
     (use (match_operand:BLK 3 "memory_operand" "m"))
     (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
-   "*
  {
!    output_asm_insn (\"st\\t%1,%N3\", operands);
!    output_asm_insn (\"xi\\t%N3,128\", operands);
!    output_asm_insn (\"mvc\\t%O3(4,%R3),%2\", operands);
!    output_asm_insn (\"ld\\t%0,%3\", operands);
!    return \"sd\\t%0,%2\";
! }"
    [(set_attr "op_type" "NN")
     (set_attr "type"    "other" )
     (set_attr "atype"   "agen")
--- 2878,2890 ----
     (use (match_operand:BLK 3 "memory_operand" "m"))
     (clobber (reg:CC 33))]
    "TARGET_HARD_FLOAT && TARGET_IBM_FLOAT"
  {
!    output_asm_insn ("st\\t%1,%N3", operands);
!    output_asm_insn ("xi\\t%N3,128", operands);
!    output_asm_insn ("mvc\\t%O3(4,%R3),%2", operands);
!    output_asm_insn ("ld\\t%0,%3", operands);
!    return "sd\\t%0,%2";
! }
    [(set_attr "op_type" "NN")
     (set_attr "type"    "other" )
     (set_attr "atype"   "agen")
***************
*** 2938,2944 ****
            (float:SF (match_operand:SI 1 "register_operand" "")))
       (clobber (reg:CC 33))])]
    "TARGET_HARD_FLOAT"
-   "
  {
    if (TARGET_IBM_FLOAT)
      {
--- 2900,2905 ----
***************
*** 2948,2954 ****
        emit_insn (gen_truncdfsf2 (operands[0], temp));
        DONE;
      }
! }")
  
  (define_insn "floatsisf2_ieee"
    [(set (match_operand:SF 0 "register_operand" "=f")
--- 2909,2915 ----
        emit_insn (gen_truncdfsf2 (operands[0], temp));
        DONE;
      }
! })
  
  (define_insn "floatsisf2_ieee"
    [(set (match_operand:SF 0 "register_operand" "=f")
***************
*** 2994,3007 ****
    [(set (match_operand:DF 0 "register_operand" "")
          (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
-   "
  {
    if (TARGET_IBM_FLOAT)
      {
        emit_insn (gen_extendsfdf2_ibm (operands[0], operands[1]));
        DONE;
      }
! }")
  
  (define_insn "extendsfdf2_ieee"
    [(set (match_operand:DF 0 "register_operand" "=f,f")
--- 2955,2967 ----
    [(set (match_operand:DF 0 "register_operand" "")
          (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "")))]
    "TARGET_HARD_FLOAT"
  {
    if (TARGET_IBM_FLOAT)
      {
        emit_insn (gen_extendsfdf2_ibm (operands[0], operands[1]));
        DONE;
      }
! })
  
  (define_insn "extendsfdf2_ieee"
    [(set (match_operand:DF 0 "register_operand" "=f,f")
***************
*** 3233,3243 ****
                (match_operand:DI 1 "s390_plus_operand" "")
                (match_operand:DI 2 "register_operand" "=&a")])]
    "TARGET_64BIT"
-   "
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
    DONE;
! }")
  
  
  ;
--- 3193,3202 ----
                (match_operand:DI 1 "s390_plus_operand" "")
                (match_operand:DI 2 "register_operand" "=&a")])]
    "TARGET_64BIT"
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
    DONE;
! })
  
  
  ;
***************
*** 3461,3471 ****
                (match_operand:SI 1 "s390_plus_operand" "")
                (match_operand:SI 2 "register_operand" "=&a")])]
    "!TARGET_64BIT"
-   "
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
    DONE;
! }")
  
  
  ;
--- 3420,3429 ----
                (match_operand:SI 1 "s390_plus_operand" "")
                (match_operand:SI 2 "register_operand" "=&a")])]
    "!TARGET_64BIT"
  {
    s390_expand_plus_operand (operands[0], operands[1], operands[2]);
    DONE;
! })
  
  
  ;
***************
*** 3902,3908 ****
  	(mult:DI (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" ""))
  		 (sign_extend:DI (match_operand:SI 2 "nonimmediate_operand" ""))))]
    "!TARGET_64BIT"
-   "
  {
    rtx insn;
  
--- 3860,3865 ----
***************
*** 3916,3922 ****
  				gen_rtx_SIGN_EXTEND (DImode, operands[2])),
  			   REG_NOTES (insn));
    DONE;
! }")
  
  (define_insn "mulsi_6432"
     [(set (match_operand:DI 0 "register_operand" "=d,d")
--- 3873,3879 ----
  				gen_rtx_SIGN_EXTEND (DImode, operands[2])),
  			   REG_NOTES (insn));
    DONE;
! })
  
  (define_insn "mulsi_6432"
     [(set (match_operand:DI 0 "register_operand" "=d,d")
***************
*** 4022,4028 ****
  		   (mod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
    "TARGET_64BIT"
-   "
  {
    rtx insn, div_equal, mod_equal, equal;
  
--- 3979,3984 ----
***************
*** 4051,4057 ****
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! }")
  
  (define_insn "divmodtidi3"
    [(set (match_operand:TI 0 "register_operand" "=d,d")
--- 4007,4013 ----
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! })
  
  (define_insn "divmodtidi3"
    [(set (match_operand:TI 0 "register_operand" "=d,d")
***************
*** 4101,4107 ****
  		   (umod:DI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
    "TARGET_64BIT"
-   "
  {
    rtx insn, div_equal, mod_equal, equal;
  
--- 4057,4062 ----
***************
*** 4130,4136 ****
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! }")
  
  (define_insn "udivmodtidi3"
    [(set (match_operand:TI 0 "register_operand" "=d,d")
--- 4085,4091 ----
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! })
  
  (define_insn "udivmodtidi3"
    [(set (match_operand:TI 0 "register_operand" "=d,d")
***************
*** 4163,4169 ****
  		   (mod:SI (match_dup 1) (match_dup 2)))])
     (clobber (match_dup 4))]
    "!TARGET_64BIT"
-   "
  {
    rtx insn, div_equal, mod_equal, equal;
  
--- 4118,4123 ----
***************
*** 4190,4196 ****
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! }")
  
  (define_insn "divmoddisi3"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
--- 4144,4150 ----
          gen_rtx_EXPR_LIST (REG_EQUAL, mod_equal, REG_NOTES (insn));
  
    DONE;
! })
  
  (define_insn "divmoddisi3"
    [(set (match_operand:DI 0 "register_operand" "=d,d")
***************
*** 4222,4228 ****
                   (match_operand:SI 2 "general_operand" "")))
     (clobber (match_dup 3))]
    "!TARGET_64BIT"
-   "
  {
    rtx insn, udiv_equal, umod_equal, equal;
  
--- 4176,4181 ----
***************
*** 4306,4312 ****
      }
    emit_move_insn (operands[0], operands[0]);
    DONE;
! }")
  
  (define_expand "umodsi3"
    [(set (match_operand:SI 0 "register_operand" "=d")
--- 4259,4265 ----
      }
    emit_move_insn (operands[0], operands[0]);
    DONE;
! })
  
  (define_expand "umodsi3"
    [(set (match_operand:SI 0 "register_operand" "=d")
***************
*** 4314,4320 ****
                   (match_operand:SI 2 "nonimmediate_operand" "")))
     (clobber (match_dup 3))]
    "!TARGET_64BIT"
-   "
  {
    rtx insn, udiv_equal, umod_equal, equal;
  
--- 4267,4272 ----
***************
*** 4398,4404 ****
        emit_label (label3);
      }
    DONE;
! }")
  
  ;
  ; divdf3 instruction pattern(s).
--- 4350,4356 ----
        emit_label (label3);
      }
    DONE;
! })
  
  ;
  ; divdf3 instruction pattern(s).
***************
*** 4514,4533 ****
                  (match_operand:DI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], DImode, -1) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[2], DImode, -1);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], DImode, part));
  
    switch (part)
      {
!       case 0: return \"nihh\\t%0,%x2\";
!       case 1: return \"nihl\\t%0,%x2\";
!       case 2: return \"nilh\\t%0,%x2\";
!       case 3: return \"nill\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type"  "RI")])
  
  (define_insn "anddi3"
--- 4466,4484 ----
                  (match_operand:DI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], DImode, -1) >= 0"
  {
    int part = s390_single_hi (operands[2], DImode, -1);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], DImode, part));
  
    switch (part)
      {
!       case 0: return "nihh\\t%0,%x2";
!       case 1: return "nihl\\t%0,%x2";
!       case 2: return "nilh\\t%0,%x2";
!       case 3: return "nill\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type"  "RI")])
  
  (define_insn "anddi3"
***************
*** 4596,4613 ****
                  (match_operand:SI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], SImode, -1) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[2], SImode, -1);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], SImode, part));
  
    switch (part)
      {
!       case 0: return \"nilh\\t%0,%x2\";
!       case 1: return \"nill\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type"  "RI")])
  
  (define_insn "andsi3"
--- 4547,4563 ----
                  (match_operand:SI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], SImode, -1) >= 0"
  {
    int part = s390_single_hi (operands[2], SImode, -1);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], SImode, part));
  
    switch (part)
      {
!       case 0: return "nilh\\t%0,%x2";
!       case 1: return "nill\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type"  "RI")])
  
  (define_insn "andsi3"
***************
*** 4770,4789 ****
                  (match_operand:DI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], DImode, 0) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[2], DImode, 0);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], DImode, part));
  
    switch (part)
      {
!       case 0: return \"oihh\\t%0,%x2\";
!       case 1: return \"oihl\\t%0,%x2\";
!       case 2: return \"oilh\\t%0,%x2\";
!       case 3: return \"oill\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type"  "RI")])
  
  (define_insn "iordi3"
--- 4720,4738 ----
                  (match_operand:DI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], DImode, 0) >= 0"
  {
    int part = s390_single_hi (operands[2], DImode, 0);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], DImode, part));
  
    switch (part)
      {
!       case 0: return "oihh\\t%0,%x2";
!       case 1: return "oihl\\t%0,%x2";
!       case 2: return "oilh\\t%0,%x2";
!       case 3: return "oill\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type"  "RI")])
  
  (define_insn "iordi3"
***************
*** 4852,4869 ****
                  (match_operand:SI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], SImode, 0) >= 0"
-   "*
  {
    int part = s390_single_hi (operands[2], SImode, 0);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], SImode, part));
  
    switch (part)
      {
!       case 0: return \"oilh\\t%0,%x2\";
!       case 1: return \"oill\\t%0,%x2\";
        default: abort ();
      }
! }"
    [(set_attr "op_type"  "RI")])
  
  (define_insn "iorsi3"
--- 4801,4817 ----
                  (match_operand:SI 2 "immediate_operand" "n")))
     (clobber (reg:CC 33))]
    "TARGET_64BIT && s390_single_hi (operands[2], SImode, 0) >= 0"
  {
    int part = s390_single_hi (operands[2], SImode, 0);
    operands[2] = GEN_INT (s390_extract_hi (operands[2], SImode, part));
  
    switch (part)
      {
!       case 0: return "oilh\\t%0,%x2";
!       case 1: return "oill\\t%0,%x2";
        default: abort ();
      }
! }
    [(set_attr "op_type"  "RI")])
  
  (define_insn "iorsi3"
***************
*** 5208,5225 ****
          (neg:DI (match_operand:DI 1 "register_operand" "d")))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
-   "*
  {
    rtx xop[1];
    xop[0] = gen_label_rtx ();
!   output_asm_insn (\"lcr\\t%0,%1\", operands);
!   output_asm_insn (\"lcr\\t%N0,%N1\", operands);
!   output_asm_insn (\"je\\t%l0\", xop);
!   output_asm_insn (\"bctr\\t%0,0\", operands);
!   (*targetm.asm_out.internal_label) (asm_out_file, \"L\",
  			     CODE_LABEL_NUMBER (xop[0]));
!   return \"\";
! }"
    [(set_attr "op_type"  "NN")
     (set_attr "type"     "other")
     (set_attr "length"   "10")])
--- 5156,5172 ----
          (neg:DI (match_operand:DI 1 "register_operand" "d")))
     (clobber (reg:CC 33))]
    "!TARGET_64BIT"
  {
    rtx xop[1];
    xop[0] = gen_label_rtx ();
!   output_asm_insn ("lcr\\t%0,%1", operands);
!   output_asm_insn ("lcr\\t%N0,%N1", operands);
!   output_asm_insn ("je\\t%l0", xop);
!   output_asm_insn ("bctr\\t%0,0", operands);
!   (*targetm.asm_out.internal_label) (asm_out_file, "L",
  			     CODE_LABEL_NUMBER (xop[0]));
!   return "";
! }
    [(set_attr "op_type"  "NN")
     (set_attr "type"     "other")
     (set_attr "length"   "10")])
***************
*** 5760,5766 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bne"
    [(set (reg:CCZ 33) (compare:CCZ (match_dup 1) (match_dup 2)))
--- 5707,5713 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bne"
    [(set (reg:CCZ 33) (compare:CCZ (match_dup 1) (match_dup 2)))
***************
*** 5769,5775 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bgt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5716,5722 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bgt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5778,5784 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bgtu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
--- 5725,5731 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bgtu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
***************
*** 5787,5793 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "blt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5734,5740 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "blt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5796,5802 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bltu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
--- 5743,5749 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bltu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
***************
*** 5805,5811 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bge"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5752,5758 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bge"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5814,5820 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bgeu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
--- 5761,5767 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bgeu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
***************
*** 5823,5829 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "ble"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5770,5776 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "ble"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5832,5838 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bleu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
--- 5779,5785 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bleu"
    [(set (reg:CCU 33) (compare:CCU (match_dup 1) (match_dup 2)))
***************
*** 5841,5847 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bunordered"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5788,5794 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bunordered"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5850,5856 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bordered"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5797,5803 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bordered"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5859,5865 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "buneq"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5806,5812 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "buneq"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5868,5874 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bungt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5815,5821 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bungt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5877,5883 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bunlt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5824,5830 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bunlt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5886,5892 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bunge"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5833,5839 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bunge"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5895,5901 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bunle"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5842,5848 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bunle"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5904,5910 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  (define_expand "bltgt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
--- 5851,5857 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  (define_expand "bltgt"
    [(set (reg:CCS 33) (compare:CCS (match_dup 1) (match_dup 2)))
***************
*** 5913,5919 ****
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "{ operands[1] = s390_compare_op0; operands[2] = s390_compare_op1; }")
  
  
  ;;
--- 5860,5866 ----
                        (label_ref (match_operand 0 "" ""))
                        (pc)))]
    ""
!   "operands[1] = s390_compare_op0; operands[2] = s390_compare_op1;")
  
  
  ;;
***************
*** 5927,5941 ****
  	 (label_ref (match_operand 0 "" ""))
  	 (pc)))]
    ""
-   "*
  {
    if (get_attr_length (insn) == 4)
!     return \"j%C1\\t%l0\";
    else if (TARGET_64BIT)
!     return \"jg%C1\\t%l0\";
    else
      abort ();
! }"
    [(set_attr "op_type" "RI")
     (set_attr "type"    "branch")
     (set (attr "length")
--- 5874,5887 ----
  	 (label_ref (match_operand 0 "" ""))
  	 (pc)))]
    ""
  {
    if (get_attr_length (insn) == 4)
!     return "j%C1\\t%l0";
    else if (TARGET_64BIT)
!     return "jg%C1\\t%l0";
    else
      abort ();
! }
    [(set_attr "op_type" "RI")
     (set_attr "type"    "branch")
     (set (attr "length")
***************
*** 5953,5965 ****
  	 (match_operand 0 "address_operand" "U")
  	 (pc)))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return \"b%C1r\\t%0\";
    else
!     return \"b%C1\\t%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
--- 5899,5910 ----
  	 (match_operand 0 "address_operand" "U")
  	 (pc)))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return "b%C1r\\t%0";
    else
!     return "b%C1\\t%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
***************
*** 5978,5992 ****
           (pc)
  	 (label_ref (match_operand 0 "" ""))))]
    ""
-   "*
  {
    if (get_attr_length (insn) == 4)
!     return \"j%D1\\t%l0\";
    else if (TARGET_64BIT)
!     return \"jg%D1\\t%l0\";
    else
      abort ();
! }"
    [(set_attr "op_type" "RI")
     (set_attr "type"    "branch")
     (set (attr "length")
--- 5923,5936 ----
           (pc)
  	 (label_ref (match_operand 0 "" ""))))]
    ""
  {
    if (get_attr_length (insn) == 4)
!     return "j%D1\\t%l0";
    else if (TARGET_64BIT)
!     return "jg%D1\\t%l0";
    else
      abort ();
! }
    [(set_attr "op_type" "RI")
     (set_attr "type"    "branch")
     (set (attr "length")
***************
*** 6004,6016 ****
           (pc)
  	 (match_operand 0 "address_operand" "U")))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return \"b%D1r\\t%0\";
    else
!     return \"b%D1\\t%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
--- 5948,5959 ----
           (pc)
  	 (match_operand 0 "address_operand" "U")))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return "b%D1r\\t%0";
    else
!     return "b%D1\\t%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
***************
*** 6034,6040 ****
  			    [(match_dup 2) (const_int 0)])
  	    (match_operand:SI 1 "general_operand" ""))]
    ""
-   "
  {
     enum machine_mode ccmode;
  
--- 5977,5982 ----
***************
*** 6044,6050 ****
  			        s390_compare_op0, s390_compare_op1);
     operands[2] = gen_rtx_REG (ccmode, 33);
     operands[3] = gen_rtx_COMPARE (ccmode, s390_compare_op0, s390_compare_op1);
! }")
  
  (define_insn "*trap"
    [(trap_if (match_operator 0 "comparison_operator" [(reg 33) (const_int 0)])
--- 5986,5992 ----
  			        s390_compare_op0, s390_compare_op1);
     operands[2] = gen_rtx_REG (ccmode, 33);
     operands[3] = gen_rtx_COMPARE (ccmode, s390_compare_op0, s390_compare_op1);
! })
  
  (define_insn "*trap"
    [(trap_if (match_operator 0 "comparison_operator" [(reg 33) (const_int 0)])
***************
*** 6067,6073 ****
     (use (match_operand 3 "" ""))        ; loop level
     (use (match_operand 4 "" ""))]       ; label
    ""
-   "
  {
    if (GET_MODE (operands[0]) == SImode)
      emit_jump_insn (gen_doloop_si (operands[4], operands[0], operands[0]));
--- 6009,6014 ----
***************
*** 6077,6083 ****
      FAIL;
  
    DONE;
! }")
  
  (define_insn "doloop_si"
    [(set (pc)
--- 6018,6024 ----
      FAIL;
  
    DONE;
! })
  
  (define_insn "doloop_si"
    [(set (pc)
***************
*** 6091,6105 ****
     (clobber (match_scratch:SI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
-   "*
  {
    if (which_alternative != 0)
!     return \"#\";
    else if (get_attr_length (insn) == 4)
!     return \"brct\\t%1,%l0\";
    else
      abort ();
! }"
    [(set_attr "op_type"  "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
--- 6032,6045 ----
     (clobber (match_scratch:SI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
  {
    if (which_alternative != 0)
!     return "#";
    else if (get_attr_length (insn) == 4)
!     return "brct\\t%1,%l0";
    else
      abort ();
! }
    [(set_attr "op_type"  "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
***************
*** 6122,6134 ****
     (clobber (match_scratch:SI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return \"bctr\\t%1,%0\";
    else
!     return \"bct\\t%1,%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
--- 6062,6073 ----
     (clobber (match_scratch:SI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return "bctr\\t%1,%0";
    else
!     return "bct\\t%1,%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
***************
*** 6171,6185 ****
     (clobber (match_scratch:DI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
-   "*
  {
    if (which_alternative != 0)
!     return \"#\";
    else if (get_attr_length (insn) == 4)
!     return \"brctg\\t%1,%l0\";
    else
      abort ();
! }"
    [(set_attr "op_type"  "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
--- 6110,6123 ----
     (clobber (match_scratch:DI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    "TARGET_64BIT"
  {
    if (which_alternative != 0)
!     return "#";
    else if (get_attr_length (insn) == 4)
!     return "brctg\\t%1,%l0";
    else
      abort ();
! }
    [(set_attr "op_type"  "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
***************
*** 6198,6210 ****
     (clobber (match_scratch:DI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RRE)
!     return \"bctgr\\t%1,%0\";
    else
!     return \"bctg\\t%1,%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RRE") (const_string "RXE")))
--- 6136,6147 ----
     (clobber (match_scratch:DI 3 "=X,&d"))
     (clobber (reg:CC 33))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RRE)
!     return "bctgr\\t%1,%0";
    else
!     return "bctg\\t%1,%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RRE") (const_string "RXE")))
***************
*** 6246,6260 ****
  (define_insn "jump"
    [(set (pc) (label_ref (match_operand 0 "" "")))]
    ""
-   "*
  {
    if (get_attr_length (insn) == 4)
!     return \"j\\t%l0\";
    else if (TARGET_64BIT)
!     return \"jg\\t%l0\";
    else
      abort ();
! }"
    [(set_attr "op_type" "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
--- 6183,6196 ----
  (define_insn "jump"
    [(set (pc) (label_ref (match_operand 0 "" "")))]
    ""
  {
    if (get_attr_length (insn) == 4)
!     return "j\\t%l0";
    else if (TARGET_64BIT)
!     return "jg\\t%l0";
    else
      abort ();
! }
    [(set_attr "op_type" "RI")
     (set_attr "type"  "branch")
     (set (attr "length")
***************
*** 6272,6284 ****
  (define_insn "indirect_jump"
   [(set (pc) (match_operand 0 "address_operand" "U"))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return \"br\\t%0\";
    else
!     return \"b\\t%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
--- 6208,6219 ----
  (define_insn "indirect_jump"
   [(set (pc) (match_operand 0 "address_operand" "U"))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return "br\\t%0";
    else
!     return "b\\t%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
***************
*** 6293,6305 ****
   [(set (pc) (match_operand 0 "address_operand" "U"))
     (use (label_ref (match_operand 1 "" "")))]
    ""
-   "*
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return \"br\\t%0\";
    else
!     return \"b\\t%a0\";
! }"
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
--- 6228,6239 ----
   [(set (pc) (match_operand 0 "address_operand" "U"))
     (use (label_ref (match_operand 1 "" "")))]
    ""
  {
    if (get_attr_op_type (insn) == OP_TYPE_RR)
!     return "br\\t%0";
    else
!     return "b\\t%a0";
! }
    [(set (attr "op_type")
          (if_then_else (match_operand 0 "register_operand" "")
                        (const_string "RR") (const_string "RX")))
***************
*** 6313,6319 ****
     (label_ref (match_operand 3 "" ""))
     (label_ref (match_operand 4 "" ""))]
    ""
-   "
  {
     rtx index  = gen_reg_rtx (SImode);
     rtx base   = gen_reg_rtx (Pmode);
--- 6247,6252 ----
***************
*** 6344,6350 ****
     emit_jump_insn (gen_casesi_jump (target, operands[3]));
  
     DONE;
! }")
  
  
  ;;
--- 6277,6283 ----
     emit_jump_insn (gen_casesi_jump (target, operands[3]));
  
     DONE;
! })
  
  
  ;;
***************
*** 6363,6369 ****
                (match_operand 1 "" "")
                (match_operand 2 "" "")])]
    ""
-   "
  {
    int i;
  
--- 6296,6301 ----
***************
*** 6382,6394 ****
    emit_insn (gen_blockage ());
  
    DONE;
! }")
  
  ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
  ;; all of memory.  This blocks insns from being moved across this point.
  
  (define_insn "blockage"
!   [(unspec_volatile [(const_int 0)] 0)]
    ""
    ""
    [(set_attr "type"    "none")
--- 6314,6326 ----
    emit_insn (gen_blockage ());
  
    DONE;
! })
  
  ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
  ;; all of memory.  This blocks insns from being moved across this point.
  
  (define_insn "blockage"
!   [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)]
    ""
    ""
    [(set_attr "type"    "none")
***************
*** 6405,6411 ****
           (match_operand 1 "" ""))
     (use (match_operand 2 "" ""))]
    ""
-   "
  {
    rtx insn;
  
--- 6337,6342 ----
***************
*** 6439,6445 ****
    insn = emit_call_insn (gen_call_exp (operands[0], operands[1],
    				       gen_rtx_REG (Pmode, RETURN_REGNUM)));
    DONE;
! }")
  
  (define_expand "call_exp"
    [(parallel [(call (match_operand 0 "" "")
--- 6370,6376 ----
    insn = emit_call_insn (gen_call_exp (operands[0], operands[1],
    				       gen_rtx_REG (Pmode, RETURN_REGNUM)));
    DONE;
! })
  
  (define_expand "call_exp"
    [(parallel [(call (match_operand 0 "" "")
***************
*** 6515,6521 ****
                (match_operand 2 "" "")))
     (use (match_operand 3 "" ""))]
    ""
-   "
  {
    rtx insn;
  
--- 6446,6451 ----
***************
*** 6550,6556 ****
  	    gen_call_value_exp (operands[0], operands[1], operands[2],
    				gen_rtx_REG (Pmode, RETURN_REGNUM)));
    DONE;
! }")
  
  (define_expand "call_value_exp"
    [(parallel [(set (match_operand 0 "" "")
--- 6480,6486 ----
  	    gen_call_value_exp (operands[0], operands[1], operands[2],
    				gen_rtx_REG (Pmode, RETURN_REGNUM)));
    DONE;
! })
  
  (define_expand "call_value_exp"
    [(parallel [(set (match_operand 0 "" "")
***************
*** 6693,6699 ****
          (call (const_int 0) (const_int 0)))
     (use (match_operand 1 "" ""))]
    ""
-   "
  {
    rtx insn, sym;
  
--- 6623,6628 ----
***************
*** 6729,6735 ****
    CONST_OR_PURE_CALL_P (insn) = 1;
  
    DONE;
! }")
  
  (define_expand "call_value_tls_exp"
    [(parallel [(set (match_operand 0 "" "")
--- 6658,6664 ----
    CONST_OR_PURE_CALL_P (insn) = 1;
  
    DONE;
! })
  
  (define_expand "call_value_tls_exp"
    [(parallel [(set (match_operand 0 "" "")
***************
*** 6823,6829 ****
     (set (match_operand 0 "general_operand" "")
          (reg 15))]
   ""
-  "
  {
      rtx stack = gen_rtx (REG, Pmode, STACK_POINTER_REGNUM);
      rtx chain = gen_rtx (MEM, Pmode, stack);
--- 6752,6757 ----
***************
*** 6840,6846 ****
  
      emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
      DONE;
! }")
  
  
  ;
--- 6768,6774 ----
  
      emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
      DONE;
! })
  
  
  ;
***************
*** 6919,6935 ****
     (set (match_dup 0) (match_operand 1 "register_operand" ""))
     (set (match_dup 3) (match_dup 2))]
    ""
-   "
  {
    operands[2] = gen_reg_rtx (Pmode);
    operands[3] = gen_rtx_MEM (Pmode, operands[0]);
! }")
  
  (define_expand "save_stack_nonlocal"
    [(match_operand 0 "memory_operand" "")
     (match_operand 1 "register_operand" "")]
    ""
-   "
  {
    rtx temp = gen_reg_rtx (Pmode);
  
--- 6847,6861 ----
     (set (match_dup 0) (match_operand 1 "register_operand" ""))
     (set (match_dup 3) (match_dup 2))]
    ""
  {
    operands[2] = gen_reg_rtx (Pmode);
    operands[3] = gen_rtx_MEM (Pmode, operands[0]);
! })
  
  (define_expand "save_stack_nonlocal"
    [(match_operand 0 "memory_operand" "")
     (match_operand 1 "register_operand" "")]
    ""
  {
    rtx temp = gen_reg_rtx (Pmode);
  
***************
*** 6942,6954 ****
                   TARGET_64BIT ? TImode : DImode),
                   operands[1]);
    DONE;
! }")
  
  (define_expand "restore_stack_nonlocal"
    [(match_operand 0 "register_operand" "")
     (match_operand 1 "memory_operand" "")]
    ""
-   "
  {
    rtx temp = gen_reg_rtx (Pmode);
  
--- 6868,6879 ----
                   TARGET_64BIT ? TImode : DImode),
                   operands[1]);
    DONE;
! })
  
  (define_expand "restore_stack_nonlocal"
    [(match_operand 0 "register_operand" "")
     (match_operand 1 "memory_operand" "")]
    ""
  {
    rtx temp = gen_reg_rtx (Pmode);
  
***************
*** 6961,6967 ****
                   TARGET_64BIT ? TImode : DImode));
    emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp);
    DONE;
! }")
  
  
  ;
--- 6886,6892 ----
                   TARGET_64BIT ? TImode : DImode));
    emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp);
    DONE;
! })
  
  
  ;
***************
*** 7122,7141 ****
  (define_expand "prologue"
    [(use (const_int 0))]
    ""
!   "
! {
!       s390_emit_prologue ();
!       DONE;
! }")
  
  (define_expand "epilogue"
    [(use (const_int 1))]
    ""
!   "
! {
!       s390_emit_epilogue ();
!       DONE;
! }")
  
  
  (define_insn "*return_si"
--- 7047,7058 ----
  (define_expand "prologue"
    [(use (const_int 0))]
    ""
!   "s390_emit_prologue (); DONE;")
  
  (define_expand "epilogue"
    [(use (const_int 1))]
    ""
!   "s390_emit_epilogue (); DONE;")
  
  
  (define_insn "*return_si"
***************
*** 7205,7220 ****
    [(set (match_operand:DI 0 "register_operand" "=r")
          (match_operand:SI 1 "register_operand" "r"))]
     ""
-    "
  {
-  /*
-   emit_insn (gen_zero_extendsidi2 (operands[0], operands[1]));
-   emit_insn (gen_anddi3 (operands[0], operands[0], GEN_INT (0x7fffffff)));
-   */
- 
    emit_insn (gen_anddi3 (operands[0],
  			 gen_lowpart (DImode, operands[1]),
  			 GEN_INT (0x7fffffff)));
- 
    DONE;
! }")
--- 7122,7130 ----
    [(set (match_operand:DI 0 "register_operand" "=r")
          (match_operand:SI 1 "register_operand" "r"))]
     ""
  {
    emit_insn (gen_anddi3 (operands[0],
  			 gen_lowpart (DImode, operands[1]),
  			 GEN_INT (0x7fffffff)));
    DONE;
! })
-- 
  Dr. Ulrich Weigand
  weigand@informatik.uni-erlangen.de


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]