summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/bswap-1.c
diff options
context:
space:
mode:
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2012-07-16 17:16:29 +0000
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2012-07-16 17:16:29 +0000
commit1498e4f7a91a83ba9b6040a86381e5a35da495e3 (patch)
tree977f5c8ab489e7dcd1a5c378a56e4d9ea0e90159 /gcc/testsuite/gcc.c-torture/execute/bswap-1.c
parenta07e3d8405896dc07454f33dacf88fbccf5caf04 (diff)
downloadgcc-1498e4f7a91a83ba9b6040a86381e5a35da495e3.tar.gz
2012-07-16 Andrew Pinski <apinski@cavium.com>
* gcc.c-torture/execute/bswap-1.c: New testcase. * gcc.c-torture/compile/unalign-1.c: New testcase. * gcc.c-torture/compile/20120524-1.c: New testcase. * gcc.c-torture/compile/20101216-1.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189543 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/bswap-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/bswap-1.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/bswap-1.c b/gcc/testsuite/gcc.c-torture/execute/bswap-1.c
new file mode 100644
index 00000000000..ff80c0559d4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/bswap-1.c
@@ -0,0 +1,51 @@
+/* Test __builtin_bswap64 . */
+
+unsigned long long g(unsigned long long a) __attribute__((noinline));
+unsigned long long g(unsigned long long a)
+{
+ return __builtin_bswap64(a);
+}
+
+
+unsigned long long f(unsigned long long c)
+{
+ union {
+ unsigned long long a;
+ unsigned char b[8];
+ } a, b;
+ a.a = c;
+ b.b[0] = a.b[7];
+ b.b[1] = a.b[6];
+ b.b[2] = a.b[5];
+ b.b[3] = a.b[4];
+ b.b[4] = a.b[3];
+ b.b[5] = a.b[2];
+ b.b[6] = a.b[1];
+ b.b[7] = a.b[0];
+ return b.a;
+}
+
+int main(void)
+{
+ unsigned long long i;
+ /* The rest of the testcase assumes 8 byte long long. */
+ if (sizeof(i) != sizeof(char)*8)
+ return 0;
+ if (f(0x12) != g(0x12))
+ __builtin_abort();
+ if (f(0x1234) != g(0x1234))
+ __builtin_abort();
+ if (f(0x123456) != g(0x123456))
+ __builtin_abort();
+ if (f(0x12345678ull) != g(0x12345678ull))
+ __builtin_abort();
+ if (f(0x1234567890ull) != g(0x1234567890ull))
+ __builtin_abort();
+ if (f(0x123456789012ull) != g(0x123456789012ull))
+ __builtin_abort();
+ if (f(0x12345678901234ull) != g(0x12345678901234ull))
+ __builtin_abort();
+ if (f(0x1234567890123456ull) != g(0x1234567890123456ull))
+ __builtin_abort();
+ return 0;
+}