Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37535
  • 博文数量: 5
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-12 11:29
个人简介

专注

文章分类

全部博文(5)

文章存档

2018年(1)

2017年(1)

2015年(3)

我的朋友

分类: LINUX

2017-10-26 17:17:28

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功能与其类似,只是移位立即数变成了寄存器。
还有该指令的一些简化形式, 如:
            
阅读(1840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~