我在ARM文档中看到:
GE[3:0],位[19:16]
上的并行加减指令中描述的指令
第A4-171页更新这些标志以指示单个字节或半字的结果
手术的结果。这些标志可以控制以后的SEL指令。
显然,GE[3:0]代表“eq/lt/gt”?
我遇到了几个奇怪的问题,我还不知道,但它们都有CPSR值xxxf0030,所以GE位是0b1111?那代表什么?这些GE位正常吗?
提前谢谢!
最佳答案
在ARMv7 ARM(与该文本匹配)中,GE标志如何设置的细节只在并行指令本身的操作伪代码中。可悲的是,他们似乎删除了ARMv6手臂上的这段优美的散文描述:
半字操作说明:
根据上半字计算结果,一起设置或清除GE[3:2]
根据下半字计算的结果,一起设置或清除GE[1:0]。
操作字节的指令:
根据顶字节计算结果设置或清除GE[3]
根据第二字节计算结果设置或清除GE[2]
根据第三字节计算结果设置或清除GE[1]
根据下位字节计算结果设置或清除GE[0]。
如果
相应计算如下:
对于无符号字节加法,如果结果大于或等于2^8
对于无符号半字加法,如果结果大于或等于2^16
对于无符号减法,如果结果大于或等于零
对于有符号算术,如果结果大于或等于零。
作为算术标记,它们可以有任何旧值(在重置时未定义,并且可以通过APSR自由写入),因此,除非您专门使用了设置它们的指令之一,否则它们几乎毫无意义,可以忽略。
关于linux - CPSR GE [3:0]位何时被修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29765126/