X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c76053bdb9d3a9e353be7a5533d1e0bfc48d9d03..d85949accc8820a54c468fbdf930063be5873296:/acmacro/gras_arch.m4 diff --git a/acmacro/gras_arch.m4 b/acmacro/gras_arch.m4 index ea8a73a9fa..9ffccffa6a 100644 --- a/acmacro/gras_arch.m4 +++ b/acmacro/gras_arch.m4 @@ -1,4 +1,3 @@ -# BEGIN OF GRAS ARCH CHECK dnl dnl GRAS_DO_CHECK_SIZEOF: Get the size of a datatype (even in cross-compile) dnl 1: type tested @@ -6,6 +5,15 @@ dnl 2: extra include lines dnl 3: extra sizes to test dnl ("adapted" from openldap) dnl + +dnl Copyright (C) 2004, 2005, 2006, 2007. Martin Quinson. All rights reserved. + +dnl This file is part of the SimGrid project. This is free software: +dnl You can redistribute and/or modify it under the terms of the +dnl GNU LGPL (v2.1) licence. + + +# BEGIN OF GRAS ARCH CHECK AC_DEFUN([GRAS_DO_CHECK_SIZEOF], [changequote(<<, >>)dnl dnl The cache variable name (and of the result). @@ -39,27 +47,30 @@ AC_MSG_RESULT($GRAS_CHECK_SIZEOF_RES) ]) dnl -dnl GRAS_TWO_COMPLIMENT([type]): Make sure the type is two-compliment +dnl GRAS_TWO_COMPLEMENT([type]): Make sure the type is two-complement dnl warning, this does not work with char (quite logical) dnl -AC_DEFUN([GRAS_TWO_COMPLIMENT], +AC_DEFUN([GRAS_TWO_COMPLEMENT], [ -AC_MSG_CHECKING(whether $1 is two-compliment) -AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include "confdefs.h" +AC_MSG_CHECKING(whether $1 is two-complement) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "confdefs.h" union { signed $1 testInt; unsigned char bytes[sizeof($1)]; } intTester; ]],[[ intTester.testInt = -2; - return ((unsigned int)intTester.bytes[0] + - (unsigned int)intTester.bytes[sizeof($1) - 1]) - 509; /* should be 0 */ + switch (0) { + case 0: + case (((unsigned int)intTester.bytes[0] + + (unsigned int)intTester.bytes[sizeof($1) - 1]) - 509) == 0: + } ]])], dnl end of AC LANG PROGRAM -[two_compliment=yes],[two_compliment=no] )dnl end of AC COMPILE IFELSE +[two_complement=yes],[two_complement=no] )dnl end of AC COMPILE IFELSE -AC_MSG_RESULT($two_compliment) -if test x$two_compliment != xyes ; then - AC_MSG_ERROR([GRAS works only two-compliment integers (yet)]) +AC_MSG_RESULT($two_complement) +if test x$two_complement != xyes ; then + AC_MSG_ERROR([GRAS works only two-complement integers (yet)]) fi ]) @@ -111,7 +122,7 @@ AC_DEFUN([GRAS_STRUCT_BOUNDARY], AC_MSG_CHECKING(for the minimal structure boundary of $1) AC_CACHE_VAL(GRAS_STRUCT_BOUNDARY_RES, - [for ac_size in 1 2 4 8 16 32 64 ; do # List sizes in rough order of prevalence. + [for ac_size in 1 2 4 8 16 32 64 3 ; do # List sizes in rough order of prevalence. AC_COMPILE_IFELSE(AC_LANG_PROGRAM([#include "confdefs.h" #include struct s { char c; $1 i; }; @@ -120,6 +131,9 @@ AC_DEFUN([GRAS_STRUCT_BOUNDARY], done ]) AC_MSG_RESULT($GRAS_STRUCT_BOUNDARY_RES) + if test x$GRAS_STRUCT_BOUNDARY_RES = x ; then + AC_MSG_ERROR([Cannot determine the minimal alignment boundary of $1 in structures]) + fi ]) # GRAS_ARCH(): check the gras_architecture of this plateform @@ -130,8 +144,9 @@ AC_DEFUN([GRAS_ARCH], [ # Check for the architecture AC_C_BIGENDIAN(endian=1,endian=0,AC_MSG_ERROR([GRAS works only for little or big endian systems (yet)])) -dnl Make sure we don't run on a non-two-compliment arch, since we dunno convert them -GRAS_TWO_COMPLIMENT(int) +dnl Make sure we don't run on a non-two-complement arch, since we dunno convert them +dnl G RAS_TWO_COMPLEMENT(int) don't do this, it breaks cross-compile and all +dnl archs conform to this AC_DEFINE_UNQUOTED(GRAS_BIGENDIAN,$endian,[define if big endian]) GRAS_SIGNED_SIZEOF(char) GRAS_STRUCT_BOUNDARY(char) @@ -169,11 +184,25 @@ trace="${trace}_D:4/${ac_cv_struct_boundary_float}:8/${ac_cv_struct_boundary_dou # sizeof float/double are not tested since IEEE 754 is assumed. # Check README.IEEE for rational. + +# The numbers after the _ in the arch name are the maximal packing boundary. +# big32_2 means that all data are aligned on a 2 bytes boundary. (ARM) +# big32_8_4 means that some or them are aligned on 8 bytes, some are on 4 bytes (AIX) case $trace in - l_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=0; gras_arch_name=little32;; - l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=1; gras_arch_name=little64;; - B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:) gras_arch=2; gras_arch_name=big32;; - B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=3; gras_arch_name=big64;; + l_C:1/1:_I:2/1:4/1:4/1:8/1:_P:4/1:4/1:_D:4/1:8/1:) gras_arch=0; gras_size=32; gras_arch_name=little32_1;; + l_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2:) gras_arch=1; gras_size=32; gras_arch_name=little32_2;; + l_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=2; gras_size=32; gras_arch_name=little32_4;; + l_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:) gras_arch=3; gras_size=32; gras_arch_name=little32_8;; + + l_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=4; gras_size=64; gras_arch_name=little64;; + + B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/8:) gras_arch=5; gras_size=32; gras_arch_name=big32;; + B_C:1/1:_I:2/2:4/4:4/4:8/8:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=6; gras_size=32; gras_arch_name=big32_8_4;; + B_C:1/1:_I:2/2:4/4:4/4:8/4:_P:4/4:4/4:_D:4/4:8/4:) gras_arch=7; gras_size=32; gras_arch_name=big32_4;; + B_C:1/1:_I:2/2:4/2:4/2:8/2:_P:4/2:4/2:_D:4/2:8/2:) gras_arch=8; gras_size=32; gras_arch_name=big32_2;; + + B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/8:) gras_arch=9; gras_size=64; gras_arch_name=big64;; + B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/4:) gras_arch=10;gras_size=64; gras_arch_name=big64_8_4;; esac if test x$gras_arch = xunknown ; then AC_MSG_RESULT([damnit ($trace)]) @@ -183,6 +212,23 @@ fi echo "$as_me:$LINENO: GRAS trace of this machine: $trace" >&AS_MESSAGE_LOG_FD AC_DEFINE_UNQUOTED(GRAS_THISARCH,$gras_arch,[defines the GRAS architecture signature of this machine]) AC_MSG_RESULT($gras_arch ($gras_arch_name)) + +AM_CONDITIONAL(GRAS_ARCH_32_BITS,[test "$gras_size" = 32]) + +AC_MSG_CHECKING(the maximal size of scalar) +ac_cv_sizeof_max=0 +for s in $ac_cv_sizeof_char \ + $ac_cv_sizeof_short_int $ac_cv_sizeof_int $ac_cv_sizeof_long_int $ac_cv_sizeof_long_long_int \ + $ac_cv_sizeof_void_p $ac_cv_sizeof_void_LpR_LvoidR \ + 4 8; do + + if test $ac_cv_sizeof_max -lt $s ; then + ac_cv_sizeof_max=$s + fi +done +AC_MSG_RESULT($ac_cv_sizeof_max) +AC_DEFINE_UNQUOTED([SIZEOF_MAX],$ac_cv_sizeof_max,[The maximal size of any scalar on this arch]) + ]) # END OF GRAS ARCH CHECK @@ -195,7 +241,7 @@ AC_DEFUN([GRAS_CHECK_STRUCT_COMPACTION], ]],[[switch (0) case 0: case (sizeof(struct s) == sizeof(double)+sizeof(char)):; - ]])],[gras_struct_packed=yes],[gras_struct_packed=no"]) + ]])],[gras_struct_packed=yes],[gras_struct_packed=no]) AC_MSG_RESULT($gras_struct_packed) if test x$gras_struct_packed = "xyes" ; then @@ -215,7 +261,7 @@ AC_DEFUN([GRAS_CHECK_STRUCT_COMPACTION], AC_MSG_RESULT($gras_struct_compact) if test x$gras_struct_compact != xyes ; then - AC_MSG_ERROR(GRAS works only on structure compacting architectures (yet)) + AC_MSG_ERROR([GRAS works only on structure compacting architectures (yet)]) fi AC_DEFINE_UNQUOTED(GRAS_STRUCT_COMPACT, 1, [Defined if structures are compacted when possible.