"bl %z0")
;; Call to function which may be in another module. Restore the TOC
-;; pointer (r2) after the call.
+;; pointer (r2) after the call unless this is System V.
(define_insn ""
[(call (mem:SI (match_operand:SI 0 "call_operand" "l,s"))
(match_operand 1 "" "fg,fg"))
(clobber (match_scratch:SI 2 "=l,l"))]
""
- "@
- {brl|blrl}\;{l|lwz} 2,20(1)
- bl %z0\;%."
+ "*
+{
+ if (GET_CODE (operands[0]) == REG)
+ {
+#ifndef USING_SVR4_H
+ return \"{brl|blrl}\;{l|lwz} 2,20(1)\";
+#else
+ return \"{brl|blrl}\";
+#endif
+ }
+
+ return \"bl %z0\;%.\";
+}"
[(set_attr "length" "8")])
(define_insn ""
(match_operand 2 "" "fg,fg")))
(clobber (match_scratch:SI 3 "=l,l"))]
""
- "@
- {brl|blrl}\;{l|lwz} 2,20(1)
- bl %z1\;%."
+ "*
+{
+ if (GET_CODE (operands[1]) == REG)
+ {
+#ifndef USING_SVR4_H
+ return \"{brl|blrl}\;{l|lwz} 2,20(1)\";
+#else
+ return \"{brl|blrl}\";
+#endif
+ }
+
+ return \"bl %z1\;%.\";
+}"
[(set_attr "length" "8")])
;; Call subroutine returning any type.