#define __GETA11(tin) \
{ \
__asm__ ("mov.d \t%0,%%a11":"=d" (tin)); \
}
顺便列举几个学到的汇编指令
mov.d 用于从通用地址寄存器拷贝到通用数据寄存器 a->d
mov.a 反过来
函数体最后都会有个RET指令,会从A11中取出要返回的地址。
若进入trap中,返回指令是RFE (return from excption)也是从A11中获取地址,A11即RA
在此之前尝试了很多种方法,系统提供的mfcr指令无法读出A11,如果用指针读A11地址会进入trap,非法访问(一定要用汇编指令去取)
仿照mfcr接口制作的接口编译不过,
(__extension__({ \
unsigned __res; \
__asm__ volatile ("mfcr %0, LO:" __STRINGIFY (regaddr) \
: "=d" (__res) :: "memory"); \
__res; \
}))
貌似这个叫做老式的汇编语法 :::这种固定格式
__asm__ volatile ("svlcx" ::: "memory"); //用于 加载上下文
__asm__ volatile ("nop" ::: "memory"); //用于 等待几个指令的时间
上下文CSA的构成 如图
其中D15被称为隐式寄存器,或内部寄存器,一种用法是局部变量
tricore 读取A11方法,CSA机制 ,ld中切分内存
原文:https://www.cnblogs.com/yyyyloveu/p/14488213.html