blob: 9f4f659b35c062c9c576e9bb2d6aae74f91f6a86 [file] [log] [blame]
/* Check that the compiler properly uses 16-bit encodings where available. */
/* { dg-do compile } */
/* { dg-require-effective-target arm_thumb2_ok } */
/* { dg-options "-Os -fno-builtin -mthumb" } */
int
f (int a, int b)
{
return a + b;
}
/* { dg-final { scan-assembler "add r0, r0, r1" } } */
int
f2 (int a, int b, int c)
{
return b + c;
}
/* { dg-final { scan-assembler "adds r0, r1, r2" } } */
int
g1 (int a)
{
return a + 255;
}
/* { dg-final { scan-assembler "adds r0, r0, #255" } } */
int
g2 (int a)
{
return a + 256;
}
/* { dg-final { scan-assembler "add r0, r0, #256" } } */
int
g3 (int a)
{
return a - 255;
}
/* { dg-final { scan-assembler "subs r0, r0, #255" } } */
int
g4 (int a)
{
return a - 256;
}
/* { dg-final { scan-assembler "sub r0, r0, #256" } } */
int
h1 (int a, int b)
{
return b + 7;
}
/* { dg-final { scan-assembler "adds r0, r1, #7" } } */
int
h2 (int a, int b)
{
return b + 8;
}
/* { dg-final { scan-assembler "add r0, r1, #8" } } */
int
h3 (int a, int b)
{
return b - 7;
}
/* { dg-final { scan-assembler "subs r0, r1, #7" } } */
int
h4 (int a, int b)
{
return b - 8;
}
/* { dg-final { scan-assembler "sub r0, r1, #8" } } */
int
i (int a, int b)
{
return b;
}
/* { dg-final { scan-assembler "mov r0, r1" } } */
int
j1 ()
{
return 255;
}
/* { dg-final { scan-assembler "movs r0, #255" } } */
int
j2 ()
{
return 256;
}
/* { dg-final { scan-assembler "mov r0, #256" } } */
int
k (int a, int b)
{
return b << 15;
}
/* { dg-final { scan-assembler "lsls r0, r1, #15" } } */
int
l1 (int a, int b)
{
return a << b;
}
/* { dg-final { scan-assembler "lsls r0, r0, r1" } } */
int
l2 (int a, int b, int c)
{
return b << c;
}
/* { dg-final { scan-assembler "lsl r0, r1, r2" } } */
int
m (int a, int b)
{
return b >> 15;
}
/* { dg-final { scan-assembler "asrs r0, r1, #15" } } */
int
n1 (int a, int b)
{
return a >> b;
}
/* { dg-final { scan-assembler "asrs r0, r0, r1" } } */
int
n2 (int a, int b, int c)
{
return b >> c;
}
/* { dg-final { scan-assembler "asr r0, r1, r2" } } */
unsigned int
o (unsigned int a, unsigned int b)
{
return b >> 15;
}
/* { dg-final { scan-assembler "lsrs r0, r1, #15" } } */
unsigned int
p1 (unsigned int a, unsigned int b)
{
return a >> b;
}
/* { dg-final { scan-assembler "lsrs r0, r0, r1" } } */
unsigned int
p2 (unsigned int a, unsigned int b, unsigned int c)
{
return b >> c;
}
/* { dg-final { scan-assembler "lsr r0, r1, r2" } } */
int
q (int a, int b)
{
return b * a;
}
/* { dg-final { scan-assembler "muls r0, r1, r0" } } */
int
r (int a, int b)
{
return ~b;
}
/* { dg-final { scan-assembler "mvns r0, r1" } } */
int
s (int a, int b)
{
return -b;
}
/* { dg-final { scan-assembler "rsbs r0, r1, #0" } } */