gpt4 book ai didi

gcc - gdb:打印 AArch64 高级 SIMD 矢量寄存器(有可能吗?)

转载 作者:行者123 更新时间:2023-12-04 23:17:53 24 4
gpt4 key购买 nike

我正在尝试在我的汇编代码中进行调试,以检查高级 SIMD 向量寄存器中的值。为此,我运行 gdb 并在我的指令中设置了一个断点,运行 layout asm并使用 si 逐步完成我的说明.然而,当我达到我想要的指令时,p v16例如,没有打印该寄存器内的值,它给了我如下错误:

       │0x4009d0 <Montmul512+80>        umull2 v16.2d, v15.4s, v7.s[3]                                                                         │
>│0x4009d4 <Montmul512+84> umull2 v17.2d, v13.4s, v7.s[3] │
│0x4009d8 <Montmul512+88> umull2 v18.2d, v14.4s, v7.s[3] │
│0x4009dc <Montmul512+92> umull2 v19.2d, v12.4s, v7.s[3] │
│0x4009e0 <Montmul512+96> umull v20.2d, v15.2s, v7.s[3] │
│0x4009e4 <Montmul512+100> umull v21.2d, v13.2s, v7.s[3] │
│0x4009e8 <Montmul512+104> umull v22.2d, v14.2s, v7.s[3] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
(gdb) print v16
print v16
No symbol "v16" in current context.

我没有任何调试汇编代码的经验,所以也许这个问题对很多人来说似乎很简单。

最佳答案

您还可以从 gdb 中打印矢量寄存器,如下例所示。

(gdb) p $v0
$101 = {d = {f = {1.2672947890318689e-279, 7.7486181465248912e-304}, u = {434317018741670663, 72340181461566213}, s = {434317018741670663, 72340181461566213}}, s = {
f = {2.42644275e-35, 2.53914328e-35, 3.79131591e-37, 2.36942839e-38}, u = {100729607, 101122311, 50397957, 16843011}, s = {100729607, 101122311, 50397957,
16843011}}, h = {u = {775, 1537, 263, 1543, 773, 769, 259, 257}, s = {775, 1537, 263, 1543, 773, 769, 259, 257}}, b = {u = {7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3,
3, 1, 1, 1}, s = {7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 1, 1, 1}}, q = {u = {0x01010103030103050607010706010307}, s = {0x01010103030103050607010706010307}}}

打印不同的车道/元素:
(gdb) p $v0.q
$102 = {u = {0x01010103030103050607010706010307}, s = {0x01010103030103050607010706010307}}
(gdb) p $v0.d
$103 = {f = {1.2672947890318689e-279, 7.7486181465248912e-304}, u = {434317018741670663, 72340181461566213}, s = {434317018741670663, 72340181461566213}}
(gdb) p $v0.s
$104 = {f = {2.42644275e-35, 2.53914328e-35, 3.79131591e-37, 2.36942839e-38}, u = {100729607, 101122311, 50397957, 16843011}, s = {100729607, 101122311, 50397957,
16843011}}
(gdb) p $v0.q.s
$105 = {0x01010103030103050607010706010307}
(gdb) p $v0.d.s
$106 = {434317018741670663, 72340181461566213}
(gdb) p $v0.d.s[1]
$107 = 72340181461566213

根据我使用 -tui, layout asm, layout reg 选项的经验,如果您没有非常大的显示器,则往往会很拥挤。因此,如果您在 gdb 中执行以下命令,您将很难看到所有 simd 寄存器。我倾向于使用缩写,因为我很懒。当 Gdb 不明白您想要哪个命令时,它会通知您。
(gdb) wh reg +1
(gdb) tu reg next

关于gcc - gdb:打印 AArch64 高级 SIMD 矢量寄存器(有可能吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518673/

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