doc: Add missing neg entry to index
[qbe.git] / doc / il.txt
blob928d16c2d69771d0664311104b40585e5ad3e870
1                 ===========================
2                  QBE Intermediate Language
3                 ===========================
7 - Table of Contents
8 -------------------
10   1. <@ Basic Concepts >
11       * <@ Input Files >
12       * <@ BNF Notation >
13       * <@ Sigils >
14   2. <@ Types >
15       * <@ Simple Types >
16       * <@ Subtyping >
17   3. <@ Constants >
18   4. <@ Linkage >
19   5. <@ Definitions >
20       * <@ Aggregate Types >
21       * <@ Data >
22       * <@ Functions >
23   6. <@ Control >
24       * <@ Blocks >
25       * <@ Jumps >
26   7. <@ Instructions >
27       * <@ Arithmetic and Bits >
28       * <@ Memory >
29       * <@ Comparisons >
30       * <@ Conversions >
31       * <@ Cast and Copy >
32       * <@ Call >
33       * <@ Variadic >
34       * <@ Phi >
35   8. <@ Instructions Index >
37 - 1. Basic Concepts
38 -------------------
40 The intermediate language (IL) is a higher-level language
41 than the machine's assembly language.  It smoothes most
42 of the irregularities of the underlying hardware and
43 allows an infinite number of temporaries to be used.
44 This higher abstraction level allows frontend programmers
45 to focus on language design issues.
47 ~ Input Files
48 ~~~~~~~~~~~~~
50 The intermediate language is provided to QBE as text.
51 Usually, one file is generated per each compilation unit from
52 the frontend input language.  An IL file is a sequence of
53 <@ Definitions > for data, functions, and types.  Once
54 processed by QBE, the resulting file can be assembled and
55 linked using a standard toolchain (e.g., GNU binutils).
57 Here is a complete "Hello World" IL file which defines a
58 function that prints to the screen.  Since the string is
59 not a first class object (only the pointer is) it is
60 defined outside the function's body.  Comments start with
61 a # character and finish with the end of the line.
63     # Define the string constant.
64     data $str = { b "hello world", b 0 }
66     function w $main() {
67     @start
68             # Call the puts function with $str as argument.
69             %r =w call $puts(l $str)
70             ret 0
71     }
73 If you have read the LLVM language reference, you might
74 recognize the example above.  In comparison, QBE makes a
75 much lighter use of types and the syntax is terser.
77 ~ BNF Notation
78 ~~~~~~~~~~~~~~
80 The language syntax is vaporously described in the sections
81 below using BNF syntax.  The different BNF constructs used
82 are listed below.
84   * Keywords are enclosed between quotes;
85   * `... | ...` expresses disjunctions;
86   * `[ ... ]` marks some syntax as optional;
87   * `( ... ),` designates a comma-separated list of the
88     enclosed syntax;
89   * `...*` and `...+` are used for arbitrary and
90     at-least-once repetition respectively.
92 ~ Sigils
93 ~~~~~~~~
95 The intermediate language makes heavy use of sigils, all
96 user-defined names are prefixed with a sigil.  This is
97 to avoid keyword conflicts, and also to quickly spot the
98 scope and nature of identifiers.
100  * `:` is for user-defined <@ Aggregate Types>
101  * `$` is for globals (represented by a pointer)
102  * `%` is for function-scope temporaries
103  * `@` is for block labels
105 In this BNF syntax, we use `?IDENT` to designate an identifier
106 starting with the sigil `?`.
108 - 2. Types
109 ----------
111 ~ Simple Types
112 ~~~~~~~~~~~~~~
114     `bnf
115     BASETY := 'w' | 'l' | 's' | 'd'  # Base types
116     EXTTY  := BASETY    | 'b' | 'h'  # Extended types
118 The IL makes minimal use of types.  By design, the types
119 used are restricted to what is necessary for unambiguous
120 compilation to machine code and C interfacing.  Unlike LLVM,
121 QBE is not using types as a means to safety; they are only
122 here for semantic purposes.
124 The four base types are `w` (word), `l` (long), `s` (single),
125 and `d` (double), they stand respectively for 32-bit and
126 64-bit integers, and 32-bit and 64-bit floating-point numbers.
127 There are no pointer types available; pointers are typed
128 by an integer type sufficiently wide to represent all memory
129 addresses (e.g., `l` on 64-bit architectures).  Temporaries
130 in the IL can only have a basic type.
132 Extended types contain base types plus `b` (byte) and `h`
133 (half word), respectively for 8-bit and 16-bit integers.
134 They are used in <@ Aggregate Types> and <@ Data> definitions.
136 For C interfacing, the IL also provides user-defined aggregate
137 types.  The syntax used to designate them is `:foo`.  Details
138 about their definition are given in the <@ Aggregate Types >
139 section.
141 ~ Subtyping
142 ~~~~~~~~~~~
144 The IL has a minimal subtyping feature, for integer types only.
145 Any value of type `l` can be used in a `w` context.  In that
146 case, only the 32 least significant bits of the word value
147 are used.
149 Make note that it is the opposite of the usual subtyping on
150 integers (in C, we can safely use an `int` where a `long`
151 is expected).  A long value cannot be used in word context.
152 The rationale is that a word can be signed or unsigned, so
153 extending it to a long could be done in two ways, either
154 by zero-extension, or by sign-extension.
156 - 3. Constants
157 --------------
159     `bnf
160     CONST :=
161         ['-'] NUMBER  # Decimal integer
162       | 's_' FP       # Single-precision float
163       | 'd_' FP       # Double-precision float
164       | $IDENT        # Global symbol
166 Throughout the IL, constants are specified with a unified
167 syntax and semantics.  Constants are immediates, meaning
168 that they can be used directly in instructions; there is
169 no need for a "load constant" instruction.
171 The representation of integers is two's complement.
172 Floating-point numbers are represented using the
173 single-precision and double-precision formats of the
174 IEEE 754 standard.
176 Constants specify a sequence of bits and are untyped.
177 They are always parsed as 64-bit blobs.  Depending on
178 the context surrounding a constant, only some of its
179 bits are used.  For example, in the program below, the
180 two variables defined have the same value since the first
181 operand of the subtraction is a word (32-bit) context.
183     %x =w sub -1, 0
184     %y =w sub 4294967295, 0
186 Because specifying floating-point constants by their bits
187 makes the code less readable, syntactic sugar is provided
188 to express them.  Standard scientific notation is prefixed
189 with `s_` and `d_` for single and double precision numbers
190 respectively. Once again, the following example defines twice
191 the same double-precision constant.
193     %x =d add d_0, d_-1
194     %y =d add d_0, -4616189618054758400
196 Global symbols can also be used directly as constants;
197 they will be resolved and turned into actual numeric
198 constants by the linker.
200 - 4. Linkage
201 ------------
203     `bnf
204     LINKAGE :=
205         'export'
206       | 'section' SECNAME
207       | 'section' SECNAME SECFLAGS
209     SECNAME  := '"' .... '"'
210     SECFLAGS := '"' .... '"'
212 Function and data definitions (see below) can specify
213 linkage information to be passed to the assembler and
214 eventually to the linker.
216 The `export` linkage flag marks the defined item as
217 visible outside the current file's scope.  If absent,
218 the symbol can only be referred to locally.  Functions
219 compiled by QBE and called from C need to be exported.
221 A `section` flag can be specified to tell the linker to
222 put the defined item in a certain section.  The use of
223 the section flag is platform dependent and we refer the
224 user to the documentation of their assembler and linker
225 for relevant information.
227     section ".init_array"
228     data $.init.f = { l $f }
230 The section flag can be used to add function pointers to
231 a global initialization list, as depicted above.  Note
232 that some platforms provide a BSS section that can be
233 used to minimize the footprint of uniformly zeroed data.
234 When this section is available, QBE will automatically
235 make use of it and no section flag is required.
237 The section and export linkage flags should each appear
238 at most once in a definition.  If multiple occurrences
239 are present, QBE is free to use any.
241 - 5. Definitions
242 ----------------
244 Definitions are the essential components of an IL file.
245 They can define three types of objects: aggregate types,
246 data, and functions.  Aggregate types are never exported
247 and do not compile to any code.  Data and function
248 definitions have file scope and are mutually recursive
249 (even across IL files).  Their visibility can be controlled
250 using linkage flags.
252 ~ Aggregate Types
253 ~~~~~~~~~~~~~~~~~
255     `bnf
256     TYPEDEF :=
257         # Regular type
258         'type' :IDENT '=' ['align' NUMBER]
259         '{'
260             ( SUBTY [NUMBER] ),
261         '}'
262       | # Opaque type
263         'type' :IDENT '=' 'align' NUMBER '{' NUMBER '}'
265     SUBTY := EXTTY | :IDENT
267 Aggregate type definitions start with the `type` keyword.
268 They have file scope, but types must be defined before being
269 referenced.  The inner structure of a type is expressed by a
270 comma-separated list of types enclosed in curly braces.
272     type :fourfloats = { s, s, d, d }
274 For ease of IL generation, a trailing comma is tolerated by
275 the parser.  In case many items of the same type are
276 sequenced (like in a C array), the shorter array syntax
277 can be used.
279     type :abyteandmanywords = { b, w 100 }
281 By default, the alignment of an aggregate type is the
282 maximum alignment of its members.  The alignment can be
283 explicitly specified by the programmer.
285     type :cryptovector = align 16 { w 4 }
287 Opaque types are used when the inner structure of an
288 aggregate cannot be specified; the alignment for opaque
289 types is mandatory.  They are defined simply by enclosing
290 their size between curly braces.
292     type :opaque = align 16 { 32 }
294 ~ Data
295 ~~~~~~
297     `bnf
298     DATADEF :=
299         LINKAGE* 'data' $IDENT '=' ['align' NUMBER]
300         '{'
301             ( EXTTY DATAITEM+
302             | 'z'   NUMBER ),
303         '}'
305     DATAITEM :=
306         $IDENT ['+' NUMBER]  # Symbol and offset
307       |  '"' ... '"'         # String
308       |  CONST               # Constant
310 Data definitions express objects that will be emitted in the
311 compiled file.  Their visibility and location in the compiled
312 artifact are controlled with linkage flags described in the
313 <@ Linkage > section.
315 They define a global identifier (starting with the sigil
316 `$`), that will contain a pointer to the object specified
317 by the definition.
319 Objects are described by a sequence of fields that start with
320 a type letter.  This letter can either be an extended type,
321 or the `z` letter.  If the letter used is an extended type,
322 the data item following specifies the bits to be stored in
323 the field.  When several data items follow a letter, they
324 initialize multiple fields of the same size.
326 The members of a struct will be packed.  This means that
327 padding has to be emitted by the frontend when necessary.
328 Alignment of the whole data objects can be manually specified,
329 and when no alignment is provided, the maximum alignment from
330 the platform is used.
332 When the `z` letter is used the number following indicates
333 the size of the field; the contents of the field are zero
334 initialized.  It can be used to add padding between fields
335 or zero-initialize big arrays.
337 Here are various examples of data definitions.
339     # Three 32-bit values 1, 2, and 3
340     # followed by a 0 byte.
341     data $a = { w 1 2 3, b 0 }
343     # A thousand bytes 0 initialized.
344     data $b = { z 1000 }
346     # An object containing two 64-bit
347     # fields, one with all bits sets and the
348     # other containing a pointer to the
349     # object itself.
350     data $c = { l -1, l $c }
352 ~ Functions
353 ~~~~~~~~~~~
355     `bnf
356     FUNCDEF :=
357         LINKAGE* 'function' [ABITY] $IDENT '(' (PARAM), ')'
358         '{'
359            BLOCK+
360         '}'
362     PARAM :=
363         ABITY %IDENT  # Regular parameter
364       | 'env' %IDENT  # Environment parameter (first)
365       | '...'         # Variadic marker (last)
367     ABITY := BASETY | :IDENT
369 Function definitions contain the actual code to emit in
370 the compiled file.  They define a global symbol that
371 contains a pointer to the function code.  This pointer
372 can be used in `call` instructions or stored in memory.
374 The type given right before the function name is the
375 return type of the function.  All return values of this
376 function must have this return type.  If the return
377 type is missing, the function cannot return any value.
379 The parameter list is a comma separated list of
380 temporary names prefixed by types.  The types are used
381 to correctly implement C compatibility.  When an argument
382 has an aggregate type, a pointer to the aggregate is passed
383 by the caller.  In the example below, we have to use a load
384 instruction to get the value of the first (and only)
385 member of the struct.
387     type :one = { w }
389     function w $getone(:one %p) {
390     @start
391             %val =w loadw %p
392             ret %val
393     }
395 If the parameter list ends with `...`, the function is
396 a variadic function: it can accept a variable number of
397 arguments.  To access the extra arguments provided by
398 the caller, use the `vastart` and `vaarg` instructions
399 described in the <@ Variadic > section.
401 Optionally, the parameter list can start with an
402 environment parameter `env %e`.  This special parameter is
403 a 64-bit integer temporary (i.e., of type `l`).  If the
404 function does not use its environment parameter, callers
405 can safely omit it.  This parameter is invisible to a C
406 caller: for example, the function
408     export function w $add(env %e, w %a, w %b) {
409     @start
410             %c =w add %a, %b
411             ret %c
412     }
414 must be given the C prototype `int add(int, int)`.
415 The intended use of this feature is to pass the
416 environment pointer of closures while retaining a
417 very good compatibility with C.  The <@ Call > section
418 explains how to pass an environment parameter.
420 Since global symbols are defined mutually recursive,
421 there is no need for function declarations: a function
422 can be referenced before its definition.
423 Similarly, functions from other modules can be used
424 without previous declaration.  All the type information
425 is provided in the call instructions.
427 The syntax and semantics for the body of functions
428 are described in the <@ Control > section.
430 - 6. Control
431 ------------
433 The IL represents programs as textual transcriptions of
434 control flow graphs.  The control flow is serialized as
435 a sequence of blocks of straight-line code which are
436 connected using jump instructions.
438 ~ Blocks
439 ~~~~~~~~
441     `bnf
442     BLOCK :=
443         @IDENT    # Block label
444         PHI*      # Phi instructions
445         INST*     # Regular instructions
446         JUMP      # Jump or return
448 All blocks have a name that is specified by a label at
449 their beginning.  Then follows a sequence of instructions
450 that have "fall-through" flow.  Finally one jump terminates
451 the block.  The jump can either transfer control to another
452 block of the same function or return; they are described
453 further below.
455 The first block in a function must not be the target of
456 any jump in the program.  If this is really needed,
457 the frontend could insert an empty prelude block
458 at the beginning of the function.
460 When one block jumps to the next block in the IL file,
461 it is not necessary to give the jump instruction, it
462 will be automatically added by the parser.  For example
463 the start block in the example below jumps directly
464 to the loop block.
466     function $loop() {
467     @start
468     @loop
469             %x =w phi @start 100, @loop %x1
470             %x1 =w sub %x, 1
471             jnz %x1, @loop, @end
472     @end
473             ret
474     }
476 ~ Jumps
477 ~~~~~~~
479     `bnf
480     JUMP :=
481         'jmp' @IDENT               # Unconditional
482       | 'jnz' VAL, @IDENT, @IDENT  # Conditional
483       | 'ret' [VAL]                # Return
485 A jump instruction ends every block and transfers the
486 control to another program location.  The target of
487 a jump must never be the first block in a function.
488 The three kinds of jumps available are described in
489 the following list.
491  1. Unconditional jump.
493     Simply jumps to another block of the same function.
495  2. Conditional jump.
497     When its word argument is non-zero, it jumps to its
498     first label argument; otherwise it jumps to the other
499     label.  The argument must be of word type; because of
500     subtyping a long argument can be passed, but only its
501     least significant 32 bits will be compared to 0.
503  3. Function return.
505     Terminates the execution of the current function,
506     optionally returning a value to the caller.  The value
507     returned must be of the type given in the function
508     prototype.  If the function prototype does not specify
509     a return type, no return value can be used.
511 - 7. Instructions
512 -----------------
514 Instructions are the smallest piece of code in the IL, they
515 form the body of <@ Blocks >.  The IL uses a three-address
516 code, which means that one instruction computes an operation
517 between two operands and assigns the result to a third one.
519 An instruction has both a name and a return type, this
520 return type is a base type that defines the size of the
521 instruction's result.  The type of the arguments can be
522 unambiguously inferred using the instruction name and the
523 return type.  For example, for all arithmetic instructions,
524 the type of the arguments is the same as the return type.
525 The two additions below are valid if `%y` is a word or a long
526 (because of <@ Subtyping >).
528     %x =w add 0, %y
529     %z =w add %x, %x
531 Some instructions, like comparisons and memory loads
532 have operand types that differ from their return types.
533 For instance, two floating points can be compared to give a
534 word result (0 if the comparison succeeds, 1 if it fails).
536     %c =w cgts %a, %b
538 In the example above, both operands have to have single type.
539 This is made explicit by the instruction suffix.
541 The types of instructions are described below using a short
542 type string.  A type string specifies all the valid return
543 types an instruction can have, its arity, and the type of
544 its arguments depending on its return type.
546 Type strings begin with acceptable return types, then
547 follows, in parentheses, the possible types for the arguments.
548 If the N-th return type of the type string is used for an
549 instruction, the arguments must use the N-th type listed for
550 them in the type string.  When an instruction does not have a
551 return type, the type string only contains the types of the
552 arguments.
554 The following abbreviations are used.
556   * `T` stands for `wlsd`
557   * `I` stands for `wl`
558   * `F` stands for `sd`
559   * `m` stands for the type of pointers on the target; on
560     64-bit architectures it is the same as `l`
562 For example, consider the type string `wl(F)`, it mentions
563 that the instruction has only one argument and that if the
564 return type used is long, the argument must be of type double.
566 ~ Arithmetic and Bits
567 ~~~~~~~~~~~~~~~~~~~~~
569   * `add`, `sub`, `div`, `mul` -- `T(T,T)`
570   * `neg` -- `T(T)`
571   * `udiv`, `rem`, `urem` -- `I(I,I)`
572   * `or`, `xor`, `and` -- `I(I,I)`
573   * `sar`, `shr`, `shl` -- `I(I,ww)`
575 The base arithmetic instructions in the first bullet are
576 available for all types, integers and floating points.
578 When `div` is used with word or long return type, the
579 arguments are treated as signed.  The unsigned integral
580 division is available as `udiv` instruction.  When the
581 result of a division is not an integer, it is truncated
582 towards zero.
584 The signed and unsigned remainder operations are available
585 as `rem` and `urem`.  The sign of the remainder is the same
586 as the one of the dividend.  Its magnitude is smaller than
587 the divisor one.  These two instructions and `udiv` are only
588 available with integer arguments and result.
590 Bitwise OR, AND, and XOR operations are available for both
591 integer types.  Logical operations of typical programming
592 languages can be implemented using <@ Comparisons > and
593 <@ Jumps >.
595 Shift instructions `sar`, `shr`, and `shl`, shift right or
596 left their first operand by the amount from the second
597 operand.  The shifting amount is taken modulo the size of
598 the result type.  Shifting right can either preserve the
599 sign of the value (using `sar`), or fill the newly freed
600 bits with zeroes (using `shr`).  Shifting left always
601 fills the freed bits with zeroes.
603 Remark that an arithmetic shift right (`sar`) is only
604 equivalent to a division by a power of two for non-negative
605 numbers.  This is because the shift right "truncates"
606 towards minus infinity, while the division truncates
607 towards zero.
609 ~ Memory
610 ~~~~~~~~
612   * Store instructions.
614       * `stored` -- `(d,m)`
615       * `stores` -- `(s,m)`
616       * `storel` -- `(l,m)`
617       * `storew` -- `(w,m)`
618       * `storeh` -- `(w,m)`
619       * `storeb` -- `(w,m)`
621     Store instructions exist to store a value of any base type
622     and any extended type.  Since halfwords and bytes are not
623     first class in the IL, `storeh` and `storeb` take a word
624     as argument.  Only the first 16 or 8 bits of this word will
625     be stored in memory at the address specified in the second
626     argument.
628   * Load instructions.
630       * `loadd` -- `d(m)`
631       * `loads` -- `s(m)`
632       * `loadl` -- `l(m)`
633       * `loadsw`, `loaduw` -- `I(mm)`
634       * `loadsh`, `loaduh` -- `I(mm)`
635       * `loadsb`, `loadub` -- `I(mm)`
637     For types smaller than long, two variants of the load
638     instruction are available: one will sign extend the loaded
639     value, while the other will zero extend it.  Note that
640     all loads smaller than long can load to either a long or
641     a word.
643     The two instructions `loadsw` and `loaduw` have the same
644     effect when they are used to define a word temporary.
645     A `loadw` instruction is provided as syntactic sugar for
646     `loadsw` to make explicit that the extension mechanism
647     used is irrelevant.
649   * Stack allocation.
651       * `alloc4` -- `m(l)`
652       * `alloc8` -- `m(l)`
653       * `alloc16` -- `m(l)`
655     These instructions allocate a chunk of memory on the
656     stack.  The number ending the instruction name is the
657     alignment required for the allocated slot.  QBE will
658     make sure that the returned address is a multiple of
659     that alignment value.
661     Stack allocation instructions are used, for example,
662     when compiling the C local variables, because their
663     address can be taken.  When compiling Fortran,
664     temporaries can be used directly instead, because
665     it is illegal to take the address of a variable.
667 The following example makes use some of the memory
668 instructions.  Pointers are stored in long temporaries.
670     %A0 =l alloc4 8      # stack allocate an array A of 2 words
671     %A1 =l add %A0, 4
672     storew 43,  %A0      # A[0] <- 43
673     storew 255, %A1      # A[1] <- 255
674     %v1 =w loadw  %A0    # %v1 <- A[0] as word
675     %v2 =w loadsb %A1    # %v2 <- A[1] as signed byte
676     %v3 =w add %v1, %v2  # %v3 is 42 here
678 ~ Comparisons
679 ~~~~~~~~~~~~~
681 Comparison instructions return an integer value (either a word
682 or a long), and compare values of arbitrary types.  The returned
683 value is 1 if the two operands satisfy the comparison
684 relation, or 0 otherwise.  The names of comparisons respect
685 a standard naming scheme in three parts.
687  1. All comparisons start with the letter `c`.
689  2. Then comes a comparison type.  The following
690     types are available for integer comparisons:
692       * `eq` for equality
693       * `ne` for inequality
694       * `sle` for signed lower or equal
695       * `slt` for signed lower
696       * `sge` for signed greater or equal
697       * `sgt` for signed greater
698       * `ule` for unsigned lower or equal
699       * `ult` for unsigned lower
700       * `uge` for unsigned greater or equal
701       * `ugt` for unsigned greater
703     Floating point comparisons use one of these types:
705       * `eq` for equality
706       * `ne` for inequality
707       * `le` for lower or equal
708       * `lt` for lower
709       * `ge` for greater or equal
710       * `gt` for greater
711       * `o` for ordered (no operand is a NaN)
712       * `uo` for unordered (at least one operand is a NaN)
714     Because floating point types always have a sign bit,
715     all the comparisons available are signed.
717  3. Finally, the instruction name is terminated with a
718     basic type suffix precising the type of the operands
719     to be compared.
721 For example, `cod` (`I(dd,dd)`) compares two double-precision
722 floating point numbers and returns 1 if the two floating points
723 are not NaNs, or 0 otherwise.  The `csltw` (`I(ww,ww)`)
724 instruction compares two words representing signed numbers and
725 returns 1 when the first argument is smaller than the second one.
727 ~ Conversions
728 ~~~~~~~~~~~~~
730 Conversion operations allow to change the representation of
731 a value, possibly modifying it if the target type cannot hold
732 the value of the source type.  Conversions can extend the
733 precision of a temporary (e.g., from signed 8-bit to 32-bit),
734 or convert a floating point into an integer and vice versa.
736   * `extsw`, `extuw` -- `l(w)`
737   * `extsh`, `extuh` -- `I(ww)`
738   * `extsb`, `extub` -- `I(ww)`
739   * `exts` -- `d(s)`
740   * `truncd` -- `s(d)`
741   * `stosi` -- `I(ss)`
742   * `stoui` -- `I(ss)`
743   * `dtosi` -- `I(dd)`
744   * `dtoui` -- `I(dd)`
745   * `swtof` -- `F(ww)`
746   * `uwtof` -- `F(ww)`
747   * `sltof` -- `F(ll)`
748   * `ultof` -- `F(ll)`
750 Extending the precision of a temporary is done using the
751 `ext` family of instructions.  Because QBE types do not
752 precise the signedness (like in LLVM), extension instructions
753 exist to sign-extend and zero-extend a value.  For example,
754 `extsb` takes a word argument and sign-extends the 8
755 least-significant bits to a full word or long, depending on
756 the return type.
758 The instructions `exts` and `truncd` are provided to change
759 the precision of a floating point value.  When the double
760 argument of `truncd` cannot be represented as a
761 single-precision floating point, it is truncated towards
762 zero.
764 Converting between signed integers and floating points is done
765 using `stosi` (single to signed integer), `stoui` (single to
766 unsigned integer, `dtosi` (double to signed integer), `dtoui`
767 (double to unsigned integer), `swtof` (signed word to float),
768 `uwtof` (unsigned word to float), `sltof` (signed long to
769 float) and `ultof` (unsigned long to float).
771 Because of <@ Subtyping >, there is no need to have an
772 instruction to lower the precision of an integer temporary.
774 ~ Cast and Copy
775 ~~~~~~~~~~~~~~~
777 The `cast` and `copy` instructions return the bits of their
778 argument verbatim.  However a `cast` will change an integer
779 into a floating point of the same width and vice versa.
781   * `cast` -- `wlsd(sdwl)`
782   * `copy` -- `T(T)`
784 Casts can be used to make bitwise operations on the
785 representation of floating point numbers.  For example
786 the following program will compute the opposite of the
787 single-precision floating point number `%f` into `%rs`.
789     %b0 =w cast %f
790     %b1 =w xor 2147483648, %b0  # flip the msb
791     %rs =s cast %b1
793 ~ Call
794 ~~~~~~
796     `bnf
797     CALL := [%IDENT '=' ABITY] 'call' VAL '(' (ARG), ')'
799     ARG :=
800         ABITY VAL  # Regular argument
801       | 'env' VAL  # Environment argument (first)
802       | '...'      # Variadic marker
804     ABITY := BASETY | :IDENT
806 The call instruction is special in several ways.  It is not
807 a three-address instruction and requires the type of all
808 its arguments to be given.  Also, the return type can be
809 either a base type or an aggregate type.  These specifics
810 are required to compile calls with C compatibility (i.e.,
811 to respect the ABI).
813 When an aggregate type is used as argument type or return
814 type, the value respectively passed or returned needs to be
815 a pointer to a memory location holding the value.  This is
816 because aggregate types are not first-class citizens of
817 the IL.
819 Unless the called function does not return a value, a
820 return temporary must be specified, even if it is never
821 used afterwards.
823 An environment parameter can be passed as first argument
824 using the `env` keyword.  The passed value must be a 64-bit
825 integer.  If the called function does not expect an environment
826 parameter, it will be safely discarded.  See the <@ Functions >
827 section for more information about environment parameters.
829 When the called function is variadic, there must be a `...`
830 marker separating the named and variadic arguments.
832 ~ Variadic
833 ~~~~~~~~~~
835 The `vastart` and `vaarg` instructions provide a portable
836 way to access the extra parameters of a variadic function.
838   * `vastart` -- `(m)`
839   * `vaarg` -- `T(mmmm)`
841 The `vastart` instruction initializes a *variable argument
842 list* used to access the extra parameters of the enclosing
843 variadic function.  It is safe to call it multiple times.
845 The `vaarg` instruction fetches the next argument from
846 a variable argument list.  It is currently limited to
847 fetching arguments that have a base type.  This instruction
848 is essentially effectful: calling it twice in a row will
849 return two consecutive arguments from the argument list.
851 Both instructions take a pointer to a variable argument
852 list as sole argument.  The size and alignment of variable
853 argument lists depend on the target used.  However, it
854 is possible to conservatively use the maximum size and
855 alignment required by all the targets.
857     type :valist = align 8 { 24 }  # For amd64_sysv
858     type :valist = align 8 { 32 }  # For arm64
859     type :valist = align 8 { 8 }   # For rv64
861 The following example defines a variadic function adding
862 its first three arguments.
864     function s $add3(s %a, ...) {
865     @start
866             %ap =l alloc8 32
867             vastart %ap
868             %r =s call $vadd(s %a, l %ap)
869             ret %r
870     }
872     function s $vadd(s %a, l %ap) {
873     @start
874             %b =s vaarg %ap
875             %c =s vaarg %ap
876             %d =s add %a, %b
877             %e =s add %d, %c
878             ret %e
879     }
881 ~ Phi
882 ~~~~~
884     `bnf
885     PHI := %IDENT '=' BASETY 'phi' ( @IDENT VAL ),
887 First and foremost, phi instructions are NOT necessary when
888 writing a frontend to QBE.  One solution to avoid having to
889 deal with SSA form is to use stack allocated variables for
890 all source program variables and perform assignments and
891 lookups using <@ Memory > operations.  This is what LLVM
892 users typically do.
894 Another solution is to simply emit code that is not in SSA
895 form!  Contrary to LLVM, QBE is able to fixup programs not
896 in SSA form without requiring the boilerplate of loading
897 and storing in memory.  For example, the following program
898 will be correctly compiled by QBE.
900     @start
901             %x =w copy 100
902             %s =w copy 0
903     @loop
904             %s =w add %s, %x
905             %x =w sub %x, 1
906             jnz %x, @loop, @end
907     @end
908             ret %s
910 Now, if you want to know what phi instructions are and how
911 to use them in QBE, you can read the following.
913 Phi instructions are specific to SSA form.  In SSA form
914 values can only be assigned once, without phi instructions,
915 this requirement is too strong to represent many programs.
916 For example consider the following C program.
918     int f(int x) {
919             int y;
920             if (x)
921                     y = 1;
922             else
923                     y = 2;
924             return y;
925     }
927 The variable `y` is assigned twice, the solution to
928 translate it in SSA form is to insert a phi instruction.
930     @ifstmt
931             jnz %x, @ift, @iff
932     @ift
933             jmp @retstmt
934     @iff
935             jmp @retstmt
936     @retstmt
937             %y =w phi @ift 1, @iff 2
938             ret %y
940 Phi instructions return one of their arguments depending
941 on where the control came from.  In the example, `%y` is
942 set to 1 if the `@ift` branch is taken, or it is set to
943 2 otherwise.
945 An important remark about phi instructions is that QBE
946 assumes that if a variable is defined by a phi it respects
947 all the SSA invariants.  So it is critical to not use phi
948 instructions unless you know exactly what you are doing.
950 - 8. Instructions Index
951 -----------------------
953   * <@ Arithmetic and Bits >:
955       * `add`
956       * `and`
957       * `div`
958       * `mul`
959       * `neg`
960       * `or`
961       * `rem`
962       * `sar`
963       * `shl`
964       * `shr`
965       * `sub`
966       * `udiv`
967       * `urem`
968       * `xor`
970   * <@ Memory >:
972       * `alloc16`
973       * `alloc4`
974       * `alloc8`
975       * `loadd`
976       * `loadl`
977       * `loads`
978       * `loadsb`
979       * `loadsh`
980       * `loadsw`
981       * `loadub`
982       * `loaduh`
983       * `loaduw`
984       * `loadw`
985       * `storeb`
986       * `stored`
987       * `storeh`
988       * `storel`
989       * `stores`
990       * `storew`
992   * <@ Comparisons >:
994       * `ceqd`
995       * `ceql`
996       * `ceqs`
997       * `ceqw`
998       * `cged`
999       * `cges`
1000       * `cgtd`
1001       * `cgts`
1002       * `cled`
1003       * `cles`
1004       * `cltd`
1005       * `clts`
1006       * `cned`
1007       * `cnel`
1008       * `cnes`
1009       * `cnew`
1010       * `cod`
1011       * `cos`
1012       * `csgel`
1013       * `csgew`
1014       * `csgtl`
1015       * `csgtw`
1016       * `cslel`
1017       * `cslew`
1018       * `csltl`
1019       * `csltw`
1020       * `cugel`
1021       * `cugew`
1022       * `cugtl`
1023       * `cugtw`
1024       * `culel`
1025       * `culew`
1026       * `cultl`
1027       * `cultw`
1028       * `cuod`
1029       * `cuos`
1031   * <@ Conversions >:
1033       * `dtosi`
1034       * `dtoui`
1035       * `exts`
1036       * `extsb`
1037       * `extsh`
1038       * `extsw`
1039       * `extub`
1040       * `extuh`
1041       * `extuw`
1042       * `sltof`
1043       * `ultof`
1044       * `stosi`
1045       * `stoui`
1046       * `swtof`
1047       * `uwtof`
1048       * `truncd`
1050   * <@ Cast and Copy > :
1052       * `cast`
1053       * `copy`
1055   * <@ Call >:
1057       * `call`
1059   * <@ Variadic >:
1061       * `vastart`
1062       * `vaarg`
1064   * <@ Phi >:
1066       * `phi`
1068   * <@ Jumps >:
1070       * `jmp`
1071       * `jnz`
1072       * `ret`