Some FPU translation functions / registers can be used by ISA / ASE / extensions out of the big translate.c file. Signed-off-by: Philippe Mathieu-Daudé <f4bug@xxxxxxxxx> --- target/mips/fpu_translate.h | 25 +++++++++++++++++++++++++ target/mips/translate.c | 14 ++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 target/mips/fpu_translate.h diff --git a/target/mips/fpu_translate.h b/target/mips/fpu_translate.h new file mode 100644 index 00000000000..430e0b77537 --- /dev/null +++ b/target/mips/fpu_translate.h @@ -0,0 +1,25 @@ +/* + * FPU-related MIPS translation routines. + * + * Copyright (C) 2004-2005 Jocelyn Mayer + * Copyright (c) 2006 Marius Groeger (FPU operations) + * + * SPDX-License-Identifier: LGPL-2.1-or-later + */ +#ifndef TARGET_MIPS_FPU_TRANSLATE_H +#define TARGET_MIPS_FPU_TRANSLATE_H + +#include "exec/translator.h" +#include "translate.h" + +extern TCGv_i32 fpu_fcr0, fpu_fcr31; +extern TCGv_i64 fpu_f64[32]; + +void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg); +void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg); + +int get_fp_bit(int cc); + +void check_cp1_enabled(DisasContext *ctx); + +#endif diff --git a/target/mips/translate.c b/target/mips/translate.c index 6614512a828..bc54eb58c70 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -40,7 +40,9 @@ #include "exec/log.h" #include "qemu/qemu-print.h" #include "fpu_helper.h" + #include "translate.h" +#include "fpu_translate.h" enum { /* indirect opcode tables */ @@ -2496,8 +2498,8 @@ static TCGv cpu_dspctrl, btarget; TCGv bcond; static TCGv cpu_lladdr, cpu_llval; static TCGv_i32 hflags; -static TCGv_i32 fpu_fcr0, fpu_fcr31; -static TCGv_i64 fpu_f64[32]; +TCGv_i32 fpu_fcr0, fpu_fcr31; +TCGv_i64 fpu_f64[32]; static TCGv_i64 msa_wr_d[64]; #if defined(TARGET_MIPS64) @@ -2813,7 +2815,7 @@ static void gen_store_fpr32h(DisasContext *ctx, TCGv_i32 t, int reg) } } -static void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) +void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { if (ctx->hflags & MIPS_HFLAG_F64) { tcg_gen_mov_i64(t, fpu_f64[reg]); @@ -2822,7 +2824,7 @@ static void gen_load_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) } } -static void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) +void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) { if (ctx->hflags & MIPS_HFLAG_F64) { tcg_gen_mov_i64(fpu_f64[reg], t); @@ -2836,7 +2838,7 @@ static void gen_store_fpr64(DisasContext *ctx, TCGv_i64 t, int reg) } } -static inline int get_fp_bit(int cc) +int get_fp_bit(int cc) { if (cc) { return 24 + cc; @@ -2911,7 +2913,7 @@ static inline void check_cp0_enabled(DisasContext *ctx) } } -static inline void check_cp1_enabled(DisasContext *ctx) +void check_cp1_enabled(DisasContext *ctx) { if (unlikely(!(ctx->hflags & MIPS_HFLAG_FPU))) { generate_exception_err(ctx, EXCP_CpU, 1); -- 2.26.2