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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>
Autoconf Macro: ax_c_float_words_bigendian
</title>
<link rel="stylesheet" type="text/css" href="autoconf-archive.css">
</head>
<body>
<table summary="web navigation" style="width:100%;">
<tbody>
<tr>
<td style="width:25%;" align="center" valign="top">
<a href=
"http://autoconf-archive.cryp.to/ax_c_float_words_bigendian.m4">Download
M4 Source</a>
</td>
<td style="width:25%;" align="center" valign="top">
<a href=
"http://git.cryp.to/?p=autoconf-archive;a=history;f=ax_c_float_words_bigendian.m4">
Macro History</a>
</td>
<td style="width:25%;" align="center" valign="top">
<a href="macros-by-category.html">Category Index</a>
</td>
<td style="width:25%;" align="center" valign="top">
<form method="get" action="http://www.google.com/search">
<div>
<input name="sitesearch" value="autoconf-archive.cryp.to" type=
"hidden"><a href="http://www.google.com/">Search</a>: <input name="q"
size="10" maxlength="255" type="text">
</div>
</form>
</td>
</tr>
</tbody>
</table>
<hr>
<h1>
ax_c_float_words_bigendian
</h1>
<h2>
Synopsis
</h2>
<p class="indent" style="white-space:nowrap;">
<code>AX_C_FLOAT_WORDS_BIGENDIAN([ACTION-IF-TRUE], [ACTION-IF-FALSE],
[ACTION-IF-UNKNOWN])</code>
</p>
<h2>
Description
</h2>
<div class="indent">
<p>
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 implemenation
was inspired by the AC_C_BIGENDIAN macro in autoconf.
</p>
<p>
The endianess 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.
</p>
</div>
<h2>
Author
</h2>
<p class="indent">
Daniel Amelang <dan@amelang.net>
</p>
<h2>
Last Modified
</h2>
<p class="indent">
2006-11-02
</p>
<h2>
M4 Source Code
</h2>
<div class="indent">
<pre class="m4source">
AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
[AC_CACHE_CHECK(whether float word ordering is bigendian,
ax_cv_c_float_words_bigendian, [
ax_cv_c_float_words_bigendian=unknown
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
double d = 90904234967036810337470478905505011476211692735615632014797120844053488865816695273723469097858056257517020191247487429516932130503560650002327564517570778480236724525140520121371739201496540132640109977779420565776568942592.0;
]])], [
if grep noonsees conftest.$ac_objext >/dev/null ; then
ax_cv_c_float_words_bigendian=yes
fi
if grep seesnoon conftest.$ac_objext >/dev/null ; then
if test "$ax_cv_c_float_words_bigendian" = unknown; then
ax_cv_c_float_words_bigendian=no
else
ax_cv_c_float_words_bigendian=unknown
fi
fi
])])
case $ax_cv_c_float_words_bigendian in
yes)
m4_default([$1],
[AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
[Define to 1 if your system stores words within floats
with the most significant word first])]) ;;
no)
$2 ;;
*)
m4_default([$3],
[AC_MSG_ERROR([
Unknown float word ordering. You need to manually preset
ax_cv_c_float_words_bigendian=no (or yes) according to your system.
])]) ;;
esac
])# AX_C_FLOAT_WORDS_BIGENDIAN
</pre>
</div>
<h2>
License
</h2>
<div class="indent">
<span style="white-space:nowrap;">Copyright © 2006 Daniel Amelang
<dan@amelang.net></span>
<p>
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.
</p>
</div>
</body>
</html>
|