internals-4 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208
  1. Info file internals, produced by Makeinfo, -*- Text -*-
  2. from input file internals.texinfo.
  3. This file documents the internals of the GNU compiler.
  4. Copyright (C) 1988 Free Software Foundation, Inc.
  5. Permission is granted to make and distribute verbatim copies of
  6. this manual provided the copyright notice and this permission notice
  7. are preserved on all copies.
  8. Permission is granted to copy and distribute modified versions of this
  9. manual under the conditions for verbatim copying, provided also that the
  10. section entitled ``GNU CC General Public License'' is included exactly as
  11. in the original, and provided that the entire resulting derived work is
  12. distributed under the terms of a permission notice identical to this one.
  13. Permission is granted to copy and distribute translations of this manual
  14. into another language, under the above conditions for modified versions,
  15. except that the section entitled ``GNU CC General Public License'' and
  16. this permission notice may be included in translations approved by the
  17. Free Software Foundation instead of in the original English.
  18. 
  19. File: internals, Node: Sharing, Prev: Calls, Up: RTL
  20. Structure Sharing Assumptions
  21. =============================
  22. The compiler assumes that certain kinds of RTL expressions are unique;
  23. there do not exist two distinct objects representing the same value. In
  24. other cases, it makes an opposite assumption: that no RTL expression object
  25. of a certain kind appears in more than one place in the containing structure.
  26. These assumptions refer to a single function; except for the RTL objects
  27. that describe global variables and external functions, no RTL objects are
  28. common to two functions.
  29. * Each pseudo-register has only a single `reg' object to represent it,
  30. and therefore only a single machine mode.
  31. * For any symbolic label, there is only one `symbol_ref' object
  32. referring to it.
  33. * There is only one `const_int' expression with value zero, and only one
  34. with value one.
  35. * There is only one `pc' expression.
  36. * There is only one `cc0' expression.
  37. * There is only one `const_double' expression with mode `SFmode' and
  38. value zero, and only one with mode `DFmode' and value zero.
  39. * No `label_ref' appears in more than one place in the RTL structure; in
  40. other words, it is safe to do a tree-walk of all the insns in the
  41. function and assume that each time a `label_ref' is seen it is
  42. distinct from all others that are seen.
  43. * Only one `mem' object is normally created for each static variable or
  44. stack slot, so these objects are frequently shared in all the places
  45. they appear. However, separate but equal objects for these variables
  46. are occasionally made.
  47. * No RTL object appears in more than one place in the RTL structure
  48. except as described above. Many passes of the compiler rely on this
  49. by assuming that they can modify RTL objects in place without unwanted
  50. side-effects on other insns.
  51. * During initial RTL generation, shared structure is freely introduced.
  52. After all the RTL for a function has been generated, all shared
  53. structure is copied by `unshare_all_rtl' in `emit-rtl.c', after which
  54. the above rules are guaranteed to be followed.
  55. * During the combiner pass, shared structure with an insn can exist
  56. temporarily. However, the shared structure is copied before the
  57. combiner is finished with the insn. This is done by
  58. `copy_substitutions' in `combine.c'.
  59. 
  60. File: internals, Node: Machine Desc, Next: Machine Macros, Prev: RTL, Up: Top
  61. Machine Descriptions
  62. ********************
  63. A machine description has two parts: a file of instruction patterns (`.md'
  64. file) and a C header file of macro definitions.
  65. The `.md' file for a target machine contains a pattern for each instruction
  66. that the target machine supports (or at least each instruction that is
  67. worth telling the compiler about). It may also contain comments. A
  68. semicolon causes the rest of the line to be a comment, unless the semicolon
  69. is inside a quoted string.
  70. See the next chapter for information on the C header file.
  71. * Menu:
  72. * Patterns:: How to write instruction patterns.
  73. * Example:: An explained example of a `define_insn' pattern.
  74. * RTL Template:: The RTL template defines what insns match a pattern.
  75. * Output Template:: The output template says how to make assembler code
  76. from such an insn.
  77. * Output Statement:: For more generality, write C code to output
  78. the assembler code.
  79. * Constraints:: When not all operands are general operands.
  80. * Standard Names:: Names mark patterns to use for code generation.
  81. * Pattern Ordering:: When the order of patterns makes a difference.
  82. * Dependent Patterns:: Having one pattern may make you need another.
  83. * Jump Patterns:: Special considerations for patterns for jump insns.
  84. * Peephole Definitions::Defining machine-specific peephole optimizations.
  85. * Expander Definitions::Generating a sequence of several RTL insns
  86. for a standard operation.
  87. 
  88. File: internals, Node: Patterns, Next: Example, Prev: Machine Desc, Up: Machine Desc
  89. Everything about Instruction Patterns
  90. =====================================
  91. Each instruction pattern contains an incomplete RTL expression, with pieces
  92. to be filled in later, operand constraints that restrict how the pieces can
  93. be filled in, and an output pattern or C code to generate the assembler
  94. output, all wrapped up in a `define_insn' expression.
  95. A `define_insn' is an RTL expression containing four operands:
  96. 1. An optional name. The presence of a name indicate that this instruction
  97. pattern can perform a certain standard job for the RTL-generation pass
  98. of the compiler. This pass knows certain names and will use the
  99. instruction patterns with those names, if the names are defined in the
  100. machine description.
  101. The absence of a name is indicated by writing an empty string where
  102. the name should go. Nameless instruction patterns are never used for
  103. generating RTL code, but they may permit several simpler insns to be
  104. combined later on.
  105. Names that are not thus known and used in RTL-generation have no
  106. effect; they are equivalent to no name at all.
  107. 2. The "RTL template" (*Note RTL Template::.) is a vector of incomplete RTL
  108. expressions which show what the instruction should look like. It is
  109. incomplete because it may contain `match_operand' and `match_dup'
  110. expressions that stand for operands of the instruction.
  111. If the vector has only one element, that element is what the
  112. instruction should look like. If the vector has multiple elements,
  113. then the instruction looks like a `parallel' expression containing
  114. that many elements as described.
  115. 3. A condition. This is a string which contains a C expression that is the
  116. final test to decide whether an insn body matches this pattern.
  117. For a named pattern, the condition (if present) may not depend on the
  118. data in the insn being matched, but only the target-machine-type
  119. flags. The compiler needs to test these conditions during
  120. initialization in order to learn exactly which named instructions are
  121. available in a particular run.
  122. For nameless patterns, the condition is applied only when matching an
  123. individual insn, and only after the insn has matched the pattern's
  124. recognition template. The insn's operands may be found in the vector
  125. `operands'.
  126. 4. The "output template": a string that says how to output matching insns
  127. as assembler code. `%' in this string specifies where to substitute
  128. the value of an operand. *note Output Template::.
  129. When simple substitution isn't general enough, you can specify a piece
  130. of C code to compute the output. *note Output Statement::.
  131. 
  132. File: internals, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc
  133. Example of `define_insn'
  134. ========================
  135. Here is an actual example of an instruction pattern, for the 68000/68020.
  136. (define_insn "tstsi"
  137. [(set (cc0)
  138. (match_operand:SI 0 "general_operand" "rm"))]
  139. ""
  140. "*
  141. { if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  142. return \"tstl %0\";
  143. return \"cmpl #0,%0\"; }")
  144. This is an instruction that sets the condition codes based on the value of
  145. a general operand. It has no condition, so any insn whose RTL description
  146. has the form shown may be handled according to this pattern. The name
  147. `tstsi' means ``test a `SImode' value'' and tells the RTL generation pass
  148. that, when it is necessary to test such a value, an insn to do so can be
  149. constructed using this pattern.
  150. The output control string is a piece of C code which chooses which output
  151. template to return based on the kind of operand and the specific type of
  152. CPU for which code is being generated.
  153. `"rm"' is an operand constraint. Its meaning is explained below.
  154. 
  155. File: internals, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc
  156. RTL Template for Generating and Recognizing Insns
  157. =================================================
  158. The RTL template is used to define which insns match the particular pattern
  159. and how to find their operands. For named patterns, the RTL template also
  160. says how to construct an insn from specified operands.
  161. Construction involves substituting specified operands into a copy of the
  162. template. Matching involves determining the values that serve as the
  163. operands in the insn being matched. Both of these activities are
  164. controlled by special expression types that direct matching and
  165. substitution of the operands.
  166. `(match_operand:M N TESTFN CONSTRAINT)'
  167. This expression is a placeholder for operand number N of the insn.
  168. When constructing an insn, operand number N will be substituted at
  169. this point. When matching an insn, whatever appears at this position
  170. in the insn will be taken as operand number N; but it must satisfy
  171. TESTFN or this instruction pattern will not match at all.
  172. Operand numbers must be chosen consecutively counting from zero in
  173. each instruction pattern. There may be only one `match_operand'
  174. expression in the pattern for each expression number, and they must
  175. appear in order of increasing expression number.
  176. TESTFN is a string that is the name of a C function that accepts two
  177. arguments, a machine mode and an expression. During matching, the
  178. function will be called with M as the mode argument and the putative
  179. operand as the other argument. If it returns zero, this instruction
  180. pattern fails to match. TESTFN may be an empty string; then it means
  181. no test is to be done on the operand.
  182. Most often, TESTFN is `"general_operand"'. It checks that the
  183. putative operand is either a constant, a register or a memory
  184. reference, and that it is valid for mode M.
  185. For an operand that must be a register, TESTFN should be
  186. `"register_operand"'. This prevents GNU CC from creating insns that
  187. have memory references in these operands, insns which would only have
  188. to be taken apart in the reload pass.
  189. For an operand that must be a constant, either TESTFN should be
  190. `"immediate_operand"', or the instruction pattern's extra condition
  191. should check for constants, or both.
  192. CONSTRAINT is explained later (*Note Constraints::.).
  193. `(match_dup N)'
  194. This expression is also a placeholder for operand number N. It is
  195. used when the operand needs to appear more than once in the insn.
  196. In construction, `match_dup' behaves exactly like `match_operand': the
  197. operand is substituted into the insn being constructed. But in
  198. matching, `match_dup' behaves differently. It assumes that operand
  199. number N has already been determined by a `match_operand' appearing
  200. earlier in the recognition template, and it matches only an
  201. identical-looking expression.
  202. `(address (match_operand:M N "address_operand" ""))'
  203. This complex of expressions is a placeholder for an operand number N
  204. in a ``load address'' instruction: an operand which specifies a memory
  205. location in the usual way, but for which the actual operand value used
  206. is the address of the location, not the contents of the location.
  207. `address' expressions never appear in RTL code, only in machine
  208. descriptions. And they are used only in machine descriptions that do
  209. not use the operand constraint feature. When operand constraints are
  210. in use, the letter `p' in the constraint serves this purpose.
  211. M is the machine mode of the *memory location being addressed*, not
  212. the machine mode of the address itself. That mode is always the same
  213. on a given target machine (it is `Pmode', which normally is `SImode'),
  214. so there is no point in mentioning it; thus, no machine mode is
  215. written in the `address' expression. If some day support is added for
  216. machines in which addresses of different kinds of objects appear
  217. differently or are used differently (such as the PDP-10), different
  218. formats would perhaps need different machine modes and these modes
  219. might be written in the `address' expression.
  220. 
  221. File: internals, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc
  222. Output Templates and Operand Substitution
  223. =========================================
  224. The "output template" is a string which specifies how to output the
  225. assembler code for an instruction pattern. Most of the template is a fixed
  226. string which is output literally. The character `%' is used to specify
  227. where to substitute an operand; it can also be used to identify places
  228. different variants of the assembler require different syntax.
  229. In the simplest case, a `%' followed by a digit N says to output operand N
  230. at that point in the string.
  231. `%' followed by a letter and a digit says to output an operand in an
  232. alternate fashion. Four letters have standard, built-in meanings described
  233. below. The machine description macro `PRINT_OPERAND' can define additional
  234. letters with nonstandard meanings.
  235. `%cDIGIT' can be used to substitute an operand that is a constant value
  236. without the syntax that normally indicates an immediate operand.
  237. `%nDIGIT' is like `%cDIGIT' except that the value of the constant is
  238. negated before printing.
  239. `%aDIGIT' can be used to substitute an operand as if it were a memory
  240. reference, with the actual operand treated as the address. This may be
  241. useful when outputting a ``load address'' instruction, because often the
  242. assembler syntax for such an instruction requires you to write the operand
  243. as if it were a memory reference.
  244. `%lDIGIT' is used to substitute a `label_ref' into a jump instruction.
  245. `%' followed by a punctuation character specifies a substitution that does
  246. not use an operand. Only one case is standard: `%%' outputs a `%' into the
  247. assembler code. Other nonstandard cases can be defined in the
  248. `PRINT_OPERAND' macro.
  249. The template may generate multiple assembler instructions. Write the text
  250. for the instructions, with `\;' between them.
  251. When the RTL contains two operand which are required by constraint to match
  252. each other, the output template must refer only to the lower-numbered
  253. operand. Matching operands are not always identical, and the rest of the
  254. compiler arranges to put the proper RTL expression for printing into the
  255. lower-numbered operand.
  256. One use of nonstandard letters or punctuation following `%' is to
  257. distinguish between different assembler languages for the same machine; for
  258. example, Motorola syntax versus MIT syntax for the 68000. Motorola syntax
  259. requires periods in most opcode names, while MIT syntax does not. For
  260. example, the opcode `movel' in MIT syntax is `move.l' in Motorola syntax.
  261. The same file of patterns is used for both kinds of output syntax, but the
  262. character sequence `%.' is used in each place where Motorola syntax wants a
  263. period. The `PRINT_OPERAND' macro for Motorola syntax defines the sequence
  264. to output a period; the macro for MIT syntax defines it to do nothing.
  265. 
  266. File: internals, Node: Output Statement, Next: Constraints, Prev: Output Template, Up: Machine Desc
  267. C Statements for Generating Assembler Output
  268. ============================================
  269. Often a single fixed template string cannot produce correct and efficient
  270. assembler code for all the cases that are recognized by a single
  271. instruction pattern. For example, the opcodes may depend on the kinds of
  272. operands; or some unfortunate combinations of operands may require extra
  273. machine instructions.
  274. If the output control string starts with a `*', then it is not an output
  275. template but rather a piece of C program that should compute a template.
  276. It should execute a `return' statement to return the template-string you
  277. want. Most such templates use C string literals, which require doublequote
  278. characters to delimit them. To include these doublequote characters in the
  279. string, prefix each one with `\'.
  280. The operands may be found in the array `operands', whose C data type is
  281. `rtx []'.
  282. It is possible to output an assembler instruction and then go on to output
  283. or compute more of them, using the subroutine `output_asm_insn'. This
  284. receives two arguments: a template-string and a vector of operands. The
  285. vector may be `operands', or it may be another array of `rtx' that you
  286. declare locally and initialize yourself.
  287. When an insn pattern has multiple alternatives in its constraints, often
  288. the appearance of the assembler code determined mostly by which alternative
  289. was matched. When this is so, the C code can test the variable
  290. `which_alternative', which is the ordinal number of the alternative that
  291. was actually satisfied (0 for the first, 1 for the second alternative, etc.).
  292. For example, suppose there are two opcodes for storing zero, `clrreg' for
  293. registers and `clrmem' for memory locations. Here is how a pattern could
  294. use `which_alternative' to choose between them:
  295. (define_insn ""
  296. [(set (match_operand:SI 0 "general_operand" "r,m")
  297. (const_int 0))]
  298. ""
  299. "*
  300. return (which_alternative == 0
  301. ? \"clrreg %0\" : \"clrmem %0\");
  302. ")
  303. 
  304. File: internals, Node: Constraints, Next: Standard Names, Prev: Output Statement, Up: Machine Desc
  305. Operand Constraints
  306. ===================
  307. Each `match_operand' in an instruction pattern can specify a constraint for
  308. the type of operands allowed. Constraints can say whether an operand may
  309. be in a register, and which kinds of register; whether the operand can be a
  310. memory reference, and which kinds of address; whether the operand may be an
  311. immediate constant, and which possible values it may have. Constraints can
  312. also require two operands to match.
  313. * Menu:
  314. * Simple Constraints:: Basic use of constraints.
  315. * Multi-Alternative:: When an insn has two alternative constraint-patterns.
  316. * Class Preferences:: Constraints guide which hard register to put things in.
  317. * Modifiers:: More precise control over effects of constraints.
  318. * No Constraints:: Describing a clean machine without constraints.
  319. 
  320. File: internals, Node: Simple Constraints, Next: Multi-Alternative, Prev: Constraints, Up: Constraints
  321. Simple Constraints
  322. ------------------
  323. The simplest kind of constraint is a string full of letters, each of which
  324. describes one kind of operand that is permitted. Here are the letters that
  325. are allowed:
  326. `m'
  327. A memory operand is allowed, with any kind of address that the machine
  328. supports in general.
  329. `o'
  330. A memory operand is allowed, but only if the address is "offsetable".
  331. This means that adding a small integer (actually, the width in bytes
  332. of the operand, as determined by its machine mode) may be added to the
  333. address and the result is also a valid memory address.
  334. For example, an address which is constant is offsetable; so is an
  335. address that is the sum of a register and a constant (as long as a
  336. slightly larger constant is also within the range of address-offsets
  337. supported by the machine); but an autoincrement or autodecrement
  338. address is not offsetable. More complicated indirect/indexed
  339. addresses may or may not be offsetable depending on the other
  340. addressing modes that the machine supports.
  341. Note that in an output operand which can be matched by another
  342. operand, the constraint letter `o' is valid only when accompanied by
  343. both `<' (if the target machine has predecrement addressing) and `>'
  344. (if the target machine has preincrement addressing).
  345. `<'
  346. A memory operand with autodecrement addressing (either predecrement or
  347. postdecrement) is allowed.
  348. `>'
  349. A memory operand with autoincrement addressing (either preincrement or
  350. postincrement) is allowed.
  351. `r'
  352. A register operand is allowed provided that it is in a general register.
  353. `d', `a', `f', ...
  354. Other letters can be defined in machine-dependent fashion to stand for
  355. particular classes of registers. `d', `a' and `f' are defined on the
  356. 68000/68020 to stand for data, address and floating point registers.
  357. `i'
  358. An immediate integer operand (one with constant value) is allowed.
  359. This includes symbolic constants whose values will be known only at
  360. assembly time.
  361. `n'
  362. An immediate integer operand with a known numeric value is allowed.
  363. Many systems cannot support assembly-time constants for operands less
  364. than a word wide. Constraints for these operands should use `n'
  365. rather than `i'.
  366. `I', `J', `K', ...
  367. Other letters in the range `I' through `M' may be defined in a
  368. machine-dependent fashion to permit immediate integer operands with
  369. explicit integer values in specified ranges. For example, on the
  370. 68000, `I' is defined to stand for the range of values 1 to 8. This
  371. is the range permitted as a shift count in the shift instructions.
  372. `F'
  373. An immediate floating operand (expression code `const_double') is
  374. allowed.
  375. `G', `H'
  376. `G' and `H' may be defined in a machine-dependent fashion to permit
  377. immediate floating operands in particular ranges of values.
  378. `s'
  379. An immediate integer operand whose value is not an explicit integer is
  380. allowed.
  381. This might appear strange; if an insn allows a constant operand with a
  382. value not known at compile time, it certainly must allow any known
  383. value. So why use `s' instead of `i'? Sometimes it allows better
  384. code to be generated.
  385. For example, on the 68000 in a fullword instruction it is possible to
  386. use an immediate operand; but if the immediate value is between -32
  387. and 31, better code results from loading the value into a register and
  388. using the register. This is because the load into the register can be
  389. done with a `moveq' instruction. We arrange for this to happen by
  390. defining the letter `K' to mean ``any integer outside the range -32 to
  391. 31'', and then specifying `Ks' in the operand constraints.
  392. `g'
  393. Any register, memory or immediate integer operand is allowed, except
  394. for registers that are not general registers.
  395. `N' (a digit)
  396. An operand that matches operand number N is allowed. If a digit is
  397. used together with letters, the digit should come last.
  398. This is called a "matching constraint" and what it really means is
  399. that the assembler has only a single operand that fills two roles
  400. considered separate in the RTL insn. For example, an add insn has two
  401. input operands and one output operand in the RTL, but on most machines
  402. an add instruction really has only two operands, one of them an
  403. input-output operand.
  404. Matching constraints work only in circumstances like that add insn.
  405. More precisely, the matching constraint must appear in an input-only
  406. operand and the operand that it matches must be an output-only operand
  407. with a lower number.
  408. For operands to match in a particular case usually means that they are
  409. identical-looking RTL expressions. But in a few special cases
  410. specific kinds of dissimilarity are allowed. For example, `*x' as an
  411. input operand will match `*x++' as an output operand. For proper
  412. results in such cases, the output template should always use the
  413. output-operand's number when printing the operand.
  414. `p'
  415. An operand that is a valid memory address is allowed. This is for
  416. ``load address'' and ``push address'' instructions.
  417. If `p' is used in the constraint, the test-function in the
  418. `match_operand' must be `address_operand'.
  419. In order to have valid assembler code, each operand must satisfy its
  420. constraint. But a failure to do so does not prevent the pattern from
  421. applying to an insn. Instead, it directs the compiler to modify the code
  422. so that the constraint will be satisfied. Usually this is done by copying
  423. an operand into a register.
  424. Contrast, therefore, the two instruction patterns that follow:
  425. (define_insn ""
  426. [(set (match_operand:SI 0 "general_operand" "r")
  427. (plus:SI (match_dup 0)
  428. (match_operand:SI 1 "general_operand" "r")))]
  429. ""
  430. "...")
  431. which has two operands, one of which must appear in two places, and
  432. (define_insn ""
  433. [(set (match_operand:SI 0 "general_operand" "r")
  434. (plus:SI (match_operand:SI 1 "general_operand" "0")
  435. (match_operand:SI 2 "general_operand" "r")))]
  436. ""
  437. "...")
  438. which has three operands, two of which are required by a constraint to be
  439. identical. If we are considering an insn of the form
  440. (insn N PREV NEXT
  441. (set (reg:SI 3)
  442. (plus:SI (reg:SI 6) (reg:SI 109)))
  443. ...)
  444. the first pattern would not apply at all, because this insn does not
  445. contain two identical subexpressions in the right place. The pattern would
  446. say, ``That does not look like an add instruction; try other patterns.''
  447. The second pattern would say, ``Yes, that's an add instruction, but there
  448. is something wrong with it.'' It would direct the reload pass of the
  449. compiler to generate additional insns to make the constraint true. The
  450. results might look like this:
  451. (insn N2 PREV N
  452. (set (reg:SI 3) (reg:SI 6))
  453. ...)
  454. (insn N N2 NEXT
  455. (set (reg:SI 3)
  456. (plus:SI (reg:SI 3) (reg:SI 109)))
  457. ...)
  458. Because insns that don't fit the constraints are fixed up by loading
  459. operands into registers, every instruction pattern's constraints must
  460. permit the case where all the operands are in registers. It need not
  461. permit all classes of registers; the compiler knows how to copy registers
  462. into other registers of the proper class in order to make an instruction
  463. valid. But if no registers are permitted, the compiler will be stymied: it
  464. does not know how to save a register in memory in order to make an
  465. instruction valid. Instruction patterns that reject registers can be made
  466. valid by attaching a condition-expression that refuses to match an insn at
  467. all if the crucial operand is a register.
  468. 
  469. File: internals, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints
  470. Multiple Alternative Constraints
  471. --------------------------------
  472. Sometimes a single instruction has multiple alternative sets of possible
  473. operands. For example, on the 68000, a logical-or instruction can combine
  474. register or an immediate value into memory, or it can combine any kind of
  475. operand into a register; but it cannot combine one memory location into
  476. another.
  477. These constraints are represented as multiple alternatives. An alternative
  478. can be described by a series of letters for each operand. The overall
  479. constraint for an operand is made from the letters for this operand from
  480. the first alternative, a comma, the letters for this operand from the
  481. second alternative, a comma, and so on until the last alternative. Here is
  482. how it is done for fullword logical-or on the 68000:
  483. (define_insn "iorsi3"
  484. [(set (match_operand:SI 0 "general_operand" "=%m,d")
  485. (ior:SI (match_operand:SI 1 "general_operand" "0,0")
  486. (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  487. ...)
  488. The first alternative has `m' (memory) for operand 0, `0' for operand 1
  489. (meaning it must match operand 0), and `dKs' for operand 2. The second
  490. alternative has `d' (data register) for operand 0, `0' for operand 1, and
  491. `dmKs' for operand 2. The `=' and `%' in the constraint for operand 0 are
  492. not part of any alternative; their meaning is explained in the next section.
  493. If all the operands fit any one alternative, the instruction is valid.
  494. Otherwise, for each alternative, the compiler counts how many instructions
  495. must be added to copy the operands so that that alternative applies. The
  496. alternative requiring the least copying is chosen. If two alternatives
  497. need the same amount of copying, the one that comes first is chosen. These
  498. choices can be altered with the `?' and `!' characters:
  499. `?'
  500. Disparage slightly the alternative that the `?' appears in, as a
  501. choice when no alternative applies exactly. The compiler regards this
  502. alternative as one unit more costly for each `?' that appears in it.
  503. `!'
  504. Disparage severely the alternative that the `!' appears in. When
  505. operands must be copied into registers, the compiler will never choose
  506. this alternative as the one to strive for.
  507. When an insn pattern has multiple alternatives in its constraints, often
  508. the appearance of the assembler code determined mostly by which alternative
  509. was matched. When this is so, the C code for writing the assembler code
  510. can use the variable `which_alternative', which is the ordinal number of
  511. the alternative that was actually satisfied (0 for the first, 1 for the
  512. second alternative, etc.). For example:
  513. (define_insn ""
  514. [(set (match_operand:SI 0 "general_operand" "r,m")
  515. (const_int 0))]
  516. ""
  517. "*
  518. return (which_alternative == 0
  519. ? \"clrreg %0\" : \"clrmem %0\");
  520. ")
  521. 
  522. File: internals, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints
  523. Register Class Preferences
  524. --------------------------
  525. The operand constraints have another function: they enable the compiler to
  526. decide which kind of hardware register a pseudo register is best allocated
  527. to. The compiler examines the constraints that apply to the insns that use
  528. the pseudo register, looking for the machine-dependent letters such as `d'
  529. and `a' that specify classes of registers. The pseudo register is put in
  530. whichever class gets the most ``votes''. The constraint letters `g' and
  531. `r' also vote: they vote in favor of a general register. The machine
  532. description says which registers are considered general.
  533. Of course, on some machines all registers are equivalent, and no register
  534. classes are defined. Then none of this complexity is relevant.
  535. 
  536. File: internals, Node: Modifiers, Next: No Constraints, Prev: Class Preferences, Up: Constraints
  537. Constraint Modifier Characters
  538. ------------------------------
  539. `='
  540. Means that this operand is write-only for this instruction: the
  541. previous value is discarded and replaced by output data.
  542. `+'
  543. Means that this operand is both read and written by the instruction.
  544. When the compiler fixes up the operands to satisfy the constraints, it
  545. needs to know which operands are inputs to the instruction and which
  546. are outputs from it. `=' identifies an output; `+' identifies an
  547. operand that is both input and output; all other operands are assumed
  548. to be input only.
  549. `&'
  550. Means (in a particular alternative) that this operand is written
  551. before the instruction is finished using the input operands.
  552. Therefore, this operand may not lie in a register that is used as an
  553. input operand or as part of any memory address.
  554. `&' applies only to the alternative in which it is written. In
  555. constraints with multiple alternatives, sometimes one alternative
  556. requires `&' while others do not. See, for example, the `movdf' insn
  557. of the 68000.
  558. `&' does not obviate the need to write `='.
  559. `%'
  560. Declares the instruction to be commutative for this operand and the
  561. following operand. This means that the compiler may interchange the
  562. two operands if that is the cheapest way to make all operands fit the
  563. constraints. This is often used in patterns for addition instructions
  564. that really have only two operands: the result must go in one of the
  565. arguments. Here for example, is how the 68000 halfword-add
  566. instruction is defined:
  567. (define_insn "addhi3"
  568. [(set (match_operand:HI 0 "general_operand" "=m,r")
  569. (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
  570. (match_operand:HI 2 "general_operand" "di,g")))]
  571. ...)
  572. Note that in previous versions of GNU CC the `%' constraint modifier
  573. always applied to operands 1 and 2 regardless of which operand it was
  574. written in. The usual custom was to write it in operand 0. Now it
  575. must be in operand 1 if the operands to be exchanged are 1 and 2.
  576. `#'
  577. Says that all following characters, up to the next comma, are to be
  578. ignored as a constraint. They are significant only for choosing
  579. register preferences.
  580. `*'
  581. Says that the following character should be ignored when choosing
  582. register preferences. `*' has no effect on the meaning of the
  583. constraint as a constraint.
  584. Here is an example: the 68000 has an instruction to sign-extend a
  585. halfword in a data register, and can also sign-extend a value by
  586. copying it into an address register. While either kind of register is
  587. acceptable, the constraints on an address-register destination are
  588. less strict, so it is best if register allocation makes an address
  589. register its goal. Therefore, `*' is used so that the `d' constraint
  590. letter (for data register) is ignored when computing register
  591. preferences.
  592. (define_insn "extendhisi2"
  593. [(set (match_operand:SI 0 "general_operand" "=*d,a")
  594. (sign_extend:SI
  595. (match_operand:HI 1 "general_operand" "0,g")))]
  596. ...)
  597. 
  598. File: internals, Node: No Constraints, Prev: Modifiers, Up: Constraints
  599. Not Using Constraints
  600. ---------------------
  601. Some machines are so clean that operand constraints are not required. For
  602. example, on the Vax, an operand valid in one context is valid in any other
  603. context. On such a machine, every operand constraint would be `g',
  604. excepting only operands of ``load address'' instructions which are written
  605. as if they referred to a memory location's contents but actual refer to its
  606. address. They would have constraint `p'.
  607. For such machines, instead of writing `g' and `p' for all the constraints,
  608. you can choose to write a description with empty constraints. Then you
  609. write `""' for the constraint in every `match_operand'. Address operands
  610. are identified by writing an `address' expression around the
  611. `match_operand', not by their constraints.
  612. When the machine description has just empty constraints, certain parts of
  613. compilation are skipped, making the compiler faster.
  614. 
  615. File: internals, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc
  616. Standard Names for Patterns Used in Generation
  617. ==============================================
  618. Here is a table of the instruction names that are meaningful in the RTL
  619. generation pass of the compiler. Giving one of these names to an
  620. instruction pattern tells the RTL generation pass that it can use the
  621. pattern in to accomplish a certain task.
  622. `movM'
  623. Here M is a two-letter machine mode name, in lower case. This
  624. instruction pattern moves data with that machine mode from operand 1
  625. to operand 0. For example, `movsi' moves full-word data.
  626. If operand 0 is a `subreg' with mode M of a register whose natural
  627. mode is wider than M, the effect of this instruction is to store the
  628. specified value in the part of the register that corresponds to mode
  629. M. The effect on the rest of the register is undefined.
  630. `movstrictM'
  631. Like `movM' except that if operand 0 is a `subreg' with mode M of a
  632. register whose natural mode is wider, the `movstrictM' instruction is
  633. guaranteed not to alter any of the register except the part which
  634. belongs to mode M.
  635. `addM3'
  636. Add operand 2 and operand 1, storing the result in operand 0. All
  637. operands must have mode M. This can be used even on two-address
  638. machines, by means of constraints requiring operands 1 and 0 to be the
  639. same location.
  640. `subM3', `mulM3', `umulM3', `divM3', `udivM3', `modM3', `umodM3', `andM3', `iorM3', `xorM3'
  641. Similar, for other arithmetic operations.
  642. `andcbM3'
  643. Bitwise logical-and operand 1 with the complement of operand 2 and
  644. store the result in operand 0.
  645. `mulhisi3'
  646. Multiply operands 1 and 2, which have mode `HImode', and store a
  647. `SImode' product in operand 0.
  648. `mulqihi3', `mulsidi3'
  649. Similar widening-multiplication instructions of other widths.
  650. `umulqihi3', `umulhisi3', `umulsidi3'
  651. Similar widening-multiplication instructions that do unsigned
  652. multiplication.
  653. `divmodM4'
  654. Signed division that produces both a quotient and a remainder.
  655. Operand 1 is divided by operand 2 to produce a quotient stored in
  656. operand 0 and a remainder stored in operand 3.
  657. `udivmodM4'
  658. Similar, but does unsigned division.
  659. `divmodMN4'
  660. Like `divmodM4' except that only the dividend has mode M; the divisor,
  661. quotient and remainder have mode N. For example, the Vax has a
  662. `divmoddisi4' instruction (but it is omitted from the machine
  663. description, because it is so slow that it is faster to compute
  664. remainders by the circumlocution that the compiler will use if this
  665. instruction is not available).
  666. `ashlM3'
  667. Arithmetic-shift operand 1 left by a number of bits specified by
  668. operand 2, and store the result in operand 0. Operand 2 has mode
  669. `SImode', not mode M.
  670. `ashrM3', `lshlM3', `lshrM3', `rotlM3', `rotrM3'
  671. Other shift and rotate instructions.
  672. Logical and arithmetic left shift are the same. Machines that do not
  673. allow negative shift counts often have only one instruction for
  674. shifting left. On such machines, you should define a pattern named
  675. `ashlM3' and leave `lshlM3' undefined.
  676. `negM2'
  677. Negate operand 1 and store the result in operand 0.
  678. `absM2'
  679. Store the absolute value of operand 1 into operand 0.
  680. `sqrtM2'
  681. Store the square root of operand 1 into operand 0.
  682. `ffsM2'
  683. Store into operand 0 one plus the index of the least significant 1-bit
  684. of operand 1. If operand 1 is zero, store zero. M is the mode of
  685. operand 0; operand 1's mode is specified by the instruction pattern,
  686. and the compiler will convert the operand to that mode before
  687. generating the instruction.
  688. `one_cmplM2'
  689. Store the bitwise-complement of operand 1 into operand 0.
  690. `cmpM'
  691. Compare operand 0 and operand 1, and set the condition codes. The RTL
  692. pattern should look like this:
  693. (set (cc0) (minus (match_operand:M 0 ...)
  694. (match_operand:M 1 ...)))
  695. Each such definition in the machine description, for integer mode M,
  696. must have a corresponding `tstM' pattern, because optimization can
  697. simplify the compare into a test when operand 1 is zero.
  698. `tstM'
  699. Compare operand 0 against zero, and set the condition codes. The RTL
  700. pattern should look like this:
  701. (set (cc0) (match_operand:M 0 ...))
  702. `movstrM'
  703. Block move instruction. The addresses of the destination and source
  704. strings are the first two operands, and both are in mode `Pmode'. The
  705. number of bytes to move is the third operand, in mode M.
  706. `cmpstrM'
  707. Block compare instruction, with operands like `movstrM' except that
  708. the two memory blocks are compared byte by byte in lexicographic
  709. order. The effect of the instruction is to set the condition codes.
  710. `floatMN2'
  711. Convert operand 1 (valid for fixed point mode M) to floating point
  712. MODE N and store in operand 0 (which has mode N).
  713. `fixMN2'
  714. Convert operand 1 (valid for floating point mode M) to fixed point
  715. MODE N as a signed number and store in operand 0 (which has mode N).
  716. This instruction's result is defined only when the value of operand 1
  717. is an integer.
  718. `fixunsMN2'
  719. Convert operand 1 (valid for floating point mode M) to fixed point
  720. MODE N as an unsigned number and store in operand 0 (which has mode
  721. N). This instruction's result is defined only when the value of
  722. operand 1 is an integer.
  723. `ftruncM2'
  724. Convert operand 1 (valid for floating point mode M) to an integer
  725. value, still represented in floating point mode M, and store it in
  726. operand 0 (valid for floating point mode M).
  727. `fix_truncMN2'
  728. Like `fixMN2' but works for any floating point value of mode M by
  729. converting the value to an integer.
  730. `fixuns_truncMN2'
  731. Like `fixunsMN2' but works for any floating point value of mode M by
  732. converting the value to an integer.
  733. `truncMN'
  734. Truncate operand 1 (valid for mode M) to mode N and store in operand 0
  735. (which has mode N). Both modes must be fixed point or both floating
  736. point.
  737. `extendMN'
  738. Sign-extend operand 1 (valid for mode M) to mode N and store in
  739. operand 0 (which has mode N). Both modes must be fixed point or both
  740. floating point.
  741. `zero_extendMN'
  742. Zero-extend operand 1 (valid for mode M) to mode N and store in
  743. operand 0 (which has mode N). Both modes must be fixed point.
  744. `extv'
  745. Extract a bit-field from operand 1 (a register or memory operand),
  746. where operand 2 specifies the width in bits and operand 3 the starting
  747. bit, and store it in operand 0. Operand 0 must have `Simode'.
  748. Operand 1 may have mode `QImode' or `SImode'; often `SImode' is
  749. allowed only for registers. Operands 2 and 3 must be valid for
  750. `SImode'.
  751. The RTL generation pass generates this instruction only with constants
  752. for operands 2 and 3.
  753. The bit-field value is sign-extended to a full word integer before it
  754. is stored in operand 0.
  755. `extzv'
  756. Like `extv' except that the bit-field value is zero-extended.
  757. `insv'
  758. Store operand 3 (which must be valid for `SImode') into a bit-field in
  759. operand 0, where operand 1 specifies the width in bits and operand 2
  760. the starting bit. Operand 0 may have mode `QImode' or `SImode'; often
  761. `SImode' is allowed only for registers. Operands 1 and 2 must be
  762. valid for `SImode'.
  763. The RTL generation pass generates this instruction only with constants
  764. for operands 1 and 2.
  765. `sCOND'
  766. Store zero or nonzero in the operand according to the condition codes.
  767. Value stored is nonzero iff the condition COND is true. COND is the
  768. name of a comparison operation expression code, such as `eq', `lt' or
  769. `leu'.
  770. You specify the mode that the operand must have when you write the
  771. `match_operand' expression. The compiler automatically sees which
  772. mode you have used and supplies an operand of that mode.
  773. The value stored for a true condition must have 1 as its low bit.
  774. Otherwise the instruction is not suitable and must be omitted from the
  775. machine description. You must tell the compiler exactly which value
  776. is stored by defining the macro `STORE_FLAG_VALUE'.
  777. `bCOND'
  778. Conditional branch instruction. Operand 0 is a `label_ref' that
  779. refers to the label to jump to. Jump if the condition codes meet
  780. condition COND.
  781. `call'
  782. Subroutine call instruction. Operand 1 is the number of bytes of
  783. arguments pushed (in mode `SImode'), and operand 0 is the function to
  784. call. Operand 0 should be a `mem' RTX whose address is the address of
  785. the function.
  786. `return'
  787. Subroutine return instruction. This instruction pattern name should
  788. be defined only if a single instruction can do all the work of
  789. returning from a function.
  790. `tablejump'
  791. `caseM'
  792. 
  793. File: internals, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc
  794. When the Order of Patterns Matters
  795. ==================================
  796. Sometimes an insn can match more than one instruction pattern. Then the
  797. pattern that appears first in the machine description is the one used.
  798. Therefore, more specific patterns (patterns that will match fewer things)
  799. and faster instructions (those that will produce better code when they do
  800. match) should usually go first in the description.
  801. In some cases the effect of ordering the patterns can be used to hide a
  802. pattern when it is not valid. For example, the 68000 has an instruction
  803. for converting a fullword to floating point and another for converting a
  804. byte to floating point. An instruction converting an integer to floating
  805. point could match either one. We put the pattern to convert the fullword
  806. first to make sure that one will be used rather than the other. (Otherwise
  807. a large integer might be generated as a single-byte immediate quantity,
  808. which would not work.) Instead of using this pattern ordering it would be
  809. possible to make the pattern for convert-a-byte smart enough to deal
  810. properly with any constant value.
  811. 
  812. File: internals, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc
  813. Interdependence of Patterns
  814. ===========================
  815. Every machine description must have a named pattern for each of the
  816. conditional branch names `bCOND'. The recognition template must always
  817. have the form
  818. (set (pc)
  819. (if_then_else (COND (cc0) (const_int 0))
  820. (label_ref (match_operand 0 "" ""))
  821. (pc)))
  822. In addition, every machine description must have an anonymous pattern for
  823. each of the possible reverse-conditional branches. These patterns look like
  824. (set (pc)
  825. (if_then_else (COND (cc0) (const_int 0))
  826. (pc)
  827. (label_ref (match_operand 0 "" ""))))
  828. They are necessary because jump optimization can turn direct-conditional
  829. branches into reverse-conditional branches.
  830. The compiler does more with RTL than just create it from patterns and
  831. recognize the patterns: it can perform arithmetic expression codes when
  832. constant values for their operands can be determined. As a result,
  833. sometimes having one pattern can require other patterns. For example, the
  834. Vax has no `and' instruction, but it has `and not' instructions. Here is
  835. the definition of one of them:
  836. (define_insn "andcbsi2"
  837. [(set (match_operand:SI 0 "general_operand" "")
  838. (and:SI (match_dup 0)
  839. (not:SI (match_operand:SI
  840. 1 "general_operand" ""))))]
  841. ""
  842. "bicl2 %1,%0")
  843. If operand 1 is an explicit integer constant, an instruction constructed
  844. using that pattern can be simplified into an `and' like this:
  845. (set (reg:SI 41)
  846. (and:SI (reg:SI 41)
  847. (const_int 0xffff7fff)))
  848. (where the integer constant is the one's complement of what appeared in the
  849. original instruction).
  850. To avoid a fatal error, the compiler must have a pattern that recognizes
  851. such an instruction. Here is what is used:
  852. (define_insn ""
  853. [(set (match_operand:SI 0 "general_operand" "")
  854. (and:SI (match_dup 0)
  855. (match_operand:SI 1 "general_operand" "")))]
  856. "GET_CODE (operands[1]) == CONST_INT"
  857. "*
  858. { operands[1]
  859. = gen_rtx (CONST_INT, VOIDmode, ~INTVAL (operands[1]));
  860. return \"bicl2 %1,%0\";
  861. }")
  862. Whereas a pattern to match a general `and' instruction is impossible to
  863. support on the Vax, this pattern is possible because it matches only a
  864. constant second argument: a special case that can be output as an `and not'
  865. instruction.
  866. A ``compare'' instruction whose RTL looks like this:
  867. (set (cc0) (minus OPERAND (const_int 0)))
  868. may be simplified by optimization into a ``test'' like this:
  869. (set (cc0) OPERAND)
  870. So in the machine description, each ``compare'' pattern for an integer mode
  871. must have a corresponding ``test'' pattern that will match the result of
  872. such simplification.
  873. In some cases machines support instructions identical except for the
  874. machine mode of one or more operands. For example, there may be
  875. ``sign-extend halfword'' and ``sign-extend byte'' instructions whose
  876. patterns are
  877. (set (match_operand:SI 0 ...)
  878. (extend:SI (match_operand:HI 1 ...)))
  879. (set (match_operand:SI 0 ...)
  880. (extend:SI (match_operand:QI 1 ...)))
  881. Constant integers do not specify a machine mode, so an instruction to
  882. extend a constant value could match either pattern. The pattern it
  883. actually will match is the one that appears first in the file. For correct
  884. results, this must be the one for the widest possible mode (`HImode',
  885. here). If the pattern matches the `QImode' instruction, the results will
  886. be incorrect if the constant value does not actually fit that mode.
  887. Such instructions to extend constants are rarely generated because they are
  888. optimized away, but they do occasionally happen in nonoptimized compilations.
  889. 
  890. File: internals, Node: Jump Patterns, Next: Peephole Definitions, Prev: Dependent Patterns, Up: Machine Desc
  891. Defining Jump Instruction Patterns
  892. ==================================
  893. GNU CC assumes that the machine has a condition code. A comparison insn
  894. sets the condition code, recording the results of both signed and unsigned
  895. comparison of the given operands. A separate branch insn tests the
  896. condition code and branches or not according its value. The branch insns
  897. come in distinct signed and unsigned flavors. Many common machines, such
  898. as the Vax, the 68000 and the 32000, work this way.
  899. Some machines have distinct signed and unsigned compare instructions, and
  900. only one set of conditional branch instructions. The easiest way to handle
  901. these machines is to treat them just like the others until the final stage
  902. where assembly code is written. At this time, when outputting code for the
  903. compare instruction, peek ahead at the following branch using `NEXT_INSN
  904. (insn)'. (The variable `insn' refers to the insn being output, in the
  905. output-writing code in an instruction pattern.) If the RTL says that is an
  906. unsigned branch, output an unsigned compare; otherwise output a signed
  907. compare. When the branch itself is output, you can treat signed and
  908. unsigned branches identically.
  909. The reason you can do this is that GNU CC always generates a pair of
  910. consecutive RTL insns, one to set the condition code and one to test it,
  911. and keeps the pair inviolate until the end.
  912. To go with this technique, you must define the machine-description macro
  913. `NOTICE_UPDATE_CC' to do `CC_STATUS_INIT'; in other words, no compare
  914. instruction is superfluous.
  915. Some machines have compare-and-branch instructions and no condition code.
  916. A similar technique works for them. When it is time to ``output'' a
  917. compare instruction, record its operands in two static variables. When
  918. outputting the branch-on-condition-code instruction that follows, actually
  919. output a compare-and-branch instruction that uses the remembered operands.
  920. It also works to define patterns for compare-and-branch instructions. In
  921. optimizing compilation, the pair of compare and branch instructions will be
  922. combined accoprding to these patterns. But this does not happen if
  923. optimization is not requested. So you must use one of the solutions above
  924. in addition to any special patterns you define.
  925.