Chinaunix首页 | 论坛 | 博客
  • 博客访问: 581626
  • 博文数量: 213
  • 博客积分: 6789
  • 博客等级: 准将
  • 技术积分: 1947
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-01 17:11
文章分类

全部博文(213)

文章存档

2012年(9)

2011年(62)

2010年(99)

2009年(43)

分类: C/C++

2010-07-12 15:18:59

#define __stringify_1(x) #x
#define read_cpuid(reg) \
({ \
unsigned int __val; \
asm("mrc p15, 0, %0, c0, c0, " __stringify_1(reg)\
   : "=r" (__val) \
   : \
   : "cc"); \
__val; \
})
{cond} p#,,Rd,cn,cm{,}
MRC 从协处理器移到ARM寄存器(L=1)
MCR 从ARM寄存器移到协处理器(L=0)
{cond} 两个字符的条件代码
p# 被请求得协处理器的惟一标识苻
计算一个常量并放到CP Opc域
Rd 是一个表达式计算ARM有效寄存器序号
cn 和cm 是计算有效协处理器寄存器CRn CRm序号
计算一个常量,并放到CP域
举例
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6

本例为请求协处理器P15,执行操作0,操作数为c0,c0结果送到%0(可用寄存器),操作数2为协处理器选项。

阅读(1174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~