Búsqueda rápida de algunos mordiscos en dos entradas en el mismo desplazamiento (C, microoptimización)

Mi tarea es verificar (> billones de comprobaciones), ¿dos int contienen alguno de los pares predefinidos de nibbles (primer par 0x2 0x7; segundo 0xd 0x8). Por ejemplo

bit offset:   12345678
first int:  0x3d542783     first pair of  0x2    second:   0xd   
second int: 0x486378d9      nibbles:      0x7      pair:   0x8
               ^  ^

Entonces, para este ejemplo, marco dos desplazamientos con los pares necesarios (los desplazamientos son 2 y 5; pero no un 7). Las compensaciones reales y el número de pares encontrados no son necesarios en mi tarea.

Entonces, para dos entradas dadas la pregunta es:Does contiene cualquiera de estos pares de mordiscos en el mismo desplazamiento.

Revisé mi programa, esta parte es el lugar más popular gprof probado); y se llama muchísimas veces gcov probado). En realidad, es el tercer o cuarto bucle (más anidado) de bucles anidados.

Mi código actual es lento (lo reescribo como función, pero es un código del bucle interno):

static inline int nibble_check (uint32_t A, uint32_t B)
 __attribute__((always_inline))
{
  int i;
  for(i=0;i<8;i++)

    if(  ( ( (A&0xf) ==0xD) && ( (B&0xf) ==0x8) )     // first pair
      || ( ( (A&0xf) ==0x2) && ( (B&0xf) ==0x7) )  )  // second pair
        return 1; // nibbles found
    else {
        A>>=4;
        B>>=4;
    }

  return 0; // nibbles not found
}

La otra tarea es encontrar estos pares no solo en las compensaciones de 0,4,8 bits, etc., sino también en las compensaciones de 0,2,4,8,10, ... bits:

#define douburu_nibble_check(A,B) (nibble_check(A,B) || nibble_check(A>>2, B>>2) )

Es posible reescribir esta función y macro en forma paralela?

Mi compilador es gcc452 y cpu es Intel Core2 Solo en modo de 32 bits (x86).

Respuestas a la pregunta(6)

Su respuesta a la pregunta