|Home > armclang Inline Assembler > Inline assembly statements within a function|
Inline assembly statements can be used inside a function to insert assembly code into the body of a C or C++ function.
Inline assembly code allows for passing control-flow and values between C/C++ and assembly at a fine-grained level. The values that are used as inputs to and outputs from the assembly code must be listed. Special tokens in the assembly string are replaced with the registers that contain these values.
As with file-scope inline assembly, you can use any instructions or directives that are available in the integrated assembler in the assembly string. Use multiple assembly statements in the string of one inline assembly statement by separating them with newlines or semicolons. If you use multiple instructions in this way, the optimizer treats them as a complete unit. It does not split them up, reorder them, or omit some of them.
The compiler does not guarantee that the ordering of multiple inline assembly statements will be preserved. It might also do the following:
To prevent the compiler from doing any of these operations, you must use the input and output operands
volatile keyword to indicate to the compiler which optimizations are
The compiler does not parse the contents of the assembly string, except for replacing template strings, until code-generation is complete. It relies on the input and output operands, and clobbers to tell it about the requirements of the assembly code, and constraints on the surrounding generated code. Therefore the input and output operands, and clobbers must be accurate.
__asm [volatile] ( "<assembly string>" [ : <output operands> [ : <input operands> [ : <clobbers> ] ] ] );