2011-07-18 4 views
3

Мое впечатление определенно не есть, но, может быть, есть умный трюк? Спасибо.Можно ли использовать регистры XMM для выполнения любой 128-битной целочисленной математики?

+0

Я думаю, что SSE4 поддерживает 128-битные целые числа. – leppie

+0

@leppie: нет, это неверно - существует несколько 64-битных целых операций (например, 'PADDQ' и' PSUBQ'), но это далеко не все. –

+0

[Is __int128_t арифметика, эмулируемая GCC, даже с SSE?] (Http://stackoverflow.com/q/16566437/995714) [практичный BigNum AVX/SSE возможен?] (Http://stackoverflow.com/q/27923192/995714) –

ответ

2

Непосредственно, но есть 64-разрядные арифметические операции, которые можно легко комбинировать для выполнения 128-битной (или большей) точности.

+1

Возможно, но имейте в виду, что нет никаких операций с добавлением-переносом, поэтому фактическая реализация может быть медленнее, чем скалярная версия. –

+0

@ Jasper: хорошая точка - это довольно легко реализовать (хотя и нетривиально), но производительность может быть не намного лучше, чем просто использование двух 64-битных скалярных ALU, которые имеют большинство современных x86-процессоров. –

1

Регистры xmm могут выполнять арифметику на 8, 16, 32 и 64 битных целых числах. Он не создает флаг переноса, поэтому вы не можете увеличить точность до 64 бит. Библиотеки расширенной точности математики используют регистры общего назначения, которые 32-разрядные или 64-разрядные, в зависимости от ОС.