( STRUCTURE STORAGE LAYOUT PARAMETERS Version: 1.0.1 File: machine.fs Author: David.N.Williams@umich.edu License: LGPL Starting date: July 4, 1994 Last revision: June 6, 2000 ) \ Copyright (C) 2000 by David N. Williams ( This library free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or at your option any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Please see the file POLITENESS included with this distribution. Based on Richard M. Stallman, Porting GNU CC, July 11, 1994, version 2.6, gcc-2.6.3/gcc.texi. Many of the gcc size parameters are given in bits. We usually give them in address units. ) \ Values based on m68k.h. For now, the best we can suggest for other \ systems is to test the values there. \ Here is the only system interface required when neither C atomic types are not \ nor bit-fields are needed: 1 value /MIN-ALIGN \ STRUCT_SIZE_BOUNDARY, units 2 value /MAX-ALIGN \ BIGGEST_ALIGNMENT, units C-ATOMIC-FIELDS [IF] 4 value /WORD \ UNITS_PER_WORD 4 value /POINTER \ POINTER_SIZE, units false value TARGET_SHORT \ actually set by gcc compiler switch true value STRICT_ALIGNMENT : /INT ( -- #units ) \ INT_TYPE_SIZE TARGET_SHORT IF 2 ELSE 4 THEN ; /WORD 4 / value /CHAR \ CHAR_TYPE_SIZE /WORD value /WCHAR \ WCHAR_TYPE_SIZE /WORD 2/ value /SHORT \ SHORT_TYPE_SIZE /INT value /INT \ INT_TYPE_SIZE /WORD value /LONG \ LONG_TYPE_SIZE /WORD 2* value /LONG-LONG \ LONG_LONG_TYPE_SIZE /WORD value /FLOAT \ FLOAT_TYPE_SIZE /WORD 2* value /DOUBLE \ DOUBLE_TYPE_SIZE /WORD 2* value /LONG-DOUBLE \ LONG_DOUBLE_TYPE_SIZE \ For now we do these explicitly. If we're going to do that we could \ just as well eliminate these names, which are used later with the \ ATOMIC-TYPE defining word. 1 value /CALIGN \ /MIN-ALIGN ? 2 value /WCALIGN \ /MAX-ALIGN ? 2 value /SALIGN \ etc ? 2 value /IALIGN 2 value /LALIGN 2 value /PALIGN 2 value /LLALIGN 2 value /FALIGN 2 value /DALIGN 2 value /LDALIGN [THEN] \ END C-ATOMIC-FIELDS BIT-FIELDS [IF] 8 value BITS/UNIT \ BITS_PER_UNIT [THEN] \ END BIT-FIELDS