orpd等SSE2指令有什么意义?

2024-05-04

The orpd指令是“压缩双精度浮点值的按位逻辑或”。这不是做完​​全相同的事情吗por(“按位逻辑或”)?如果是这样,拥有它还有什么意义呢?


请记住 SSE1orps https://www.felixcloutier.com/x86/orps首先。 (实际上MMX por mm, mm/mem https://www.felixcloutier.com/x86/por甚至早于 SSE1。)

具有相同的操作码和新的前缀SSE2 orpd https://www.felixcloutier.com/x86/orpd我想,指令对于硬件解码器逻辑来说是有意义的,就像movapd vs. movaps。像这样的几个指令之间是多余的ps and pd版本,但有些不是,例如addps vs. addpd or unpcklps vs. unpcklpd是不同的洗牌。

SSE2也引入的原因66 0F EB /r por xmm,xmm/mem https://www.felixcloutier.com/x86/por至少部分是为了与 MMX 保持一致0F EB /r por mm, mm/mem,同样的操作码带有新的强制前缀。就像paddb mm, mm vs. paddb xmm, xmm.

而且还考虑了 vec-integer 与 FP 不同的旁路转发域的可能性。不同的微架构对于如何实际解码和运行这些不同的指令有不同的行为。有些运行所有 XMMor指令以相同的方式进行,从而为 FP 和 simd-integer 域之间的转发产生额外的延迟。

实际上,没有任何 CPU 对于 FP-float 和 FP-double 具有不同的转发域,所以是的,movapd and orpd实际上,这些都是你永远不应该使用的无用的空间浪费。使用较小的orps编码代替。

(或者使用 VEX 编码也没关系;vorps and vorpd大小相同:2 字节前缀 + 操作码 + modrm ...)


por vs. orps

有关使用时旁路延迟的更多信息porFP 数学指令之间,例如addps, or orpsSIMD-整数 insns 之间,例如paddb, see

  • 混合 SSE 整数/浮点 SIMD 指令时,性能是否会受到影响 https://stackoverflow.com/questions/4996384/do-i-get-a-performance-penalty-when-mixing-sse-integer-float-simd-instructions/4998071#4998071
  • 逻辑 SSE 内在函数之间有什么区别? https://stackoverflow.com/questions/2804902/whats-the-difference-between-logical-sse-intrinsics/31233017#31233017
  • AVX 指令 vxorpd 和 vpxor 之间的区别 https://stackoverflow.com/questions/26942952/difference-between-the-avx-instructions-vxorpd-and-vpxor
  • 混合使用 pxor 和 xorps 会影响性能吗? https://stackoverflow.com/questions/39811577/does-using-mix-of-pxor-and-xorps-affect-performance
  • 有没有什么情况下使用MOVDQU和MOVUPD比MOVUPS更好? https://stackoverflow.com/questions/40854819/is-there-any-situation-where-using-movdqu-and-movupd-is-better-than-movups
  • 在混合上下文中选择 SSE 指令执行域 https://stackoverflow.com/questions/28660698/choosing-sse-instruction-execution-domains-in-mixed-contexts- Skylake 之前的整数版本具有更好的吞吐量。

如果有人想知道,标题的另一种解释的答案是:FP 值上的按位布尔值主要用于设置、清除或切换符号位。或者做一些事情cmpps/pd面具喜欢混合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

