Перенос фрагмента кода с MMX на SSE2 asm

Я пытаюсь перенести некоторый код из MMX в SSE2, и у меня при этом возникают некоторые проблемы.

Для ММХ у меня есть:

    .data
    align 16
    onesByte qword 2 dup(0101010101010101h)
    ...
    psubusb mm2,onesByte
    psubusb mm0,onesByte

Для SSE2 у меня есть:

    .data
    align 16
    onesByte_O oword 4 dup(0101010101010101h)
    ...
    psubusb xmm2,onesByte_O
    psubusb xmm0,onesByte_O

Что я не считаю правильным. Как правильно конвертировать oneBytes для поддержки SSE2? Спасибо!


person Elegant    schedule 07.03.2015    source источник
comment
qword 4 возможно. Таким образом, он был в 4 раза больше и с 0 в старших байтах.   -  person harold    schedule 07.03.2015
comment
qword по-прежнему 64-битный, а не 128-битный, что требуется (согласно компилятору) при использовании регистров xmm для SSE2.   -  person Elegant    schedule 07.03.2015
comment
Да, но у тебя их будет два, так что все в порядке. Редактировать: подождите, это уже в два раза больше, чем нужно. Что там происходит?   -  person harold    schedule 07.03.2015
comment
О, это правда, qword 2 dup должно быть 128-битным как есть. Однако проблема все еще остается. Предполагая, что последнее утверждение выполняется: psubusb xmm2,onesByte вместо onesByte_O дает error A2070: invalid instruction operands.   -  person Elegant    schedule 07.03.2015
comment
попробуйте psubusb xmm2, xmmword ptr [oneByte], потому что в противном случае автоматический тип будет QWord PTR   -  person zx485    schedule 07.03.2015


Ответы (1)


oneBytes — дублированное qword, которое нужно вызывать oword ptr oneBytes при использовании регистров xmm.

person Elegant    schedule 07.03.2015