内部概述

[本文档仅供预览,并可能在以后的版本中更改。 Blank topics are included as placeholders.]

Microsoft 专用

3DNow! 技术提供 26 个附加阐明支持高性能三维图形和音频处理。 3DNow! 命令是对 64 位寄存器的向量命令。 3DNow! 命令是 SIMD;每个命令运行对 32 位值。 请参见3DNow!引用文档的内在 AMD 内部。

向量命令在两个运行并行安装 32 位单精度浮点,单词。 标量命令对一组 32 位操作数 (从两个 64 位操作数的低一半)。

3DNow! 单精度浮点格式,与单精度 IEEE 754 格式兼容。 此格式包括符号 1 位、 8 位偏重的指数和总共 24 位与一个隐藏的整数位的 23 位 significand 在 significand。 指数那样偏重为 127,符合单精度 IEEE 条件。 规范化 significands 在范围内 [1,2)。

与指定四个舍入模式的 IEEE 标准不同, 3DNow! 支持一个舍入模式,如圆到最近或设置为零 (截断)。 3DNow 的硬件实现! 方法确定该轮的模式。 AMD 处理器实现将对最新的模式。 无论使用哪种该舍入模式,则浮动指向整数和整数为浮动点转换命令, PF2ID,并 PI2FD,始终使用设置为零 (截断) 模式。

在大小的最大中可用的规则编号在十六进制的此精度的具有指数和 7FFFFFh significand,一个数值的 2127 (2 – 2-23)。 所有结果在最大可以可用的正值上的溢出该到此最大可以可用的规则数字或为正无穷大。 同样,所有结果在最小中可用的负值下的溢出该此最小可以可用的规则或数字为负无穷大。

实现 3DNow! 方法确定算术溢出的处理方式,为适当签名的最大或最小可以可用的规则数字或适当签名的无限制。 处理器生成适当签名的最大或最小可以可用的规则编号。

无穷大和 NANs 不支持为 3DNow 的操作数! 命令。

在大小的最小可以可用的规则编号在十六进制的此精度的具有 01h 指数和 000000h significand,一个数值的 2-126。 因此,在最小可以可用的值下的所有结果的尺寸被保留为零。 下表显示该 3DNow 支持的指数范围! 技术。

3DNow!技术指数范围

偏重的指数

说明

FFh

不支持。 不支持的数字可以使用作为操作数。 操作的结果与不支持数字的是未定义的。

00h

零。

00hAMP_LTxAMP_LTFFh

正常。

01h

2 (1-127) 最低的指数。

FEh

2 (254-127) 最大的指数。

与 MMX 指令, 3DNow! 命令不生成数字异常也不设置任何标志状态。 是用户将负责确保范围数据提供给 3DNow! 命令与所有计算在活动范围内保持 (或保存按预期)。

所有 3DNow 注册操作! 浮点命令以注册 x 单元或注册 Y 单元执行。 一个操作可以发送到在每个时钟周期的每个注册单元最大数量问题和两个 3DNow 的执行速度的! 操作每个循环。

通常,在高性能 3DNow! 代码,所有 3DNow! 命令正确计划除了彼此外部避免执行资源争用导致的延迟 (以及考虑依赖项和执行延迟)。

有关在该 AMD-K6 处理器的代码优化的详细信息,请参见 AMD-K6 处理器代码优化应用备注,订单数字 21924。 本文档提供有关代码该处理器的优化技术的深入讨论。

执行有关 AMD Athlon 处理器的资源信息,请参见 AMD Athlon x86 处理器代码优化准则,订单数字 22007。

3DNow! 性能 AMD 处理器的改进命令在下表中总结。

AMD 3DNow!浮点命令

操作

功能

该操作码

PAVGUSB

打包的 8 位无符号整数求平均值

BFh

PFADD

打包的浮点添加

9Eh

PFSUB

打包的浮点减法

9Ah

PFSUBR

打包的浮点反向减法

PFACC

打包的浮点累积

Aeh

PFCMPGE

打包的浮点比较,大于或等于

90h

PFCMPGT

打包的浮点比较,更大

A0h

PFCMPEQ

打包的浮点比较,等于

B0h

