ARM APSR中的 GE 位

ARM APSR中的 GE 位

ARM APSR(Application Program Status Register)中的 GE 位(Greater than or Equal flags)是指 第 16~19 位 的四个位(GE3:0),它们用于 SIMD(单指令多数据)和并行加减指令 中,以支持 在一条指令中同时处理多个 8 位或 16 位数据 的比较和条件选择操作。


  1. 作用与用途

GE 位主要配合以下指令使用:

· 并行加减指令:如 SADD8, SADD16, UADD8, USUB8 等。

· 选择指令:如 SEL(Select)。

这些指令可以同时对 多个 8 位或 16 位数据 执行加法或减法,并根据每个"数据段"的结果设置对应的 GE 位,然后可以用 SEL 指令根据 GE 位选择每个数据段的结果。


  1. GE 位的设置规则

对于 每条并行算术指令,GE3:0 的每一位分别对应一个 8 位或 16 位数据段的结果:

· 如果对应数据段的 运算结果 ≥ 0(有符号数加法/减法后未产生负数),则相应的 GE 位被置为 1。

· 如果对应数据段的 运算结果 < 0(有符号数加法/减法后为负数),则相应的 GE 位被置为 0。

具体细节根据指令是 有符号(S) 还是 无符号(U) 有所不同,但逻辑上都是反映"是否产生借位/进位"或"是否大于等于"。


  1. 示例

以 SADD8(有符号 8 位并行加法)为例:

复制代码
R0 = 0x7F7F7F7F
R1 = 0x01010101
执行 SADD8 R2, R0, R1

· 每个字节相加:0x7F + 0x01 = 0x80(作为有符号数:127 + 1 = -128,结果 < 0)

· 因此每个字节的结果都 < 0,所以 GE3:0 = 0000。

如果结果没有溢出为负数,则对应 GE 位为 1。


  1. 与 SEL 指令配合

SEL 指令根据 GE 位选择每个字节/半字:

复制代码
SEL Rd, Rn, Rm

· 对每个数据段 i(0~3),如果 GEi = 1,则选择 Rn 中对应的数据段到 Rd;

· 如果 GEi = 0,则选择 Rm 中对应的数据段到 Rd。

这样可以实现 基于每个数据段比较结果的向量条件选择,用于像素混合、数据打包等多媒体处理。


  1. 注意

· GE 位只在 ARMv6 及更高版本 的某些架构中存在(如 ARMv6K、ARMv7-A/R)。

· 它们 不用于普通的条件执行(普通条件执行使用 APSR 中的 N、Z、C、V 标志)。

· 在 ARMv7 的 Cortex-A 系列中常见,用于加速图像/音频处理。


简单总结:APSR.GE3:0 是用于 SIMD 类并行加减指令的标志位,每个位表示对应 8/16 位数据段的结果是否"大于等于"条件,用于后续 SEL 指令做数据段级的选择操作。

相关推荐
zlinear数据采集卡17 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源
CIAS19 小时前
uniontechos-server-20 1050 u2a pxe Server -x86 arm loongarch
arm开发
振南的单片机世界20 小时前
推挽vs开漏:一个“强拉硬灌”,一个“只拉不管”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡1 天前
数据采集卡从入门到精通(7):流水线型ADC——级级接力,高速与高精的平衡术
开发语言·arm开发·嵌入式硬件·fpga开发·c#
硅农程序猿2 天前
从需求到硅片| 一文讲清数字芯片设计流程
arm开发·硬件架构·risc-v
秋田君2 天前
QT_网络编程体系
网络·arm开发·qt
zlinear数据采集卡3 天前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
振南的单片机世界3 天前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
北京盛世宏博3 天前
以太网温湿度传感器星型组网三种供电布线技术对比文档
arm开发·以太网·原理·传感器·温湿度·原来
zlinear数据采集卡3 天前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#