mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-26 20:36:01 +08:00
MSP430: Emulate 16-bit shifts with rotate insn when src operand is in memory
gcc/ChangeLog 2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com> * config/msp430/msp430.md (ashlhi3): Force shift src operand into a register if it is in memory, so the shift can be emulated with a rotate instruction. (ashrhi3): Likewise. (lshrhi3): Likewise. gcc/testsuite/ChangeLog 2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com> * gcc.target/msp430/emulate-slli.c: New test. * gcc.target/msp430/emulate-srai.c: New test. * gcc.target/msp430/emulate-srli.c: New test. From-SVN: r271993
This commit is contained in:
parent
d1b2f85f78
commit
e445e4b4fe
@ -1,3 +1,11 @@
|
||||
2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
* config/msp430/msp430.md (ashlhi3): Force shift src operand into a
|
||||
register if it is in memory, so the shift can be emulated with a rotate
|
||||
instruction.
|
||||
(ashrhi3): Likewise.
|
||||
(lshrhi3): Likewise.
|
||||
|
||||
2019-06-06 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR tree-optimization/87954
|
||||
|
@ -756,8 +756,9 @@
|
||||
(match_operand:HI 2 "general_operand")))]
|
||||
""
|
||||
{
|
||||
if (GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
if ((GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
|| MEM_P (operands[1]))
|
||||
operands[1] = force_reg (HImode, operands[1]);
|
||||
if (msp430x
|
||||
&& REG_P (operands[0])
|
||||
@ -828,8 +829,9 @@
|
||||
(match_operand:HI 2 "general_operand")))]
|
||||
""
|
||||
{
|
||||
if (GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
if ((GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
|| MEM_P (operands[1]))
|
||||
operands[1] = force_reg (HImode, operands[1]);
|
||||
if (msp430x
|
||||
&& REG_P (operands[0])
|
||||
@ -916,8 +918,9 @@
|
||||
(match_operand:HI 2 "general_operand")))]
|
||||
""
|
||||
{
|
||||
if (GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
if ((GET_CODE (operands[1]) == SUBREG
|
||||
&& REG_P (XEXP (operands[1], 0)))
|
||||
|| MEM_P (operands[1]))
|
||||
operands[1] = force_reg (HImode, operands[1]);
|
||||
if (msp430x
|
||||
&& REG_P (operands[0])
|
||||
|
@ -1,3 +1,9 @@
|
||||
2019-06-06 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
* gcc.target/msp430/emulate-slli.c: New test.
|
||||
* gcc.target/msp430/emulate-srai.c: New test.
|
||||
* gcc.target/msp430/emulate-srli.c: New test.
|
||||
|
||||
2019-06-06 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR tree-optimization/87954
|
||||
|
15
gcc/testsuite/gcc.target/msp430/emulate-slli.c
Normal file
15
gcc/testsuite/gcc.target/msp430/emulate-slli.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
/* { dg-final { scan-assembler-not "mspabi_slli" } } */
|
||||
/* { dg-final { scan-assembler "rlax" } } */
|
||||
|
||||
/* Ensure that HImode shifts with source operand in memory are emulated with a
|
||||
rotate instructions. */
|
||||
|
||||
int a;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
a = a << 4;
|
||||
}
|
15
gcc/testsuite/gcc.target/msp430/emulate-srai.c
Normal file
15
gcc/testsuite/gcc.target/msp430/emulate-srai.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
/* { dg-final { scan-assembler-not "mspabi_srai" } } */
|
||||
/* { dg-final { scan-assembler "rrax" } } */
|
||||
|
||||
/* Ensure that HImode shifts with source operand in memory are emulated with a
|
||||
rotate instructions. */
|
||||
|
||||
int a;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
a = a >> 4;
|
||||
}
|
15
gcc/testsuite/gcc.target/msp430/emulate-srli.c
Normal file
15
gcc/testsuite/gcc.target/msp430/emulate-srli.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
/* { dg-final { scan-assembler-not "mspabi_srli" } } */
|
||||
/* { dg-final { scan-assembler "rrum" } } */
|
||||
|
||||
/* Ensure that HImode shifts with source operand in memory are emulated with a
|
||||
rotate instructions. */
|
||||
|
||||
unsigned int a;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
a = a >> 4;
|
||||
}
|
Loading…
Reference in New Issue
Block a user