AX_C_FLOAT_WORDS_BIGENDIAN([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN])
Checks the ordering of words within a multi-word float. This check is necessary because on some systems (e.g. certain ARM systems), the float word ordering can be different from the byte ordering. In a multi-word float context, "big-endian" implies that the word containing the sign bit is found in the memory location with the lowest address. This implementation was inspired by the AC_C_BIGENDIAN macro in autoconf.
The endianness is detected by first compiling C code that contains a special double float value, then grepping the resulting object file for certain strings of ASCII values. The double is specially crafted to have a binary representation that corresponds with a simple string. In this implementation, the string "noonsees" was selected because the individual word values ("noon" and "sees") are palindromes, thus making this test byte-order agnostic. If grep finds the string "noonsees" in the object file, the target platform stores float words in big-endian order. If grep finds "seesnoon", float words are in little-endian order. If neither value is found, the user is instructed to specify the ordering.
Copyright © 2008 Daniel Amelang firstname.lastname@example.org
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.