A = 0101 0011 0010 0000 0000 0000 0000 0000   // 5 3 2 0 0 0 0 0
B = 0010 0011 0110 0111 0000 0000 0000 0000   // 2 3 6 7 0 0 0 0

// Compute a bitmask N, showing which elements of A that are
// smaller than or equal to the corresponding elements of B.
// M is a precomputed constant.

M = 1000 1000 1000 1000 1000 1000 1000 1000     // 8 8 8 8 8 8 8 8
N = ((B OR M) - A) AND M                      	// 0 8 8 8 8 8 8 8
N = N - (N>>3)                                	// 0 7 7 7 7 7 7 7

// Compute the max and min sequence and concatenate them.

Z =    (B AND N)                             // 0 3 6 7 0 0 0 0
    OR (A - (A AND N))                       // 5 0 0 0 0 0 0 0
    OR ((A AND N)>>16)                       // 0 0 0 0 0 3 2 0
    OR ((B - (B AND N))>>16)                 // 0 0 0 0 2 0 0 0

Figure 7: Implementing the computation of Figure 6 in parallel with standard operations only.

Back to Article