]>
Commit | Line | Data |
---|---|---|
73984f84 | 1 | /* { dg-do compile } */ |
d8d9aa38 | 2 | /* { dg-require-effective-target bswap } */ |
73984f84 TP |
3 | /* { dg-require-effective-target stdint_types } */ |
4 | /* { dg-options "-O2 -fdump-tree-bswap" } */ | |
16381201 | 5 | /* { dg-additional-options "-mzarch" { target s390*-*-* } } */ |
73984f84 TP |
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 | ||
58126368 | 63 | /* { dg-final { scan-tree-dump-times "64 bit load in target endianness found at" 3 "bswap" } } */ |
dd784916 | 64 | /* { dg-final { scan-tree-dump-times "64 bit bswap implementation found at" 3 "bswap" } } */ |