code: private int inv_mcol(int x) {
          int f2 = FFmulX(x);
          int f4 = FFmulX(f2);
          int f8 = FFmulX(f4);
          int f9 = x ^ f8;
  
          return f2 ^ f4 ^ f8 ^ shift(f2 ^ f9, 8) ^ shift(f4 ^ f9, 16) ^ shift(f9, 24);
      }
docs: /*
  The following defines provide alternative definitions of FFmulX that might
  give improved performance if a fast 32-bit multiply is not available.
  
  private int FFmulX(int x) { int u = x & m1; u |= (u >> 1); return ((x & m2) << 1) ^ ((u >>> 3) | (u >>> 6)); }
  private static final int  m4 = 0x1b1b1b1b;
  private int FFmulX(int x) { int u = x & m1; return ((x & m2) << 1) ^ ((u - (u >>> 7)) & m4); }