как в 3dnow рассчитать абсолютное значение

Тема в разделе "WASM.BEGINNERS", создана пользователем TelnovVictor, 30 май 2007.

  1. TelnovVictor

    TelnovVictor New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    2
    пытаюсь вычислить это самое абсолютное
    пусть в mm1(0-31) - значение, в mm1(32-63) - ноль

    pshufw mm0, mm1, $4E
    pfsub mm0, mm1
    pfmax mm0, mm0

    и здесь не работает функция pfmax... может я что-нить неправильно делаю?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    pfmax mm0,mm1

    PS: pshufw лучше заменить на pxor mm0,mm0
     
  3. TelnovVictor

    TelnovVictor New Member

    Публикаций:
    0
    Регистрация:
    30 май 2007
    Сообщения:
    2
    pshufw как раз делае то что нужно
    пусть mm1 = (зн,0), тогда
    pshufw mm0, mm1, $4E - mm0 = (0,зн)
    pfsub mm0, mm1 - mm0 = (-зн,зн)
    pfmax mm2, mm0 - взять бы максимальное из (-зн,зн), но оно просто присваивает в mm2 значения из mm0, без каких-либо преобразований
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ты видимо не правильно понимаешь, что делает pfsub - она выбирает максимальные значения из двух операндов, а не из частей одного операнда
    пусть mm1 = (зн,0), тогда
    pxor mm0,mm0 -> mm0 = (0,0)
    pfsub mm0,mm1 -> mm0 = (-зн,0)
    pfmax mm0,mm1 -> mm0 = (max(зн,-зн),0) = (abs(зн),0)