Я использую GDB в течение 1 дня, и я накопил достойное понимание этого. Однако, когда я устанавливаю точку останова в конечной точке с запятой, используя GDB и регистры печати, я не могу полностью интерпретировать значение данных, хранящихся в регистре XMM.Интерпретация регистров GDB (регистров SSE)
Я не знаю, находятся ли данные (MSB> LSB) или наоборот.
__m128i S = _mm_load_si128((__m128i*)Array16Bytes);
}
Так что это результат, который я получаю.
(gdb) print $xmm0
$1 = {
v4_float = {1.2593182e-07, -4.1251766e-18, -5.43431603e-31, -2.73406277e-14},
v2_double = {4.6236050467459811e-58, -3.7422963639201271e-245},
v16_int8 = {52, 7, 55, -32, -94, -104, 49, 49, -115, 48, 90, -120, -88, -10, 67, 50},
v8_int16 = {13319, 14304, -23912, 12593, -29392, 23176, -22282, 17202},
v4_int32 = {872888288, -1567084239, -1926210936, -1460255950},
v2_int64 = {3749026652749312305, -8273012972482837710},
uint128 = 0x340737e0a29831318d305a88a8f64332
}
Так бы кто-то любезно дал мне понять, как интерпретировать данные.
Так что я загружаю массив, используя встроенную функцию _mm_load_si128, однако я не знаете, что самый значительный байт в массиве становится наименее значимым байтом в регистре. – Nocturnal
В общем, вам не нужно беспокоиться об этом, но применяются обычные правила x86 little endian, поэтому байт LS из байта с 16 байтами находится в байте LS из 16-байтового регистра. gdb отображает регистр в натуральном порядке - см. правки для ответа выше. –