MMX中的Saturation 和 WrapAround规定
本文主要为Intel 64 and IA-32 Architectures Software Developer’s Manual中9.3节关于MMX对整数饱和运算(Saturation)以及截至运算( WrapAround)的理解
1定义
- Saturation(饱和运算):当运算结果大于上限或小于下限时,结果保存为其上限或下限值
- WrapAround:当运算结果溢出时,结果忽略进位或溢出位的数值
2MMX处理方式
针对溢出情况MMX指令提供三种处理方式:
- 溢出时截断运算(Wraparound arithmetic):忽略结果的进位或溢出位,只保留最低的有意义位。
- 有符号饱和运算(Signed saturation arithmetic):溢出时根据情况保留正溢出值或负溢出值,如下表
- 无符号饱和运算(Unsigned Saturation arithmetic):溢出时根据情况保留正溢出值或负溢出值,如下表
| 数据类型 | 负溢出值 | 正溢出值|
| ——– |: ——–:| :–: |
| Signed byte(有符号字节整数)| -128| 127 |
| Signed word(有符号字整数)| -32768| 232767 |
| Unsigned byte(无符号字节整数)| 0 | 255|
|Unsigned word(无符号字整数)|0|65535|
注:MMX指令不能使用EFLAGS或产生异常来检测是否溢出。