diff options
author | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-26 18:49:18 +0000 |
---|---|---|
committer | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-26 18:49:18 +0000 |
commit | 5b50029964594f3dd325737d1e454516112ef3ac (patch) | |
tree | a2ab31b8e1412e6c8eac442b1a4af5a6c6090a3e /libgcc | |
parent | 565f533b99aaf023c3a185fee92273fc0835912b (diff) |
powerpc: Handle DImode rotatert implemented with rlwinm (PR69946)
Some DImode rotate-right-and-mask can be implemented best with a rlwinm
instruction: those that could be a lshiftrt instead of a rotatert, while
the mask is not right-aligned. Why the rotate in the testcase is not
optimised to a plain shift is another question, but we need to handle
it here anyway. We compute the shift amount for a 64-bit rotate. This
is 32 too high in this case; if we print using %h that is masked out (and
this doesn't silently let through invalid instructions, everything is
checked by rs6000_is_valid_shift_mask which is much more thorough).
PR target/69946
* config/rs6000/rs6000.c (rs6000_insn_for_shift_mask): Print rlwinm
shift amount using %h. Add comment.
gcc/testsuite/
* gcc.target/powerpc/pr69946.c: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233755 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions