как работает инструкция packuswb? (в битовом режиме низкого уровня) - PullRequest
1 голос
/ 16 апреля 2019

Изучая преобразование ffmpeg из yuv в rgb, я наткнулся на уравнение, реализуемое в ассемблере, yuv2rgb_template.c, расположенное в ffmpeg / libswscale / x86.

Я хочу знать, как работает инструкция packuswb?Google говорит это:

Преобразует 4 целых числа со знаком из мм и 4 целых числа со знаком из мм / м64 в 8 целых чисел без знака в мм с использованием насыщенности без знака.

    DEST[7:0] ← SaturateSignedWordToUnsignedByte DEST[15:0];
    DEST[15:8] ← SaturateSignedWordToUnsignedByte DEST[31:16];
    DEST[23:16] ← SaturateSignedWordToUnsignedByte DEST[47:32];
    DEST[31:24] ← SaturateSignedWordToUnsignedByte DEST[63:48];
    DEST[39:32] ← SaturateSignedWordToUnsignedByte SRC[15:0];
    DEST[47:40] ← SaturateSignedWordToUnsignedByte SRC[31:16];
    DEST[55:48] ← SaturateSignedWordToUnsignedByte SRC[47:32];
    DEST[63:56] ← SaturateSignedWordToUnsignedByte SRC[63:48];

Поскольку я не знаюСборка x86, даже сложно смоделировать или отладить текущий код.

Я хочу знать, как они вписываются в 16 бит в 8 бит?

1 Ответ

6 голосов
/ 16 апреля 2019

SaturateSignedWordToUnsignedByte означает ограничение до 8-битного диапазона.То есть> = 0x100 становится 0xFF, <= - 1 становится 0, а остальное (0-0xFF) остается неизменным. </p>

...