LD:tricore 读取A11方法,CSA机制 ,ld中切分内存
#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被称为隐式寄存器,或内部寄存器,一种用法是局部变量
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号