summaryrefslogtreecommitdiff
path: root/tests/bionic/libc/other/test_aligned.c
blob: 8a66dd65de1ce4b1724a6d2c64e204ffde6aa68b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <stdio.h>
#include <arpa/inet.h>  /* for htons() etc.. */

static char  tab[8];

static void
read4( int  o, unsigned val )
{
    unsigned  v = htonl(val);
    unsigned  v2;

    tab[o+0] = (char)(v >> 24);
    tab[o+1] = (char)(v >> 16);
    tab[o+2] = (char)(v >> 8);
    tab[o+3] = (char)(v);

    printf( "read4: offset=%d value=%08x: ", o, val );
    fflush(stdout);

    v2 = *(unsigned*)(tab+o);

    if (v2 != val) {
        printf( "FAIL (%08x)\n", v2 );
    } else {
        printf( "ok\n" );
    }
}

static void
writ4( int  o, unsigned val )
{
    unsigned  v = htonl(val);
    unsigned  v2;

    printf( "writ4: offset=%d value=%08x: ", o, val );
    fflush(stdout);

    *(unsigned*)(tab+o) = v;

    v2 = ((unsigned)tab[o+0] << 24) |
         ((unsigned)tab[o+1] << 16) |
         ((unsigned)tab[o+2] << 8 ) |
         ((unsigned)tab[o+3]      );

    if (v2 != val) {
        printf( "FAIL (%08x)\n", v2 );
    } else {
        printf( "ok\n" );
    }
}

static void
read2( int  o, unsigned val )
{
    unsigned short v = htons(val);
    unsigned short v2;

    tab[o+0] = (char)(v >> 8);
    tab[o+1] = (char)(v);

    printf( "read2: offset=%d value=%08x: ", o, val );
    fflush(stdout);

    v2 = *(unsigned short*)(tab+o);

    if (v2 != val) {
        printf( "FAIL (%04x)\n", v2 );
    } else {
        printf( "ok\n" );
    }
}

static void
writ2( int  o, unsigned val )
{
    unsigned short v = htons(val);
    unsigned short v2;

    printf( "writ2: offset=%d value=%08x: ", o, val );
    fflush(stdout);

    *(unsigned short*)(tab+o) = v;

    v2 = ((unsigned)tab[o+0] << 8) |
         ((unsigned)tab[o+1]       );

    if (v2 != val) {
        printf( "FAIL (%08x)\n", v2 );
    } else {
        printf( "ok\n" );
    }
}



int  main(void)
{
    read4( 0, 0x12345678 );
    writ4( 0, 0x12345678 );
    read4( 1, 0x12345678 );
    writ4( 1, 0x12345678 );
    read4( 2, 0x12345678 );
    writ4( 2, 0x12345678 );
    read4( 3, 0x12345678 );
    writ4( 3, 0x12345678 );

    read2( 0, 0x1234 );
    writ2( 0, 0x1234 );
    read2( 1, 0x1234 );
    writ2( 1, 0x1234 );
    read2( 2, 0x1234 );
    writ2( 2, 0x1234 );
    read2( 3, 0x1234 );
    writ2( 3, 0x1234 );

    return 0;
}