target-tricore: Add instructions of RRR1 opcode format, which have 0x43 as first...
commitb00aa8ecbc6fd7468178a0dabc7dfd0b7e1b8cd6
authorBastian Koppelmann <kbastian@mail.uni-paderborn.de>
Tue, 3 Feb 2015 18:36:53 +0000 (3 18:36 +0000)
committerBastian Koppelmann <kbastian@mail.uni-paderborn.de>
Tue, 3 Mar 2015 01:05:44 +0000 (3 01:05 +0000)
tree121a1d9ea47ec36a2d2b51d92961cd2a4720bb8c
parent2e430e1cdcbac8825bc44b42844cbb011b859847
target-tricore: Add instructions of RRR1 opcode format, which have 0x43 as first opcode

Add helpers:
    * madd64_q_ssov: multiply two 32 bit q-format number, add them with a
                     64 bit q-format number and saturate.
    * madd32_q_add_ssov: add two 64 bit q-format numbers and return a 32 bit
                         result.
    * maddr_q_ssov: multiplay two 32 bit q-format numbers, add a 32 bit
                    q-format number and saturate.
    * maddr_q: multiplay two 32 bit q-format numbers and add a 32 bit
               q-format number.

Note: madd instructions in the q format can behave strange, e.g.
0x1 + (0x80000000 * 0x80000000) << 1 for 32 bit signed values does not cause an
overflow on the guest, because all intermediate results should be handled as if
they are indefinitely precise. We handle this by inverting the overflow bit for
all cases: a + (0x80000000 * 0x80000000) << 1.

Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de>
Reviewed-by: Richard Henderson <rth@twiddle.net>
target-tricore/helper.h
target-tricore/op_helper.c
target-tricore/translate.c
target-tricore/tricore-opcodes.h