The main problem that this patch fixes is that the "pushw imm8" instruction form is not currently supported for x86_64 targets.
In the process of fixing that bug I did some minor cleanup:
(1) Re-grouped the "push imm" opcodes so that the pushw (supported on both 32- and 64-bit), pushl (32-bit only), and pushq (64-bit only) opcodes are together.
(2) Consolidated PUSHi16 and PUSH64i16. These two opcodes currently do the same thing, but for 32-bit only and 64-bit only, respectively. I enabled PUSHi16 for 64-bit, at which point PUSH64i16 became redundant. Thanks to Michael Kuperstein for noticing this opportunity.
(3) Retooled the relax-arith.s test to use llvm-objdump -d instead of llvm-readobj.