Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/optimize-bswapdi-3.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* { dg-do compile } */ | |
2 /* { dg-require-effective-target bswap64 } */ | |
3 /* { dg-require-effective-target stdint_types } */ | |
4 /* { dg-options "-O2 -fdump-tree-bswap" } */ | |
5 /* { dg-additional-options "-mzarch" { target s390*-*-* } } */ | |
6 | |
7 #include <stdint.h> | |
8 | |
9 unsigned char data[8]; | |
10 | |
11 struct uint64_st { | |
12 unsigned char u0, u1, u2, u3, u4, u5, u6, u7; | |
13 }; | |
14 | |
15 uint64_t read_le64_1 (void) | |
16 { | |
17 return (uint64_t) data[0] | ((uint64_t) data[1] << 8) | |
18 | ((uint64_t) data[2] << 16) | ((uint64_t) data[3] << 24) | |
19 | ((uint64_t) data[4] << 32) | ((uint64_t) data[5] << 40) | |
20 | ((uint64_t) data[6] << 48) | ((uint64_t) data[7] << 56); | |
21 } | |
22 | |
23 uint64_t read_le64_2 (struct uint64_st data) | |
24 { | |
25 return (uint64_t) data.u0 | ((uint64_t) data.u1 << 8) | |
26 | ((uint64_t) data.u2 << 16) | ((uint64_t) data.u3 << 24) | |
27 | ((uint64_t) data.u4 << 32) | ((uint64_t) data.u5 << 40) | |
28 | ((uint64_t) data.u6 << 48) | ((uint64_t) data.u7 << 56); | |
29 } | |
30 | |
31 uint64_t read_le64_3 (unsigned char *data) | |
32 { | |
33 return (uint64_t) *data | ((uint64_t) *(data + 1) << 8) | |
34 | ((uint64_t) *(data + 2) << 16) | ((uint64_t) *(data + 3) << 24) | |
35 | ((uint64_t) *(data + 4) << 32) | ((uint64_t) *(data + 5) << 40) | |
36 | ((uint64_t) *(data + 6) << 48) | ((uint64_t) *(data + 7) << 56); | |
37 } | |
38 | |
39 uint64_t read_be64_1 (void) | |
40 { | |
41 return (uint64_t) data[7] | ((uint64_t) data[6] << 8) | |
42 | ((uint64_t) data[5] << 16) | ((uint64_t) data[4] << 24) | |
43 | ((uint64_t) data[3] << 32) | ((uint64_t) data[2] << 40) | |
44 | ((uint64_t) data[1] << 48) | ((uint64_t) data[0] << 56); | |
45 } | |
46 | |
47 uint64_t read_be64_2 (struct uint64_st data) | |
48 { | |
49 return (uint64_t) data.u7 | ((uint64_t) data.u6 << 8) | |
50 | ((uint64_t) data.u5 << 16) | ((uint64_t) data.u4 << 24) | |
51 | ((uint64_t) data.u3 << 32) | ((uint64_t) data.u2 << 40) | |
52 | ((uint64_t) data.u1 << 48) | ((uint64_t) data.u0 << 56); | |
53 } | |
54 | |
55 uint64_t read_be64_3 (unsigned char *data) | |
56 { | |
57 return (uint64_t) *(data + 7) | ((uint64_t) *(data + 6) << 8) | |
58 | ((uint64_t) *(data + 5) << 16) | ((uint64_t) *(data + 4) << 24) | |
59 | ((uint64_t) *(data + 3) << 32) | ((uint64_t) *(data + 2) << 40) | |
60 | ((uint64_t) *(data + 1) << 48) | ((uint64_t) *data << 56); | |
61 } | |
62 | |
63 /* { dg-final { scan-tree-dump-times "64 bit load in target endianness found at" 3 "bswap" } } */ | |
64 /* { dg-final { scan-tree-dump-times "64 bit bswap implementation found at" 3 "bswap" } } */ |