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 int vl; /* Vector length */ 35 TCGv zero; 36 } DisasContext; 37 38 void generate_exception(DisasContext *ctx, int excp); 39 40 extern TCGv cpu_gpr[32], cpu_pc; 41 extern TCGv_i32 cpu_fscr0; 42 extern TCGv_i64 cpu_fpr[32]; 43 44 #endif 45