rx.opt (-mjsr): Add.

* config/rx/rx.opt (-mjsr): Add.
* config/rx/predicates.md (rx_call_operand): Avoid overflowing
calls when -mjsr.
* config/rx/rx.c (rx_function_ok_for_sibcall): Likewise for
overflowing jumps.
* doc/invoke.texi (-mjsr): Document it.

From-SVN: r231439
This commit is contained in:
DJ Delorie 2015-12-08 21:59:05 -05:00 committed by DJ Delorie
parent 6b9ac1796e
commit eb457a8c59
5 changed files with 31 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2015-12-08 DJ Delorie <dj@redhat.com>
* config/rx/rx.opt (-mjsr): Add.
* config/rx/predicates.md (rx_call_operand): Avoid overflowing
calls when -mjsr.
* config/rx/rx.c (rx_function_ok_for_sibcall): Likewise for
overflowing jumps.
* doc/invoke.texi (-mjsr): Document it.
2015-12-08 Jan Hubicka <hubicka@ucw.cz> 2015-12-08 Jan Hubicka <hubicka@ucw.cz>
PR ipa/61886 PR ipa/61886

View File

@ -24,7 +24,9 @@
;; Only registers and symbol refs are allowed. ;; Only registers and symbol refs are allowed.
(define_predicate "rx_call_operand" (define_predicate "rx_call_operand"
(match_code "symbol_ref,reg") (ior (match_code "reg")
(and (match_test "!TARGET_JSR")
(match_code "symbol_ref")))
) )
;; For sibcall operations we can only use a symbolic address. ;; For sibcall operations we can only use a symbolic address.

View File

@ -2857,6 +2857,9 @@ rx_warn_func_return (tree decl)
static bool static bool
rx_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) rx_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
{ {
if (TARGET_JSR)
return false;
/* Do not allow indirect tailcalls. The /* Do not allow indirect tailcalls. The
sibcall patterns do not support them. */ sibcall patterns do not support them. */
if (decl == NULL) if (decl == NULL)

View File

@ -149,3 +149,9 @@ Enable the use of the LRA register allocator.
mallow-string-insns mallow-string-insns
Target Report Var(rx_allow_string_insns) Init(1) Target Report Var(rx_allow_string_insns) Init(1)
Enables or disables the use of the SMOVF, SMOVB, SMOVU, SUNTIL, SWHILE and RMPA instructions. Enabled by default. Enables or disables the use of the SMOVF, SMOVB, SMOVU, SUNTIL, SWHILE and RMPA instructions. Enabled by default.
;---------------------------------------------------
mjsr
Target Report Mask(JSR)
Always use JSR, never BSR, for calls.

View File

@ -968,6 +968,7 @@ See RS/6000 and PowerPC Options.
-mint-register=@gol -mint-register=@gol
-mpid@gol -mpid@gol
-mallow-string-insns -mno-allow-string-insns@gol -mallow-string-insns -mno-allow-string-insns@gol
-mjsr@gol
-mno-warn-multiple-fast-interrupts@gol -mno-warn-multiple-fast-interrupts@gol
-msave-acc-in-interrupts} -msave-acc-in-interrupts}
@ -20685,6 +20686,15 @@ accesses I/O space.
When the instructions are enabled GCC defines the C preprocessor When the instructions are enabled GCC defines the C preprocessor
symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the symbol @code{__RX_ALLOW_STRING_INSNS__}, otherwise it defines the
symbol @code{__RX_DISALLOW_STRING_INSNS__}. symbol @code{__RX_DISALLOW_STRING_INSNS__}.
@item -mjsr
@itemx -mno-jsr
@opindex mjsr
@opindex mno-jsr
Use only (or not only) @code{JSR} instructions to access functions.
This option can be used when code size exceeds the range of @code{BSR}
instructions. Note that @option{-mno-jsr} does not mean to not use
@code{JSR} but instead means that any type of branch may be used.
@end table @end table
@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}} @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}