1 /* Verify that hardware multiply is preferred on XScale. */
2 /* { dg-do compile } */
3 /* { dg-options "-mcpu=xscale -O2 -marm" } */
4 /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-march=*" } { "-march=xscale" } } */
5 /* { dg-skip-if "Test is specific to the Xscale" { arm*-*-* } { "-mcpu=*" } { "-mcpu=xscale" } } */
6 /* { dg-skip-if "Test is specific to ARM mode" { arm*-*-* } { "-mthumb" } { "" } } */
7 /* { dg-require-effective-target arm_arch_v5te_arm_ok } */
8 /* { dg-require-effective-target arm32 } */
9
10 /* Brett Gaines' test case. */
11 unsigned BCPL(unsigned) __attribute__ ((naked));
12 unsigned BCPL(unsigned seed)
13 {
14 /* Best code would be:
15 ldr r1, =2147001325
16 ldr r2, =715136305
17 mla r0, r1, r0, r2
18 mov pc, lr */
19
20 return seed * 2147001325U + 715136305U;
21 }
22
23 /* { dg-final { scan-assembler "mla\[ ].*" } } */