【问题标题】:What's the right way to replace stp by str?用str替换stp的正确方法是什么?
【发布时间】:2020-11-19 07:29:27
【问题描述】:

由于某些原因,我需要将stp指令替换为str

旧:

stp q0, q0, [dst, -32]

新:

str q0, [dst, -32]
str q0, [dst, -24]

str q0, [dst, -24]
str q0, [dst, -32]

我已经尝试了这两个命令,但两者都会在某处以段错误结束。哪里出了问题?

【问题讨论】:

  • 只是出于好奇,您需要将stp 替换为两个strs 的原因是什么?
  • @NateEldredge 某些平台有 cpu 错误,stp 在某些 radeon/mesa 情况下似乎会使 cpu 崩溃
  • stp q,q 在某些 CPU 上是否需要 32 字节对齐?还是它不容易重复,更像是微架构条件的组合。 (英特尔有过类似的勘误表,比如启用超线程的部分寄存器合并,导致通过微码更新禁用 Skylake 上的循环缓冲区以解决它。但是在 ocaml 编译器开发人员注意到它之前花了一年或更长时间,显然他们的编译器生成的代码有时会触发错误的行为。)
  • @PeterCordes 我现在无法获得 cpu 供应商的支持,所以不确定它是否需要 32 字节对齐 ;(。是的,它不容易重复。

标签: assembly segmentation-fault arm64


【解决方案1】:

q0 是一个 128 位的寄存器,即 16 个字节,所以你想要

str q0, [dst, -32]
str q0, [dst, -16]

如果您愿意,反之亦然(应该不会产生任何影响)。

就目前而言,您将它们重叠并保留最后 8 个字节未初始化。

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2019-10-20
    • 2014-01-08
    • 2023-04-09
    • 2010-11-28
    相关资源
    最近更新 更多