orpd等SSE2指令有什么意义? 的相关文章

  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 一个地址有多少字节? [复制]

    这个问题在这里已经有答案了 在64位机器上 我们知道一个地址是8个字节 然而 我并不完全清楚一个地址中有多少字节的信息 虚拟内存中的每个字节都有一个地址吗 或者内存中的每 64 位都有一个地址 还是取决于架构 如果这取决于架构 那么我应该如
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 从 DX:AX 寄存器转移到单个 32 位寄存器

    我在添加 16 位乘法的乘积时遇到问题 我想将一年 例如 2015 年 乘以 365 为此 我 mov dx 0 to clear the register mov ax cx cx holds the year such as 2015
  • 68000 汇编语言 - CMPI.B

    What are the contents of the CCR and D3 after the following instructions sequence executes Perform the calculation by ha
  • 如何使用 __m128i 执行元素左移?

    我发现 SSE 移位指令只能在所有元素上移位相同的量 mm sll epi32 mm slli epi32 这些会移动所有元素 但移动量相同 http software intel com sites products documentat
  • 如何计算汇编中的内存位移?

    我一直在研究 yasm 汇编语言 并生成了一个包含以下内容的列表文件 我需要帮助理解第一列中的内存位移是如何计算的 提前致谢 1 line 1 1 memory asm 2 section data 3 00000000 04000000
  • 比“add esp, 4”更小的指令

    又是我 我的程序中有很多 add esp 4 我正在尝试减小它的大小 是否有任何更小的指令可以替代 add esp 4 pop edx 或者您不介意破坏的任何其他整数寄存器 这就是现代编译器实际上所做的 https stackoverflo
  • 为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

    test S text global start start xor ax ax mov ax ds mov ax ss mov ax es mov ax fs mov ax gs 我通过这样做得到了反汇编代码文件 x86 64 elf g
  • C 风格强制转换与内在强制转换

    假设我已经定义了 m256d x我想提取低 128 位 我会做 m128d xlow mm256 castpd256 pd128 x 然而 我最近看到有人这样做 m128d xlow m128d x 是否有用于演员的首选方法 为什么要用第一
  • x86 程序集 Pushl/popl 不适用于“错误:后缀或操作数无效”

    我是汇编编程的新手 正在努力解决编程基础 http savannah nongnu org projects pgubook 在带有 GNU 汇编器 v2 20 1 的 Ubuntu x86 64 桌面上 我已经能够汇编 链接执行我的代码
  • 为什么 LED 保持亮起而不是闪烁?

    这是使用 pic16f676 中的 TIMER0 中断使 LED 闪烁的 MPASM 代码 端口 A 的引脚 0 RA0 未切换至关闭位置 请帮忙 我是图片组装的新手 我想掌握图片 有没有高手帮我学习一下 我需要以 1 秒的间隔眨眼 代码是
  • 将以下机器语言代码(0x2237FFF1)翻译成MIPS汇编

    到目前为止我已经翻译了这段代码 但我不明白的是如何计算 计算 16 位立即地址的数量 0x2237FFF1 转为二进制 0010 0010 0011 0111 1111 1111 1111 0001 现在我正在读取操作码 001000 并知
  • 在 qemu 中将扇区加载到 RAM

    我编写了一个简单的程序 将扇区 扇区编号 2 加载到 RAM 但什么也没打印 首先 我尝试了以下引导扇区代码 org 0x7c00 mov ax 0x1000 ES BX 1000 0000 mov es ax mov bx 0x00 Lo
  • NASM:如何正确访问SSD驱动器?

    我需要使用 NASM 16 位代码访问 SSD 驱动器 访问普通硬盘时 需要设置寄存器AX DX CX来选择柱面 磁道 扇区 扇区数 AH 选择读扇区功能 DL 选择驱动器号 CH 选择气缸 DH 选择磁盘上的一侧 CL 选择步入正轨的部门
  • 如何在汇编中使用 ReadString?

    mov edx offset Prompt1 call WriteString mov ecx 32 mov edx offset String1 call ReadString 现在 我该如何访问String1 如何将其移入寄存器以便对其
  • mfence 和 asm 易失性 ("" : : : "内存") 的区别

    据我了解 mfence是硬件内存屏障 而asm volatile memory 是编译器障碍 但是 可以asm volatile memory 用来代替 mfence 我感到困惑的原因是这个链接 http gcc gnu org ml gc
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • 气体:内存引用太多

    编译时指令如下 movl 4 ebp 8 ebp I got 内存引用过多 它出什么问题了 括号之前的数字是字节偏移量 这会导致发生内存引用 并且不能有两个movl 您需要先将值暂时移至寄存器 movl 4 ebp ecx movl ecx
  • 了解汇编语言中的 cmpb 和循环

    我有一个函数 string length 它具有以下汇编代码 0x08048e90 lt 0 gt push ebp 0x08048e91 lt 1 gt mov esp ebp 0x08048e93 lt 3 gt mov 0x8 ebp

