Najlepszy montaż lub kompilacja dla minimum trzech wartości

Szukam kodu wygenerowanego przez GCC-4.8 dla x86_64 i zastanawiam się, czy istnieje lepszy (szybszy) sposób obliczenia minimum trzech wartości.

Oto fragment Pythonakolekcje moduł, który oblicza minimumm, rightindex+1, ileftindex:

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

GCC generuje kod zależny seryjnie z CMOV:

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

Czy istnieje szybszy kod, który może wykorzystać równoległe wykonanie procesora poza kolejnością, usuwając zależności danych? Zastanawiam się, czy istnieją znane sztuczki do obliczania minimum wielu wartości bez użycia warunków warunkowych lub instrukcji predykowanych. Zastanawiam się również, czy istnieją pewne nasycające elementy arytmetyczne, które mogłyby pomóc w tej sytuacji.

EDYTOWANIE:

Jak pokazano, kod wykorzystuje arytmetykę podpisaną, ale pomocna byłaby również niepodpisana odpowiedź arytmetyczna.Zapytałem o co najmniej trzy, ale interesuje mnie także minimum-n, gdzie n jest małe.Ostrzeżenia Linusa na temat CMOV:http://ondioline.org/mail/cmov-a-bad-idea-on-out-of-order-cpus

questionAnswers(3)

yourAnswerToTheQuestion