Сообщение от 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), так что возможно удастся сделать быстрей.
Ну я попозже свой велосипед выложу, просто я уверен что уже есть готовые оптимальные варианты.