Chinaunix首页 | 论坛 | 博客
  • 博客访问: 791552
  • 博文数量: 118
  • 博客积分: 2067
  • 博客等级: 大尉
  • 技术积分: 1751
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-17 14:27
文章存档

2016年(1)

2013年(1)

2012年(3)

2011年(26)

2010年(47)

2009年(40)

分类: LINUX

2011-07-01 15:51:05

rlwinm指令非常强大,也非常不易懂,现举例其计算过程:

下例中r1, r2为寄存器,SH,A, B为立即数
1. rlwinm r1, r2, SH, A
计算过程: r1 <= ( (r2 <- SH) & A )

如:r2 = 0x12345678, SH=8, A=0xfff 则:r1 = 0x812.
r2 <- 8 == 0x34567812(注意是循环左移,下同), & 0xfff == 0x812

2. rlwinm r1, r2, SH, A, B (A < B)

计算过程:r1 <= ( (r2 <- SH) & MASK(A,B) ), MASK(A,B)指位A到位B为全1,其余为0的立即数.

如:r2 = 0x12345678, SH=8, A=3,B=9 则:r1 = 0x1440 0000.
过程:MASK(A,B) = 0x1fc0 0000. r2 <- 8 = 0x34567812.
r1 = 0x1fc0 0000 & 0x3456 7812 = 0x1440 0000.

3. rlwinm r1, r2, SH, A, B (A > B)
计算过程:r1 <= ( (r2 <- SH) & ~MASK(A,B) ), ~MASK(A,B)指位B到位A之间为全0,不含A位和B位本身,其余为1的立即数.
如:r2 = 0x12345678, SH=8, A=14,B=3 则:r1 = 0x3002 7812.
过程: ~mask(A,B) = 0xf003 ffff, r2 <- 8 = 0x34567812.
r1 = 0xf003 ffff & 0x3456 7812 = 0x3002 7812.

4. rlwinm r1, r2, SH, A, A
计算过程与2类似,只取A位一位值。
如:如:r2 = 0x1234 5678, SH=8, A=3,则:r1 = 0x1000 0000.

另有rlwnm r1, r2, r3, A, B功能与其类似,只是移位立即数变成了寄存器。
还有该指令的一些简化形式, 如:
            
阅读(9346) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~