求一份SSE指令的说明文档.

weixiaohua 2009-10-29 05:46:05
求一份SSE指令的说明文档.
...全文
368 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seamour 2009-10-30
  • 打赏
  • 举报
回复
http://developer.intel.com/products/processor/manuals/index.htm

卷1、卷2里都有,如果需要经常写汇编的话这两卷一定是要下的
weixiaohua 2009-10-29
  • 打赏
  • 举报
回复
英文不太好,能否给个下载链接?
Seamour 2009-10-29
  • 打赏
  • 举报
回复
自己去intel网页去下,都是免费的文档,定期更新的
dinoalex 2009-10-29
  • 打赏
  • 举报
回复
SSE 指令表

SSE 提供标量与包裹式(packed)浮点指令。

浮点指令:
内存到暂存器/暂存器到内存/暂存器之间的资料搬移
标量 – MOVSS
包裹式 – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
数学运算
标量 – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
包裹式 – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
比较
标量 – CMPSS, COMISS, UCOMISS
包裹式 – CMPPS
资料拆包(unpack)与随机搬移(shuffle)
包裹式 – SHUFPS, UNPCKHPS, UNPCKLPS
资料型态转换
标量 – CVTSI2SS, CVTSS2SI, CVTTSS2SI
包裹式 – CVTPI2PS, CVTPS2PI, CVTTPS2PI
逐位逻辑运算
包裹式 – ANDPS, ORPS, XORPS, ANDNPS

整数指令:
数学运算
PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
资料搬移
PEXTRW, PINSRW
其他
PMOVMSKB, PSHUFW

其他指令:
MXCSR 管理
LDMXCSR, STMXCSR
快取与内存管理
MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
weixiaohua 2009-10-29
  • 打赏
  • 举报
回复
我肯定Google过,不过都不太全,包括你发的也不全嘛.
brightyang 2009-10-29
  • 打赏
  • 举报
回复
有一种工具叫google

