tcg: Move some opcode generation functions out of line

Some of these functions are really quite large.  We have a number of
things that ought to be circularly dependent, but we duplicated code
to break that chain for the inlines.

This saved 25% of the code size of one of the translators I examined.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Reduce ifdefs in tcg-op.c

Almost completely eliminates the ifdefs in this file, improving
confidence in the lesser used 32-bit builds.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Move emit of INDEX_op_end into gen_tb_end

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Introduce tcg_op_buf_count and tcg_op_buf_full

The method by which we count the number of ops emitted
is going to change.  Abstract that away into some inlines.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Put opcodes in a linked list

The previous setup required ops and args to be completely sequential,
and was error prone when it came to both iteration and optimization.

Signed-off-by: Richard Henderson <rth@twiddle.net>
fixup end
fixup full
tcg: Remove opcodes instead of noping them out

With the linked list scheme we need not leave nops in the stream
that we need to process later.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Implement insert_op_before

Rather reserving space in the op stream for optimization,
let the optimizer add ops as necessary.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Remove unused opcodes

We no longer need INDEX_op_end to terminate the list, nor do we
need 5 forms of nop, since we just remove the TCGOp instead.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Optimize muls2_i32

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg: Further optimizations for add2 and sub2_i32

Notice when the low parts of the operation cannot cause overflow,
and thus reduce the high part to a simple add/sub.

Signed-off-by: Richard Henderson <rth@twiddle.net>