diff options
Diffstat (limited to 'gcc/config/s390/s390.md')
-rw-r--r-- | gcc/config/s390/s390.md | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index b7331a0a65c..f03d97de952 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -5724,9 +5724,6 @@ (const_int 4) (ne (symbol_ref "TARGET_64BIT") (const_int 0)) (const_int 6) - (ne (symbol_ref "s390_pool_overflow") (const_int 0)) - (if_then_else (eq (symbol_ref "flag_pic") (const_int 0)) - (const_int 12) (const_int 14)) (eq (symbol_ref "flag_pic") (const_int 0)) (const_int 6)] (const_int 8)))]) @@ -5776,9 +5773,6 @@ (const_int 4) (ne (symbol_ref "TARGET_64BIT") (const_int 0)) (const_int 6) - (ne (symbol_ref "s390_pool_overflow") (const_int 0)) - (if_then_else (eq (symbol_ref "flag_pic") (const_int 0)) - (const_int 12) (const_int 14)) (eq (symbol_ref "flag_pic") (const_int 0)) (const_int 6)] (const_int 8)))]) @@ -5888,9 +5882,6 @@ (const_int 4) (ne (symbol_ref "TARGET_64BIT") (const_int 0)) (const_int 10) - (ne (symbol_ref "s390_pool_overflow") (const_int 0)) - (if_then_else (eq (symbol_ref "flag_pic") (const_int 0)) - (const_int 12) (const_int 14)) (eq (symbol_ref "flag_pic") (const_int 0)) (const_int 6)] (const_int 8)))]) @@ -5909,9 +5900,9 @@ "* { if (get_attr_op_type (insn) == OP_TYPE_RR) - return \"bctr\\t%0\"; + return \"bctr\\t%1,%0\"; else - return \"bct\\t%a0\"; + return \"bct\\t%1,%a0\"; }" [(set (attr "op_type") (if_then_else (match_operand 0 "register_operand" "") @@ -5983,9 +5974,9 @@ "* { if (get_attr_op_type (insn) == OP_TYPE_RRE) - return \"bctgr\\t%0\"; + return \"bctgr\\t%1,%0\"; else - return \"bctg\\t%a0\"; + return \"bctg\\t%1,%a0\"; }" [(set (attr "op_type") (if_then_else (match_operand 0 "register_operand" "") @@ -6707,7 +6698,7 @@ [(set_attr "op_type" "NN") (set_attr "length" "0")]) -(define_insn "reload_base" +(define_insn "reload_base_31" [(set (match_operand:SI 0 "register_operand" "=a") (unspec:SI [(label_ref (match_operand 1 "" ""))] 210))] "!TARGET_64BIT" @@ -6716,15 +6707,29 @@ (set_attr "type" "la") (set_attr "length" "6")]) -(define_insn "reload_base2" +(define_insn "reload_base_64" + [(set (match_operand:DI 0 "register_operand" "=a") + (unspec:DI [(label_ref (match_operand 1 "" ""))] 210))] + "TARGET_64BIT" + "larl\\t%0,%1" + [(set_attr "op_type" "RIL") + (set_attr "type" "la")]) + +(define_insn "reload_anchor" [(set (match_operand:SI 0 "register_operand" "=a") - (unspec:SI [(label_ref (match_operand 1 "" ""))] 211))] + (unspec:SI [(match_operand:SI 1 "register_operand" "a")] 211))] "!TARGET_64BIT" - "la\\t%0,%1-.(%0)" + "l\\t%0,0(%1)\;la\\t%0,0(%0,%1)" [(set_attr "op_type" "NN") (set_attr "type" "la") - (set_attr "length" "4")]) + (set_attr "length" "8")]) +(define_insn "pool" + [(unspec_volatile [(match_operand 0 "const_int_operand" "n")] 220)] + "" + "* abort ();" + [(set_attr "op_type" "NN") + (set (attr "length") (symbol_ref "INTVAL (operands[0])"))]) ;; ;; Insns related to generating the function prologue and epilogue. |