1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * LoongArch translation routines. 4 * 5 * Copyright (c) 2021 Loongson Technology Corporation Limited 6 */ 7 8 #ifndef TARGET_LOONGARCH_TRANSLATE_H 9 #define TARGET_LOONGARCH_TRANSLATE_H 10 11 #include "exec/translator.h" 12 13 #define TRANS(NAME, FUNC, ...) \ 14 static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ 15 { return FUNC(ctx, a, __VA_ARGS__); } 16 17 /* 18 * If an operation is being performed on less than TARGET_LONG_BITS, 19 * it may require the inputs to be sign- or zero-extended; which will 20 * depend on the exact operation being performed. 21 */ 22 typedef enum { 23 EXT_NONE, 24 EXT_SIGN, 25 EXT_ZERO, 26 } DisasExtend; 27 28 typedef struct DisasContext { 29 DisasContextBase base; 30 target_ulong page_start; 31 uint32_t opcode; 32 uint16_t mem_idx; 33 uint16_t plv; 34 TCGv zero; 35 /* Space for 3 operands plus 1 extra for address computation. */ 36 TCGv temp[4]; 37 uint8_t ntemp; 38 } DisasContext; 39 40 void generate_exception(DisasContext *ctx, int excp); 41 42 extern TCGv cpu_gpr[32], cpu_pc; 43 extern TCGv_i32 cpu_fscr0; 44 extern TCGv_i64 cpu_fpr[32]; 45 46 #endif 47