У меня был дамп ядра программы (коммерческой, с закрытым исходным кодом, написанной не мной) по инструкции vmovdqu (%rsi),%xmm2
и я хотел проверить значения регистров в gdb с помощью info regs
. Удивительно, но ЦП (24-ядерный процессор AMD EPYC 7401P), кажется, имеет ymm
, но не имеет xmm
регистров. Я не гуру сборки x86-64, но знаю x86 неплохо.
Кто может объяснить? Версия gdb 10.1.
Вот пример (только начало) дампа реестра:
gdb) info registers all
rax 0x0 0
rbx 0x104c400 17089536
rcx 0x20 32
rdx 0x35 53
rsi 0x100000000a0 1099511627936
rdi 0x104c400 17089536
rbp 0x100000000a0 0x100000000a0
rsp 0x7ffcc68b0fa8 0x7ffcc68b0fa8
r8 0xffffffff 4294967295
r9 0xffffffff 4294967295
r10 0x5ab 1451
r11 0x35 53
r12 0x100000000a0 1099511627936
r13 0x7ffcc68b2110 140723639492880
r14 0x0 0
r15 0x0 0
rip 0x7f877a1dc86b 0x7f877a1dc86b <__strncasecmp_l_avx+91>
eflags 0x10283 [ CF SF IF RF ]
cs 0xe033 57395
ss 0xe02b 57387
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
st0 0 (raw 0x00000000000000000000)
st1 0 (raw 0x00000000000000000000)
st2 0 (raw 0x00000000000000000000)
st3 0 (raw 0x00000000000000000000)
st4 0 (raw 0x00000000000000000000)
st5 0 (raw 0x00000000000000000000)
st6 0 (raw 0x00000000000000000000)
st7 0 (raw 0x00000000000000000000)
fctrl 0x37f 895
fstat 0x0 0
ftag 0xffff 65535
fiseg 0x0 0
fioff 0x0 0
foseg 0x0 0
fooff 0x0 0
fop 0x0 0
mxcsr 0x1fa0 [ PE IM DM ZM OM UM PM ]
ymm0 {
v16_bfloat16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_float = {0x0, 0x0, 0x0, 0xffffffff, 0x0, 0x0, 0x0, 0x0},
v4_double = {0x0, 0x7fffffffffffffff, 0x0, 0x0},
v32_int8 = {0x0 <repeats 14 times>, 0xff, 0xff, 0x0 <repeats 16 times>},
v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_int32 = {0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0},
v4_int64 = {0x0, 0xffff000000000000, 0x0, 0x0},
v2_int128 = {0xffff0000000000000000000000000000, 0x0}
}
ymm1 {
v16_bfloat16 = {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_float = {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0},
v4_double = {0x7fffffffffffffff, 0x7fffffffffffffff, 0x0, 0x0},
v32_int8 = {0x2f, 0x65, 0x74, 0x63, 0x2f, 0x6f, 0x70, 0x74, 0x2f, 0x6f, 0x6d, 0x6e, 0x69, 0x2f, 0x63, 0x6c, 0x0 <repeats 16 times>},
v16_int16 = {0x652f, 0x6374, 0x6f2f, 0x7470, 0x6f2f, 0x6e6d, 0x2f69, 0x6c63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_int32 = {0x6374652f, 0x74706f2f, 0x6e6d6f2f, 0x6c632f69, 0x0, 0x0, 0x0, 0x0},
v4_int64 = {0x74706f2f6374652f, 0x6c632f696e6d6f2f, 0x0, 0x0},
v2_int128 = {0x6c632f696e6d6f2f74706f2f6374652f, 0x0}
}
ymm2 {
v16_bfloat16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_float = {0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0},
v4_double = {0x7fffffffffffffff, 0x7fffffffffffffff, 0x0, 0x0},
v32_int8 = {0x0, 0x0, 0x0, 0xff <repeats 13 times>, 0x0 <repeats 16 times>},
v16_int16 = {0x0, 0xff00, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_int32 = {0xff000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0},
v4_int64 = {0xffffffffff000000, 0xffffffffffffffff, 0x0, 0x0},
v2_int128 = {0xffffffffffffffffffffffffff000000, 0x0}
}
ymm3 {
v16_bfloat16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_float = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_double = {0x0, 0x0, 0x0, 0x0},
v32_int8 = {0x0 <repeats 14 times>, 0xff, 0x0 <repeats 17 times>},
v16_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v8_int32 = {0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0},
v4_int64 = {0x0, 0xff000000000000, 0x0, 0x0},
v2_int128 = {0xff0000000000000000000000000000, 0x0}
}
...