Задачка 2^n => n (без BSF/BSR, переходов и таблиц)

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 25 ноя 2011.

  1. m_a_x

    m_a_x New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2011
    Сообщения:
    3
    я может чего-то не понял, вот такой вариант

    fld1
    fild xxx
    fyl2x
    fistp xxx

    и обратно использовать

    f2xm1
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    m_a_x
    Не поняли. fyl2x — это такие тормоза, что весь код из #19 пять раз за одну эту инструкцию успеет выполниться. f2xm1 аналогично.
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    m_a_x
    l_inc
    Подтверждаю про тормоза. Я конечно не замерял, но с удивлением обнаружил что Интел в своей же библиотеке логарифм вычисляет через конвеерные команды, видимо SSE2. Посмотрев число тактов для fyl2x, я понял почему :)
     
  4. m_a_x

    m_a_x New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2011
    Сообщения:
    3
    Тогда так N=31, вх. и вых число в zzz

    zzz dd

    fild zzz 3
    fstp zzz 2
    shr zzz, 23 3
    sub zzz, 127 3

    могу ошибаться в тактах, вроде как 11
     
  5. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Вопрос по теме.
    Если говорить о схожей задаче (но для случая произвольных 128-битных значений, которые остаются в наследство от sse), каков по-вашему оптимальный вариант нахождения первого/последнего единичного бита?
    Пусть даже с использованием таблиц и bsr/bsf.