gpt4 book ai didi

assembly - 如何将 128 位立即数移至 XMM 寄存器

转载 作者:行者123 更新时间:2023-12-02 20:41:25 36 4
gpt4 key购买 nike

已经有 a question对此,但它被关闭为“模棱两可”,所以我正在打开一个新的 - 我找到了答案,也许它也会对其他人有所帮助。

问题是:如何编写一系列汇编代码来用 128 位立即数(常量)值初始化 XMM 寄存器?

最佳答案

您可以这样做,只需一条 movaps 指令:

.section .rodata    # put your constants in the read-only data section
.p2align 4 # align to 16 = 1<<4
LC0:
.long 1082130432
.long 1077936128
.long 1073741824
.long 1065353216

.text
foo:
movaps LC0(%rip), %xmm0

通过数据加载来加载它通常比将其嵌入指令流更好,特别是因为它需要多少条指令。对于无法通过几次移位从全 1 生成的任意常量,CPU 需要执行几个额外的微指令。

如果更容易,您可以将常量放在即时编译的函数之前或之后,而不是放在单独的部分中。但由于 CPU 已拆分 L1d/L1i 缓存和 TLB,因此通常最好将常量与指令分开分组。

如果常数的两半相同,则可以使用 SSE3 广播加载它
movddup (m64),%xmm0

关于assembly - 如何将 128 位立即数移至 XMM 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654099/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com