{
    
    
    
    static constexpr int shift1[] = { 0, 1, 2, 1, 4, 4, 4, 4 };
    
    static constexpr int shift2[] = { 0, 0, 0, 1, 0, -1, -2, -3 };
    op[0] = match[0];
    op[1] = match[1];
    op[2] = match[2];
    op[3] = match[3];
    match += shift1[offset];
    memcpy(op + 4, match, 4);
    match += shift2[offset];
}
#if defined(__x86_64__) || defined(__PPC__) || defined(__riscv)
/** We use 'xmm' (128bit SSE) registers here to shuffle 16 bytes.
  *
  * It is possible to use 'mm' (64bit MMX) registers to shuffle just 8 bytes as we need.
  *
  * There is corresponding version of 'pshufb' instruction that operates on 'mm' registers,
  *  (it operates on MMX registers although it is available in SSSE3)