Viewing file: pr67351.C (1.54 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-optimized" } */
typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned uint __attribute__((mode (__SI__))); typedef unsigned long long uint64;
class MyRgba { uint rgba;
public: explicit MyRgba (uint c):rgba (c) { };
static MyRgba fromRgba (uchar r, uchar g, uchar b, uchar a) { return MyRgba (uint (r) << 24 | uint (g) << 16 | uint (b) << 8 | uint (a)); }
uchar r () { return rgba >> 24; } uchar g () { return rgba >> 16; } uchar b () { return rgba >> 8; } uchar a () { return rgba; }
void setG (uchar _g) { *this = fromRgba (r (), _g, b (), a ()); } };
extern MyRgba giveMe ();
MyRgba test () { MyRgba a = giveMe (); a.setG (0xf0); return a; }
class MyRgba64 { uint64 rgba;
public: explicit MyRgba64 (uint64 c):rgba (c) { };
static MyRgba64 fromRgba64 (ushort r, ushort g, ushort b, ushort a) { return MyRgba64 (uint64 (r) << 48 | uint64 (g) << 32 | uint64 (b) << 16 | uint64 (a)); }
ushort r () { return rgba >> 48; } ushort g () { return rgba >> 32; } ushort b () { return rgba >> 16; } ushort a () { return rgba; }
void setG (ushort _g) { *this = fromRgba64 (r (), _g, b (), a ()); } };
extern MyRgba64 giveMe64 ();
MyRgba64 test64 () { MyRgba64 a = giveMe64 (); a.setG (0xf0f0); return a; }
/* { dg-final { scan-tree-dump-not "<<" "optimized" } } */ /* { dg-final { scan-tree-dump-not ">>" "optimized" } } */
|