diff --git a/qemu/aarch64.h b/qemu/aarch64.h index a50661bc..82227874 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_aarch64 #define helper_gvec_fcmlas helper_gvec_fcmlas_aarch64 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_aarch64 +#define helper_gvec_fmax_h helper_gvec_fmax_h_aarch64 +#define helper_gvec_fmax_s helper_gvec_fmax_s_aarch64 +#define helper_gvec_fmin_h helper_gvec_fmin_h_aarch64 +#define helper_gvec_fmin_s helper_gvec_fmin_s_aarch64 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_aarch64 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_aarch64 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index d42e0954..6fd07cba 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_aarch64eb #define helper_gvec_fcmlas helper_gvec_fcmlas_aarch64eb #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_aarch64eb +#define helper_gvec_fmax_h helper_gvec_fmax_h_aarch64eb +#define helper_gvec_fmax_s helper_gvec_fmax_s_aarch64eb +#define helper_gvec_fmin_h helper_gvec_fmin_h_aarch64eb +#define helper_gvec_fmin_s helper_gvec_fmin_s_aarch64eb #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_aarch64eb #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_aarch64eb #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index faa76fe3..a58eba78 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_arm #define helper_gvec_fcmlas helper_gvec_fcmlas_arm #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_arm +#define helper_gvec_fmax_h helper_gvec_fmax_h_arm +#define helper_gvec_fmax_s helper_gvec_fmax_s_arm +#define helper_gvec_fmin_h helper_gvec_fmin_h_arm +#define helper_gvec_fmin_s helper_gvec_fmin_s_arm #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_arm #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_arm #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index ebd22bc7..cb32c92e 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_armeb #define helper_gvec_fcmlas helper_gvec_fcmlas_armeb #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_armeb +#define helper_gvec_fmax_h helper_gvec_fmax_h_armeb +#define helper_gvec_fmax_s helper_gvec_fmax_s_armeb +#define helper_gvec_fmin_h helper_gvec_fmin_h_armeb +#define helper_gvec_fmin_s helper_gvec_fmin_s_armeb #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_armeb #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_armeb #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_armeb diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 49843247..bfff7230 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -1293,6 +1293,10 @@ symbols = ( 'helper_gvec_fcmlah_idx', 'helper_gvec_fcmlas', 'helper_gvec_fcmlas_idx', + 'helper_gvec_fmax_h', + 'helper_gvec_fmax_s', + 'helper_gvec_fmin_h', + 'helper_gvec_fmin_s', 'helper_gvec_fmla_idx_d', 'helper_gvec_fmla_idx_h', 'helper_gvec_fmla_idx_s', diff --git a/qemu/m68k.h b/qemu/m68k.h index 21ed0191..c700e7a1 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_m68k #define helper_gvec_fcmlas helper_gvec_fcmlas_m68k #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_m68k +#define helper_gvec_fmax_h helper_gvec_fmax_h_m68k +#define helper_gvec_fmax_s helper_gvec_fmax_s_m68k +#define helper_gvec_fmin_h helper_gvec_fmin_h_m68k +#define helper_gvec_fmin_s helper_gvec_fmin_s_m68k #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_m68k #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_m68k #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 129cb63d..8d761ab3 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_mips #define helper_gvec_fcmlas helper_gvec_fcmlas_mips #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_mips +#define helper_gvec_fmax_h helper_gvec_fmax_h_mips +#define helper_gvec_fmax_s helper_gvec_fmax_s_mips +#define helper_gvec_fmin_h helper_gvec_fmin_h_mips +#define helper_gvec_fmin_s helper_gvec_fmin_s_mips #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_mips #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_mips #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 2895b227..5e75269d 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_mips64 #define helper_gvec_fcmlas helper_gvec_fcmlas_mips64 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_mips64 +#define helper_gvec_fmax_h helper_gvec_fmax_h_mips64 +#define helper_gvec_fmax_s helper_gvec_fmax_s_mips64 +#define helper_gvec_fmin_h helper_gvec_fmin_h_mips64 +#define helper_gvec_fmin_s helper_gvec_fmin_s_mips64 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_mips64 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_mips64 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 34528f96..aa6fac7f 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_mips64el #define helper_gvec_fcmlas helper_gvec_fcmlas_mips64el #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_mips64el +#define helper_gvec_fmax_h helper_gvec_fmax_h_mips64el +#define helper_gvec_fmax_s helper_gvec_fmax_s_mips64el +#define helper_gvec_fmin_h helper_gvec_fmin_h_mips64el +#define helper_gvec_fmin_s helper_gvec_fmin_s_mips64el #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_mips64el #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_mips64el #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index e61f647d..6ec209aa 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_mipsel #define helper_gvec_fcmlas helper_gvec_fcmlas_mipsel #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_mipsel +#define helper_gvec_fmax_h helper_gvec_fmax_h_mipsel +#define helper_gvec_fmax_s helper_gvec_fmax_s_mipsel +#define helper_gvec_fmin_h helper_gvec_fmin_h_mipsel +#define helper_gvec_fmin_s helper_gvec_fmin_s_mipsel #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_mipsel #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_mipsel #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index e97cf5ec..02d3a2c7 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_powerpc #define helper_gvec_fcmlas helper_gvec_fcmlas_powerpc #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_powerpc +#define helper_gvec_fmax_h helper_gvec_fmax_h_powerpc +#define helper_gvec_fmax_s helper_gvec_fmax_s_powerpc +#define helper_gvec_fmin_h helper_gvec_fmin_h_powerpc +#define helper_gvec_fmin_s helper_gvec_fmin_s_powerpc #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_powerpc #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_powerpc #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_powerpc diff --git a/qemu/riscv32.h b/qemu/riscv32.h index b46cba78..218a1e9a 100644 --- a/qemu/riscv32.h +++ b/qemu/riscv32.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_riscv32 #define helper_gvec_fcmlas helper_gvec_fcmlas_riscv32 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_riscv32 +#define helper_gvec_fmax_h helper_gvec_fmax_h_riscv32 +#define helper_gvec_fmax_s helper_gvec_fmax_s_riscv32 +#define helper_gvec_fmin_h helper_gvec_fmin_h_riscv32 +#define helper_gvec_fmin_s helper_gvec_fmin_s_riscv32 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_riscv32 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_riscv32 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_riscv32 diff --git a/qemu/riscv64.h b/qemu/riscv64.h index 18180ae6..258e003f 100644 --- a/qemu/riscv64.h +++ b/qemu/riscv64.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_riscv64 #define helper_gvec_fcmlas helper_gvec_fcmlas_riscv64 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_riscv64 +#define helper_gvec_fmax_h helper_gvec_fmax_h_riscv64 +#define helper_gvec_fmax_s helper_gvec_fmax_s_riscv64 +#define helper_gvec_fmin_h helper_gvec_fmin_h_riscv64 +#define helper_gvec_fmin_s helper_gvec_fmin_s_riscv64 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_riscv64 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_riscv64 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_riscv64 diff --git a/qemu/sparc.h b/qemu/sparc.h index c6426c36..4f057770 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_sparc #define helper_gvec_fcmlas helper_gvec_fcmlas_sparc #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_sparc +#define helper_gvec_fmax_h helper_gvec_fmax_h_sparc +#define helper_gvec_fmax_s helper_gvec_fmax_s_sparc +#define helper_gvec_fmin_h helper_gvec_fmin_h_sparc +#define helper_gvec_fmin_s helper_gvec_fmin_s_sparc #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_sparc #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_sparc #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index b3c84348..ea332f7a 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_sparc64 #define helper_gvec_fcmlas helper_gvec_fcmlas_sparc64 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_sparc64 +#define helper_gvec_fmax_h helper_gvec_fmax_h_sparc64 +#define helper_gvec_fmax_s helper_gvec_fmax_s_sparc64 +#define helper_gvec_fmin_h helper_gvec_fmin_h_sparc64 +#define helper_gvec_fmin_s helper_gvec_fmin_s_sparc64 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_sparc64 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_sparc64 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_sparc64 diff --git a/qemu/target/arm/helper.h b/qemu/target/arm/helper.h index 34d28582..89ea41d1 100644 --- a/qemu/target/arm/helper.h +++ b/qemu/target/arm/helper.h @@ -645,6 +645,12 @@ DEF_HELPER_FLAGS_5(gvec_facge_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_facgt_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_facgt_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_fmax_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_fmax_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(gvec_fmin_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_fmin_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/qemu/target/arm/translate-neon.inc.c b/qemu/target/arm/translate-neon.inc.c index 9590a582..b28859df 100644 --- a/qemu/target/arm/translate-neon.inc.c +++ b/qemu/target/arm/translate-neon.inc.c @@ -1136,6 +1136,8 @@ DO_3S_FP_GVEC(VCGE, gen_helper_gvec_fcge_s, gen_helper_gvec_fcge_h) DO_3S_FP_GVEC(VCGT, gen_helper_gvec_fcgt_s, gen_helper_gvec_fcgt_h) DO_3S_FP_GVEC(VACGE, gen_helper_gvec_facge_s, gen_helper_gvec_facge_h) DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) +DO_3S_FP_GVEC(VMAX, gen_helper_gvec_fmax_s, gen_helper_gvec_fmax_h) +DO_3S_FP_GVEC(VMIN, gen_helper_gvec_fmin_s, gen_helper_gvec_fmin_h) /* * For all the functions using this macro, size == 1 means fp16, @@ -1151,9 +1153,6 @@ DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) return do_3same_fp(s, a, FUNC, READS_VD); \ } -DO_3S_FP(VMAX, gen_helper_vfp_maxs, false) -DO_3S_FP(VMIN, gen_helper_vfp_mins, false) - static void gen_VMLA_fp_3s(TCGContext *s, TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpstatus) { diff --git a/qemu/target/arm/vec_helper.c b/qemu/target/arm/vec_helper.c index b5d0ee96..fda7f9fa 100644 --- a/qemu/target/arm/vec_helper.c +++ b/qemu/target/arm/vec_helper.c @@ -818,6 +818,12 @@ DO_3OP(gvec_facge_s, float32_acge, float32) DO_3OP(gvec_facgt_h, float16_acgt, float16) DO_3OP(gvec_facgt_s, float32_acgt, float32) +DO_3OP(gvec_fmax_h, float16_max, float16) +DO_3OP(gvec_fmax_s, float32_max, float32) + +DO_3OP(gvec_fmin_h, float16_min, float16) +DO_3OP(gvec_fmin_s, float32_min, float32) + #ifdef TARGET_AARCH64 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 348aa97e..22ae69a7 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -1287,6 +1287,10 @@ #define helper_gvec_fcmlah_idx helper_gvec_fcmlah_idx_x86_64 #define helper_gvec_fcmlas helper_gvec_fcmlas_x86_64 #define helper_gvec_fcmlas_idx helper_gvec_fcmlas_idx_x86_64 +#define helper_gvec_fmax_h helper_gvec_fmax_h_x86_64 +#define helper_gvec_fmax_s helper_gvec_fmax_s_x86_64 +#define helper_gvec_fmin_h helper_gvec_fmin_h_x86_64 +#define helper_gvec_fmin_s helper_gvec_fmin_s_x86_64 #define helper_gvec_fmla_idx_d helper_gvec_fmla_idx_d_x86_64 #define helper_gvec_fmla_idx_h helper_gvec_fmla_idx_h_x86_64 #define helper_gvec_fmla_idx_s helper_gvec_fmla_idx_s_x86_64