Add ARMv8 backend proof.

The ASM "valid_imm" predicate has been generalised - it now knows the type of operation that is being encoded, e.g. Add or Xor. This is needed because the encoding scheme for ARMv8 immediate values is differs between logical and arithmetic operations.