|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
7:
8: Permission is granted to make and distribute verbatim copies of
9: this manual provided the copyright notice and this permission notice
10: are preserved on all copies.
11:
12: Permission is granted to copy and distribute modified versions of
13: this manual under the conditions for verbatim copying, provided also
14: that the section entitled "GNU General Public License" is included
15: exactly as in the original, and provided that the entire resulting
16: derived work is distributed under the terms of a permission notice
17: identical to this one.
18:
19: Permission is granted to copy and distribute translations of this
20: manual into another language, under the above conditions for modified
21: versions, except that the section entitled "GNU General Public
22: License" and this permission notice may be included in translations
23: approved by the Free Software Foundation instead of in the original
24: English.
25:
26:
27: File: gcc.info, Node: Insn Splitting, Next: Insn Attributes, Prev: Expander Definitions, Up: Machine Desc
28:
29: Splitting Instructions into Multiple Instructions
30: =================================================
31:
32: On machines that have instructions requiring delay slots (*note
33: Delay Slots::.) or that have instructions whose output is not
34: available for multiple cycles (*note Function Units::.), the compiler
35: phases that optimize these cases need to be able to move insns into
36: one-cycle delay slots. However, some insns may generate more than one
37: machine instruction. These insns would be unable to be placed into a
38: delay slot.
39:
40: It is often possible to write the single insn as a list of
41: individual insns, each corresponding to one machine instruction. The
42: disadvantage of doing so is that it will cause the compilation to be
43: slower and require more space. If the resulting insns are too
44: complex, it may also suppress some optimizations.
45:
46: The `define_split' definition tells the compiler how to split a
47: complex insn into several simpler insns. This spilling will be
48: performed if there is a reason to believe that it might improve
49: instruction or delay slot scheduling. The definition looks like this:
50:
51: (define_split
52: [INSN-PATTERN]
53: "CONDITION"
54: [NEW-INSN-PATTERN-1
55: NEW-INSN-PATTERN-2
56: ...]
57: "PREPARATION STATEMENTS")
58:
59: INSN-PATTERN is a pattern that needs to be split and CONDITION is
60: the final condition to be tested, as in a `define_insn'. Any insn
61: matched by a `define_split' must also be matched by a `define_insn' in
62: case it does not need to be split.
63:
64: When an insn matching INSN-PATTERN and satisfying CONDITION is
65: found, it is replaced in the insn list with the insns given by
66: NEW-INSN-PATTERN-1, NEW-INSN-PATTERN-2, etc.
67:
68: The PREPARATION STATEMENTS are similar to those specified for
69: `define_expand' (*note Expander Definitions::.) and are executed
70: before the new RTL is generated to prepare for the generated code or
71: emit some insns whose pattern is not fixed.
72:
73: As a simple case, consider the following example from the AMD 29000
74: machine description, which splits a `sign_extend' from `HImode' to
75: `SImode' into a pair of shift insns:
76:
77: (define_split
78: [(set (match_operand:SI 0 "gen_reg_operand" "")
79: (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))]
80: ""
81: [(set (match_dup 0)
82: (ashift:SI (match_dup 1)
83: (const_int 16)))
84: (set (match_dup 0)
85: (ashiftrt:SI (match_dup 0)
86: (const_int 16)))]
87: "
88: { operands[1] = gen_lowpart (SImode, operands[1]); }")
89:
90:
91: File: gcc.info, Node: Insn Attributes, Prev: Insn Splitting, Up: Machine Desc
92:
93: Instruction Attributes
94: ======================
95:
96: In addition to describing the instruction supported by the target
97: machine, the `md' file also defines a group of "attributes" and a set
98: of values for each. Every generated insn is assigned a value for each
99: attribute. One possible attribute would be the effect that the insn
100: has on the machine's condition code. This attribute can then be used
101: by `NOTICE_UPDATE_CC' to track the condition codes.
102:
103: * Menu:
104:
105: * Defining Attributes:: Specifying attributes and their values.
106: * Expressions:: Valid expressions for attribute values.
107: * Tagging Insns:: Assigning attribute values to insns.
108: * Attr Example:: An example of assigning attributes.
109: * Insn Lengths:: Computing the length of insns.
110: * Delay Slots:: Defining delay slots required for a machine.
111: * Function Units:: Specifying information for insn scheduling.
112:
113:
114: File: gcc.info, Node: Defining Attributes, Next: Expressions, Prev: Insn Attributes, Up: Insn Attributes
115:
116: Defining Attributes and their Values
117: ------------------------------------
118:
119: The `define_attr' expression is used to define each attribute
120: required by the target machine. It looks like:
121:
122: (define_attr NAME LIST-OF-VALUES DEFAULT)
123:
124: NAME is a string specifying the name of the attribute being defined.
125:
126: LIST-OF-VALUES is either a string that specifies a comma-separated
127: list of values that can be assigned to the attribute, or a null string
128: to indicate that the attribute takes numeric values.
129:
130: DEFAULT is an attribute expression that gives the value of this
131: attribute for insns that match patterns whose definition does not
132: include an explicit value for this attribute. *Note Attr Example::,
133: for more information on the handling of defaults.
134:
135: For each defined attribute, a number of definitions are written to
136: the `insn-attr.h' file. For cases where an explicit set of values is
137: specified for an attribute, the following are defined:
138:
139: * A `#define' is written for the symbol `HAVE_ATTR_NAME'.
140:
141: * An enumeral class is defined for `attr_NAME' with elements of the
142: form `UPPER-NAME_UPPER-VALUE' where the attribute name and value
143: are first converted to upper case.
144:
145: * A function `get_attr_NAME' is defined that is passed an insn and
146: returns the attribute value for that insn.
147:
148: For example, if the following is present in the `md' file:
149:
150: (define_attr "type" "branch,fp,load,store,arith" ...)
151:
152: the following lines will be written to the file `insn-attr.h'.
153:
154: #define HAVE_ATTR_type
155: enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD,
156: TYPE_STORE, TYPE_ARITH};
157: extern enum attr_type get_attr_type ();
158:
159: If the attribute takes numeric values, no `enum' type will be
160: defined and the function to obtain the attribute's value will return
161: `int'.
162:
163:
164: File: gcc.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes
165:
166: Attribute Expressions
167: ---------------------
168:
169: RTL expressions used to define attributes use the codes described
170: above plus a few specific to attribute definitions, to be discussed
171: below. Attribute value expressions must have one of the following
172: forms:
173:
174: `(const_int I)'
175: The integer I specifies the value of a numeric attribute. I must
176: be non-negative.
177:
178: The value of a numeric attribute can be specified either with a
179: `const_int' or as an integer represented as a string in
180: `const_string', `eq_attr' (see below), and `set_attr' (*note
181: Tagging Insns::.) expressions.
182:
183: `(const_string VALUE)'
184: The string VALUE specifies a constant attribute value. If VALUE
185: is specified as `"*"', it means that the default value of the
186: attribute is to be used for the insn containing this expression.
187: `"*"' obviously cannot be used in the DEFAULT expression of a
188: `define_attr'.
189:
190: If the attribute whose value is being specified is numeric, VALUE
191: must be a string containing a non-negative integer (normally
192: `const_int' would be used in this case). Otherwise, it must
193: contain one of the valid values for the attribute.
194:
195: `(if_then_else TEST TRUE-VALUE FALSE-VALUE)'
196: TEST specifies an attribute test, whose format is defined below.
197: The value of this expression is TRUE-VALUE if TEST is true,
198: otherwise it is FALSE-VALUE.
199:
200: `(cond [TEST1 VALUE1 ...] DEFAULT)'
201: The first operand of this expression is a vector containing an
202: even number of expressions and consisting of pairs of TEST and
203: VALUE expressions. The value of the `cond' expression is that of
204: the VALUE corresponding to the first true TEST expression. If
205: none of the TEST expressions are true, the value of the `cond'
206: expression is that of the DEFAULT expression.
207:
208: TEST expressions can have one of the following forms:
209:
210: `(const_int I)'
211: This test is true if I is non-zero and false otherwise.
212:
213: `(not TEST)'
214: `(ior TEST1 TEST2)'
215: `(and TEST1 TEST2)'
216: These tests are true if the indicated logical function is true.
217:
218: `(match_operand:M N PRED CONSTRAINTS)'
219: This test is true if operand N of the insn whose attribute value
220: is being determined has mode M (this part of the test is ignored
221: if M is `VOIDmode') and the function specified by the string PRED
222: returns a non-zero value when passed operand N and mode M (this
223: part of the test is ignored if PRED is the null string).
224:
225: The CONSTRAINTS operand is ignored and should be the null string.
226:
227: `(le ARITH1 ARITH2)'
228: `(leu ARITH1 ARITH2)'
229: `(lt ARITH1 ARITH2)'
230: `(ltu ARITH1 ARITH2)'
231: `(gt ARITH1 ARITH2)'
232: `(gtu ARITH1 ARITH2)'
233: `(ge ARITH1 ARITH2)'
234: `(geu ARITH1 ARITH2)'
235: `(ne ARITH1 ARITH2)'
236: `(eq ARITH1 ARITH2)'
237: These tests are true if the indicated comparison of the two
238: arithmetic expressions is true. Arithmetic expressions are
239: formed with `plus', `minus', `mult', `div', `mod', `abs', `neg',
240: `and', `ior', `xor', `not', `lshift', `ashift', `lshiftrt', and
241: `ashiftrt' expressions.
242:
243: `const_int' and `symbol_ref' are always valid terms (*note Insn
244: Lengths::.,for additional forms). `symbol_ref' is a string
245: denoting a C expression that yields an `int' when evaluated by the
246: `get_attr_...' routine. It should normally be a global variable.
247:
248: `(eq_attr NAME VALUE)'
249: NAME is a string specifying the name of an attribute.
250:
251: VALUE is a string that is either a valid value for attribute
252: NAME, a comma-separated list of values, or `!' followed by a
253: value or list. If VALUE does not begin with a `!', this test is
254: true if the value of the NAME attribute of the current insn is in
255: the list specified by VALUE. If VALUE begins with a `!', this
256: test is true if the attribute's value is *not* in the specified
257: list.
258:
259: For example,
260:
261: (eq_attr "type" "load,store")
262:
263: is equivalent to
264:
265: (ior (eq_attr "type" "load") (eq_attr "type" "store"))
266:
267: If NAME specifies an attribute of `alternative', it refers to the
268: value of the compiler variable `which_alternative' (*note Output
269: Statement::.) and the values must be small integers. For example,
270:
271: (eq_attr "alternative" "2,3")
272:
273: is equivalent to
274:
275: (ior (eq (symbol_ref "which_alternative") (const_int 2))
276: (eq (symbol_ref "which_alternative") (const_int 3)))
277:
278: Note that, for most attributes, an `eq_attr' test is simplified
279: in cases where the value of the attribute being tested is known
280: for all insns matching a particular pattern. This is by far the
281: most common case.
282:
283:
284: File: gcc.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes
285:
286: Assigning Attribute Values to Insns
287: -----------------------------------
288:
289: The value assigned to an attribute of an insn is primarily
290: determined by which pattern is matched by that insn (or which
291: `define_peephole' generated it). Every `define_insn' and
292: `define_peephole' can have an optional last argument to specify the
293: values of attributes for matching insns. The value of any attribute
294: not specified in a particular insn is set to the default value for
295: that attribute, as specified in its `define_attr'. Extensive use of
296: default values for attributes permits the specification of the values
297: for only one or two attributes in the definition of most insn
298: patterns, as seen in the example in the next section.
299:
300: The optional last argument of `define_insn' and `define_peephole'
301: is a vector of expressions, each of which defines the value for a
302: single attribute. The most general way of assigning an attribute's
303: value is to use a `set' expression whose first operand is an `attr'
304: expression giving the name of the attribute being set. The second
305: operand of the `set' is an attribute expression (*note Expressions::.)
306: giving the value of the attribute.
307:
308: When the attribute value depends on the `alternative' attribute
309: (i.e., which is the applicable alternative in the constraint of the
310: insn), the `set_attr_alternative' expression can can be used. It
311: allows the specification of a vector of attribute expressions, one for
312: each alternative.
313:
314: When the generality of arbitrary attribute expressions is not
315: required, the simpler `set_attr' expression can be used, which allows
316: specifying a string giving either a single attribute value or a list
317: of attribute values, one for each alternative.
318:
319: The form of each of the above specifications is shown below. In
320: each case, NAME is a string specifying the attribute to be set.
321:
322: `(set_attr NAME VALUE-STRING)'
323: VALUE-STRING is either a string giving the desired attribute
324: value, or a string containing a comma-separated list giving the
325: values for succeeding alternatives. The number of elements must
326: match the number of alternatives in the constraint of the insn
327: pattern.
328:
329: Note that it may be useful to specify `*' for some alternative, in
330: which case the attribute will assume its default value for insns
331: matching that alternative.
332:
333: `(set_attr_alternative NAME [VALUE1 VALUE2 ...])'
334: Depending on the alternative of the insn, the value will be one
335: of the specified values. This is a shorthand for using a `cond'
336: with tests on the `alternative' attribute.
337:
338: `(set (attr NAME) VALUE)'
339: The first operand of this `set' must be the special RTL expression
340: `attr', whose sole operand is a string giving the name of the
341: attribute being set. VALUE is the value of the attribute.
342:
343: The following shows three different ways of representing the same
344: attribute value specification:
345:
346: (set_attr "type" "load,store,arith")
347:
348: (set_attr_alternative "type"
349: [(const_string "load") (const_string "store")
350: (const_string "arith")])
351:
352: (set (attr "type")
353: (cond [(eq_attr "alternative" "1") (const_string "load")
354: (eq_attr "alternative" "2") (const_string "store")]
355: (const_string "arith")))
356:
357: The `define_asm_attributes' expression provides a mechanism to
358: specify the attributes assigned to insns produced from an `asm'
359: statement. It has the form:
360:
361: (define_asm_attributes [ATTR-SETS])
362:
363: where ATTR-SETS is specified the same as for `define_insn' and
364: `define_peephole' expressions.
365:
366: These values will typically be the "worst case" attribute values.
367: For example, they might indicate that the condition code will be
368: clobbered.
369:
370: A specification for a `length' attribute is handled specially. To
371: compute the length of an `asm' insn, the length specified in the
372: `define_asm_attributes' expression is multiplied by the number of
373: machine instructions specified in the `asm' statement, determined by
374: counting the number of semicolons and newlines in the string.
375: Therefore, the value of the `length' attribute specified in a
376: `define_asm_attributes' should be the maximum possible length of a
377: single machine instruction.
378:
379:
380: File: gcc.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes
381:
382: Example of Attribute Specifications
383: -----------------------------------
384:
385: The judicious use of defaulting is important in the efficient use of
386: insn attributes. Typically, insns are divided into "types" and an
387: attribute, customarily called `type', is used to represent this value.
388: This attribute is normally used only to define the default value for
389: other attributes. An example will clarify this usage.
390:
391: Assume we have a RISC machine with a condition code and in which
392: only full-word operations are performed in registers. Let us assume
393: that we can divide all insns into loads, stores, (integer) arithmetic
394: operations, floating point operations, and branches.
395:
396: Here we will concern ourselves with determining the effect of an
397: insn on the condition code and will limit ourselves to the following
398: possible effects: The condition code can be set unpredictably
399: (clobbered), not be changed, be set to agree with the results of the
400: operation, or only changed if the item previously set into the
401: condition code has been modified.
402:
403: Here is part of a sample `md' file for such a machine:
404:
405: (define_attr "type" "load,store,arith,fp,branch" (const_string "arith"))
406:
407: (define_attr "cc" "clobber,unchanged,set,change0"
408: (cond [(eq_attr "type" "load")
409: (const_string "change0")
410: (eq_attr "type" "store,branch")
411: (const_string "unchanged")
412: (eq_attr "type" "arith")
413: (if_then_else (match_operand:SI 0 "" "")
414: (const_string "set")
415: (const_string "clobber"))]
416: (const_string "clobber")))
417:
418: (define_insn ""
419: [(set (match_operand:SI 0 "general_operand" "=r,r,m")
420: (match_operand:SI 1 "general_operand" "r,m,r"))]
421: ""
422: "@
423: move %0,%1
424: load %0,%1
425: store %0,%1"
426: [(set_attr "type" "arith,load,store")])
427:
428: Note that we assume in the above example that arithmetic operations
429: performed on quantities smaller than a machine word clobber the
430: condition code since they will set the condition code to a value
431: corresponding to the full-word result.
432:
433:
434: File: gcc.info, Node: Insn Lengths, Next: Delay Slots, Prev: Attr Example, Up: Insn Attributes
435:
436: Computing the Length of an Insn
437: -------------------------------
438:
439: For many machines, multiple types of branch instructions are
440: provided, each for different length branch displacements. In most
441: cases, the assembler will choose the correct instruction to use.
442: However, when the assembler cannot do so, GCC can when a special
443: attribute, the `length' attribute, is defined. This attribute must be
444: defined to have numeric values by specifying a null string in its
445: `define_attr'.
446:
447: In the case of the `length' attribute, two additional forms of
448: arithmetic terms are allowed in test expressions:
449:
450: `(match_dup N)'
451: This refers to the address of operand N of the current insn, which
452: must be a `label_ref'.
453:
454: `(pc)'
455: This refers to the address of the *current* insn. It might have
456: been more consistent with other usage to make this the address of
457: the *next* insn but this would be confusing because the length of
458: the current insn is to be computed.
459:
460: For normal insns, the length will be determined by value of the
461: `length' attribute. In the case of `addr_vec' and `addr_diff_vec'
462: insn patterns, the length will be computed as the number of vectors
463: multiplied by the size of each vector.
464:
465: The following macros can be used to refine the length computation:
466:
467: `FIRST_INSN_ADDRESS'
468: When the `length' insn attribute is used, this macro specifies the
469: value to be assigned to the address of the first insn in a
470: function. If not specified, 0 is used.
471:
472: `ADJUST_INSN_LENGTH (INSN, LENGTH)'
473: If defined, modifies the length assigned to instruction INSN as a
474: function of the context in which it is used. LENGTH is an lvalue
475: that contains the initially computed length of the insn and
476: should be updated with the correct length of the insn. If
477: updating is required, INSN must not be a varying-length insn.
478:
479: This macro will normally not be required. A case in which it is
480: required is the ROMP. On this machine, the size of an `addr_vec'
481: insn must be increased by two to compensate for the fact that
482: alignment may be required.
483:
484: The routine that returns the value of the `length' attribute,
485: `get_attr_value', can be used by the output routine to determine the
486: form of the branch instruction to be written, as the example below
487: illustrates.
488:
489: As an example of the specification of variable-length branches,
490: consider the IBM 360. If we adopt the convention that a register will
491: be set to the starting address of a function, we can jump to labels
492: within 4K of the start using a four-byte instruction. Otherwise, we
493: need a six-byte sequence to load the address from memory and then
494: branch to it.
495:
496: On such a machine, a pattern for a branch instruction might be
497: specified as follows:
498:
499: (define_insn "jump"
500: [(set (pc)
501: (label_ref (match_operand 0 "" "")))]
502: ""
503: "*
504: {
505: return (get_attr_length (insn) == 4
506: ? \"b %l0\" : \"l r15,=a(%l0); br r15\");
507: }"
508: [(set (attr "length") (if_then_else (lt (match_dup 0) (const_int 4096))
509: (const_int 4)
510: (const_int 6)))])
511:
512:
513: File: gcc.info, Node: Delay Slots, Next: Function Units, Prev: Insn Lengths, Up: Insn Attributes
514:
515: Delay Slot Scheduling
516: ---------------------
517:
518: The insn attribute mechanism can be used to specify the
519: requirements for delay slots, if any, on a target machine. An
520: instruction is said to require a "delay slot" if some instructions
521: that are physically after the instruction are executed as if they were
522: located before it. Classic examples are branch and call instructions,
523: which often execute the following instruction before the branch or
524: call is performed.
525:
526: On some machines, conditional branch instructions can optionally
527: "annul" instructions in the delay slot. This means that the
528: instruction will not be executed for certain branch outcomes. Both
529: instructions that annul if the branch is true and instructions that
530: annul if the branch is false are supported.
531:
532: Delay slot scheduling differs from instruction scheduling in that
533: determining whether an instruction needs a delay slot is dependent only
534: on the type of instruction being generated, not on data flow between
535: the instructions. See the next section for a discussion of
536: data-dependent instruction scheduling.
537:
538: The requirement of an insn needing one or more delay slots is
539: indicated via the `define_delay' expression. It has the following
540: form:
541:
542: (define_delay TEST
543: [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1
544: DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2
545: ...])
546:
547: TEST is an attribute test that indicates whether this
548: `define_delay' applies to a particular insn. If so, the number of
549: required delay slots is determined by the length of the vector
550: specified as the second argument. An insn placed in delay slot N must
551: satisfy attribute test DELAY-N. ANNUL-TRUE-N is an attribute test
552: that specifies which insns may be annulled if the branch is true.
553: Similarly, ANNUL-FALSE-N specifies which insns in the delay slot may
554: be annulled if the branch is false. If annulling is not supported for
555: that delay slot, `(nil)' should be coded.
556:
557: For example, in the common case where branch and call insns require
558: a single delay slot, which may contain any insn other than a branch or
559: call, the following would be placed in the `md' file:
560:
561: (define_delay (eq_attr "type" "branch,call")
562: [(eq_attr "type" "!branch,call") (nil) (nil)])
563:
564: Multiple `define_delay' expressions may be specified. In this
565: case, each such expression specifies different delay slot requirements
566: and there must be no insn for which tests in two `define_delay'
567: expressions are both true.
568:
569: For example, if we have a machine that requires one delay slot for
570: branches but two for calls, no delay slot can contain a branch or
571: call insn, and any valid insn in the delay slot for the branch can be
572: annulled if the branch is true, we might represent this as follows:
573:
574: (define_delay (eq_attr "type" "branch")
575: [(eq_attr "type" "!branch,call") (eq_attr "type" "!branch,call") (nil)])
576:
577: (define_delay (eq_attr "type" "call")
578: [(eq_attr "type" "!branch,call") (nil) (nil)
579: (eq_attr "type" "!branch,call") (nil) (nil)])
580:
581:
582: File: gcc.info, Node: Function Units, Prev: Delay Slots, Up: Insn Attributes
583:
584: Specifying Function Units
585: -------------------------
586:
587: On most RISC machines, there are instructions whose results are not
588: available for a specific number of cycles. Common cases are
589: instructions that load data from memory. On many machines, a pipeline
590: stall will result if the data is referenced too soon after the load
591: instruction.
592:
593: In addition, many newer microprocessors have multiple function
594: units, usually one for integer and one for floating point, and often
595: will incur pipeline stalls when a result that is needed is not yet
596: ready.
597:
598: The descriptions in this section allow the specification of how much
599: time must elapse between the execution of an instruction and the time
600: when its result is used. It also allows specification of when the
601: execution of an instruction will delay execution of similar
602: instructions due to function unit conflicts.
603:
604: For the purposes of the specifications in this section, a machine is
605: divided into "function units", each of which execute a specific class
606: of instructions. Function units that accept one instruction each
607: cycle and allow a result to be used in the succeeding instruction
608: (usually via forwarding) need not be specified. Classic RISC
609: microprocessors will normally have a single function unit, which we can
610: call `memory'. The newer "superscalar" processors will often have
611: function units for floating point operations, usually at least a
612: floating point adder and multiplier.
613:
614: Each usage of a function units by a class of insns is specified
615: with a `define_function_unit' expression, which looks like this:
616:
617: (define_function_unit NAME MULTIPLICITY SIMULTANEITY
618: TEST READY-DELAY BUSY-DELAY
619: [CONFLICT-LIST])
620:
621: NAME is a string giving the name of the function unit.
622:
623: MULTIPLICITY is an integer specifying the number of identical units
624: in the processor. If more than one unit is specified, they will be
625: scheduled independently. Only truly independent units should be
626: counted; a pipelined unit should be specified as a single unit. (The
627: only common example of a machine that has multiple function units for a
628: single instruction class that are truly independent and not pipelined
629: are the two multiply and two increment units of the CDC 6600.)
630:
631: SIMULTANEITY specifies the maximum number of insns that can be
632: executing in each instance of the function unit simultaneously or zero
633: if the unit is pipelined and has no limit.
634:
635: All `define_function_unit' definitions referring to function unit
636: NAME must have the same name and values for MULTIPLICITY and
637: SIMULTANEITY.
638:
639: TEST is an attribute test that selects the insns we are describing
640: in this definition. Note that an insn may use more than one function
641: unit and a function unit may be specified in more than one
642: `define_function_unit'.
643:
644: READY-DELAY is an integer that specifies the number of cycles after
645: which the result of the instruction can be used without introducing
646: any stalls.
647:
648: BUSY-DELAY is an integer that represents the default cost if an
649: insn is scheduled for this unit while the unit is active with another
650: insn. If SIMULTANEITY is zero, this specification is ignored.
651: Otherwise, a zero value indicates that these insns execute on NAME in
652: a fully pipelined fashion, even if SIMULTANEITY is non-zero. A
653: non-zero value indicates that scheduling a new insn on this unit while
654: another is active will incur a cost. A cost of two indicates a single
655: cycle delay. For a normal non-pipelined function unit, BUSY-DELAY
656: will be twice READY-DELAY.
657:
658: CONFLICT-LIST is an optional list giving detailed conflict costs
659: for this unit. If specified, it is a list of condition test
660: expressions which are applied to insns already executing in NAME. For
661: each insn that is in the list, BUSY-DELAY will be used for the conflict
662: cost, while a value of zero will be used for insns not in the list.
663:
664: Typical uses of this vector are where a floating point function
665: unit can pipeline either single- or double-precision operations, but
666: not both, or where a memory unit can pipeline loads, but not stores,
667: etc.
668:
669: As an example, consider a classic RISC machine where the result of a
670: load instruction is not available for two cycles (a single "delay"
671: instruction is required) and where only one load instruction can be
672: executed simultaneously. This would be specified as:
673:
674: (define_function_unit "memory" 1 1 (eq_attr "type" "load") 2 4)
675:
676: For the case of a floating point function unit that can pipeline
677: either single or double precision, but not both, the following could
678: be specified:
679:
680: (define_function_unit
681: "fp" 1 1 (eq_attr "type" "sp_fp") 4 8 (eq_attr "type" "dp_fp")]
682: (define_function_unit
683: "fp" 1 1 (eq_attr "type" "dp_fp") 4 8 (eq_attr "type" "sp_fp")]
684:
685: *Note:* No code currently exists to avoid function unit conflicts,
686: only data conflicts. Hence MULTIPLICITY, SIMULTANEITY, BUSY-COST, and
687: CONFLICT-LIST are currently ignored. When such code is written, it is
688: possible that the specifications for these values may be changed. It
689: has recently come to our attention that these specifications may not
690: allow modeling of some of the newer "superscalar" processors that have
691: insns using multiple pipelined units. These insns will cause a
692: potential conflict for the second unit used during their execution and
693: there is no way of representing that conflict. We welcome any
694: examples of how function unit conflicts work in such processors and
695: suggestions for their representation.
696:
697:
698: File: gcc.info, Node: Machine Macros, Next: Config, Prev: Machine Desc, Up: Top
699:
700: Machine Description Macros
701: **************************
702:
703: In addition to the file `MACHINE.md', a machine description
704: includes a C header file conventionally given the name `MACHINE.h'.
705: This header file defines numerous macros that convey the information
706: about the target machine that does not fit into the scheme of the
707: `.md' file. The file `tm.h' should be a link to `MACHINE.h'. The
708: header file `config.h' includes `tm.h' and most compiler source files
709: include `config.h'.
710:
711: * Menu:
712:
713: * Driver:: Controlling how the driver runs the compilation passes.
714: * Run-time Target:: Defining `-m' options like `-m68000' and `-m68020'.
715: * Storage Layout:: Defining sizes and alignments of data.
716: * Type Layout:: Defining sizes and properties of basic user data types.
717: * Registers:: Naming and describing the hardware registers.
718: * Register Classes:: Defining the classes of hardware registers.
719: * Stack and Calling:: Defining which way the stack grows and by how much.
720: * Varargs:: Defining the varargs macros.
721: * Trampolines:: Code set up at run time to enter a nested function.
722: * Library Calls:: Controlling how library routines are implicitly called.
723: * Addressing Modes:: Defining addressing modes valid for memory operands.
724: * Condition Code:: Defining how insns update the condition code.
725: * Costs:: Defining relative costs of different operations.
726: * Sections:: Dividing storage into text, data, and other sections.
727: * PIC:: Macros for position independent code.
728: * Assembler Format:: Defining how to write insns and pseudo-ops to output.
729: * Debugging Info:: Defining the format of debugging output.
730: * Cross-compilation:: Handling floating point for cross-compilers.
731: * Misc:: Everything else.
732:
733:
734: File: gcc.info, Node: Driver, Next: Run-time Target, Prev: Machine Macros, Up: Machine Macros
735:
736: Controlling the Compilation Driver, `gcc'
737: =========================================
738:
739: `SWITCH_TAKES_ARG (CHAR)'
740: A C expression which determines whether the option `-CHAR' takes
741: arguments. The value should be the number of arguments that
742: option takes--zero, for many options.
743:
744: By default, this macro is defined to handle the standard options
745: properly. You need not define it unless you wish to add
746: additional options which take arguments.
747:
748: `WORD_SWITCH_TAKES_ARG (NAME)'
749: A C expression which determines whether the option `-NAME' takes
750: arguments. The value should be the number of arguments that
751: option takes--zero, for many options. This macro rather than
752: `SWITCH_TAKES_ARG' is used for multi-character option names.
753:
754: By default, this macro is defined to handle the standard options
755: properly. You need not define it unless you wish to add
756: additional options which take arguments.
757:
758: `SWITCHES_NEED_SPACES'
759: A string-valued C expression which is nonempty if the linker
760: needs a space between the `-L' or `-o' option and its argument.
761:
762: If this macro is not defined, the default value is 0.
763:
764: `CPP_SPEC'
765: A C string constant that tells the GNU CC driver program options
766: to pass to CPP. It can also specify how to translate options you
767: give to GNU CC into options for GNU CC to pass to the CPP.
768:
769: Do not define this macro if it does not need to do anything.
770:
771: `SIGNED_CHAR_SPEC'
772: A C string constant that tells the GNU CC driver program options
773: to pass to CPP. By default, this macro is defined to pass the
774: option `-D__CHAR_UNSIGNED__' to CPP if `char' will be treated as
775: `unsigned char' by `cc1'.
776:
777: Do not define this macro unless you need to override the default
778: definition.
779:
780: `CC1_SPEC'
781: A C string constant that tells the GNU CC driver program options
782: to pass to `cc1'. It can also specify how to translate options
783: you give to GNU CC into options for GNU CC to pass to the `cc1'.
784:
785: Do not define this macro if it does not need to do anything.
786:
787: `CC1PLUS_SPEC'
788: A C string constant that tells the GNU CC driver program options
789: to pass to `cc1plus'. It can also specify how to translate
790: options you give to GNU CC into options for GNU CC to pass to the
791: `cc1plus'.
792:
793: Do not define this macro if it does not need to do anything.
794:
795: `ASM_SPEC'
796: A C string constant that tells the GNU CC driver program options
797: to pass to the assembler. It can also specify how to translate
798: options you give to GNU CC into options for GNU CC to pass to the
799: assembler. See the file `sun3.h' for an example of this.
800:
801: Do not define this macro if it does not need to do anything.
802:
803: `ASM_FINAL_SPEC'
804: A C string constant that tells the GNU CC driver program how to
805: run any programs which cleanup after the normal assembler.
806: Normally, this is not needed. See the file `mips.h' for an
807: example of this.
808:
809: Do not define this macro if it does not need to do anything.
810:
811: `LINK_SPEC'
812: A C string constant that tells the GNU CC driver program options
813: to pass to the linker. It can also specify how to translate
814: options you give to GNU CC into options for GNU CC to pass to the
815: linker.
816:
817: Do not define this macro if it does not need to do anything.
818:
819: `LIB_SPEC'
820: Another C string constant used much like `LINK_SPEC'. The
821: difference between the two is that `LIB_SPEC' is used at the end
822: of the command given to the linker.
823:
824: If this macro is not defined, a default is provided that loads
825: the standard C library from the usual place. See `gcc.c'.
826:
827: `STARTFILE_SPEC'
828: Another C string constant used much like `LINK_SPEC'. The
829: difference between the two is that `STARTFILE_SPEC' is used at
830: the very beginning of the command given to the linker.
831:
832: If this macro is not defined, a default is provided that loads the
833: standard C startup file from the usual place. See `gcc.c'.
834:
835: `ENDFILE_SPEC'
836: Another C string constant used much like `LINK_SPEC'. The
837: difference between the two is that `ENDFILE_SPEC' is used at the
838: very end of the command given to the linker.
839:
840: Do not define this macro if it does not need to do anything.
841:
842: `LINK_LIBGCC_SPECIAL'
843: Define this macro meaning that `gcc' should find the library
844: `libgcc.a' by hand, rather than passing the argument `-lgcc' to
845: tell the linker to do the search.
846:
847: `RELATIVE_PREFIX_NOT_LINKDIR'
848: Define this macro to tell `gcc' that it should only translate a
849: `-B' prefix into a `-L' linker option if the prefix indicates an
850: absolute file name.
851:
852: `STANDARD_EXEC_PREFIX'
853: Define this macro as a C string constant if you wish to override
854: the standard choice of `/usr/local/lib/gcc/' as the default
855: prefix to try when searching for the executable files of the
856: compiler.
857:
858: `MD_EXEC_PREFIX'
859: If defined, this macro is an additional prefix to try after
860: `STANDARD_EXEC_PREFIX'. `MD_EXEC_PREFIX' is not searched when
861: the `-b' option is used, or the compiler is built as a cross
862: compiler.
863:
864: `STANDARD_STARTFILE_PREFIX'
865: Define this macro as a C string constant if you wish to override
866: the standard choice of `/usr/local/lib/gcc/' as the default
867: prefix to try when searching for startup files such as `crt0.o'.
868:
869: `MD_STARTFILE_PREFIX'
870: If defined, this macro supplies an additional prefix to try after
871: the standard prefixes. `MD_EXEC_PREFIX' is not searched when the
872: `-b' option is used, or the compiler is built as a cross compiler.
873:
874: `LOCAL_INCLUDE_DIR'
875: Define this macro as a C string constant if you wish to override
876: the standard choice of `/usr/local/include' as the default prefix
877: to try when searching for local header files. `LOCAL_INCLUDE_DIR'
878: comes before `SYSTEM_INCLUDE_DIR' in the search order.
879:
880: Cross compilers do not use this macro and do not search either
881: `/usr/local/include' or its replacement.
882:
883: `SYSTEM_INCLUDE_DIR'
884: Define this macro as a C string constant if you wish to specify a
885: system-specific directory to search for header files before the
886: standard directory. `SYSTEM_INCLUDE_DIR' comes before
887: `STANDARD_INCLUDE_DIR' in the search order.
888:
889: Cross compilers do not use this macro and do not search the
890: directory specified.
891:
892: `STANDARD_INCLUDE_DIR'
893: Define this macro as a C string constant if you wish to override
894: the standard choice of `/usr/include' as the default prefix to
895: try when searching for header files.
896:
897: Cross compilers do not use this macro and do not search either
898: `/usr/include' or its replacement.
899:
900: `INCLUDE_DEFAULTS'
901: Define this macro if you wish to override the entire default
902: search path for include files. The default search path includes
903: `GPLUSPLUS_INCLUDE_DIR', `GCC_INCLUDE_DIR', `LOCAL_INCLUDE_DIR',
904: `SYSTEM_INCLUDE_DIR', and `STANDARD_INCLUDE_DIR'. In addition,
905: the macros `GPLUSPLUS_INCLUDE_DIR' and `GCC_INCLUDE_DIR' are
906: defined automatically by `Makefile', and specify private search
907: areas for GCC. The directory `GPLUSPLUS_INCLUDE_DIR' is used
908: only for C++ programs.
909:
910: The definition should be an initializer for an array of
911: structures. Each array element should have two elements: the
912: directory name (a string constant) and a flag for C++-only
913: directories. Mark the end of the array with a null element. For
914: example, here is the definition used for VMS:
915:
916: #define INCLUDE_DEFAULTS \
917: { \
918: { "GNU_GXX_INCLUDE:", 1}, \
919: { "GNU_CC_INCLUDE:", 0}, \
920: { "SYS$SYSROOT:[SYSLIB.]", 0}, \
921: { ".", 0}, \
922: { 0, 0} \
923: }
924:
925: Here is the order of prefixes tried for exec files:
926:
927: 1. Any prefixes specified by the user with `-B'.
928:
929: 2. The environment variable `GCC_EXEC_PREFIX', if any.
930:
931: 3. The directories specified by the environment variable
932: `COMPILER_PATH'.
933:
934: 4. The macro `STANDARD_EXEC_PREFIX'.
935:
936: 5. `/usr/lib/gcc/'.
937:
938: 6. The macro `MD_EXEC_PREFIX', if any.
939:
940: Here is the order of prefixes tried for startfiles:
941:
942: 1. Any prefixes specified by the user with `-B'.
943:
944: 2. The environment variable `GCC_EXEC_PREFIX', if any.
945:
946: 3. The directories specified by the environment variable
947: `LIBRARY_PATH'.
948:
949: 4. The macro `STANDARD_EXEC_PREFIX'.
950:
951: 5. `/usr/lib/gcc/'.
952:
953: 6. The macro `MD_EXEC_PREFIX', if any.
954:
955: 7. The macro `MD_STARTFILE_PREFIX', if any.
956:
957: 8. The macro `STANDARD_STARTFILE_PREFIX'.
958:
959: 9. `/lib/'.
960:
961: 10. `/usr/lib/'.
962:
963:
964: File: gcc.info, Node: Run-time Target, Next: Storage Layout, Prev: Driver, Up: Machine Macros
965:
966: Run-time Target Specification
967: =============================
968:
969: `CPP_PREDEFINES'
970: Define this to be a string constant containing `-D' options to
971: define the predefined macros that identify this machine and
972: system. These macros will be predefined unless the `-ansi'
973: option is specified.
974:
975: In addition, a parallel set of macros are predefined, whose names
976: are made by appending `__' at the beginning and at the end. These
977: `__' macros are permitted by the ANSI standard, so they are
978: predefined regardless of whether `-ansi' is specified.
979:
980: For example, on the Sun, one can use the following value:
981:
982: "-Dmc68000 -Dsun -Dunix"
983:
984: The result is to define the macros `__mc68000__', `__sun__' and
985: `__unix__' unconditionally, and the macros `mc68000', `sun' and
986: `unix' provided `-ansi' is not specified.
987:
988: `STDC_VALUE'
989: Define the value to be assigned to the built-in macro `__STDC__'.
990: The default is the value `1'.
991:
992: `extern int target_flags;'
993: This declaration should be present.
994:
995: `TARGET_...'
996: This series of macros is to allow compiler command arguments to
997: enable or disable the use of optional features of the target
998: machine. For example, one machine description serves both the
999: 68000 and the 68020; a command argument tells the compiler
1000: whether it should use 68020-only instructions or not. This
1001: command argument works by means of a macro `TARGET_68020' that
1002: tests a bit in `target_flags'.
1003:
1004: Define a macro `TARGET_FEATURENAME' for each such option. Its
1005: definition should test a bit in `target_flags'; for example:
1006:
1007: #define TARGET_68020 (target_flags & 1)
1008:
1009: One place where these macros are used is in the
1010: condition-expressions of instruction patterns. Note how
1011: `TARGET_68020' appears frequently in the 68000 machine
1012: description file, `m68k.md'. Another place they are used is in
1013: the definitions of the other macros in the `MACHINE.h' file.
1014:
1015: `TARGET_SWITCHES'
1016: This macro defines names of command options to set and clear bits
1017: in `target_flags'. Its definition is an initializer with a
1018: subgrouping for each command option.
1019:
1020: Each subgrouping contains a string constant, that defines the
1021: option name, and a number, which contains the bits to set in
1022: `target_flags'. A negative number says to clear bits instead;
1023: the negative of the number is which bits to clear. The actual
1024: option name is made by appending `-m' to the specified name.
1025:
1026: One of the subgroupings should have a null string. The number in
1027: this grouping is the default value for `target_flags'. Any
1028: target options act starting with that value.
1029:
1030: Here is an example which defines `-m68000' and `-m68020' with
1031: opposite meanings, and picks the latter as the default:
1032:
1033: #define TARGET_SWITCHES \
1034: { { "68020", 1}, \
1035: { "68000", -1}, \
1036: { "", 1}}
1037:
1038: `TARGET_OPTIONS'
1039: This macro is similar to `TARGET_SWITCHES' but defines names of
1040: command options that have values. Its definition is an
1041: initializer with a subgrouping for each command option.
1042:
1043: Each subgrouping contains a string constant, that defines the
1044: fixed part of the option name, and the address of a variable.
1045: The variable, type `char *', is set to the variable part of the
1046: given option if the fixed part matches. The actual option name
1047: is made by appending `-m' to the specified name.
1048:
1049: Here is an example which defines `-mshort-data-NUMBER'. If the
1050: given option is `-mshort-data-512', the variable `m88k_short_data'
1051: will be set to the string `"512"'.
1052:
1053: extern char *m88k_short_data;
1054: #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } }
1055:
1056: `TARGET_VERSION'
1057: This macro is a C statement to print on `stderr' a string
1058: describing the particular machine description choice. Every
1059: machine description should define `TARGET_VERSION'. For example:
1060:
1061: #ifdef MOTOROLA
1062: #define TARGET_VERSION fprintf (stderr, " (68k, Motorola syntax)");
1063: #else
1064: #define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)");
1065: #endif
1066:
1067: `OVERRIDE_OPTIONS'
1068: Sometimes certain combinations of command options do not make
1069: sense on a particular target machine. You can define a macro
1070: `OVERRIDE_OPTIONS' to take account of this. This macro, if
1071: defined, is executed once just after all the command options have
1072: been parsed.
1073:
1074: Don't use this macro to turn on various extra optimizations for
1075: `-O'. That is what `OPTIMIZATION_OPTIONS' is for.
1076:
1077: `OPTIMIZATION_OPTIONS (LEVEL)'
1078: Some machines may desire to change what optimizations are
1079: performed for various optimization levels. This macro, if
1080: defined, is executed once just after the optimization level is
1081: determined and before the remainder of the command options have
1082: been parsed. Values set in this macro are used as the default
1083: values for the other command line options.
1084:
1085: LEVEL is the optimization level specified; 2 if -O2 is specified,
1086: 1 if -O is specified, and 0 if neither is specified.
1087:
1088: *Do not examine `write_symbols' in this macro!* The debugging
1089: options are not supposed to alter the generated code.
1090:
1091:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.