SSE指令  作者:HAM(参考资料:Intel 开发文档)
  大部分涉及到128位内存变量操作的,内存变量首地址必须要对齐16字节,也就是内存地址低4位为0,否则会引起CPU异常,导致指令执行失败,此错误编译器不检查.
  SSE1:
  主要是单精度浮点运算
  SSE有8个128位独立寄存器(XMM1~XMM7).
  MM指64位MMX寄存器
  XMM指XMM寄存器
  m128指128位内存变量
  movaps XMM,XMM/m128 movaps XMM/128,XMM
  把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节,也就是内存地址低4位为0.
  ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋
  movups XMM,XMM/m128 movaps XMM/128,XMM
  把源存储器内容值送入目的寄存器,但不必对齐内存16字节.
  ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋
  movlps XMM,m64
  把源存储器64位内容送入目的寄存器低64位,高64位不变,内存变量不必对齐内存16字节.
  movhps XMM,m64
  把源存储器64位内容送入目的寄存器高64位,低64位不变,内存变量不必对齐内存16字节.
  movhlps XMM,XMM
  把源寄存器高64位送入目的寄存器低64位,高64位不变.
  movlhps XMM,XMM
  把源寄存器低64位送入目的寄存器高64位,低64位不变.
  movss XMM,m32/XMM
  原操作数为m32时:
  dest[31-00] <== m32
  dest[127-32] <== 0
  原操作数为XMM时:
  dest[31-00] <== src[31-00]
  dest[127-32]不变
  movmskpd r32,XMM
  r32[0] <== XMM[63]
  r32[1] <== XMM[127]
  r32[31-2] <== 0
  movmskps r32,XMM
  r32[0] <== XMM[31]
  r32[1] <== XMM[63]
  r32[2] <== XMM[95]
  r32[3] <== XMM[127]
  r32[31-4] <== 0
  pmovmskb r32,XMM
  r[0] <== XMM[7]
  r[1] <== XMM[15]
  r[2] <== XMM[23]
  r[3] <== XMM[31]
  r[4] <== XMM[39]
  r[5] <== XMM[47]
  r[6] <== XMM[55]
  r[7] <== XMM[63]
  r[8] <== XMM[71]
  r[9] <== XMM[79]
  r[10] <== XMM[87]
  r[11] <== XMM[95]
  r[12] <== XMM[103]
  r[13] <== XMM[111]
  r[14] <== XMM[119]
  r[15] <== XMM[127]
  r[31-16] <== 0
  movntps m128,XMM
  m128 <== XMM 直接把XMM中的值送入m128,不经过cache,必须对齐16字节.
  movntpd m128,XMM
  m128 <== XMM 直接把XMM中的值送入m128,不经过cache,必须对齐16字节.
  movnti m32,r32
  m32 <== r32 把32寄存器的值送入m32,不经过cache.
  addps XMM,XMM/m128
  源存储器内容按双字对齐,共4个单精度浮点数与目的寄存器相加,结果送入目的寄存器,内存变量必须对齐内存16字节.
  例:
  当XMM0 = 0c517e000 44290000 46b6d000 3c4985f0 h
  XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,当执行addps XMM0,XMM1
  则XMM0 = 045992000 44350ccd 4a5b52e0 3c59018e h
  因为XMM0 = -2.43E3 6.76E2 2.34E4 1.23E-2 'xEy'指x * 10^y,如 1.0E2 = 100,1.0E-2 = 0.01,
  XMM1 = 7.33E3 4.82E1 3.57E6 9.45E-4 当中'E'不是16进制中的'e',而是指数'EXP'
  结果XMM0 = 4.9E3 7.242E2 3.5934E6 1.3245E-2
  addss XMM,XMM/m32
  源存储器的低32位1个单精度浮点数与目的寄存器的低32位1个单精度浮点数相加,结果送入目的寄存器的低32位
  高96位不变,内存变量不必对齐内存16字节.
  例:
  当XMM0 = 0c517e000 44290000 46b6d000 3c4985f0 h
  XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,当执行addss XMM0,XMM1
  则XMM0 = 0c517e000 44290000 46b6d000 3c59018e h
  subps XMM,XMM/m128
  源存储器内容按双字对齐,共4个单精度浮点数与目的寄存器相减(目的减去源),结果送入目的寄存器,
  内存变量必须对齐内存16字节.
  例:
  当XMM0 = 0c517e000 44290000 46b6d000 3c4985f0 h
  XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,当执行addss XMM0,XMM1
  则XMM0 = 0c6188000 441cf333 ca5877a0 3c3a0a52 h
  因为XMM0 = -2.43E3 6.76E2 2.34E4 1.23E-2
  XMM1 = 7.33E3 4.82E1 3.57E6 9.45E-4
  结果XMM0 = -9.76E3 6.278E2 -3.5466E6 1.1355E-2
  subss XMM,XMM/m32
  源存储器的低32位1个单精度浮点数与目的寄存器的低32位1个单精度浮点数相减(目的减去源),
  结果送入目的寄存器的低32位,高96位不变,内存变量不必对齐内存16字节.
  例:
  当XMM0 = 0c517e000 44290000 46b6d000 3c4985f0 h
  XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,当执行addss XMM0,XMM1
  则XMM0 = 0c517e000 44290000 46b6d000 3c3a0a52 h
  maxps XMM,XMM/m128
  源存储器4个单精度浮点数与目的寄存器4个单精度浮点数比较,较大数放入对应目的寄存器,内存变量必须对齐内存16字节.
  例:
  当XMM0 = 0c517e000 44290000 46b6d000 3c4985f0 h
  XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,当执行maxps XMM0,XMM1
  则XMM0 = 045e51000 44290000 4a59e540 3c4985f0 h
  因为XMM0 = -2.43E3 6.76E2 2.34E4 1.23E-2
  XMM1 = 7.33E3 4.82E1 3.57E6 9.45E-4
  结果XMM0 = 7.33E3 6.76E2 3.57E6 1.23E-2
  maxss XMM,XMM/m32
  源存储器低32位1个单精度浮点数与目的寄存器低32位1个单精度浮点数比较,较大数放入目的寄存器低32位,高96位不变
  内存变量不必对齐内存16字节.
  例:
  当XMM0 = 045e51000 4240cccd 4a59e540 3a77b9e0 h
  XMM1 = 0c517e000 44290000 46b6d000 3c4985f0 h,当执行maxss XMM0,XMM1
  则XMM0 = 045e51000 4240cccd 4a59e540 3c4985f0 h
  minps XMM,XMM/m128
  源存储器4个单精度浮点数与目的寄存器4个单精度浮点数比较,较小数放入对应目的寄存器,内存变量必须对齐内存16字节.
  minss XMM,XMM/m32
  源存储器低32位1个单精度浮点数与目的寄存器低32位1个单精度浮点数比较,较小数放入目的寄存器低32位,高96位不变
  内存变量不必对齐内存16字节.
  cmpps XMM0,XMM1,imm8 imm8是立即数范围是0~7
  根据imm8的值进行4对单精度浮点数的比较,符合imm8的就置目的寄存器对应的32位全1,否则全0
  当imm8 = 0时,目的寄存器等于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  imm8 = 1 时,目的寄存器小于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  imm8 = 2 时,目的寄存器小于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  imm8 = 4 时,目的寄存器不等于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  imm8 = 5 时,目的寄存器大于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  imm8 = 6 时,目的寄存器大于原寄存器数时,置目的寄存器对应的32位全1,否则全0
  rcpps XMM,XMM/m128
  源存储器4个单精度浮点数的倒数放入对应目的寄存器,内存变量必须对齐内存16字节.
  注:比如2.0E0的倒数为1÷2.0E0 = 5.0E-1
  例:
  当XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,执行rcpps XMM0,XMM1
  则XMM0 = 0390f0800 3ca9f800 34966000 44844800 h
  因为XMM1 = 7.33E3 4.82E1 3.57E6 9.45E-4
  结果XMM0 = 1.36E-4 2.075E-2 2.8E-7 1.06E3
  这操作只有12bit的精度.
  用这种方法可以提高精度到23bit(牛顿-拉弗森方法):
  x0 = RCPSS(d)
  x1 = x0 * (2 - d * x0) = 2*x0 - d * x0 * x0
  x0是直接用倒数指令得到的除数d的倒数的逼近;x1则是更精确的逼近。
  以下操作:XMM0=DIVIDENDS / DIVISORS(这种方法比直接用divps更快速)
  MOVAPS XMM1,[DIVISORS];载入除数
  RCPPS XMM0,XMM1;求得倒数的逼近
  MULPS XMM1,XMM0;牛顿-Raphson公式
  MULPS XMM1,XMM0
  ADDPS XMM0,XMM0
  SUBPS XMM0,XMM1
  MULPS XMM0,[DIVIDENDS];结果在XMM0中
  rcpss XMM,XMM/32
  源存储器低32位1个单精度浮点数的倒数放入目的寄存器低32位,高96位不变
  例:
  当XMM1 = 045e51000 4240cccd 4a59e540 3a77b9e0 h,执行rcpss XMM0,XMM1
  则XMM0 = 045e51000 4240cccd 4a59e540 44844800 h
  精度同rcpps
  rsqrtps XMM,XMM/m128
  源存储器4个单精度浮点数的开方的倒数放入对应目的寄存器,内存变量必须对齐内存16字节.
