@TOC)
接口形式
LDC编译器可支持两种书写方式,一种是GCC格式的,另外一种需要调用内置的函数模板进行实现
/*
无返回的定义
*/
void __asm (char[] asmcode, char[] constraints, [ Arguments... ] );
/*
单返回定义
*/
template __asm(T) {
T __asm (char[] asmcode, char[] constraints, [ Arguments... ] );
}
/*
多返回定义
*/
struct __asmtuple_t(T...) {
T v;
}
template __asmtuple(T...) {
__asmtuple_t!(T) __asmtuple (char[] asmcode, char[] constraints, [ Arguments... ] );
}
| 定义符 | 类型 |
|---|---|
| =*m | 返回:由内存 |
| =r | 返回: 由寄存器 |
| *m | 输入:由内存 |
| r | 输入:由寄存器 |
| i | 输入 |
手动使用寄存器时应该在输入参数上进行禁止 如 __asm(“mov r0,$0”,"~{R0},~{R1}",val);
可接受参数
__asm(<汇编代码>,<输入参数类型>,<输入参数>…)
输入参数由 $0 开始计数
__asm!<返回类型>(<汇编代码>,<输入参数类型>,<输入参数>…)
输出参数为$0,输入参数由 $1开始计数
例子
无 return
import ldc.llvmasm;
uint v1 = 0x33;
enum ev1 = 0x44;
__asm("nop",""); //
__asm("mov r0,#0x55");
__asm("mov r0,$0","i",ev1);
__asm("mov r0,$0","r",v1);
auto rv1 = __asm("mov $0,R0","=r");
本文介绍了LDC编译器支持的内联汇编特性,包括三种不同的接口形式:无返回值、单返回值及多返回值定义,并提供了具体的使用示例。
6494

被折叠的 条评论
为什么被折叠?