随机推荐

  • scanf 和 doubles 的问题[重复]

    这个问题在这里已经有答案了 我无法理解为什么会发生这种情况 使用以下代码 include
  • 如何在文本字段内设置用户名和密码的标签?

    我的网站有一个登录表单 该登录表单有两个文本字段 用户名和密码 目前 我将标签 用户名 密码 放置在文本字段之前 但现在我想删除这两个标签并想在文本字段内显示文本 用户名 密码 当用户关注这些文本字段时 文本应该被删除 用户可以输入他想要的
  • MySQL:通过迭代并与另一行连接来更新表中的行

    我有一张表纸 CREATE TABLE papers id int 11 NOT NULL AUTO INCREMENT title varchar 1000 CHARACTER SET utf8 COLLATE utf8 unicode
  • @Autowired jdbcTemplate 和 h2 内存数据库多次执行 runscript

    我继承了一个项目 并试图针对内存中的 h2 数据库运行一组集成测试 为了让他们传递一些表格 需要创建关系和参考数据 我可以看到问题在于引用的脚本RUNSCRIPT被执行多次 因此生成Index XXX IDX already exists错
  • Windows 批处理文件中的 SQL 语句

    有没有办法让Windows批处理文件直接输入SQL语句而不需要调用脚本 我希望批处理文件登录SQL 然后直接输入语句 EDIT 我正在使用 Oracle v10g 对于单个命令 您可以使用以下技巧 echo select from dual
  • JSON 中的换行符

    我们使用 WCM 工具进行内容输入 内容编辑器将在该工具中输入包含文本和 html 的内容 为了将内容转换为 JSON 我们使用 newton JSON 如下所示 我们传递简单的键和值字典 string output JsonConvert
  • 使用 R 中的 ggplot2 在分类散点图中添加水平线

    我正在尝试为 3 个组绘制一个简单的散点图 每个组具有不同的水平线 线段 例如 组 a 的 hline 为 3 组 b 的 hline 为 2 5 hline 为组 b c 组为 6 library ggplot2 df lt data f
  • 在所有应用程序之上绘制 Android 画布?

    考虑到 Android 的本质 我怀疑这是不可能的 但是有没有办法创建一个显示在所有应用程序之上的各种视图 也许使用 Canvas 对象 我对这个项目的意图并不是恶意的 我创建了一些简单的彩色滤镜软件 http www musatcha c
  • 使用鼠标功能时出错:没有什么可以估算的

    我尝试将 NA 数据填充到数据框中 我做了简单的数据 library mice first lt c 1 2 3 4 5 NA 7 8 9 NA second lt c 1 2 NA 4 5 6 7 NA 9 10 sample data
  • 如何替换 R.drawable."someString"

    我的项目中有一些图像 图像的名称存储在字符串中 我想 setImageResource R drawable 与图像名称的字符串 但问题是这不起作用 我怎样才能做到这一点 这不是正确的语法 您必须得到编译时错误 在更改图像资源之前您必须知道
  • 使用 PHP Mcrypt 加密并使用 MySQL aes_decrypt 解密?

    是否可以使用 PHP 加密数据mcrypt并用MySQL在数据库中解密AES DECRYPT 目前 我正在使用RIJNDAEL 128 for mcrypt关于 PHP 我还确保数据库中的加密字段具有数据类型blob Yet AES DEC
  • .Resx 和 .Resources 文件类型有什么区别?

    我有很多 resources 文件 需要打开并查看 我下载了Zeta 资源编辑器 http www zeta resource editor com 但它仅适用于 Resx 文件 有区别吗 我可以打开 Resources 文件并提取其内容吗
  • Postgresql 上的 Castle Activerecord 错误是“关系不存在”?

    ActiveRecord 映射 ActiveRecord JobTitle Schema public public class JobTitle ActiveRecordValidationBase
  • 如何让 Visual Studio Code 在调试时退出时暂停

    尽我所能 我找不到让 Visual Studio Code 在调试结束时暂停的方法 控制台窗口就消失了 并带走了所有输出 如果我一遍又一遍地运行该程序 我可以看到一些文本闪烁 但我无法在它出现的毫秒内读取它 I can启动时暂停 这样可行
  • Javascript 将 CSV 文件加载到数组中

    我正在 WordPress 中开发一个网页 该网页需要有一个包含所有县的组合框 我有一个 csv 格式的数据集 其中包含所有这些县的约 10k 行 当用户在下拉列表中选择一个县时 我只想在网页中显示所选县的数据 这是我的要求 在 WordP
  • Rails 缓存过期

    我有一个 Rails 应用程序 因为我使用简单的 Rails 缓存 我的测试如下 Rails cache write temp Date today expires in gt 60 seconds 我可以读完Rails cache rea
  • 使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

    虽然类似于使用 MongoDB Java 驱动程序将 DBObject 转换为 POJO https stackoverflow com questions 7684223 convert dbobject to a pojo using
  • 我可以使用.NET Reflector快速修改和重新编译代码吗?

    是否可以使用 NET反射器 http en wikipedia org wiki NET Reflector 或其他工具 修改并重新编译代码quickly 也就是说 不转储源然后使用视觉工作室 http en wikipedia org w
  • 如何使用 python 显示当前用户的进程列表?

    我知道它与 proc 有关 但我不太熟悉它 教科书的答案是使用psutil像这样的模块 import psutil getpass os user name getpass getuser process dict proc pid pro
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实