mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 bf7720024c
			
		
	
	
		bf7720024c
		
	
	
	
	
		
			
			Convert the following Integer Multiply-Accumulate opcodes: * MSAC Multiply, negate, accumulate, and move LO * MSACHI Multiply, negate, accumulate, and move HI * MSACHIU Unsigned multiply, negate, accumulate, and move HI * MSACU Unsigned multiply, negate, accumulate, and move LO Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20210808173018.90960-8-f4bug@amsat.org>
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | ||
|  * VR5432 extensions translation routines
 | ||
|  *
 | ||
|  * Reference: VR5432 Microprocessor User’s Manual
 | ||
|  *            (Document Number U13751EU5V0UM00)
 | ||
|  *
 | ||
|  *  Copyright (c) 2021 Philippe Mathieu-Daudé
 | ||
|  *
 | ||
|  * SPDX-License-Identifier: GPL-2.0-or-later
 | ||
|  */
 | ||
| 
 | ||
| #include "qemu/osdep.h"
 | ||
| #include "tcg/tcg-op.h"
 | ||
| #include "exec/helper-gen.h"
 | ||
| #include "translate.h"
 | ||
| #include "internal.h"
 | ||
| 
 | ||
| /* Include the auto-generated decoder. */
 | ||
| #include "decode-vr54xx.c.inc"
 | ||
| 
 | ||
| /*
 | ||
|  * Integer Multiply-Accumulate Instructions
 | ||
|  *
 | ||
|  * MACC         Multiply, accumulate, and move LO
 | ||
|  * MACCHI       Multiply, accumulate, and move HI
 | ||
|  * MACCHIU      Unsigned multiply, accumulate, and move HI
 | ||
|  * MACCU        Unsigned multiply, accumulate, and move LO
 | ||
|  * MSAC         Multiply, negate, accumulate, and move LO
 | ||
|  * MSACHI       Multiply, negate, accumulate, and move HI
 | ||
|  * MSACHIU      Unsigned multiply, negate, accumulate, and move HI
 | ||
|  * MSACU        Unsigned multiply, negate, accumulate, and move LO
 | ||
|  * MULHI        Multiply and move HI
 | ||
|  * MULHIU       Unsigned multiply and move HI
 | ||
|  * MULS         Multiply, negate, and move LO
 | ||
|  * MULSHI       Multiply, negate, and move HI
 | ||
|  * MULSHIU      Unsigned multiply, negate, and move HI
 | ||
|  * MULSU        Unsigned multiply, negate, and move LO
 | ||
|  */
 | ||
| 
 | ||
| static bool trans_mult_acc(DisasContext *ctx, arg_r *a,
 | ||
|                            void (*gen_helper_mult_acc)(TCGv, TCGv_ptr, TCGv, TCGv))
 | ||
| {
 | ||
|     TCGv t0 = tcg_temp_new();
 | ||
|     TCGv t1 = tcg_temp_new();
 | ||
| 
 | ||
|     gen_load_gpr(t0, a->rs);
 | ||
|     gen_load_gpr(t1, a->rt);
 | ||
| 
 | ||
|     gen_helper_mult_acc(t0, cpu_env, t0, t1);
 | ||
| 
 | ||
|     gen_store_gpr(t0, a->rd);
 | ||
| 
 | ||
|     tcg_temp_free(t0);
 | ||
|     tcg_temp_free(t1);
 | ||
| 
 | ||
|     return false;
 | ||
| }
 | ||
| 
 | ||
| TRANS(MACC,     trans_mult_acc, gen_helper_macc);
 | ||
| TRANS(MACCHI,   trans_mult_acc, gen_helper_macchi);
 | ||
| TRANS(MACCHIU,  trans_mult_acc, gen_helper_macchiu);
 | ||
| TRANS(MACCU,    trans_mult_acc, gen_helper_maccu);
 | ||
| TRANS(MSAC,     trans_mult_acc, gen_helper_msac);
 | ||
| TRANS(MSACHI,   trans_mult_acc, gen_helper_msachi);
 | ||
| TRANS(MSACHIU,  trans_mult_acc, gen_helper_msachiu);
 | ||
| TRANS(MSACU,    trans_mult_acc, gen_helper_msacu);
 | ||
| TRANS(MULHI,    trans_mult_acc, gen_helper_mulhi);
 | ||
| TRANS(MULHIU,   trans_mult_acc, gen_helper_mulhiu);
 | ||
| TRANS(MULS,     trans_mult_acc, gen_helper_muls);
 | ||
| TRANS(MULSHI,   trans_mult_acc, gen_helper_mulshi);
 | ||
| TRANS(MULSHIU,  trans_mult_acc, gen_helper_mulshiu);
 | ||
| TRANS(MULSU,    trans_mult_acc, gen_helper_mulsu);
 |