3 ?RCS: Copyright (c) 2001, Jarkko Hietaniemi
5 ?RCS: You may redistribute only under the terms of the Artistic Licence,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic Licence; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
11 ?MAKE:d_u32align: Compile cat rm Oldconfig run \
12 byteorder u32type Myread Setvar u8type signal_t
13 ?MAKE: -pick add $@ %<
15 ?S: This variable tells whether you must access character data
16 ?S: through U32-aligned pointers.
18 ?C:U32_ALIGNMENT_REQUIRED:
19 ?C: This symbol, if defined, indicates that you must access
20 ?C: character data through U32-aligned pointers.
22 ?H:#$d_u32align U32_ALIGNMENT_REQUIRED /**/
26 Checking to see whether you can access character data unalignedly...
29 '') $cat >try.c <<EOCP
32 #define BYTEORDER 0x$byteorder
36 $signal_t bletch(s) int s; { exit(4); }
39 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
40 U8 *buf = (U8*)"\0\0\0\1\0\0\0\0";
44 if (sizeof(U32) != 4) {
45 printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
52 signal(SIGBUS, bletch);
55 for (i = 0; i < 4; i++) {
57 if (! ((*up == 1 << (8*i)) || /* big-endian */
58 (*up == 1 << (8*(3-i))) /* little-endian */
62 printf("read failed (%x)\n", *up);
68 for (i = 0; i < 4; i++) {
72 printf("write failed (%x)\n", *up);
86 if eval $compile_ok; then
87 echo "(Testing for character data alignment may crash the test. That's okay.)" >&4
88 $run ./try 2>&1 >/dev/null
91 You can access character data pretty unalignedly.
96 It seems that you must access character data in an aligned manner.
102 rp='Can you access character data at unaligned addresses?'
106 [yY]*) d_u32align="$undef" ;;
107 *) d_u32align="$define" ;;
110 $rm -f core core.try.* try.core