| |||
| Home > Using the Inline and Embedded Assemblers of the ARM Compiler > Differences in compiler support of inline and embedded assembly code | |||
There are differences between the way inline and embedded assembly is compiled:
Inline assembly code uses a high level of processor abstraction, and is integrated with the C and C++ code during code generation. Therefore, the compiler optimizes the C and C++ code and the assembly code together.
Unlike inline assembly code, embedded assembly code is assembled separately from the C and C++ code to produce a compiled object that is then combined with the object from the compilation of the C or C++ source.
Inline assembly code can be inlined by the compiler, but embedded assembly code cannot be inlined, either implicitly or explicitly.
Table 22 summarizes the main differences between inline assembler and embedded assembler.
Table 22. Differences between inline and embedded assembler
| Feature | Embedded assembler | Inline assembler |
|---|---|---|
| Instruction set | ARM and Thumb. | ARM only. |
| ARM assembler directives | All supported. | None supported. |
| ARMv6 instructions | All supported. | Supports most instructions, with some exceptions,
for example |
| ARMv7 instructions | All supported. | Not supported. |
| C/C++ expressions | Constant expressions only. | Full C/C++ expressions. |
| Optimization of assembly code | No optimization. | Full optimization. |
| Inlining | Never. | Possible. |
| Register access | Specified physical registers are used. You
can also use PC, LR and SP. | Uses virtual registers. Using |
| Return instructions | You must add them in your code. | Generated automatically. (The BX , BXJ, and BLX instructions
are not supported.) |
BKPT instruction | Supported directly. | Not supported. |