Viewing file: thumb-16bit-ops.c (2.69 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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" } } */
|