Показать сообщение отдельно
Старый 13.02.2015, 03:26   #3
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: dword to float4 и обратно

Сообщение от mr.DIMAS Посмотреть сообщение
То есть тебе нужно что-то типа такого:
dword( byte1, byte2, byte3, byte4 )
byte1 -> float( 0...1 )
byte2 -> float( 0...1 )
byte3 -> float( 0...1 )
byte4 -> float( 0...1 )
и обратной запаковки в dword?

опиши подробнее, а то я ничего не понял.
Да именно так.

В SSE есть инструкция которая из 4 dword'ов может в 4 float'а сконвертить. Но побайтово SSE вроде не умеют работать (только с 4 байтами через инструкцию смешивания). Разделить dword на байты можно через РОН. Но копировать напрямую из РОН в xmm тоже вроде нельзя. Получается нужно загрузить в РОН, разделить на байты, снова записать в память и от туда загрузить в xmm. В целом записываться будет в кеш L1, так что не так много времени займет, но всё же лишние действия. Так или иначе сейчас у меня код написан на С++ и судя по листингу с ассемблером там очень много кода (т. к. делается через FPU), так что возможно удастся сделать быстрей.

Ну я попозже свой велосипед выложу, просто я уверен что уже есть готовые оптимальные варианты.
(Offline)
 
Ответить с цитированием