SIMD——MMX指令的溢出处理

来源:互联网 发布:翻墙 mac 免费 2017 编辑:程序博客网 时间:2024/06/09 15:31

  • MMX中的Saturation 和 WrapAround规定
    • 1定义
    • 2MMX处理方式
    • 3示例

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或产生异常来检测是否溢出。

3示例

0 0