From: borutr Date: Thu, 28 Jun 2007 09:06:31 +0000 (+0000) Subject: * sim/ucsim/configure.in, sim/ucsim/configure, sim/ucsim/ddconfig_in.h: X-Git-Url: https://git.gag.com/?p=fw%2Fsdcc;a=commitdiff_plain;h=a446a63f24e77a9806413bada4604eb098f06122 * sim/ucsim/configure.in, sim/ucsim/configure, sim/ucsim/ddconfig_in.h: find out the endianess of host machine for ucsim git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4869 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index fcd83f0e..2c1367ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-06-28 Borut Razem + + * sim/ucsim/configure.in, sim/ucsim/configure, sim/ucsim/ddconfig_in.h: + find out the endianess of host machine for ucsim + 2007-06-27 Borut Razem * support/regression/generate-cases.py: corrected the file name diff --git a/configure b/configure index 149bd2d9..acb7b36f 100755 --- a/configure +++ b/configure @@ -6042,8 +6042,8 @@ _ACEOF # ------------------------------------------------------------------------- # SDCC_BUILD_BIGENDIAN -{ echo "$as_me:$LINENO: checking whether build machine byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether build machine byte ordering is bigendian... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: checking whether host machine byte ordering is bigendian" >&5 +echo $ECHO_N "checking whether host machine byte ordering is bigendian... $ECHO_C" >&6; } if test "${sdcc_cv_build_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else diff --git a/configure.in b/configure.in index 2ceadb5e..72744df7 100644 --- a/configure.in +++ b/configure.in @@ -380,7 +380,7 @@ AC_DEFINE_UNQUOTED(TYPE_UDWORD, unsigned $TYPE_DWORD) # SDCC_BUILD_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN]) # ------------------------------------------------------------------------- AC_DEFUN([SDCC_BUILD_BIGENDIAN], -[AC_CACHE_CHECK(whether build machine byte ordering is bigendian, sdcc_cv_build_bigendian, +[AC_CACHE_CHECK(whether host machine byte ordering is bigendian, sdcc_cv_build_bigendian, [# See if sys/param.h defines the BYTE_ORDER macro. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include #include diff --git a/sim/ucsim/configure b/sim/ucsim/configure index fbda1e0c..edca1585 100755 --- a/sim/ucsim/configure +++ b/sim/ucsim/configure @@ -12156,11 +12156,13 @@ if test "$CC" = "i586-mingw32msvc-gcc"; then ac_cv_sizeof_long_long=4 fi -if test "$cross_compiling" = "no" -then - { echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then +# SDCC_BUILD_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN]) +# ------------------------------------------------------------------------- +# SDCC_BUILD_BIGENDIAN + +{ echo "$as_me:$LINENO: checking whether host machine byte ordering is bigendian" >&5 +echo $ECHO_N "checking whether host machine byte ordering is bigendian... $ECHO_C" >&6; } +if test "${sdcc_cv_build_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See if sys/param.h defines the BYTE_ORDER macro. @@ -12240,12 +12242,12 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes + sdcc_cv_build_bigendian=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_c_bigendian=no + sdcc_cv_build_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -12256,7 +12258,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 # It does not; compile a test program. if test "$cross_compiling" = yes; then # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown + sdcc_cv_build_bigendian=unknown cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -12295,14 +12297,14 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest.$ac_objext; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes + sdcc_cv_build_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no + if test "$sdcc_cv_build_bigendian" = unknown; then + sdcc_cv_build_bigendian=no else # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown + sdcc_cv_build_bigendian=unknown fi fi else @@ -12358,14 +12360,14 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_c_bigendian=no + sdcc_cv_build_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) -ac_cv_c_bigendian=yes +sdcc_cv_build_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi @@ -12375,34 +12377,25 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in +{ echo "$as_me:$LINENO: result: $sdcc_cv_build_bigendian" >&5 +echo "${ECHO_T}$sdcc_cv_build_bigendian" >&6; } +case $sdcc_cv_build_bigendian in yes) cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 +#define BUILD_WORDS_BIGENDIAN 1 _ACEOF ;; no) ;; *) { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +presetting sdcc_cv_build_bigendian=no (or yes) will help" >&5 echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} +presetting sdcc_cv_build_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac -else -#echo "CROSS ENDIAN" - if $CXX -v 2>&1|grep "mingw" >/dev/null 2>&1; then - ac_cv_c_bigendian=no - else - : # FIXME - fi -#echo "CROSS ENDIAN DONE" -fi { echo "$as_me:$LINENO: checking whether preprocessor accepts -MM or -M" >&5 echo $ECHO_N "checking whether preprocessor accepts -MM or -M... $ECHO_C" >&6; } diff --git a/sim/ucsim/configure.in b/sim/ucsim/configure.in index 339cdc0a..c2278950 100644 --- a/sim/ucsim/configure.in +++ b/sim/ucsim/configure.in @@ -429,18 +429,77 @@ if test "$CC" = "i586-mingw32msvc-gcc"; then ac_cv_sizeof_long_long=4 fi -if test "$cross_compiling" = "no" -then - AC_C_BIGENDIAN -else -#echo "CROSS ENDIAN" - if $CXX -v 2>&1|grep "mingw" >/dev/null 2>&1; then - ac_cv_c_bigendian=no - else - : # FIXME - fi -#echo "CROSS ENDIAN DONE" +# SDCC_BUILD_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN]) +# ------------------------------------------------------------------------- +AC_DEFUN([SDCC_BUILD_BIGENDIAN], +[AC_CACHE_CHECK(whether host machine byte ordering is bigendian, sdcc_cv_build_bigendian, +[# See if sys/param.h defines the BYTE_ORDER macro. +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include +#include +], +[#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ + && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) + bogus endian macros +#endif +])], +[# It does; now see whether it defined to BIG_ENDIAN or not. +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include +#include +], [#if BYTE_ORDER != BIG_ENDIAN + not big endian +#endif +])], [sdcc_cv_build_bigendian=yes], [sdcc_cv_build_bigendian=no])], +[# It does not; compile a test program. +AC_RUN_IFELSE( +[AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[ + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; +]])], + [sdcc_cv_build_bigendian=no], + [sdcc_cv_build_bigendian=yes], +[# try to guess the endianness by grepping values into an object file + sdcc_cv_build_bigendian=unknown + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[[short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; +void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } +short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; +short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; +void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }]], +[[ _ascii (); _ebcdic (); ]])], +[if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then + sdcc_cv_build_bigendian=yes fi +if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$sdcc_cv_build_bigendian" = unknown; then + sdcc_cv_build_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + sdcc_cv_build_bigendian=unknown + fi +fi])])])]) +case $sdcc_cv_build_bigendian in + yes) + m4_default([$1], + [AC_DEFINE([BUILD_WORDS_BIGENDIAN], 1, + [Define to 1 if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX).])]) ;; + no) + $2 ;; + *) + m4_default([$3], + [AC_MSG_ERROR([unknown endianness +presetting sdcc_cv_build_bigendian=no (or yes) will help])]) ;; +esac +])# SDCC_BUILD_BIGENDIAN + +SDCC_BUILD_BIGENDIAN AC_CACHE_CHECK(whether preprocessor accepts -MM or -M,ucsim_cv_MM, echo "#include " >_test_.c diff --git a/sim/ucsim/ddconfig_in.h b/sim/ucsim/ddconfig_in.h index 71f023ec..054a0c85 100644 --- a/sim/ucsim/ddconfig_in.h +++ b/sim/ucsim/ddconfig_in.h @@ -98,10 +98,32 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #define TYPE_UBYTE unsigned TYPE_BYTE #define TYPE_UWORD unsigned TYPE_WORD #define TYPE_UDWORD unsigned TYPE_DWORD -#undef WORDS_BIGENDIAN #undef _M_ #undef _A_ +/* + * find out the endianess of host machine + * in order to be able to make Mac OS X unified binaries + */ +#if __BIG_ENDIAN__ || _BIG_ENDIAN +/* 1) trust the compiler */ +# define WORDS_BIGENDIAN 1 +#elif __LITTLE_ENDIAN__ +/* do nothing */ +#elif (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) +/* 2) trust the header files */ +# if BYTE_ORDER == BIG_ENDIAN +# define WORDS_BIGENDIAN 1 +# endif +#else +/* 3) trust the configure; this actually doesn't work for unified Mac OS X binaries :-( */ +# undef BUILD_WORDS_BIGENDIAN +# if (defined BUILD_WORDS_BIGENDIAN && BUILD_WORDS_BIGENDIAN) +# define WORDS_BIGENDIAN 1 +# endif +/* 4) assume that host is a little endian machine */ +#endif + #undef VERSIONSTR #undef VERSIONHI #undef VERSIONLO