PFMIN

打包的浮点最小值

94h

PFMAX

打包的浮点最大值

A4h

PI2FD

使用浮点转换的打包的 32 位整数

0Dh

PF2ID

打包的浮点为 32 位整数

1Dh

PFRCP

打包的浮点相互近似

96h

PFRSQRT

打包的浮点相互平方根近似

97h

PFMUL

打包的浮点乘法

B4h

PFR CPIT1

打包的浮点相互第一个迭代步骤

A6h

PFRSQIT1

打包的浮点相互平方根第一个迭代步骤

A7h

PFR CPIT2

打包的浮点相互/相互平方根第二个迭代步骤

B6h

PMULHRW

打包的 16 位整数而与舍入

B7h

AMD 3DNow!性能改进命令

操作

功能

该操作码第二个字节

FEMMS

更快的项/退出该 MMX 或浮点状态。

0Eh

PREFETCH/PREFETCHW

  • 功能预提取至少为 32 字节行。 L1 数据缓存 (Dcache) 中。

  • AMD-K6-2 和 AMD-K6-III 处理器方法的执行 PREFETCHW 命令与预提取命令。

  • 在 AMD Athlon 处理器, PREFETCHW 可以通过提供提示提高性能的目的处理器修改缓存行上。

0Dh

AMD Athlon 处理器 3DNow!技术 DSP 扩展

操作

功能

该操作码/imm8

PF2IW

打包的浮点为整数使用符号的字符串转换扩展

0Fh 0Fh/1Ch

PFNACC

打包的浮点负的累计

0Fh 0Fh/8Ah

PFPNACC

打包的浮点杂项正负累积

0Fh 0Fh/8Eh

PI2FW

使用浮点转换的打包的整数。

0Fh 0Fh/0Ch

PSWAPD

打包请交换双字

0Fh 0Fh/BBh

从开始 AMD Athlon 处理器的 MMX 指令设置的扩展

操作

功能

该操作码/imm8

MASKMOVQ

流 (缓存使用字节掩码跳过) 存储

0Fh F7h

MOVNTQ

流 (缓存跳过) 存储

0Fh E7h

PAVGB

打包的平均无符号字节

0Fh E0h

PAVGW

打包的平均无符号。

0Fh E3h

PEXTRW

提取运行到整数寄存器

0Fh C5 h

PINSRW

从整数寄存器的单词插入

0Fh C4 h

PMAXSW

打包的最大值签名的字符串

0Fh Eeh

PMAXUB

打包的最大无符号字节

0Fh Deh

PMINSW

打包的最小签名的字符串

0Fh Eah

PMINUB

打包的最小的无符号字节

0Fh Dah

PMOVMSKB

移动字节掩码到整数寄存器

0Fh D7h

PMULHUW

打包 multiply 高无符号。

0Fh E4h

PREFETCHNTA

离使用 NTA 的该处理器的环境的移动数据引用

0Fh 18h 0*

PREFET CHT0

移动离使用 T0 的该处理器的环境的数据引用

0Fh 18h 1*

PREFET CHT1

离使用 T1 的该处理器的环境的移动数据引用

0Fh 18h 2*

PREFET CHT2

离使用 T2 的该处理器的环境的移动数据引用

0Fh 18h 3*

PSADBW

绝对字节差异的打包的总和

0Fh F6h

PSHUFW

打包的拖曳。

0Fh 70h

SFENCE

存储范围

0Fh AEh/7h

在操作码后的 *The 数字在 modR/M 字节指示不同的预提取模式。

有关在该 AMD-K6-2 处理器的代码优化的详细信息,请参见 AMD-K6-2 处理器代码优化应用备注,订单数字 21924。 本文档提供有关代码 AMD-K6 处理器系列的优化技术的深入讨论。

执行有关 AMD Athlon 处理器的资源信息,请参见 AMD Athlon x86 处理器代码优化准则,订单数字 22007。 本文档提供有关代码 AMD Athlon 处理器的优化技术的深入讨论。

有关这些标识符的联机版本参见 https://go.microsoft.com/fwlink/?LinkID=95131 文档。

请参见

参考

AMD 3DNow! 技术概述和内部