?? tm.texi
字號:
have the value 0. This macro need not be a constant.You need not define this macro if the ordering is the same as formulti-word integers.@findex BITS_PER_UNIT@item BITS_PER_UNITDefine this macro to be the number of bits in an addressable storageunit (byte); normally 8.@findex BITS_PER_WORD@item BITS_PER_WORDNumber of bits in a word; normally 32.@findex MAX_BITS_PER_WORD@item MAX_BITS_PER_WORDMaximum number of bits in a word. If this is undefined, the default is@code{BITS_PER_WORD}. Otherwise, it is the constant value that is thelargest value that @code{BITS_PER_WORD} can have at run-time.@findex UNITS_PER_WORD@item UNITS_PER_WORDNumber of storage units in a word; normally 4.@findex MIN_UNITS_PER_WORD@item MIN_UNITS_PER_WORDMinimum number of units in a word. If this is undefined, the default is@code{UNITS_PER_WORD}. Otherwise, it is the constant value that is thesmallest value that @code{UNITS_PER_WORD} can have at run-time.@findex POINTER_SIZE@item POINTER_SIZEWidth of a pointer, in bits. You must specify a value no wider than thewidth of @code{Pmode}. If it is not equal to the width of @code{Pmode},you must define @code{POINTERS_EXTEND_UNSIGNED}.@findex POINTERS_EXTEND_UNSIGNED@item POINTERS_EXTEND_UNSIGNEDA C expression whose value is nonzero if pointers that need to beextended from being @code{POINTER_SIZE} bits wide to @code{Pmode}are sign-extended and zero if they are zero-extended.You need not define this macro if the @code{POINTER_SIZE} is equalto the width of @code{Pmode}.@findex PROMOTE_MODE@item PROMOTE_MODE (@var{m}, @var{unsignedp}, @var{type})A macro to update @var{m} and @var{unsignedp} when an object whose typeis @var{type} and which has the specified mode and signedness is to bestored in a register. This macro is only called when @var{type} is ascalar type.On most RISC machines, which only have operations that operate on a fullregister, define this macro to set @var{m} to @code{word_mode} if@var{m} is an integer mode narrower than @code{BITS_PER_WORD}. In mostcases, only integer modes should be widened because wider-precisionfloating-point operations are usually more expensive than their narrowercounterparts.For most machines, the macro definition does not change @var{unsignedp}.However, some machines, have instructions that preferentially handleeither signed or unsigned quantities of certain modes. For example, onthe DEC Alpha, 32-bit loads from memory and 32-bit add instructionssign-extend the result to 64 bits. On such machines, set@var{unsignedp} according to which kind of extension is more efficient.Do not define this macro if it would never modify @var{m}.@findex PROMOTE_FUNCTION_ARGS@item PROMOTE_FUNCTION_ARGSDefine this macro if the promotion described by @code{PROMOTE_MODE}should also be done for outgoing function arguments.@findex PROMOTE_FUNCTION_RETURN@item PROMOTE_FUNCTION_RETURNDefine this macro if the promotion described by @code{PROMOTE_MODE}should also be done for the return value of functions.If this macro is defined, @code{FUNCTION_VALUE} must perform the samepromotions done by @code{PROMOTE_MODE}.@findex PROMOTE_FOR_CALL_ONLY@item PROMOTE_FOR_CALL_ONLYDefine this macro if the promotion described by @code{PROMOTE_MODE}should @emph{only} be performed for outgoing function arguments orfunction return values, as specified by @code{PROMOTE_FUNCTION_ARGS}and @code{PROMOTE_FUNCTION_RETURN}, respectively.@findex PARM_BOUNDARY@item PARM_BOUNDARYNormal alignment required for function parameters on the stack, inbits. All stack parameters receive at least this much alignmentregardless of data type. On most machines, this is the same as thesize of an integer.@findex STACK_BOUNDARY@item STACK_BOUNDARYDefine this macro if you wish to preserve a certain alignment forthe stack pointer. The definition is a C expressionfor the desired alignment (measured in bits).@cindex @code{PUSH_ROUNDING}, interaction with @code{STACK_BOUNDARY}If @code{PUSH_ROUNDING} is not defined, the stack will always be alignedto the specified boundary. If @code{PUSH_ROUNDING} is defined and specifies aless strict alignment than @code{STACK_BOUNDARY}, the stack may bemomentarily unaligned while pushing arguments.@findex FUNCTION_BOUNDARY@item FUNCTION_BOUNDARYAlignment required for a function entry point, in bits.@findex BIGGEST_ALIGNMENT@item BIGGEST_ALIGNMENTBiggest alignment that any data type can require on this machine, in bits.@findex MINIMUM_ATOMIC_ALIGNMENT@item MINIMUM_ATOMIC_ALIGNMENTIf defined, the smallest alignment, in bits, that can be given to anobject that can be referenced in one operation, without disturbing anynearby object. Normally, this is @code{BITS_PER_UNIT}, but may be largeron machines that don't have byte or half-word store operations.@findex BIGGEST_FIELD_ALIGNMENT@item BIGGEST_FIELD_ALIGNMENTBiggest alignment that any structure field can require on this machine,in bits. If defined, this overrides @code{BIGGEST_ALIGNMENT} forstructure fields only.@findex ADJUST_FIELD_ALIGN@item ADJUST_FIELD_ALIGN (@var{field}, @var{computed})An expression for the alignment of a structure field @var{field} if thealignment computed in the usual way is @var{computed}. GNU CC usesthis value instead of the value in @code{BIGGEST_ALIGNMENT} or@code{BIGGEST_FIELD_ALIGNMENT}, if defined, for structure fields only.@findex MAX_OFILE_ALIGNMENT@item MAX_OFILE_ALIGNMENTBiggest alignment supported by the object file format of this machine.Use this macro to limit the alignment which can be specified using the@code{__attribute__ ((aligned (@var{n})))} construct. If not defined,the default value is @code{BIGGEST_ALIGNMENT}.@findex DATA_ALIGNMENT@item DATA_ALIGNMENT (@var{type}, @var{basic-align})If defined, a C expression to compute the alignment for a staticvariable. @var{type} is the data type, and @var{basic-align} is thealignment that the object would ordinarily have. The value of thismacro is used instead of that alignment to align the object.If this macro is not defined, then @var{basic-align} is used.@findex strcpyOne use of this macro is to increase alignment of medium-size data tomake it all fit in fewer cache lines. Another is to cause characterarrays to be word-aligned so that @code{strcpy} calls that copyconstants to character arrays can be done inline.@findex CONSTANT_ALIGNMENT@item CONSTANT_ALIGNMENT (@var{constant}, @var{basic-align})If defined, a C expression to compute the alignment given to a constantthat is being placed in memory. @var{constant} is the constant and@var{basic-align} is the alignment that the object would ordinarilyhave. The value of this macro is used instead of that alignment toalign the object.If this macro is not defined, then @var{basic-align} is used.The typical use of this macro is to increase alignment for stringconstants to be word aligned so that @code{strcpy} calls that copyconstants can be done inline.@findex EMPTY_FIELD_BOUNDARY@item EMPTY_FIELD_BOUNDARYAlignment in bits to be given to a structure bit field that follows anempty field such as @code{int : 0;}.Note that @code{PCC_BITFIELD_TYPE_MATTERS} also affects the alignmentthat results from an empty field.@findex STRUCTURE_SIZE_BOUNDARY@item STRUCTURE_SIZE_BOUNDARYNumber of bits which any structure or union's size must be a multiple of.Each structure or union's size is rounded up to a multiple of this.If you do not define this macro, the default is the same as@code{BITS_PER_UNIT}.@findex STRICT_ALIGNMENT@item STRICT_ALIGNMENTDefine this macro to be the value 1 if instructions will fail to workif given data not on the nominal alignment. If instructions will merelygo slower in that case, define this macro as 0.@findex PCC_BITFIELD_TYPE_MATTERS@item PCC_BITFIELD_TYPE_MATTERSDefine this if you wish to imitate the way many other C compilers handlealignment of bitfields and the structures that contain them.The behavior is that the type written for a bitfield (@code{int},@code{short}, or other integer type) imposes an alignment for theentire structure, as if the structure really did contain an ordinaryfield of that type. In addition, the bitfield is placed within thestructure so that it would fit within such a field, not crossing aboundary for it.Thus, on most machines, a bitfield whose type is written as @code{int}would not cross a four-byte boundary, and would force four-bytealignment for the whole structure. (The alignment used may not be fourbytes; it is controlled by the other alignment parameters.)If the macro is defined, its definition should be a C expression;a nonzero value for the expression enables this behavior.Note that if this macro is not defined, or its value is zero, somebitfields may cross more than one alignment boundary. The compiler cansupport such references if there are @samp{insv}, @samp{extv}, and@samp{extzv} insns that can directly reference memory.The other known way of making bitfields work is to define@code{STRUCTURE_SIZE_BOUNDARY} as large as @code{BIGGEST_ALIGNMENT}.Then every structure can be accessed with fullwords.Unless the machine has bitfield instructions or you define@code{STRUCTURE_SIZE_BOUNDARY} that way, you must define@code{PCC_BITFIELD_TYPE_MATTERS} to have a nonzero value.If your aim is to make GNU CC use the same conventions for laying outbitfields as are used by another compiler, here is how to investigatewhat the other compiler does. Compile and run this program:@examplestruct foo1@{ char x; char :0; char y;@};struct foo2@{ char x; int :0; char y;@};main ()@{ printf ("Size of foo1 is %d\n", sizeof (struct foo1)); printf ("Size of foo2 is %d\n", sizeof (struct foo2)); exit (0);@}@end exampleIf this prints 2 and 5, then the compiler's behavior is what you wouldget from @code{PCC_BITFIELD_TYPE_MATTERS}.@findex BITFIELD_NBYTES_LIMITED@item BITFIELD_NBYTES_LIMITEDLike PCC_BITFIELD_TYPE_MATTERS except that its effect is limited toaligning a bitfield within the structure.@findex ROUND_TYPE_SIZE@item ROUND_TYPE_SIZE (@var{struct}, @var{size}, @var{align})Define this macro as an expression for the overall size of a structure(given by @var{struct} as a tree node) when the size computed from thefields is @var{size} and the alignment is @var{align}.The default is to round @var{size} up to a multiple of @var{align}.@findex ROUND_TYPE_ALIGN@item ROUND_TYPE_ALIGN (@var{struct}, @var{computed}, @var{specified})Define this macro as an expression for the alignment of a structure(given by @var{struct} as a tree node) if the alignment computed in theusual way is @var{computed} and the alignment explicitly specified was@var{specified}.The default is to use @var{specified} if it is larger; otherwise, usethe smaller of @var{computed} and @code{BIGGEST_ALIGNMENT}@findex MAX_FIXED_MODE_SIZE@item MAX_FIXED_MODE_SIZEAn integer expression for the size in bits of the largest integermachine mode that should actually be used. All integer machine modes ofthis size or smaller can be used for structures and unions with theappropriate sizes. If this macro is undefined, @code{GET_MODE_BITSIZE(DImode)} is assumed.@findex CHECK_FLOAT_VALUE@item CHECK_FLOAT_VALUE (@var{mode}, @var{value}, @var{overflow})A C statement to validate the value @var{value} (of type@code{double}) for mode @var{mode}. This means that you check whether@var{value} fits within the possible range of values for mode@var{mode} on this target machine. The mode @var{mode} is alwaysa mode of class @code{MODE_FLOAT}. @var{overflow} is nonzero ifthe value is already known to be out of range.If @var{value} is not valid or if @var{overflow} is nonzero, you shouldset @var{overflow} to 1 and then assign some valid value to @var{value}.Allowing an invalid value to go through the compiler can produceincorrect assembler code which may even cause Unix assemblers to crash.This macro need not be defined if there is no work for it to do.@findex TARGET_FLOAT_FORMAT@item TARGET_FLOAT_FORMATA code distinguishing the floating point format of the target machine.There are three defined values:@table @code@findex IEEE_FLOAT_FORMAT@item IEEE_FLOAT_FORMATThis code indicates IEEE floating point. It is the default; there is noneed to define this macro when the format is IEEE.@findex VAX_FLOAT_FORMAT@item VAX_FLOAT_FORMATThis code indicates the peculiar format used on the Vax.@findex UNKNOWN_FLOAT_FORMAT@item UNKNOWN_FLOAT_FORMATThis code indicates any other format.@end tableThe value of this macro is compared with @code{HOST_FLOAT_FORMAT}(@pxref{Config}) to determine whether the target machine has the sameformat as the host machine. If any other formats are actually in use onsupported machines, new codes should be defined for them.The ordering of the component words of floating point values stored inmemory is controlled by @code{FLOAT_WORDS_BIG_ENDIAN} for the targetmachine and @code{HOST_FLOAT_WORDS_BIG_ENDIAN} for the host.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -