pprInstr (TEST format src dst) = sdocWithPlatform $ \platform ->
  let format' = case (src,dst) of
        -- Match instructions like 'test $0x3,%esi' or 'test $0x7,%rbx'.
        -- We can replace them by equivalent, but smaller instructions
        -- by reducing the size of the immediate operand as far as possible.
        -- (We could handle masks larger than a single byte too,
        -- but it would complicate the code considerably
        -- and tag checks are by far the most common case.)
        -- The mask must have the high bit clear for this smaller encoding
        -- to be completely equivalent to the original; in particular so
        -- that the signed comparison condition bits are the same as they
        -- would be if doing a full word comparison. See #13425.
        (OpImm (ImmInteger mask), OpReg dstReg)
          | 0 <= mask && mask < 128 -> minSizeOfReg platform dstReg
        _ -> format
  in pprFormatOpOp (sLit "test") format' src dst
  where
    minSizeOfReg platform (RegReal (RealRegSingle i))
      | target32Bit platform && i <= 3        = II8  -- al, bl, cl, dl
      | target32Bit platform && i <= 7        = II16 -- si, di, bp, sp
      | not (target32Bit platform) && i <= 15 = II8  -- al .. r15b
    minSizeOfReg _ _ = format                 -- other
pprInstr (TEST format src dst) = sdocWithPlatform $ \platform ->
  let format' = case (src,dst) of
        -- Match instructions like 'test $0x3,%esi' or 'test $0x7,%rbx'.
        -- We can replace them by equivalent, but smaller instructions
        -- by reducing the size of the immediate operand as far as possible.
        -- (We could handle masks larger than a single byte too,
        -- but it would complicate the code considerably
        -- and tag checks are by far the most common case.)
        -- The mask must have the high bit clear for this smaller encoding
        -- to be completely equivalent to the original; in particular so
        -- that the signed comparison condition bits are the same as they
        -- would be if doing a full word comparison. See #13425.
        (OpImm (ImmInteger mask), OpReg dstReg)
          | 0 <= mask && mask < 128 -> minSizeOfReg platform dstReg
        _ -> format
  in pprFormatOpOp (sLit "test") format' src dst
  where
    minSizeOfReg platform (RegReal (RealRegSingle i))
      | target32Bit platform && i <= 3        = II8  -- al, bl, cl, dl
      | target32Bit platform && i <= 7        = II16 -- si, di, bp, sp
      | not (target32Bit platform) && i <= 15 = II8  -- al .. r15b
    minSizeOfReg _ _ = format                 -- other
pprInstr (TEST format src dst) = sdocWithPlatform $ \platform ->
  let format' = case (src,dst) of
        -- Match instructions like 'test $0x3,%esi' or 'test $0x7,%rbx'.
        -- We can replace them by equivalent, but smaller instructions
        -- by reducing the size of the immediate operand as far as possible.
        -- (We could handle masks larger than a single byte too,
        -- but it would complicate the code considerably
        -- and tag checks are by far the most common case.)
        -- The mask must have the high bit clear for this smaller encoding
        -- to be completely equivalent to the original; in particular so
        -- that the signed comparison condition bits are the same as they
        -- would be if doing a full word comparison. See #13425.
        (OpImm (ImmInteger mask), OpReg dstReg)
          | 0 <= mask && mask < 128 -> minSizeOfReg platform dstReg
        _ -> format
  in pprFormatOpOp (sLit "test") format' src dst
  where
    minSizeOfReg platform (RegReal (RealRegSingle i))
      | target32Bit platform && i <= 3        = II8  -- al, bl, cl, dl
      | target32Bit platform && i <= 7        = II16 -- si, di, bp, sp
      | not (target32Bit platform) && i <= 15 = II8  -- al .. r15b
    minSizeOfReg _ _ = format                 -- other