[Foobar2000.AERO效果====EIKO界面说明================== EIKO是foobar2000的界面配置,由dReamxis(天気雨)(负责风格设计)和Jensen(负责代码编写)共同制作。在制作过程中,Theophile特地开发了几乎是为此界面量身定做的foo_uie_wsh_panel_mod.dll插件,大大增强了界面的效果,特此感谢! 本配置适用于foobar2000 v0.9.5以上版本,兼容英文版和Asion制作的汉化版及插件。 ====使用说明===================== 如果你下载的是完整的打包,你只需要阅读“配置文件使用说明”中的“图标的使用”和“字体的使用”部分就可以了,其他的都可以跳过。 如果你下载的是仅有配置文件的配置包,请完整阅读以下说明。 ====配置文件说明================== Images 文件夹内为EIKO界面中所有用到的图片。 icons 文件夹内为EIKO风格的关联格式文件图标。 105_en.ico、105_cn.ico 文件为EIKO风格的foobar主程序图标。 components 文件夹为EIKO界面中所有的必备插件。 foobar2000.cfg 为EIKO的完整配置文件,包括整个foobar所有的配置,如所有的面板和插件设置,列表右键菜单设置,快捷键定义等。 EIKO_v*.fcl (*为版本号)为EIKO的分栏界面设置,包括除歌词秀外整个界面上所有能看到的面板的风格样式的设置,不包括歌词秀设置,不包括列表右键菜单、快捷键定义等。 Candara.ttf 文件为本界面中使用的字体。 ====配置文件使用说明=============== -----字体文件的使用------- 如果你使用的是Windows Vista或更高版本的操作系统,或者安装了Office2007,Candara字体不用安装,系统已经自带。 对于其他情况,按Win+R快捷键调出“运行”窗口,输入“fonts”,将Candara.ttf文件拷贝入弹出的目录即可。 -----图标的使用------------ 如果你想使用EIKO风格的主程序图标,用一些EXE资源替换工具,如Restorator、ResHacker等,打开foobar2000.exe文件,将105号图标资源替换为105_*.ico文件,保存即可。这里需要格外注意:汉化版只能替换105_cn.ico文件,如果使用了105_en.ico文件,则文件会损坏!英文版没有限制,两个都可以使用。这种替换EXE资源的操作容易引起程序的不稳定,风险请自负。 如果你想使用EIKO风格的关联格式文件图标,将icons文件夹复制到你的foobar2000目录下即可,覆盖原有的icons文件夹。 -----配置包的应用---------- 本配置包有两种应用方案,请按需选择。 不管选哪种,请先安装一份foobar2000。 components文件夹内的插件如果你已有,可以选择不覆盖,但兼容性请自己保证。 -----方案1----------------- 特点: 此方案可以以最便捷的方法获得EIKO界面的所有特性。但也将会让你失去所有你以前的个人配置,如列表右键菜单设置、快捷键定义等,如果你以前有值得保留的个人配置,不建议采用此方案,或者请先备份你的foobar2000.cfg文件。 操作步骤: 如果你安装foobar2000时选择的是便携安装,或者你的foobar2000已经是绿色版的,请将“Foobar2000”文件夹内的全部内容覆盖到你自己的foobar2000目录内(icons文件夹可以选择是否覆盖)。 如果你安装foobar2000时选择的是标准安装,请先运行foobar2000,进入 参数设置-常规,右侧找到“用户配置文件夹”,点击后面的“打开文件夹”,关闭foobar,然后将Foobar2000\foobar2000.cfg文件覆盖至打开的文件夹中。然后回到foobar2000安装目录,将压缩包内的“Foobar2000”文件夹内剩下的Images文件夹、components文件夹、icons文件夹(可选)覆盖到安装目录内。 然后启动foobar,如果出现几个“组件已卸载”提示框,如果你不知道该怎样选择,请点击否。 -----方案2----------------- 特点: 此方案可以只导入EIKO的界面设置,不会覆盖你原有的foobar核心设置如右键菜单设置、快捷键定义等等,但你也无法得到EIKO的这些相应的设置。 操作步骤: 1、将Images文件夹、components文件夹覆盖到foobar2000目录内。 2、启动foobar,如果出现“发现新的用户模块”对话框,请选择“分栏界面”,如果没有出现,请确定你当前启动的是分栏界面,确认的方法为:进入 参数设置-显示,查看右侧的“用户界面模块”是否为“分栏界面”,如果不是,请选择“分栏界面”,而后重启foobar。 3、进入 参数设置-工具-扩展变量,右侧点击“添加”,添加一个名称为global_font,值为Candara的变量,同样的方法再添加一个number_font变量,值也为Candara。这两个变量指定了EIKO中大部分的字体,需要的话可以自己修改。而后再创建一个变量Image_Path,值为Images\EIKO。三个变量都添加好后,重启foobar。 4、进入 参数设置-显示-分栏界面,右侧选择 主要-FCL导入和导出-导入,在弹出的导入窗口中找到EIKO_v*.fcl文件,在“选择要导入的设置”对话框中,按需选择你的设置,如果你没有什么要保留的分栏界面设置或者不知道怎么选,请直接点OK。而后你就应该能看到EIKO界面的大致样子了,可能有少许面板错位,没有关系,重启后即可正常。 5、关闭foobar2000,以保存所有导入的配置。 ====更新日志===================== v1.10 2009/7/15 - 打包版中foobar核心升级为0.9.6.8汉化版,感谢Asion汉化。 - foo_uie_panel_splitter插件升级为0.3.8a版,注意此后此插件必须使用此版或更高版本,除非特殊说明。 - foo_uie_wsh_panel_mod插件升级为1.1.9版,注意此后此插件必须使用1.1.8或更高版本,除非特殊说明。 - foo_uie_albumlist插件升级到0.3.5版,即使勾选“初次启动弹出提示”,未设置媒体库的情况下启动也不会弹窗提示了。 - 其他一些插件的升级。 - 加入foobar官方好早以前就已经不再自带的均衡器预设文件,取自老版本的foobar,放在Equalizer Presets文件夹下。 - 图片文件移入Images\EIKO文件夹。 - 基于新版WSH MOD面板,分别为音量条、进度条、按钮、歌曲信息四个面板增加了几个 Properties 选项,进入的方法为按住Shift点 右键-Properties。 - 显示封面的Albumart面板现替换为我用WSH MOD面板实现的“WSH Cover”面板,支持内嵌图片显示,使用上有很大不同,详细可见面板上的 右键-帮助。foo_uie_albumart不再是附带插件。 - 基于新版Panel Splitter插件,列表切换器的开关状态和宽度及媒体库和菜单栏的开关状态可以在关闭之后依然恢复。 - 基于新版Panel Splitter插件,增加了列表切换器宽度可拖动调节的特性。注意鼠标移到交界处时不会变为调节宽度的光标,点击后才会变,无需理它,直接拖即可。但拖动时需要注意不要拖的“太狠”,否则会撞上PSS的BUG,具体可以看“常见问题”文档。 - 评级星星上为不在媒体库中的曲目增加了不同的ToolTip提示。 - 分组/排序 预设中加入“Title”预设。 - 为Albumlist面板增加了几种视图模式。 - 调整代码结构,消除了调整窗口尺寸等情况下的界面闪烁现象。 - 基于新版Panel Splitter插件,修正了左上角小三角按钮点击后消失的刷新bug,以及调整窗口尺寸后切换菜单显隐造成的左侧面板顶部背景错位的bug。 - 修正了在显示媒体库的情况下切换菜单栏显隐造成Albumlist面板刷新错误的bug。 - 修正了最小化启动并播放时产生的WSH1面板代码报错的问题。 - 修正了没有foo_playcount插件情况下WSH1面板的ToolTip提示错误的问题。 - 修正了在ToolTip未消失时换歌ToolTip不更新的小bug。 - 修正了各WSH MOD面板上右键行为的小小bug。 v1.01final 2009/4/22 - foobar2000核心升级为0.9.6.4final版。 - 增加四个官方版没有的关联文件图标:MPP、OGA、TAK、TTA。 - 默认字体改成全用Candara。需要修改的请自己按照说明文档中的步骤修改。 - 升级WSH MOD面板到1.1.6.1版,注意此后的版本的WSH MOD插件必须使用1.1.6或更高版本,除非特殊说明。 - 文件信息面板和控制按钮面板加入工具提示(ToolTip)特性。其中文件信息面板是提示完整行内容,按钮控制面板是提示按钮功能。 - 音量条和进度条面板代码中加入AlwaysShowTip变量开关。 - 修正了按钮对鼠标响应的一个小bug。 - 提高了音量条音量调节的计算精度,使用感受上的变化主要是使滚轮调节精确的固定在每格5%。 - 删除了无用却忘记删了的图片star_empty.png。 v1.01beta 2009/4/6 由于dReamxis不在,这个版发布为beta版,只发布配置包,小范围发布。 - 任意字体兼容特性完成,默认同时使用微软雅黑和Candara两种字体。更换字体的方法略为麻烦,具体步骤见说明文档“常见问题”。 - 从此版开始配置包的使用需要增加一个添加扩展变量的步骤,详细已写在说明中,望注意。 - 为了避免一些不支持sse2指令集的老旧CPU上的兼容问题,歌词秀插件更换为sse版,需要sse2版本的,请到这里下载 http://www.foobar2000.com.cn/showtopic-1519.html - 升级WSH MOD面板到1.1.3版,注意此后的版本的WSH MOD插件必须使用1.1.3或更高版本,除非特殊说明。 - 修正在用户没有创建ActiveX控件权限的情况下WSH1面板错误的问题。 - 修正了当前列表为空的情况下启动foobar,播放次序按钮的弹出菜单中的语言无法检测的缺陷。 - 屏蔽了所有WSH MOD面板上的右键菜单,现在其上的右键菜单要用shift+右键弹出。 - 规避了在换歌时滚字面板的闪烁问题(在专辑图片较大时比较容易察觉),现在变成了跳帧(仍是在专辑图片较大时比较容易察觉)……不过总比闪烁好…… - 音量条和按钮面板不再使用单独的图片绘制背景,减少一张需要的图片。此为逻辑优化,对使用没有任何影响。 - EL列表内的音轨序号,现在只在Album脚本下显示,Default和Artist脚本都改显示%list_index%。 - 专辑分组模式中不再对%totaldiscs%为1的专辑进行二级分组。 -----------------------------------------------------------------------------------------------------------------

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