| 1 | /* |
| 2 | * VR5432 extensions translation routines |
| 3 | * |
| 4 | * Reference: VR5432 Microprocessor User’s Manual |
| 5 | * (Document Number U13751EU5V0UM00) |
| 6 | * |
| 7 | * Copyright (c) 2021 Philippe Mathieu-Daudé |
| 8 | * |
| 9 | * SPDX-License-Identifier: GPL-2.0-or-later |
| 10 | */ |
| 11 | |
| 12 | #include "qemu/osdep.h" |
| 13 | #include "translate.h" |
| 14 | |
| 15 | /* Include the auto-generated decoder. */ |
| 16 | #include "decode-vr54xx.c.inc" |
| 17 | |
| 18 | /* |
| 19 | * Integer Multiply-Accumulate Instructions |
| 20 | * |
| 21 | * MACC Multiply, accumulate, and move LO |
| 22 | * MACCHI Multiply, accumulate, and move HI |
| 23 | * MACCHIU Unsigned multiply, accumulate, and move HI |
| 24 | * MACCU Unsigned multiply, accumulate, and move LO |
| 25 | * MSAC Multiply, negate, accumulate, and move LO |
| 26 | * MSACHI Multiply, negate, accumulate, and move HI |
| 27 | * MSACHIU Unsigned multiply, negate, accumulate, and move HI |
| 28 | * MSACU Unsigned multiply, negate, accumulate, and move LO |
| 29 | * MULHI Multiply and move HI |
| 30 | * MULHIU Unsigned multiply and move HI |
| 31 | * MULS Multiply, negate, and move LO |
| 32 | * MULSHI Multiply, negate, and move HI |
| 33 | * MULSHIU Unsigned multiply, negate, and move HI |
| 34 | * MULSU Unsigned multiply, negate, and move LO |
| 35 | */ |
| 36 | |
| 37 | static bool trans_mult_acc(DisasContext *ctx, arg_r *a, |
| 38 | void (*gen_helper_mult_acc)(TCGv, TCGv_ptr, TCGv, TCGv)) |
| 39 | { |
| 40 | TCGv t0 = tcg_temp_new(); |
| 41 | TCGv t1 = tcg_temp_new(); |
| 42 | |
| 43 | gen_load_gpr(t0, a->rs); |
| 44 | gen_load_gpr(t1, a->rt); |
| 45 | |
| 46 | gen_helper_mult_acc(t0, tcg_env, t0, t1); |
| 47 | |
| 48 | gen_store_gpr(t0, a->rd); |
| 49 | return true; |
| 50 | } |
| 51 | |
| 52 | TRANS(MACC, trans_mult_acc, gen_helper_macc); |
| 53 | TRANS(MACCHI, trans_mult_acc, gen_helper_macchi); |
| 54 | TRANS(MACCHIU, trans_mult_acc, gen_helper_macchiu); |
| 55 | TRANS(MACCU, trans_mult_acc, gen_helper_maccu); |
| 56 | TRANS(MSAC, trans_mult_acc, gen_helper_msac); |
| 57 | TRANS(MSACHI, trans_mult_acc, gen_helper_msachi); |
| 58 | TRANS(MSACHIU, trans_mult_acc, gen_helper_msachiu); |
| 59 | TRANS(MSACU, trans_mult_acc, gen_helper_msacu); |
| 60 | TRANS(MULHI, trans_mult_acc, gen_helper_mulhi); |
| 61 | TRANS(MULHIU, trans_mult_acc, gen_helper_mulhiu); |
| 62 | TRANS(MULS, trans_mult_acc, gen_helper_muls); |
| 63 | TRANS(MULSHI, trans_mult_acc, gen_helper_mulshi); |
| 64 | TRANS(MULSHIU, trans_mult_acc, gen_helper_mulshiu); |
| 65 | TRANS(MULSU, trans_mult_acc, gen_helper_mulsu); |