]> git.ipfire.org Git - thirdparty/gcc.git/commit
[RS6000] rs6000_indirect_call_template
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Nov 2018 04:43:21 +0000 (04:43 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Nov 2018 04:43:21 +0000 (04:43 +0000)
commita7fc84e89bd16146b55ea74a854541fc6ec80fdc
tree8707ec139df15a2a40d15143b861c4d580e5109d
parent2bdd9c115a12d9dabfde49e563fadae1dfdefbf0
[RS6000] rs6000_indirect_call_template

Like the last patch for external calls, now handle most assembly code
for indirect calls in one place.  The patch also merges some insns,
correcting some !rs6000_speculate_indirect_jumps cases branching to
LR, which don't require a speculation barrier.

* config/rs6000/rs6000-protos.h (rs6000_indirect_call_template),
(rs6000_indirect_sibcall_template): Declare.
* config/rs6000/rs6000.c (rs6000_indirect_call_template_1),
(rs6000_indirect_call_template, rs6000_indirect_sibcall_template):
New functions.
* config/rs6000/rs6000.md (call_indirect_nonlocal_sysv),
(call_value_indirect_nonlocal_sysv, sibcall_nonlocal_sysv),
(call_indirect_aix, call_value_indirect_aix): Use
rs6000_indirect_call_template and rs6000_indirect_sibcall_template.
call_indirect_elfv2, call_value_indirect_elfv2): Likewise, and
handle both speculation and non-speculation cases.
(call_indirect_aix_nospec, call_value_indirect_aix_nospec): Delete.
(call_indirect_elfv2_nospec, call_value_indirect_elfv2_nospec): Delete.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266601 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.md