14 This document describes extensions to tools and formats LLVM seeks compatibility
17 General Assembly Syntax
18 ===========================
20 C99-style Hexadecimal Floating-point Constants
21 ----------------------------------------------
23 LLVM's assemblers allow floating-point constants to be written in C99's
24 hexadecimal format instead of decimal if desired.
31 Machine-specific Assembly Syntax
32 ================================
40 The following additional relocation types are supported:
42 **@IMGREL** (AT&T syntax only) generates an image-relative relocation that
43 corresponds to the COFF relocation types ``IMAGE_REL_I386_DIR32NB`` (32-bit) or
44 ``IMAGE_REL_AMD64_ADDR32NB`` (64-bit).
50 mov foo@IMGREL(%ebx, %ecx, 4), %eax
54 .long (fun@imgrel + 0x3F)
55 .long $unwind$fun@imgrel
57 **.secrel32** generates a relocation that corresponds to the COFF relocation
58 types ``IMAGE_REL_I386_SECREL`` (32-bit) or ``IMAGE_REL_AMD64_SECREL`` (64-bit).
60 **.secidx** relocation generates an index of the section that contains
61 the target. It corresponds to the COFF relocation types
62 ``IMAGE_REL_I386_SECTION`` (32-bit) or ``IMAGE_REL_AMD64_SECTION`` (64-bit).
66 .section .debug$S,"rn"
70 .secrel32 _function_name
71 .secidx _function_name
74 ``.linkonce`` Directive
75 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
79 ``.linkonce [ comdat type [ section identifier ] ]``
81 Supported COMDAT types:
84 Discards duplicate sections with the same COMDAT symbol. This is the default
85 if no type is specified.
88 If the symbol is defined multiple times, the linker issues an error.
91 Duplicates are discarded, but the linker issues an error if any have
95 Duplicates are discarded, but the linker issues an error if any duplicates
96 do not have exactly the same content.
99 Links the section if a certain other COMDAT section is linked. This other
100 section is indicated by its section identifier following the comdat type.
101 The following restrictions apply to the associated section:
103 1. It must be the name of a section already defined.
104 2. It must differ from the current section.
105 3. It must be a COMDAT section.
106 4. It cannot be another associative COMDAT section.
109 Links the largest section from among the duplicates.
112 Links the newest section from among the duplicates.
122 .linkonce associative .text$foo
125 ``.section`` Directive
126 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
128 MC supports passing the information in ``.linkonce`` at the end of
129 ``.section``. For example, these two codes are equivalent
133 .section secName, "dr", discard, "Symbol1"
140 .section secName, "dr"
146 Note that in the combined form the COMDAT symbol is explicit. This
147 extension exists to support multiple sections with the same name in
153 .section secName, "dr", discard, "Symbol1"
158 .section secName, "dr", discard, "Symbol2"
163 Target Specific Behaviour
164 =========================
172 The reference implementation (Microsoft Visual Studio 2012) emits stack probes
173 in the following fashion:
181 However, this has the limitation of 32 MiB (±16MiB). In order to accomodate
182 larger binaries, LLVM supports the use of ``-mcode-model=large`` to allow a 4GiB
183 range via a slight deviation. It will generate an indirect jump as follows:
188 movw r12, :lower16:__chkstk
189 movt r12, :upper16:__chkstk