arm.md (*maddhidi4tb, [...]): New define_insns.
2011-06-07 Andrew Stubbs <ams@codesourcery.com> gcc/ * config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns. (*maddhisi4tb, *maddhisi4tt): New define_insns. gcc/testsuite/ * gcc.target/arm/smlatb-1.c: New file. * gcc.target/arm/smlatt-1.c: New file. * gcc.target/arm/smlaltb-1.c: New file. * gcc.target/arm/smlaltt-1.c: New file. From-SVN: r174741
This commit is contained in:
parent
c536876e06
commit
f373314fb8
@ -1,3 +1,8 @@
|
||||
2011-06-07 Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
* config/arm/arm.md (*maddhidi4tb, *maddhidi4tt): New define_insns.
|
||||
(*maddhisi4tb, *maddhisi4tt): New define_insns.
|
||||
|
||||
2011-06-07 Bernd Schmidt <bernds@codesourcery.com>
|
||||
Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
|
@ -1815,6 +1815,36 @@
|
||||
(set_attr "predicable" "yes")]
|
||||
)
|
||||
|
||||
;; Note: there is no maddhisi4ibt because this one is canonical form
|
||||
(define_insn "*maddhisi4tb"
|
||||
[(set (match_operand:SI 0 "s_register_operand" "=r")
|
||||
(plus:SI (mult:SI (ashiftrt:SI
|
||||
(match_operand:SI 1 "s_register_operand" "r")
|
||||
(const_int 16))
|
||||
(sign_extend:SI
|
||||
(match_operand:HI 2 "s_register_operand" "r")))
|
||||
(match_operand:SI 3 "s_register_operand" "r")))]
|
||||
"TARGET_DSP_MULTIPLY"
|
||||
"smlatb%?\\t%0, %1, %2, %3"
|
||||
[(set_attr "insn" "smlaxy")
|
||||
(set_attr "predicable" "yes")]
|
||||
)
|
||||
|
||||
(define_insn "*maddhisi4tt"
|
||||
[(set (match_operand:SI 0 "s_register_operand" "=r")
|
||||
(plus:SI (mult:SI (ashiftrt:SI
|
||||
(match_operand:SI 1 "s_register_operand" "r")
|
||||
(const_int 16))
|
||||
(ashiftrt:SI
|
||||
(match_operand:SI 2 "s_register_operand" "r")
|
||||
(const_int 16)))
|
||||
(match_operand:SI 3 "s_register_operand" "r")))]
|
||||
"TARGET_DSP_MULTIPLY"
|
||||
"smlatt%?\\t%0, %1, %2, %3"
|
||||
[(set_attr "insn" "smlaxy")
|
||||
(set_attr "predicable" "yes")]
|
||||
)
|
||||
|
||||
(define_insn "*maddhidi4"
|
||||
[(set (match_operand:DI 0 "s_register_operand" "=r")
|
||||
(plus:DI
|
||||
@ -1828,6 +1858,39 @@
|
||||
[(set_attr "insn" "smlalxy")
|
||||
(set_attr "predicable" "yes")])
|
||||
|
||||
;; Note: there is no maddhidi4ibt because this one is canonical form
|
||||
(define_insn "*maddhidi4tb"
|
||||
[(set (match_operand:DI 0 "s_register_operand" "=r")
|
||||
(plus:DI
|
||||
(mult:DI (sign_extend:DI
|
||||
(ashiftrt:SI
|
||||
(match_operand:SI 1 "s_register_operand" "r")
|
||||
(const_int 16)))
|
||||
(sign_extend:DI
|
||||
(match_operand:HI 2 "s_register_operand" "r")))
|
||||
(match_operand:DI 3 "s_register_operand" "0")))]
|
||||
"TARGET_DSP_MULTIPLY"
|
||||
"smlaltb%?\\t%Q0, %R0, %1, %2"
|
||||
[(set_attr "insn" "smlalxy")
|
||||
(set_attr "predicable" "yes")])
|
||||
|
||||
(define_insn "*maddhidi4tt"
|
||||
[(set (match_operand:DI 0 "s_register_operand" "=r")
|
||||
(plus:DI
|
||||
(mult:DI (sign_extend:DI
|
||||
(ashiftrt:SI
|
||||
(match_operand:SI 1 "s_register_operand" "r")
|
||||
(const_int 16)))
|
||||
(sign_extend:DI
|
||||
(ashiftrt:SI
|
||||
(match_operand:SI 2 "s_register_operand" "r")
|
||||
(const_int 16))))
|
||||
(match_operand:DI 3 "s_register_operand" "0")))]
|
||||
"TARGET_DSP_MULTIPLY"
|
||||
"smlaltt%?\\t%Q0, %R0, %1, %2"
|
||||
[(set_attr "insn" "smlalxy")
|
||||
(set_attr "predicable" "yes")])
|
||||
|
||||
(define_expand "mulsf3"
|
||||
[(set (match_operand:SF 0 "s_register_operand" "")
|
||||
(mult:SF (match_operand:SF 1 "s_register_operand" "")
|
||||
|
@ -1,3 +1,10 @@
|
||||
2011-06-07 Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
* gcc.target/arm/smlatb-1.c: New file.
|
||||
* gcc.target/arm/smlatt-1.c: New file.
|
||||
* gcc.target/arm/smlaltb-1.c: New file.
|
||||
* gcc.target/arm/smlaltt-1.c: New file.
|
||||
|
||||
2011-06-07 Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
* gcc.target/arm/mla-2.c: New test.
|
||||
|
13
gcc/testsuite/gcc.target/arm/smlaltb-1.c
Normal file
13
gcc/testsuite/gcc.target/arm/smlaltb-1.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=armv7-a" } */
|
||||
|
||||
long long int
|
||||
foo (long long x, int in)
|
||||
{
|
||||
short a = in & 0xffff;
|
||||
short b = (in & 0xffff0000) >> 16;
|
||||
|
||||
return x + b * a;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "smlaltb" } } */
|
13
gcc/testsuite/gcc.target/arm/smlaltt-1.c
Normal file
13
gcc/testsuite/gcc.target/arm/smlaltt-1.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=armv7-a" } */
|
||||
|
||||
long long int
|
||||
foo (long long x, int in1, int in2)
|
||||
{
|
||||
short a = (in1 & 0xffff0000) >> 16;
|
||||
short b = (in2 & 0xffff0000) >> 16;
|
||||
|
||||
return x + b * a;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "smlaltt" } } */
|
13
gcc/testsuite/gcc.target/arm/smlatb-1.c
Normal file
13
gcc/testsuite/gcc.target/arm/smlatb-1.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=armv7-a" } */
|
||||
|
||||
int
|
||||
foo (int x, int in)
|
||||
{
|
||||
short a = in & 0xffff;
|
||||
short b = (in & 0xffff0000) >> 16;
|
||||
|
||||
return x + b * a;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "smlatb" } } */
|
13
gcc/testsuite/gcc.target/arm/smlatt-1.c
Normal file
13
gcc/testsuite/gcc.target/arm/smlatt-1.c
Normal file
@ -0,0 +1,13 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -march=armv7-a" } */
|
||||
|
||||
int
|
||||
foo (int x, int in1, int in2)
|
||||
{
|
||||
short a = (in1 & 0xffff0000) >> 16;
|
||||
short b = (in2 & 0xffff0000) >> 16;
|
||||
|
||||
return x + b * a;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "smlatt" } } */
|
Loading…
Reference in New Issue
Block a user