xref: /openbmc/qemu/target/mips/tcg/vr54xx_translate.c (revision 800af0aae1cfa456701c5fa1ef273ce47585179c)
19d005392SPhilippe Mathieu-Daudé /*
29d005392SPhilippe Mathieu-Daudé  * VR5432 extensions translation routines
39d005392SPhilippe Mathieu-Daudé  *
49d005392SPhilippe Mathieu-Daudé  * Reference: VR5432 Microprocessor User’s Manual
59d005392SPhilippe Mathieu-Daudé  *            (Document Number U13751EU5V0UM00)
69d005392SPhilippe Mathieu-Daudé  *
79d005392SPhilippe Mathieu-Daudé  *  Copyright (c) 2021 Philippe Mathieu-Daudé
89d005392SPhilippe Mathieu-Daudé  *
99d005392SPhilippe Mathieu-Daudé  * SPDX-License-Identifier: GPL-2.0-or-later
109d005392SPhilippe Mathieu-Daudé  */
119d005392SPhilippe Mathieu-Daudé 
129d005392SPhilippe Mathieu-Daudé #include "qemu/osdep.h"
139d005392SPhilippe Mathieu-Daudé #include "translate.h"
149d005392SPhilippe Mathieu-Daudé 
159d005392SPhilippe Mathieu-Daudé /* Include the auto-generated decoder. */
169d005392SPhilippe Mathieu-Daudé #include "decode-vr54xx.c.inc"
175fa38eedSPhilippe Mathieu-Daudé 
185fa38eedSPhilippe Mathieu-Daudé /*
195fa38eedSPhilippe Mathieu-Daudé  * Integer Multiply-Accumulate Instructions
205fa38eedSPhilippe Mathieu-Daudé  *
215fa38eedSPhilippe Mathieu-Daudé  * MACC         Multiply, accumulate, and move LO
225fa38eedSPhilippe Mathieu-Daudé  * MACCHI       Multiply, accumulate, and move HI
235fa38eedSPhilippe Mathieu-Daudé  * MACCHIU      Unsigned multiply, accumulate, and move HI
245fa38eedSPhilippe Mathieu-Daudé  * MACCU        Unsigned multiply, accumulate, and move LO
25bf772002SPhilippe Mathieu-Daudé  * MSAC         Multiply, negate, accumulate, and move LO
26bf772002SPhilippe Mathieu-Daudé  * MSACHI       Multiply, negate, accumulate, and move HI
27bf772002SPhilippe Mathieu-Daudé  * MSACHIU      Unsigned multiply, negate, accumulate, and move HI
28bf772002SPhilippe Mathieu-Daudé  * MSACU        Unsigned multiply, negate, accumulate, and move LO
29a5e29320SPhilippe Mathieu-Daudé  * MULHI        Multiply and move HI
30a5e29320SPhilippe Mathieu-Daudé  * MULHIU       Unsigned multiply and move HI
31a5e29320SPhilippe Mathieu-Daudé  * MULS         Multiply, negate, and move LO
32a5e29320SPhilippe Mathieu-Daudé  * MULSHI       Multiply, negate, and move HI
33a5e29320SPhilippe Mathieu-Daudé  * MULSHIU      Unsigned multiply, negate, and move HI
34a5e29320SPhilippe Mathieu-Daudé  * MULSU        Unsigned multiply, negate, and move LO
355fa38eedSPhilippe Mathieu-Daudé  */
365fa38eedSPhilippe Mathieu-Daudé 
trans_mult_acc(DisasContext * ctx,arg_r * a,void (* gen_helper_mult_acc)(TCGv,TCGv_ptr,TCGv,TCGv))375fa38eedSPhilippe Mathieu-Daudé static bool trans_mult_acc(DisasContext *ctx, arg_r *a,
385fa38eedSPhilippe Mathieu-Daudé                            void (*gen_helper_mult_acc)(TCGv, TCGv_ptr, TCGv, TCGv))
395fa38eedSPhilippe Mathieu-Daudé {
405fa38eedSPhilippe Mathieu-Daudé     TCGv t0 = tcg_temp_new();
415fa38eedSPhilippe Mathieu-Daudé     TCGv t1 = tcg_temp_new();
425fa38eedSPhilippe Mathieu-Daudé 
435fa38eedSPhilippe Mathieu-Daudé     gen_load_gpr(t0, a->rs);
445fa38eedSPhilippe Mathieu-Daudé     gen_load_gpr(t1, a->rt);
455fa38eedSPhilippe Mathieu-Daudé 
46*ad75a51eSRichard Henderson     gen_helper_mult_acc(t0, tcg_env, t0, t1);
475fa38eedSPhilippe Mathieu-Daudé 
485fa38eedSPhilippe Mathieu-Daudé     gen_store_gpr(t0, a->rd);
49f2eb9312SRichard Henderson     return true;
505fa38eedSPhilippe Mathieu-Daudé }
515fa38eedSPhilippe Mathieu-Daudé 
525fa38eedSPhilippe Mathieu-Daudé TRANS(MACC,     trans_mult_acc, gen_helper_macc);
535fa38eedSPhilippe Mathieu-Daudé TRANS(MACCHI,   trans_mult_acc, gen_helper_macchi);
545fa38eedSPhilippe Mathieu-Daudé TRANS(MACCHIU,  trans_mult_acc, gen_helper_macchiu);
555fa38eedSPhilippe Mathieu-Daudé TRANS(MACCU,    trans_mult_acc, gen_helper_maccu);
56bf772002SPhilippe Mathieu-Daudé TRANS(MSAC,     trans_mult_acc, gen_helper_msac);
57bf772002SPhilippe Mathieu-Daudé TRANS(MSACHI,   trans_mult_acc, gen_helper_msachi);
58bf772002SPhilippe Mathieu-Daudé TRANS(MSACHIU,  trans_mult_acc, gen_helper_msachiu);
59bf772002SPhilippe Mathieu-Daudé TRANS(MSACU,    trans_mult_acc, gen_helper_msacu);
60a5e29320SPhilippe Mathieu-Daudé TRANS(MULHI,    trans_mult_acc, gen_helper_mulhi);
61a5e29320SPhilippe Mathieu-Daudé TRANS(MULHIU,   trans_mult_acc, gen_helper_mulhiu);
62a5e29320SPhilippe Mathieu-Daudé TRANS(MULS,     trans_mult_acc, gen_helper_muls);
63a5e29320SPhilippe Mathieu-Daudé TRANS(MULSHI,   trans_mult_acc, gen_helper_mulshi);
64a5e29320SPhilippe Mathieu-Daudé TRANS(MULSHIU,  trans_mult_acc, gen_helper_mulshiu);
65a5e29320SPhilippe Mathieu-Daudé TRANS(MULSU,    trans_mult_acc, gen_helper_mulsu);
66