Лучшая сборка или компиляция для минимум трех значений

Я смотрю на код, сгенерированный GCC-4.8 для x86_64, и спрашиваю себя, есть ли лучший (более быстрый) способ вычисления минимум трех значений.

Вот'выдержка из Питонаколлекции модуль, который вычисляет минимум,mrightindex+1, а также :leftindex

    ssize_t m = n;
    if (m > rightindex + 1)
        m = rightindex + 1;
    if (m > leftindex)
        m = leftindex;

GCC генерирует последовательно зависимый код с CMOV:

leaq    1(%rbp), %rdx
cmpq    %rsi, %rdx
cmovg   %rsi, %rdx
cmpq    %rbx, %rdx
cmovg   %rbx, %rdx

Существует ли более быстрый код, который может использовать преимущества параллельного выполнения процессора вне очереди, удаляя зависимости от данных? Я'Интересно, существуют ли известные приемы для вычисления минимума нескольких значений без использования условных или предикатных инструкций. Мне также интересно, есть ли некоторые насыщающие арифметические свойства, которые могли бы помочь в этой ситуации.

редактирует:

Как показано в коде, используется арифметика со знаком, но арифметический ответ без знака также поможет.Я спросил о минимуме из трех, но также интересуюсь минимальным из n, где n мало.Линусs наставления на CMOV:http://ondioline.org/mail/cmov-a-bad-idea-on-out-of-order-cpus

Ответы на вопрос(3)

Ваш ответ на вопрос