From 0d69492b640c64a70261fdf2547a9ccd546efd14 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 25 Aug 2018 03:56:48 -0400 Subject: [PATCH] softfloat: Add scaling float-to-int routines Backports commit 2f6c74be593ec5219e54d7b4abd4e5a98d7f3efc from qemu --- qemu/aarch64.h | 18 ++ qemu/aarch64eb.h | 18 ++ qemu/arm.h | 18 ++ qemu/armeb.h | 18 ++ qemu/fpu/softfloat.c | 391 ++++++++++++++++++++++++++++------- qemu/header_gen.py | 18 ++ qemu/include/fpu/softfloat.h | 85 +++++--- qemu/m68k.h | 18 ++ qemu/mips.h | 18 ++ qemu/mips64.h | 18 ++ qemu/mips64el.h | 18 ++ qemu/mipsel.h | 18 ++ qemu/powerpc.h | 18 ++ qemu/sparc.h | 18 ++ qemu/sparc64.h | 18 ++ qemu/x86_64.h | 18 ++ 16 files changed, 631 insertions(+), 97 deletions(-) diff --git a/qemu/aarch64.h b/qemu/aarch64.h index a522518b..fc18db9a 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_aarch64 #define float16_to_int16 float16_to_int16_aarch64 #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_aarch64 +#define float16_to_int16_scalbn float16_to_int16_scalbn_aarch64 #define float16_to_int32 float16_to_int32_aarch64 #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_aarch64 +#define float16_to_int32_scalbn float16_to_int32_scalbn_aarch64 #define float16_to_int64 float16_to_int64_aarch64 #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_aarch64 +#define float16_to_int64_scalbn float16_to_int64_scalbn_aarch64 #define float16_to_float32 float16_to_float32_aarch64 #define float16_to_float64 float16_to_float64_aarch64 #define float16_to_uint16 float16_to_uint16_aarch64 #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_aarch64 +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_aarch64 #define float16_to_uint32 float16_to_uint32_aarch64 #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_aarch64 +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_aarch64 #define float16_to_uint64 float16_to_uint64_aarch64 #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_aarch64 +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_aarch64 #define float32ToCommonNaN float32ToCommonNaN_aarch64 #define float32_abs float32_abs_aarch64 #define float32_add float32_add_aarch64 @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_aarch64 #define float32_to_int16 float32_to_int16_aarch64 #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_aarch64 +#define float32_to_int16_scalbn float32_to_int16_scalbn_aarch64 #define float32_to_int32 float32_to_int32_aarch64 #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_aarch64 +#define float32_to_int32_scalbn float32_to_int32_scalbn_aarch64 #define float32_to_int64 float32_to_int64_aarch64 #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_aarch64 +#define float32_to_int64_scalbn float32_to_int64_scalbn_aarch64 #define float32_to_uint16 float32_to_uint16_aarch64 #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_aarch64 +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_aarch64 #define float32_to_uint32 float32_to_uint32_aarch64 #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_aarch64 +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_aarch64 #define float32_to_uint64 float32_to_uint64_aarch64 #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_aarch64 +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_aarch64 #define float32_unordered float32_unordered_aarch64 #define float32_unordered_quiet float32_unordered_quiet_aarch64 #define float64ToCommonNaN float64ToCommonNaN_aarch64 @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_aarch64 #define float64_to_int16 float64_to_int16_aarch64 #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_aarch64 +#define float64_to_int16_scalbn float64_to_int16_scalbn_aarch64 #define float64_to_int32 float64_to_int32_aarch64 #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_aarch64 +#define float64_to_int32_scalbn float64_to_int32_scalbn_aarch64 #define float64_to_int64 float64_to_int64_aarch64 #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_aarch64 +#define float64_to_int64_scalbn float64_to_int64_scalbn_aarch64 #define float64_to_uint16 float64_to_uint16_aarch64 #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_aarch64 +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_aarch64 #define float64_to_uint32 float64_to_uint32_aarch64 #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_aarch64 +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_aarch64 #define float64_to_uint64 float64_to_uint64_aarch64 #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_aarch64 +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_aarch64 #define float64_trunc_to_int float64_trunc_to_int_aarch64 #define float64_unordered float64_unordered_aarch64 #define float64_unordered_quiet float64_unordered_quiet_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index bdeb3c8a..67486929 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_aarch64eb #define float16_to_int16 float16_to_int16_aarch64eb #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_aarch64eb +#define float16_to_int16_scalbn float16_to_int16_scalbn_aarch64eb #define float16_to_int32 float16_to_int32_aarch64eb #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_aarch64eb +#define float16_to_int32_scalbn float16_to_int32_scalbn_aarch64eb #define float16_to_int64 float16_to_int64_aarch64eb #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_aarch64eb +#define float16_to_int64_scalbn float16_to_int64_scalbn_aarch64eb #define float16_to_float32 float16_to_float32_aarch64eb #define float16_to_float64 float16_to_float64_aarch64eb #define float16_to_uint16 float16_to_uint16_aarch64eb #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_aarch64eb +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_aarch64eb #define float16_to_uint32 float16_to_uint32_aarch64eb #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_aarch64eb +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_aarch64eb #define float16_to_uint64 float16_to_uint64_aarch64eb #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_aarch64eb +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_aarch64eb #define float32ToCommonNaN float32ToCommonNaN_aarch64eb #define float32_abs float32_abs_aarch64eb #define float32_add float32_add_aarch64eb @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_aarch64eb #define float32_to_int16 float32_to_int16_aarch64eb #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_aarch64eb +#define float32_to_int16_scalbn float32_to_int16_scalbn_aarch64eb #define float32_to_int32 float32_to_int32_aarch64eb #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_aarch64eb +#define float32_to_int32_scalbn float32_to_int32_scalbn_aarch64eb #define float32_to_int64 float32_to_int64_aarch64eb #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_aarch64eb +#define float32_to_int64_scalbn float32_to_int64_scalbn_aarch64eb #define float32_to_uint16 float32_to_uint16_aarch64eb #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_aarch64eb +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_aarch64eb #define float32_to_uint32 float32_to_uint32_aarch64eb #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_aarch64eb +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_aarch64eb #define float32_to_uint64 float32_to_uint64_aarch64eb #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_aarch64eb +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_aarch64eb #define float32_unordered float32_unordered_aarch64eb #define float32_unordered_quiet float32_unordered_quiet_aarch64eb #define float64ToCommonNaN float64ToCommonNaN_aarch64eb @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_aarch64eb #define float64_to_int16 float64_to_int16_aarch64eb #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_aarch64eb +#define float64_to_int16_scalbn float64_to_int16_scalbn_aarch64eb #define float64_to_int32 float64_to_int32_aarch64eb #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_aarch64eb +#define float64_to_int32_scalbn float64_to_int32_scalbn_aarch64eb #define float64_to_int64 float64_to_int64_aarch64eb #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_aarch64eb +#define float64_to_int64_scalbn float64_to_int64_scalbn_aarch64eb #define float64_to_uint16 float64_to_uint16_aarch64eb #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_aarch64eb +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_aarch64eb #define float64_to_uint32 float64_to_uint32_aarch64eb #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_aarch64eb +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_aarch64eb #define float64_to_uint64 float64_to_uint64_aarch64eb #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_aarch64eb +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_aarch64eb #define float64_trunc_to_int float64_trunc_to_int_aarch64eb #define float64_unordered float64_unordered_aarch64eb #define float64_unordered_quiet float64_unordered_quiet_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index d04666f4..a26642dc 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_arm #define float16_to_int16 float16_to_int16_arm #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_arm +#define float16_to_int16_scalbn float16_to_int16_scalbn_arm #define float16_to_int32 float16_to_int32_arm #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_arm +#define float16_to_int32_scalbn float16_to_int32_scalbn_arm #define float16_to_int64 float16_to_int64_arm #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_arm +#define float16_to_int64_scalbn float16_to_int64_scalbn_arm #define float16_to_float32 float16_to_float32_arm #define float16_to_float64 float16_to_float64_arm #define float16_to_uint16 float16_to_uint16_arm #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_arm +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_arm #define float16_to_uint32 float16_to_uint32_arm #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_arm +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_arm #define float16_to_uint64 float16_to_uint64_arm #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_arm +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_arm #define float32ToCommonNaN float32ToCommonNaN_arm #define float32_abs float32_abs_arm #define float32_add float32_add_arm @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_arm #define float32_to_int16 float32_to_int16_arm #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_arm +#define float32_to_int16_scalbn float32_to_int16_scalbn_arm #define float32_to_int32 float32_to_int32_arm #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_arm +#define float32_to_int32_scalbn float32_to_int32_scalbn_arm #define float32_to_int64 float32_to_int64_arm #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_arm +#define float32_to_int64_scalbn float32_to_int64_scalbn_arm #define float32_to_uint16 float32_to_uint16_arm #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_arm +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_arm #define float32_to_uint32 float32_to_uint32_arm #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_arm +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_arm #define float32_to_uint64 float32_to_uint64_arm #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_arm +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_arm #define float32_unordered float32_unordered_arm #define float32_unordered_quiet float32_unordered_quiet_arm #define float64ToCommonNaN float64ToCommonNaN_arm @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_arm #define float64_to_int16 float64_to_int16_arm #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_arm +#define float64_to_int16_scalbn float64_to_int16_scalbn_arm #define float64_to_int32 float64_to_int32_arm #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_arm +#define float64_to_int32_scalbn float64_to_int32_scalbn_arm #define float64_to_int64 float64_to_int64_arm #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_arm +#define float64_to_int64_scalbn float64_to_int64_scalbn_arm #define float64_to_uint16 float64_to_uint16_arm #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_arm +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_arm #define float64_to_uint32 float64_to_uint32_arm #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_arm +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_arm #define float64_to_uint64 float64_to_uint64_arm #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_arm +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_arm #define float64_trunc_to_int float64_trunc_to_int_arm #define float64_unordered float64_unordered_arm #define float64_unordered_quiet float64_unordered_quiet_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index cab1fc0d..c5915f13 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_armeb #define float16_to_int16 float16_to_int16_armeb #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_armeb +#define float16_to_int16_scalbn float16_to_int16_scalbn_armeb #define float16_to_int32 float16_to_int32_armeb #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_armeb +#define float16_to_int32_scalbn float16_to_int32_scalbn_armeb #define float16_to_int64 float16_to_int64_armeb #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_armeb +#define float16_to_int64_scalbn float16_to_int64_scalbn_armeb #define float16_to_float32 float16_to_float32_armeb #define float16_to_float64 float16_to_float64_armeb #define float16_to_uint16 float16_to_uint16_armeb #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_armeb +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_armeb #define float16_to_uint32 float16_to_uint32_armeb #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_armeb +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_armeb #define float16_to_uint64 float16_to_uint64_armeb #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_armeb +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_armeb #define float32ToCommonNaN float32ToCommonNaN_armeb #define float32_abs float32_abs_armeb #define float32_add float32_add_armeb @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_armeb #define float32_to_int16 float32_to_int16_armeb #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_armeb +#define float32_to_int16_scalbn float32_to_int16_scalbn_armeb #define float32_to_int32 float32_to_int32_armeb #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_armeb +#define float32_to_int32_scalbn float32_to_int32_scalbn_armeb #define float32_to_int64 float32_to_int64_armeb #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_armeb +#define float32_to_int64_scalbn float32_to_int64_scalbn_armeb #define float32_to_uint16 float32_to_uint16_armeb #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_armeb +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_armeb #define float32_to_uint32 float32_to_uint32_armeb #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_armeb +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_armeb #define float32_to_uint64 float32_to_uint64_armeb #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_armeb +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_armeb #define float32_unordered float32_unordered_armeb #define float32_unordered_quiet float32_unordered_quiet_armeb #define float64ToCommonNaN float64ToCommonNaN_armeb @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_armeb #define float64_to_int16 float64_to_int16_armeb #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_armeb +#define float64_to_int16_scalbn float64_to_int16_scalbn_armeb #define float64_to_int32 float64_to_int32_armeb #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_armeb +#define float64_to_int32_scalbn float64_to_int32_scalbn_armeb #define float64_to_int64 float64_to_int64_armeb #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_armeb +#define float64_to_int64_scalbn float64_to_int64_scalbn_armeb #define float64_to_uint16 float64_to_uint16_armeb #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_armeb +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_armeb #define float64_to_uint32 float64_to_uint32_armeb #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_armeb +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_armeb #define float64_to_uint64 float64_to_uint64_armeb #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_armeb +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_armeb #define float64_trunc_to_int float64_trunc_to_int_armeb #define float64_unordered float64_unordered_armeb #define float64_unordered_quiet float64_unordered_quiet_armeb diff --git a/qemu/fpu/softfloat.c b/qemu/fpu/softfloat.c index 8942b915..2e990416 100644 --- a/qemu/fpu/softfloat.c +++ b/qemu/fpu/softfloat.c @@ -1294,19 +1294,23 @@ float32 float64_to_float32(float64 a, float_status *s) * Arithmetic. */ -static FloatParts round_to_int(FloatParts a, int rounding_mode, float_status *s) +static FloatParts round_to_int(FloatParts a, int rmode, + int scale, float_status *s) { - if (is_nan(a.cls)) { - return return_nan(a, s); - } - switch (a.cls) { + case float_class_qnan: + case float_class_snan: + return return_nan(a, s); + case float_class_zero: case float_class_inf: - case float_class_qnan: /* already "integral" */ break; + case float_class_normal: + scale = MIN(MAX(scale, -0x10000), 0x10000); + a.exp += scale; + if (a.exp >= DECOMPOSED_BINARY_POINT) { /* already integral */ break; @@ -1315,7 +1319,7 @@ static FloatParts round_to_int(FloatParts a, int rounding_mode, float_status *s) bool one; /* all fractional */ s->float_exception_flags |= float_flag_inexact; - switch (rounding_mode) { + switch (rmode) { case float_round_nearest_even: one = a.exp == -1 && a.frac > DECOMPOSED_IMPLICIT_BIT; break; @@ -1348,7 +1352,7 @@ static FloatParts round_to_int(FloatParts a, int rounding_mode, float_status *s) uint64_t rnd_mask = rnd_even_mask >> 1; uint64_t inc; - switch (rounding_mode) { + switch (rmode) { case float_round_nearest_even: inc = ((a.frac & rnd_even_mask) != frac_lsbm1 ? frac_lsbm1 : 0); break; @@ -1388,28 +1392,28 @@ static FloatParts round_to_int(FloatParts a, int rounding_mode, float_status *s) float16 float16_round_to_int(float16 a, float_status *s) { FloatParts pa = float16_unpack_canonical(a, s); - FloatParts pr = round_to_int(pa, s->float_rounding_mode, s); + FloatParts pr = round_to_int(pa, s->float_rounding_mode, 0, s); return float16_round_pack_canonical(pr, s); } float32 float32_round_to_int(float32 a, float_status *s) { FloatParts pa = float32_unpack_canonical(a, s); - FloatParts pr = round_to_int(pa, s->float_rounding_mode, s); + FloatParts pr = round_to_int(pa, s->float_rounding_mode, 0, s); return float32_round_pack_canonical(pr, s); } float64 float64_round_to_int(float64 a, float_status *s) { FloatParts pa = float64_unpack_canonical(a, s); - FloatParts pr = round_to_int(pa, s->float_rounding_mode, s); + FloatParts pr = round_to_int(pa, s->float_rounding_mode, 0, s); return float64_round_pack_canonical(pr, s); } float64 float64_trunc_to_int(float64 a, float_status *s) { FloatParts pa = float64_unpack_canonical(a, s); - FloatParts pr = round_to_int(pa, float_round_to_zero, s); + FloatParts pr = round_to_int(pa, float_round_to_zero, 0, s); return float64_round_pack_canonical(pr, s); } @@ -1424,13 +1428,13 @@ float64 float64_trunc_to_int(float64 a, float_status *s) * is returned. */ -static int64_t round_to_int_and_pack(FloatParts in, int rmode, +static int64_t round_to_int_and_pack(FloatParts in, int rmode, int scale, int64_t min, int64_t max, float_status *s) { uint64_t r; int orig_flags = get_float_exception_flags(s); - FloatParts p = round_to_int(in, rmode, s); + FloatParts p = round_to_int(in, rmode, scale, s); switch (p.cls) { case float_class_snan: @@ -1470,38 +1474,158 @@ static int64_t round_to_int_and_pack(FloatParts in, int rmode, } } -#define FLOAT_TO_INT(fsz, isz) \ -int ## isz ## _t float ## fsz ## _to_int ## isz(float ## fsz a, \ - float_status *s) \ -{ \ - FloatParts p = float ## fsz ## _unpack_canonical(a, s); \ - return round_to_int_and_pack(p, s->float_rounding_mode, \ - INT ## isz ## _MIN, INT ## isz ## _MAX,\ - s); \ -} \ - \ -int ## isz ## _t float ## fsz ## _to_int ## isz ## _round_to_zero \ - (float ## fsz a, float_status *s) \ -{ \ - FloatParts p = float ## fsz ## _unpack_canonical(a, s); \ - return round_to_int_and_pack(p, float_round_to_zero, \ - INT ## isz ## _MIN, INT ## isz ## _MAX,\ - s); \ +int16_t float16_to_int16_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float16_unpack_canonical(a, s), + rmode, scale, INT16_MIN, INT16_MAX, s); } -FLOAT_TO_INT(16, 16) -FLOAT_TO_INT(16, 32) -FLOAT_TO_INT(16, 64) +int32_t float16_to_int32_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float16_unpack_canonical(a, s), + rmode, scale, INT32_MIN, INT32_MAX, s); +} -FLOAT_TO_INT(32, 16) -FLOAT_TO_INT(32, 32) -FLOAT_TO_INT(32, 64) +int64_t float16_to_int64_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float16_unpack_canonical(a, s), + rmode, scale, INT64_MIN, INT64_MAX, s); +} -FLOAT_TO_INT(64, 16) -FLOAT_TO_INT(64, 32) -FLOAT_TO_INT(64, 64) +int16_t float32_to_int16_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float32_unpack_canonical(a, s), + rmode, scale, INT16_MIN, INT16_MAX, s); +} -#undef FLOAT_TO_INT +int32_t float32_to_int32_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float32_unpack_canonical(a, s), + rmode, scale, INT32_MIN, INT32_MAX, s); +} + +int64_t float32_to_int64_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float32_unpack_canonical(a, s), + rmode, scale, INT64_MIN, INT64_MAX, s); +} + +int16_t float64_to_int16_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float64_unpack_canonical(a, s), + rmode, scale, INT16_MIN, INT16_MAX, s); +} + +int32_t float64_to_int32_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float64_unpack_canonical(a, s), + rmode, scale, INT32_MIN, INT32_MAX, s); +} + +int64_t float64_to_int64_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_int_and_pack(float64_unpack_canonical(a, s), + rmode, scale, INT64_MIN, INT64_MAX, s); +} + +int16_t float16_to_int16(float16 a, float_status *s) +{ + return float16_to_int16_scalbn(a, s->float_rounding_mode, 0, s); +} + +int32_t float16_to_int32(float16 a, float_status *s) +{ + return float16_to_int32_scalbn(a, s->float_rounding_mode, 0, s); +} + +int64_t float16_to_int64(float16 a, float_status *s) +{ + return float16_to_int64_scalbn(a, s->float_rounding_mode, 0, s); +} + +int16_t float32_to_int16(float32 a, float_status *s) +{ + return float32_to_int16_scalbn(a, s->float_rounding_mode, 0, s); +} + +int32_t float32_to_int32(float32 a, float_status *s) +{ + return float32_to_int32_scalbn(a, s->float_rounding_mode, 0, s); +} + +int64_t float32_to_int64(float32 a, float_status *s) +{ + return float32_to_int64_scalbn(a, s->float_rounding_mode, 0, s); +} + +int16_t float64_to_int16(float64 a, float_status *s) +{ + return float64_to_int16_scalbn(a, s->float_rounding_mode, 0, s); +} + +int32_t float64_to_int32(float64 a, float_status *s) +{ + return float64_to_int32_scalbn(a, s->float_rounding_mode, 0, s); +} + +int64_t float64_to_int64(float64 a, float_status *s) +{ + return float64_to_int64_scalbn(a, s->float_rounding_mode, 0, s); +} + +int16_t float16_to_int16_round_to_zero(float16 a, float_status *s) +{ + return float16_to_int16_scalbn(a, float_round_to_zero, 0, s); +} + +int32_t float16_to_int32_round_to_zero(float16 a, float_status *s) +{ + return float16_to_int32_scalbn(a, float_round_to_zero, 0, s); +} + +int64_t float16_to_int64_round_to_zero(float16 a, float_status *s) +{ + return float16_to_int64_scalbn(a, float_round_to_zero, 0, s); +} + +int16_t float32_to_int16_round_to_zero(float32 a, float_status *s) +{ + return float32_to_int16_scalbn(a, float_round_to_zero, 0, s); +} + +int32_t float32_to_int32_round_to_zero(float32 a, float_status *s) +{ + return float32_to_int32_scalbn(a, float_round_to_zero, 0, s); +} + +int64_t float32_to_int64_round_to_zero(float32 a, float_status *s) +{ + return float32_to_int64_scalbn(a, float_round_to_zero, 0, s); +} + +int16_t float64_to_int16_round_to_zero(float64 a, float_status *s) +{ + return float64_to_int16_scalbn(a, float_round_to_zero, 0, s); +} + +int32_t float64_to_int32_round_to_zero(float64 a, float_status *s) +{ + return float64_to_int32_scalbn(a, float_round_to_zero, 0, s); +} + +int64_t float64_to_int64_round_to_zero(float64 a, float_status *s) +{ + return float64_to_int64_scalbn(a, float_round_to_zero, 0, s); +} /* * Returns the result of converting the floating-point value `a' to @@ -1516,11 +1640,12 @@ FLOAT_TO_INT(64, 64) * flag. */ -static uint64_t round_to_uint_and_pack(FloatParts in, int rmode, uint64_t max, - float_status *s) +static uint64_t round_to_uint_and_pack(FloatParts in, int rmode, int scale, + uint64_t max, float_status *s) { int orig_flags = get_float_exception_flags(s); - FloatParts p = round_to_int(in, rmode, s); + FloatParts p = round_to_int(in, rmode, scale, s); + uint64_t r; switch (p.cls) { case float_class_snan: @@ -1533,8 +1658,6 @@ static uint64_t round_to_uint_and_pack(FloatParts in, int rmode, uint64_t max, case float_class_zero: return 0; case float_class_normal: - { - uint64_t r; if (p.sign) { s->float_exception_flags = orig_flags | float_flag_invalid; return 0; @@ -1556,45 +1679,165 @@ static uint64_t round_to_uint_and_pack(FloatParts in, int rmode, uint64_t max, if (r > max) { s->float_exception_flags = orig_flags | float_flag_invalid; return max; - } else { - return r; } - } + return r; default: g_assert_not_reached(); } } -#define FLOAT_TO_UINT(fsz, isz) \ -uint ## isz ## _t float ## fsz ## _to_uint ## isz(float ## fsz a, \ - float_status *s) \ -{ \ - FloatParts p = float ## fsz ## _unpack_canonical(a, s); \ - return round_to_uint_and_pack(p, s->float_rounding_mode, \ - UINT ## isz ## _MAX, s); \ -} \ - \ -uint ## isz ## _t float ## fsz ## _to_uint ## isz ## _round_to_zero \ - (float ## fsz a, float_status *s) \ -{ \ - FloatParts p = float ## fsz ## _unpack_canonical(a, s); \ - return round_to_uint_and_pack(p, float_round_to_zero, \ - UINT ## isz ## _MAX, s); \ +uint16_t float16_to_uint16_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float16_unpack_canonical(a, s), + rmode, scale, UINT16_MAX, s); } -FLOAT_TO_UINT(16, 16) -FLOAT_TO_UINT(16, 32) -FLOAT_TO_UINT(16, 64) +uint32_t float16_to_uint32_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float16_unpack_canonical(a, s), + rmode, scale, UINT32_MAX, s); +} -FLOAT_TO_UINT(32, 16) -FLOAT_TO_UINT(32, 32) -FLOAT_TO_UINT(32, 64) +uint64_t float16_to_uint64_scalbn(float16 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float16_unpack_canonical(a, s), + rmode, scale, UINT64_MAX, s); +} -FLOAT_TO_UINT(64, 16) -FLOAT_TO_UINT(64, 32) -FLOAT_TO_UINT(64, 64) +uint16_t float32_to_uint16_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float32_unpack_canonical(a, s), + rmode, scale, UINT16_MAX, s); +} -#undef FLOAT_TO_UINT +uint32_t float32_to_uint32_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float32_unpack_canonical(a, s), + rmode, scale, UINT32_MAX, s); +} + +uint64_t float32_to_uint64_scalbn(float32 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float32_unpack_canonical(a, s), + rmode, scale, UINT64_MAX, s); +} + +uint16_t float64_to_uint16_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float64_unpack_canonical(a, s), + rmode, scale, UINT16_MAX, s); +} + +uint32_t float64_to_uint32_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float64_unpack_canonical(a, s), + rmode, scale, UINT32_MAX, s); +} + +uint64_t float64_to_uint64_scalbn(float64 a, int rmode, int scale, + float_status *s) +{ + return round_to_uint_and_pack(float64_unpack_canonical(a, s), + rmode, scale, UINT64_MAX, s); +} + +uint16_t float16_to_uint16(float16 a, float_status *s) +{ + return float16_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint32_t float16_to_uint32(float16 a, float_status *s) +{ + return float16_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint64_t float16_to_uint64(float16 a, float_status *s) +{ + return float16_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint16_t float32_to_uint16(float32 a, float_status *s) +{ + return float32_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint32_t float32_to_uint32(float32 a, float_status *s) +{ + return float32_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint64_t float32_to_uint64(float32 a, float_status *s) +{ + return float32_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint16_t float64_to_uint16(float64 a, float_status *s) +{ + return float64_to_uint16_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint32_t float64_to_uint32(float64 a, float_status *s) +{ + return float64_to_uint32_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint64_t float64_to_uint64(float64 a, float_status *s) +{ + return float64_to_uint64_scalbn(a, s->float_rounding_mode, 0, s); +} + +uint16_t float16_to_uint16_round_to_zero(float16 a, float_status *s) +{ + return float16_to_uint16_scalbn(a, float_round_to_zero, 0, s); +} + +uint32_t float16_to_uint32_round_to_zero(float16 a, float_status *s) +{ + return float16_to_uint32_scalbn(a, float_round_to_zero, 0, s); +} + +uint64_t float16_to_uint64_round_to_zero(float16 a, float_status *s) +{ + return float16_to_uint64_scalbn(a, float_round_to_zero, 0, s); +} + +uint16_t float32_to_uint16_round_to_zero(float32 a, float_status *s) +{ + return float32_to_uint16_scalbn(a, float_round_to_zero, 0, s); +} + +uint32_t float32_to_uint32_round_to_zero(float32 a, float_status *s) +{ + return float32_to_uint32_scalbn(a, float_round_to_zero, 0, s); +} + +uint64_t float32_to_uint64_round_to_zero(float32 a, float_status *s) +{ + return float32_to_uint64_scalbn(a, float_round_to_zero, 0, s); +} + +uint16_t float64_to_uint16_round_to_zero(float64 a, float_status *s) +{ + return float64_to_uint16_scalbn(a, float_round_to_zero, 0, s); +} + +uint32_t float64_to_uint32_round_to_zero(float64 a, float_status *s) +{ + return float64_to_uint32_scalbn(a, float_round_to_zero, 0, s); +} + +uint64_t float64_to_uint64_round_to_zero(float64 a, float_status *s) +{ + return float64_to_uint64_scalbn(a, float_round_to_zero, 0, s); +} /* * Integer to float conversions diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 98dcc811..97b8ba9d 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -518,18 +518,24 @@ symbols = ( 'float16_sub', 'float16_to_int16', 'float16_to_int16_round_to_zero', + 'float16_to_int16_scalbn', 'float16_to_int32', 'float16_to_int32_round_to_zero', + 'float16_to_int32_scalbn', 'float16_to_int64', 'float16_to_int64_round_to_zero', + 'float16_to_int64_scalbn', 'float16_to_float32', 'float16_to_float64', 'float16_to_uint16', 'float16_to_uint16_round_to_zero', + 'float16_to_uint16_scalbn', 'float16_to_uint32', 'float16_to_uint32_round_to_zero', + 'float16_to_uint32_scalbn', 'float16_to_uint64', 'float16_to_uint64_round_to_zero', + 'float16_to_uint64_scalbn', 'float32ToCommonNaN', 'float32_abs', 'float32_add', @@ -579,16 +585,22 @@ symbols = ( 'float32_to_floatx80', 'float32_to_int16', 'float32_to_int16_round_to_zero', + 'float32_to_int16_scalbn', 'float32_to_int32', 'float32_to_int32_round_to_zero', + 'float32_to_int32_scalbn', 'float32_to_int64', 'float32_to_int64_round_to_zero', + 'float32_to_int64_scalbn', 'float32_to_uint16', 'float32_to_uint16_round_to_zero', + 'float32_to_uint16_scalbn', 'float32_to_uint32', 'float32_to_uint32_round_to_zero', + 'float32_to_uint32_scalbn', 'float32_to_uint64', 'float32_to_uint64_round_to_zero', + 'float32_to_uint64_scalbn', 'float32_unordered', 'float32_unordered_quiet', 'float64ToCommonNaN', @@ -637,16 +649,22 @@ symbols = ( 'float64_to_floatx80', 'float64_to_int16', 'float64_to_int16_round_to_zero', + 'float64_to_int16_scalbn', 'float64_to_int32', 'float64_to_int32_round_to_zero', + 'float64_to_int32_scalbn', 'float64_to_int64', 'float64_to_int64_round_to_zero', + 'float64_to_int64_scalbn', 'float64_to_uint16', 'float64_to_uint16_round_to_zero', + 'float64_to_uint16_scalbn', 'float64_to_uint32', 'float64_to_uint32_round_to_zero', + 'float64_to_uint32_scalbn', 'float64_to_uint64', 'float64_to_uint64_round_to_zero', + 'float64_to_uint64_scalbn', 'float64_trunc_to_int', 'float64_unordered', 'float64_unordered_quiet', diff --git a/qemu/include/fpu/softfloat.h b/qemu/include/fpu/softfloat.h index 08516f64..e646ee98 100644 --- a/qemu/include/fpu/softfloat.h +++ b/qemu/include/fpu/softfloat.h @@ -246,21 +246,34 @@ float128 uint64_to_float128(uint64_t, float_status *status); /*---------------------------------------------------------------------------- | Software half-precision conversion routines. *----------------------------------------------------------------------------*/ + float16 float32_to_float16(float32, bool ieee, float_status *status); float32 float16_to_float32(float16, bool ieee, float_status *status); float16 float64_to_float16(float64 a, bool ieee, float_status *status); float64 float16_to_float64(float16 a, bool ieee, float_status *status); + +int16_t float16_to_int16_scalbn(float16, int, int, float_status *status); +int32_t float16_to_int32_scalbn(float16, int, int, float_status *status); +int64_t float16_to_int64_scalbn(float16, int, int, float_status *status); + int16_t float16_to_int16(float16, float_status *status); -uint16_t float16_to_uint16(float16 a, float_status *status); -int16_t float16_to_int16_round_to_zero(float16, float_status *status); -uint16_t float16_to_uint16_round_to_zero(float16 a, float_status *status); int32_t float16_to_int32(float16, float_status *status); -uint32_t float16_to_uint32(float16 a, float_status *status); -int32_t float16_to_int32_round_to_zero(float16, float_status *status); -uint32_t float16_to_uint32_round_to_zero(float16 a, float_status *status); int64_t float16_to_int64(float16, float_status *status); -uint64_t float16_to_uint64(float16 a, float_status *status); + +int16_t float16_to_int16_round_to_zero(float16, float_status *status); +int32_t float16_to_int32_round_to_zero(float16, float_status *status); int64_t float16_to_int64_round_to_zero(float16, float_status *status); + +uint16_t float16_to_uint16_scalbn(float16 a, int, int, float_status *status); +uint32_t float16_to_uint32_scalbn(float16 a, int, int, float_status *status); +uint64_t float16_to_uint64_scalbn(float16 a, int, int, float_status *status); + +uint16_t float16_to_uint16(float16 a, float_status *status); +uint32_t float16_to_uint32(float16 a, float_status *status); +uint64_t float16_to_uint64(float16 a, float_status *status); + +uint16_t float16_to_uint16_round_to_zero(float16 a, float_status *status); +uint32_t float16_to_uint32_round_to_zero(float16 a, float_status *status); uint64_t float16_to_uint64_round_to_zero(float16 a, float_status *status); /*---------------------------------------------------------------------------- @@ -351,18 +364,31 @@ float16 float16_default_nan(float_status *status); /*---------------------------------------------------------------------------- | Software IEC/IEEE single-precision conversion routines. *----------------------------------------------------------------------------*/ + +int16_t float32_to_int16_scalbn(float32, int, int, float_status *status); +int32_t float32_to_int32_scalbn(float32, int, int, float_status *status); +int64_t float32_to_int64_scalbn(float32, int, int, float_status *status); + int16_t float32_to_int16(float32, float_status *status); -uint16_t float32_to_uint16(float32, float_status *status); -int16_t float32_to_int16_round_to_zero(float32, float_status *status); -uint16_t float32_to_uint16_round_to_zero(float32, float_status *status); int32_t float32_to_int32(float32, float_status *status); -int32_t float32_to_int32_round_to_zero(float32, float_status *status); -uint32_t float32_to_uint32(float32, float_status *status); -uint32_t float32_to_uint32_round_to_zero(float32, float_status *status); int64_t float32_to_int64(float32, float_status *status); -uint64_t float32_to_uint64(float32, float_status *status); -uint64_t float32_to_uint64_round_to_zero(float32, float_status *status); + +int16_t float32_to_int16_round_to_zero(float32, float_status *status); +int32_t float32_to_int32_round_to_zero(float32, float_status *status); int64_t float32_to_int64_round_to_zero(float32, float_status *status); + +uint16_t float32_to_uint16_scalbn(float32, int, int, float_status *status); +uint32_t float32_to_uint32_scalbn(float32, int, int, float_status *status); +uint64_t float32_to_uint64_scalbn(float32, int, int, float_status *status); + +uint16_t float32_to_uint16(float32, float_status *status); +uint32_t float32_to_uint32(float32, float_status *status); +uint64_t float32_to_uint64(float32, float_status *status); + +uint16_t float32_to_uint16_round_to_zero(float32, float_status *status); +uint32_t float32_to_uint32_round_to_zero(float32, float_status *status); +uint64_t float32_to_uint64_round_to_zero(float32, float_status *status); + float64 float32_to_float64(float32, float_status *status); floatx80 float32_to_floatx80(float32, float_status *status); float128 float32_to_float128(float32, float_status *status); @@ -481,18 +507,31 @@ float32 float32_default_nan(float_status *status); /*---------------------------------------------------------------------------- | Software IEC/IEEE double-precision conversion routines. *----------------------------------------------------------------------------*/ + +int16_t float64_to_int16_scalbn(float64, int, int, float_status *status); +int32_t float64_to_int32_scalbn(float64, int, int, float_status *status); +int64_t float64_to_int64_scalbn(float64, int, int, float_status *status); + int16_t float64_to_int16(float64, float_status *status); -uint16_t float64_to_uint16(float64, float_status *status); -int16_t float64_to_int16_round_to_zero(float64, float_status *status); -uint16_t float64_to_uint16_round_to_zero(float64, float_status *status); int32_t float64_to_int32(float64, float_status *status); -int32_t float64_to_int32_round_to_zero(float64, float_status *status); -uint32_t float64_to_uint32(float64, float_status *status); -uint32_t float64_to_uint32_round_to_zero(float64, float_status *status); int64_t float64_to_int64(float64, float_status *status); + +int16_t float64_to_int16_round_to_zero(float64, float_status *status); +int32_t float64_to_int32_round_to_zero(float64, float_status *status); int64_t float64_to_int64_round_to_zero(float64, float_status *status); -uint64_t float64_to_uint64(float64 a, float_status *status); -uint64_t float64_to_uint64_round_to_zero(float64 a, float_status *status); + +uint16_t float64_to_uint16_scalbn(float64, int, int, float_status *status); +uint32_t float64_to_uint32_scalbn(float64, int, int, float_status *status); +uint64_t float64_to_uint64_scalbn(float64, int, int, float_status *status); + +uint16_t float64_to_uint16(float64, float_status *status); +uint32_t float64_to_uint32(float64, float_status *status); +uint64_t float64_to_uint64(float64, float_status *status); + +uint16_t float64_to_uint16_round_to_zero(float64, float_status *status); +uint32_t float64_to_uint32_round_to_zero(float64, float_status *status); +uint64_t float64_to_uint64_round_to_zero(float64, float_status *status); + float32 float64_to_float32(float64, float_status *status); floatx80 float64_to_floatx80(float64, float_status *status); float128 float64_to_float128(float64, float_status *status); diff --git a/qemu/m68k.h b/qemu/m68k.h index f57e9835..b7453228 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_m68k #define float16_to_int16 float16_to_int16_m68k #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_m68k +#define float16_to_int16_scalbn float16_to_int16_scalbn_m68k #define float16_to_int32 float16_to_int32_m68k #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_m68k +#define float16_to_int32_scalbn float16_to_int32_scalbn_m68k #define float16_to_int64 float16_to_int64_m68k #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_m68k +#define float16_to_int64_scalbn float16_to_int64_scalbn_m68k #define float16_to_float32 float16_to_float32_m68k #define float16_to_float64 float16_to_float64_m68k #define float16_to_uint16 float16_to_uint16_m68k #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_m68k +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_m68k #define float16_to_uint32 float16_to_uint32_m68k #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_m68k +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_m68k #define float16_to_uint64 float16_to_uint64_m68k #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_m68k +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_m68k #define float32ToCommonNaN float32ToCommonNaN_m68k #define float32_abs float32_abs_m68k #define float32_add float32_add_m68k @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_m68k #define float32_to_int16 float32_to_int16_m68k #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_m68k +#define float32_to_int16_scalbn float32_to_int16_scalbn_m68k #define float32_to_int32 float32_to_int32_m68k #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_m68k +#define float32_to_int32_scalbn float32_to_int32_scalbn_m68k #define float32_to_int64 float32_to_int64_m68k #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_m68k +#define float32_to_int64_scalbn float32_to_int64_scalbn_m68k #define float32_to_uint16 float32_to_uint16_m68k #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_m68k +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_m68k #define float32_to_uint32 float32_to_uint32_m68k #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_m68k +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_m68k #define float32_to_uint64 float32_to_uint64_m68k #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_m68k +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_m68k #define float32_unordered float32_unordered_m68k #define float32_unordered_quiet float32_unordered_quiet_m68k #define float64ToCommonNaN float64ToCommonNaN_m68k @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_m68k #define float64_to_int16 float64_to_int16_m68k #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_m68k +#define float64_to_int16_scalbn float64_to_int16_scalbn_m68k #define float64_to_int32 float64_to_int32_m68k #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_m68k +#define float64_to_int32_scalbn float64_to_int32_scalbn_m68k #define float64_to_int64 float64_to_int64_m68k #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_m68k +#define float64_to_int64_scalbn float64_to_int64_scalbn_m68k #define float64_to_uint16 float64_to_uint16_m68k #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_m68k +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_m68k #define float64_to_uint32 float64_to_uint32_m68k #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_m68k +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_m68k #define float64_to_uint64 float64_to_uint64_m68k #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_m68k +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_m68k #define float64_trunc_to_int float64_trunc_to_int_m68k #define float64_unordered float64_unordered_m68k #define float64_unordered_quiet float64_unordered_quiet_m68k diff --git a/qemu/mips.h b/qemu/mips.h index cb7d5aa6..4a4978bd 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_mips #define float16_to_int16 float16_to_int16_mips #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_mips +#define float16_to_int16_scalbn float16_to_int16_scalbn_mips #define float16_to_int32 float16_to_int32_mips #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_mips +#define float16_to_int32_scalbn float16_to_int32_scalbn_mips #define float16_to_int64 float16_to_int64_mips #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_mips +#define float16_to_int64_scalbn float16_to_int64_scalbn_mips #define float16_to_float32 float16_to_float32_mips #define float16_to_float64 float16_to_float64_mips #define float16_to_uint16 float16_to_uint16_mips #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_mips +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_mips #define float16_to_uint32 float16_to_uint32_mips #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_mips +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_mips #define float16_to_uint64 float16_to_uint64_mips #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_mips +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_mips #define float32ToCommonNaN float32ToCommonNaN_mips #define float32_abs float32_abs_mips #define float32_add float32_add_mips @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_mips #define float32_to_int16 float32_to_int16_mips #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_mips +#define float32_to_int16_scalbn float32_to_int16_scalbn_mips #define float32_to_int32 float32_to_int32_mips #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_mips +#define float32_to_int32_scalbn float32_to_int32_scalbn_mips #define float32_to_int64 float32_to_int64_mips #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_mips +#define float32_to_int64_scalbn float32_to_int64_scalbn_mips #define float32_to_uint16 float32_to_uint16_mips #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_mips +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_mips #define float32_to_uint32 float32_to_uint32_mips #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_mips +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_mips #define float32_to_uint64 float32_to_uint64_mips #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_mips +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_mips #define float32_unordered float32_unordered_mips #define float32_unordered_quiet float32_unordered_quiet_mips #define float64ToCommonNaN float64ToCommonNaN_mips @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_mips #define float64_to_int16 float64_to_int16_mips #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_mips +#define float64_to_int16_scalbn float64_to_int16_scalbn_mips #define float64_to_int32 float64_to_int32_mips #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_mips +#define float64_to_int32_scalbn float64_to_int32_scalbn_mips #define float64_to_int64 float64_to_int64_mips #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_mips +#define float64_to_int64_scalbn float64_to_int64_scalbn_mips #define float64_to_uint16 float64_to_uint16_mips #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_mips +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_mips #define float64_to_uint32 float64_to_uint32_mips #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_mips +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_mips #define float64_to_uint64 float64_to_uint64_mips #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_mips +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_mips #define float64_trunc_to_int float64_trunc_to_int_mips #define float64_unordered float64_unordered_mips #define float64_unordered_quiet float64_unordered_quiet_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 0a038a7e..7458c11a 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_mips64 #define float16_to_int16 float16_to_int16_mips64 #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_mips64 +#define float16_to_int16_scalbn float16_to_int16_scalbn_mips64 #define float16_to_int32 float16_to_int32_mips64 #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_mips64 +#define float16_to_int32_scalbn float16_to_int32_scalbn_mips64 #define float16_to_int64 float16_to_int64_mips64 #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_mips64 +#define float16_to_int64_scalbn float16_to_int64_scalbn_mips64 #define float16_to_float32 float16_to_float32_mips64 #define float16_to_float64 float16_to_float64_mips64 #define float16_to_uint16 float16_to_uint16_mips64 #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_mips64 +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_mips64 #define float16_to_uint32 float16_to_uint32_mips64 #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_mips64 +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_mips64 #define float16_to_uint64 float16_to_uint64_mips64 #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_mips64 +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_mips64 #define float32ToCommonNaN float32ToCommonNaN_mips64 #define float32_abs float32_abs_mips64 #define float32_add float32_add_mips64 @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_mips64 #define float32_to_int16 float32_to_int16_mips64 #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_mips64 +#define float32_to_int16_scalbn float32_to_int16_scalbn_mips64 #define float32_to_int32 float32_to_int32_mips64 #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_mips64 +#define float32_to_int32_scalbn float32_to_int32_scalbn_mips64 #define float32_to_int64 float32_to_int64_mips64 #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_mips64 +#define float32_to_int64_scalbn float32_to_int64_scalbn_mips64 #define float32_to_uint16 float32_to_uint16_mips64 #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_mips64 +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_mips64 #define float32_to_uint32 float32_to_uint32_mips64 #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_mips64 +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_mips64 #define float32_to_uint64 float32_to_uint64_mips64 #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_mips64 +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_mips64 #define float32_unordered float32_unordered_mips64 #define float32_unordered_quiet float32_unordered_quiet_mips64 #define float64ToCommonNaN float64ToCommonNaN_mips64 @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_mips64 #define float64_to_int16 float64_to_int16_mips64 #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_mips64 +#define float64_to_int16_scalbn float64_to_int16_scalbn_mips64 #define float64_to_int32 float64_to_int32_mips64 #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_mips64 +#define float64_to_int32_scalbn float64_to_int32_scalbn_mips64 #define float64_to_int64 float64_to_int64_mips64 #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_mips64 +#define float64_to_int64_scalbn float64_to_int64_scalbn_mips64 #define float64_to_uint16 float64_to_uint16_mips64 #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_mips64 +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_mips64 #define float64_to_uint32 float64_to_uint32_mips64 #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_mips64 +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_mips64 #define float64_to_uint64 float64_to_uint64_mips64 #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_mips64 +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_mips64 #define float64_trunc_to_int float64_trunc_to_int_mips64 #define float64_unordered float64_unordered_mips64 #define float64_unordered_quiet float64_unordered_quiet_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index c3c37304..dd2ab5c4 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_mips64el #define float16_to_int16 float16_to_int16_mips64el #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_mips64el +#define float16_to_int16_scalbn float16_to_int16_scalbn_mips64el #define float16_to_int32 float16_to_int32_mips64el #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_mips64el +#define float16_to_int32_scalbn float16_to_int32_scalbn_mips64el #define float16_to_int64 float16_to_int64_mips64el #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_mips64el +#define float16_to_int64_scalbn float16_to_int64_scalbn_mips64el #define float16_to_float32 float16_to_float32_mips64el #define float16_to_float64 float16_to_float64_mips64el #define float16_to_uint16 float16_to_uint16_mips64el #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_mips64el +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_mips64el #define float16_to_uint32 float16_to_uint32_mips64el #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_mips64el +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_mips64el #define float16_to_uint64 float16_to_uint64_mips64el #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_mips64el +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_mips64el #define float32ToCommonNaN float32ToCommonNaN_mips64el #define float32_abs float32_abs_mips64el #define float32_add float32_add_mips64el @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_mips64el #define float32_to_int16 float32_to_int16_mips64el #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_mips64el +#define float32_to_int16_scalbn float32_to_int16_scalbn_mips64el #define float32_to_int32 float32_to_int32_mips64el #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_mips64el +#define float32_to_int32_scalbn float32_to_int32_scalbn_mips64el #define float32_to_int64 float32_to_int64_mips64el #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_mips64el +#define float32_to_int64_scalbn float32_to_int64_scalbn_mips64el #define float32_to_uint16 float32_to_uint16_mips64el #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_mips64el +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_mips64el #define float32_to_uint32 float32_to_uint32_mips64el #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_mips64el +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_mips64el #define float32_to_uint64 float32_to_uint64_mips64el #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_mips64el +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_mips64el #define float32_unordered float32_unordered_mips64el #define float32_unordered_quiet float32_unordered_quiet_mips64el #define float64ToCommonNaN float64ToCommonNaN_mips64el @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_mips64el #define float64_to_int16 float64_to_int16_mips64el #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_mips64el +#define float64_to_int16_scalbn float64_to_int16_scalbn_mips64el #define float64_to_int32 float64_to_int32_mips64el #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_mips64el +#define float64_to_int32_scalbn float64_to_int32_scalbn_mips64el #define float64_to_int64 float64_to_int64_mips64el #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_mips64el +#define float64_to_int64_scalbn float64_to_int64_scalbn_mips64el #define float64_to_uint16 float64_to_uint16_mips64el #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_mips64el +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_mips64el #define float64_to_uint32 float64_to_uint32_mips64el #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_mips64el +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_mips64el #define float64_to_uint64 float64_to_uint64_mips64el #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_mips64el +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_mips64el #define float64_trunc_to_int float64_trunc_to_int_mips64el #define float64_unordered float64_unordered_mips64el #define float64_unordered_quiet float64_unordered_quiet_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 0885fe46..a04a749e 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_mipsel #define float16_to_int16 float16_to_int16_mipsel #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_mipsel +#define float16_to_int16_scalbn float16_to_int16_scalbn_mipsel #define float16_to_int32 float16_to_int32_mipsel #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_mipsel +#define float16_to_int32_scalbn float16_to_int32_scalbn_mipsel #define float16_to_int64 float16_to_int64_mipsel #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_mipsel +#define float16_to_int64_scalbn float16_to_int64_scalbn_mipsel #define float16_to_float32 float16_to_float32_mipsel #define float16_to_float64 float16_to_float64_mipsel #define float16_to_uint16 float16_to_uint16_mipsel #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_mipsel +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_mipsel #define float16_to_uint32 float16_to_uint32_mipsel #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_mipsel +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_mipsel #define float16_to_uint64 float16_to_uint64_mipsel #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_mipsel +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_mipsel #define float32ToCommonNaN float32ToCommonNaN_mipsel #define float32_abs float32_abs_mipsel #define float32_add float32_add_mipsel @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_mipsel #define float32_to_int16 float32_to_int16_mipsel #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_mipsel +#define float32_to_int16_scalbn float32_to_int16_scalbn_mipsel #define float32_to_int32 float32_to_int32_mipsel #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_mipsel +#define float32_to_int32_scalbn float32_to_int32_scalbn_mipsel #define float32_to_int64 float32_to_int64_mipsel #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_mipsel +#define float32_to_int64_scalbn float32_to_int64_scalbn_mipsel #define float32_to_uint16 float32_to_uint16_mipsel #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_mipsel +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_mipsel #define float32_to_uint32 float32_to_uint32_mipsel #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_mipsel +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_mipsel #define float32_to_uint64 float32_to_uint64_mipsel #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_mipsel +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_mipsel #define float32_unordered float32_unordered_mipsel #define float32_unordered_quiet float32_unordered_quiet_mipsel #define float64ToCommonNaN float64ToCommonNaN_mipsel @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_mipsel #define float64_to_int16 float64_to_int16_mipsel #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_mipsel +#define float64_to_int16_scalbn float64_to_int16_scalbn_mipsel #define float64_to_int32 float64_to_int32_mipsel #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_mipsel +#define float64_to_int32_scalbn float64_to_int32_scalbn_mipsel #define float64_to_int64 float64_to_int64_mipsel #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_mipsel +#define float64_to_int64_scalbn float64_to_int64_scalbn_mipsel #define float64_to_uint16 float64_to_uint16_mipsel #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_mipsel +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_mipsel #define float64_to_uint32 float64_to_uint32_mipsel #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_mipsel +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_mipsel #define float64_to_uint64 float64_to_uint64_mipsel #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_mipsel +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_mipsel #define float64_trunc_to_int float64_trunc_to_int_mipsel #define float64_unordered float64_unordered_mipsel #define float64_unordered_quiet float64_unordered_quiet_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 82cab01a..7099ea6d 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_powerpc #define float16_to_int16 float16_to_int16_powerpc #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_powerpc +#define float16_to_int16_scalbn float16_to_int16_scalbn_powerpc #define float16_to_int32 float16_to_int32_powerpc #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_powerpc +#define float16_to_int32_scalbn float16_to_int32_scalbn_powerpc #define float16_to_int64 float16_to_int64_powerpc #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_powerpc +#define float16_to_int64_scalbn float16_to_int64_scalbn_powerpc #define float16_to_float32 float16_to_float32_powerpc #define float16_to_float64 float16_to_float64_powerpc #define float16_to_uint16 float16_to_uint16_powerpc #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_powerpc +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_powerpc #define float16_to_uint32 float16_to_uint32_powerpc #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_powerpc +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_powerpc #define float16_to_uint64 float16_to_uint64_powerpc #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_powerpc +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_powerpc #define float32ToCommonNaN float32ToCommonNaN_powerpc #define float32_abs float32_abs_powerpc #define float32_add float32_add_powerpc @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_powerpc #define float32_to_int16 float32_to_int16_powerpc #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_powerpc +#define float32_to_int16_scalbn float32_to_int16_scalbn_powerpc #define float32_to_int32 float32_to_int32_powerpc #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_powerpc +#define float32_to_int32_scalbn float32_to_int32_scalbn_powerpc #define float32_to_int64 float32_to_int64_powerpc #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_powerpc +#define float32_to_int64_scalbn float32_to_int64_scalbn_powerpc #define float32_to_uint16 float32_to_uint16_powerpc #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_powerpc +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_powerpc #define float32_to_uint32 float32_to_uint32_powerpc #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_powerpc +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_powerpc #define float32_to_uint64 float32_to_uint64_powerpc #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_powerpc +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_powerpc #define float32_unordered float32_unordered_powerpc #define float32_unordered_quiet float32_unordered_quiet_powerpc #define float64ToCommonNaN float64ToCommonNaN_powerpc @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_powerpc #define float64_to_int16 float64_to_int16_powerpc #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_powerpc +#define float64_to_int16_scalbn float64_to_int16_scalbn_powerpc #define float64_to_int32 float64_to_int32_powerpc #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_powerpc +#define float64_to_int32_scalbn float64_to_int32_scalbn_powerpc #define float64_to_int64 float64_to_int64_powerpc #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_powerpc +#define float64_to_int64_scalbn float64_to_int64_scalbn_powerpc #define float64_to_uint16 float64_to_uint16_powerpc #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_powerpc +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_powerpc #define float64_to_uint32 float64_to_uint32_powerpc #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_powerpc +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_powerpc #define float64_to_uint64 float64_to_uint64_powerpc #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_powerpc +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_powerpc #define float64_trunc_to_int float64_trunc_to_int_powerpc #define float64_unordered float64_unordered_powerpc #define float64_unordered_quiet float64_unordered_quiet_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index 2381681b..3ab9c7cb 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_sparc #define float16_to_int16 float16_to_int16_sparc #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_sparc +#define float16_to_int16_scalbn float16_to_int16_scalbn_sparc #define float16_to_int32 float16_to_int32_sparc #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_sparc +#define float16_to_int32_scalbn float16_to_int32_scalbn_sparc #define float16_to_int64 float16_to_int64_sparc #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_sparc +#define float16_to_int64_scalbn float16_to_int64_scalbn_sparc #define float16_to_float32 float16_to_float32_sparc #define float16_to_float64 float16_to_float64_sparc #define float16_to_uint16 float16_to_uint16_sparc #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_sparc +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_sparc #define float16_to_uint32 float16_to_uint32_sparc #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_sparc +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_sparc #define float16_to_uint64 float16_to_uint64_sparc #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_sparc +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_sparc #define float32ToCommonNaN float32ToCommonNaN_sparc #define float32_abs float32_abs_sparc #define float32_add float32_add_sparc @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_sparc #define float32_to_int16 float32_to_int16_sparc #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_sparc +#define float32_to_int16_scalbn float32_to_int16_scalbn_sparc #define float32_to_int32 float32_to_int32_sparc #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_sparc +#define float32_to_int32_scalbn float32_to_int32_scalbn_sparc #define float32_to_int64 float32_to_int64_sparc #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_sparc +#define float32_to_int64_scalbn float32_to_int64_scalbn_sparc #define float32_to_uint16 float32_to_uint16_sparc #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_sparc +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_sparc #define float32_to_uint32 float32_to_uint32_sparc #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_sparc +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_sparc #define float32_to_uint64 float32_to_uint64_sparc #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_sparc +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_sparc #define float32_unordered float32_unordered_sparc #define float32_unordered_quiet float32_unordered_quiet_sparc #define float64ToCommonNaN float64ToCommonNaN_sparc @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_sparc #define float64_to_int16 float64_to_int16_sparc #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_sparc +#define float64_to_int16_scalbn float64_to_int16_scalbn_sparc #define float64_to_int32 float64_to_int32_sparc #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_sparc +#define float64_to_int32_scalbn float64_to_int32_scalbn_sparc #define float64_to_int64 float64_to_int64_sparc #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_sparc +#define float64_to_int64_scalbn float64_to_int64_scalbn_sparc #define float64_to_uint16 float64_to_uint16_sparc #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_sparc +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_sparc #define float64_to_uint32 float64_to_uint32_sparc #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_sparc +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_sparc #define float64_to_uint64 float64_to_uint64_sparc #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_sparc +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_sparc #define float64_trunc_to_int float64_trunc_to_int_sparc #define float64_unordered float64_unordered_sparc #define float64_unordered_quiet float64_unordered_quiet_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index f205f82b..7bb371b3 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_sparc64 #define float16_to_int16 float16_to_int16_sparc64 #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_sparc64 +#define float16_to_int16_scalbn float16_to_int16_scalbn_sparc64 #define float16_to_int32 float16_to_int32_sparc64 #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_sparc64 +#define float16_to_int32_scalbn float16_to_int32_scalbn_sparc64 #define float16_to_int64 float16_to_int64_sparc64 #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_sparc64 +#define float16_to_int64_scalbn float16_to_int64_scalbn_sparc64 #define float16_to_float32 float16_to_float32_sparc64 #define float16_to_float64 float16_to_float64_sparc64 #define float16_to_uint16 float16_to_uint16_sparc64 #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_sparc64 +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_sparc64 #define float16_to_uint32 float16_to_uint32_sparc64 #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_sparc64 +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_sparc64 #define float16_to_uint64 float16_to_uint64_sparc64 #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_sparc64 +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_sparc64 #define float32ToCommonNaN float32ToCommonNaN_sparc64 #define float32_abs float32_abs_sparc64 #define float32_add float32_add_sparc64 @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_sparc64 #define float32_to_int16 float32_to_int16_sparc64 #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_sparc64 +#define float32_to_int16_scalbn float32_to_int16_scalbn_sparc64 #define float32_to_int32 float32_to_int32_sparc64 #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_sparc64 +#define float32_to_int32_scalbn float32_to_int32_scalbn_sparc64 #define float32_to_int64 float32_to_int64_sparc64 #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_sparc64 +#define float32_to_int64_scalbn float32_to_int64_scalbn_sparc64 #define float32_to_uint16 float32_to_uint16_sparc64 #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_sparc64 +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_sparc64 #define float32_to_uint32 float32_to_uint32_sparc64 #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_sparc64 +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_sparc64 #define float32_to_uint64 float32_to_uint64_sparc64 #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_sparc64 +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_sparc64 #define float32_unordered float32_unordered_sparc64 #define float32_unordered_quiet float32_unordered_quiet_sparc64 #define float64ToCommonNaN float64ToCommonNaN_sparc64 @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_sparc64 #define float64_to_int16 float64_to_int16_sparc64 #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_sparc64 +#define float64_to_int16_scalbn float64_to_int16_scalbn_sparc64 #define float64_to_int32 float64_to_int32_sparc64 #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_sparc64 +#define float64_to_int32_scalbn float64_to_int32_scalbn_sparc64 #define float64_to_int64 float64_to_int64_sparc64 #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_sparc64 +#define float64_to_int64_scalbn float64_to_int64_scalbn_sparc64 #define float64_to_uint16 float64_to_uint16_sparc64 #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_sparc64 +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_sparc64 #define float64_to_uint32 float64_to_uint32_sparc64 #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_sparc64 +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_sparc64 #define float64_to_uint64 float64_to_uint64_sparc64 #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_sparc64 +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_sparc64 #define float64_trunc_to_int float64_trunc_to_int_sparc64 #define float64_unordered float64_unordered_sparc64 #define float64_unordered_quiet float64_unordered_quiet_sparc64 diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 0753f22d..5d944d84 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -512,18 +512,24 @@ #define float16_sub float16_sub_x86_64 #define float16_to_int16 float16_to_int16_x86_64 #define float16_to_int16_round_to_zero float16_to_int16_round_to_zero_x86_64 +#define float16_to_int16_scalbn float16_to_int16_scalbn_x86_64 #define float16_to_int32 float16_to_int32_x86_64 #define float16_to_int32_round_to_zero float16_to_int32_round_to_zero_x86_64 +#define float16_to_int32_scalbn float16_to_int32_scalbn_x86_64 #define float16_to_int64 float16_to_int64_x86_64 #define float16_to_int64_round_to_zero float16_to_int64_round_to_zero_x86_64 +#define float16_to_int64_scalbn float16_to_int64_scalbn_x86_64 #define float16_to_float32 float16_to_float32_x86_64 #define float16_to_float64 float16_to_float64_x86_64 #define float16_to_uint16 float16_to_uint16_x86_64 #define float16_to_uint16_round_to_zero float16_to_uint16_round_to_zero_x86_64 +#define float16_to_uint16_scalbn float16_to_uint16_scalbn_x86_64 #define float16_to_uint32 float16_to_uint32_x86_64 #define float16_to_uint32_round_to_zero float16_to_uint32_round_to_zero_x86_64 +#define float16_to_uint32_scalbn float16_to_uint32_scalbn_x86_64 #define float16_to_uint64 float16_to_uint64_x86_64 #define float16_to_uint64_round_to_zero float16_to_uint64_round_to_zero_x86_64 +#define float16_to_uint64_scalbn float16_to_uint64_scalbn_x86_64 #define float32ToCommonNaN float32ToCommonNaN_x86_64 #define float32_abs float32_abs_x86_64 #define float32_add float32_add_x86_64 @@ -573,16 +579,22 @@ #define float32_to_floatx80 float32_to_floatx80_x86_64 #define float32_to_int16 float32_to_int16_x86_64 #define float32_to_int16_round_to_zero float32_to_int16_round_to_zero_x86_64 +#define float32_to_int16_scalbn float32_to_int16_scalbn_x86_64 #define float32_to_int32 float32_to_int32_x86_64 #define float32_to_int32_round_to_zero float32_to_int32_round_to_zero_x86_64 +#define float32_to_int32_scalbn float32_to_int32_scalbn_x86_64 #define float32_to_int64 float32_to_int64_x86_64 #define float32_to_int64_round_to_zero float32_to_int64_round_to_zero_x86_64 +#define float32_to_int64_scalbn float32_to_int64_scalbn_x86_64 #define float32_to_uint16 float32_to_uint16_x86_64 #define float32_to_uint16_round_to_zero float32_to_uint16_round_to_zero_x86_64 +#define float32_to_uint16_scalbn float32_to_uint16_scalbn_x86_64 #define float32_to_uint32 float32_to_uint32_x86_64 #define float32_to_uint32_round_to_zero float32_to_uint32_round_to_zero_x86_64 +#define float32_to_uint32_scalbn float32_to_uint32_scalbn_x86_64 #define float32_to_uint64 float32_to_uint64_x86_64 #define float32_to_uint64_round_to_zero float32_to_uint64_round_to_zero_x86_64 +#define float32_to_uint64_scalbn float32_to_uint64_scalbn_x86_64 #define float32_unordered float32_unordered_x86_64 #define float32_unordered_quiet float32_unordered_quiet_x86_64 #define float64ToCommonNaN float64ToCommonNaN_x86_64 @@ -631,16 +643,22 @@ #define float64_to_floatx80 float64_to_floatx80_x86_64 #define float64_to_int16 float64_to_int16_x86_64 #define float64_to_int16_round_to_zero float64_to_int16_round_to_zero_x86_64 +#define float64_to_int16_scalbn float64_to_int16_scalbn_x86_64 #define float64_to_int32 float64_to_int32_x86_64 #define float64_to_int32_round_to_zero float64_to_int32_round_to_zero_x86_64 +#define float64_to_int32_scalbn float64_to_int32_scalbn_x86_64 #define float64_to_int64 float64_to_int64_x86_64 #define float64_to_int64_round_to_zero float64_to_int64_round_to_zero_x86_64 +#define float64_to_int64_scalbn float64_to_int64_scalbn_x86_64 #define float64_to_uint16 float64_to_uint16_x86_64 #define float64_to_uint16_round_to_zero float64_to_uint16_round_to_zero_x86_64 +#define float64_to_uint16_scalbn float64_to_uint16_scalbn_x86_64 #define float64_to_uint32 float64_to_uint32_x86_64 #define float64_to_uint32_round_to_zero float64_to_uint32_round_to_zero_x86_64 +#define float64_to_uint32_scalbn float64_to_uint32_scalbn_x86_64 #define float64_to_uint64 float64_to_uint64_x86_64 #define float64_to_uint64_round_to_zero float64_to_uint64_round_to_zero_x86_64 +#define float64_to_uint64_scalbn float64_to_uint64_scalbn_x86_64 #define float64_trunc_to_int float64_trunc_to_int_x86_64 #define float64_unordered float64_unordered_x86_64 #define float64_unordered_quiet float64_unordered_quiet_x86_64