Viewing file: pr55303-1.c (1.39 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Verify that the SH2A clips and clipu instructions are generated as expected. */ /* { dg-do compile { target { sh2a } } } */ /* { dg-options "-O2" } */ /* { dg-final { scan-assembler-times "clips.b" 2 } } */ /* { dg-final { scan-assembler-times "clips.w" 2 } } */ /* { dg-final { scan-assembler-times "clipu.b" 2 } } */ /* { dg-final { scan-assembler-times "clipu.w" 2 } } */
static inline int min (int a, int b) { return a < b ? a : b; }
static inline int max (int a, int b) { return a < b ? b : a; }
int test_00 (int a) { /* 1x clips.b */ return max (-128, min (127, a)); }
int test_01 (int a) { /* 1x clips.b */ return min (127, max (-128, a)); }
int test_02 (int a) { /* 1x clips.w */ return max (-32768, min (32767, a)); }
int test_03 (int a) { /* 1x clips.w */ return min (32767, max (-32768, a)); }
unsigned int test_04 (unsigned int a) { /* 1x clipu.b */ return a > 255 ? 255 : a; }
unsigned int test_05 (unsigned int a) { /* 1x clipu.b */ return a >= 255 ? 255 : a; }
unsigned int test_06 (unsigned int a) { /* 1x clipu.w */ return a > 65535 ? 65535 : a; }
unsigned int test_07 (unsigned int a) { /* 1x clipu.w */ return a >= 65535 ? 65535 : a; }
void test_08 (unsigned short a, unsigned short b, unsigned int* r) { /* Must not see a clip insn here -- it is not needed. */ unsigned short x = a + b; if (x > 65535) x = 65535; *r = x; }
|