Skip to content

Commit 163b3d1

Browse files
Laszlo Ersekstsquad
authored andcommitted
target/i386: floatx80: avoid compound literals in static initializers
Quoting ISO C99 6.7.8p4, "All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals". The compound literal produced by the make_floatx80() macro is not such a constant expression, per 6.6p7-9. (An implementation may accept it, according to 6.6p10, but is not required to.) Therefore using "floatx80_zero" and make_floatx80() for initializing "f2xm1_table" and "fpatan_table" is not portable. And gcc-4.8 in RHEL-7.6 actually chokes on them: > target/i386/fpu_helper.c:871:5: error: initializer element is not constant > { make_floatx80(0xbfff, 0x8000000000000000ULL), > ^ We've had the make_floatx80_init() macro for this purpose since commit 3bf7e40 ("softfloat: fix for C99", 2012-03-17), so let's use that macro again. Fixes: eca3064 ("target/i386: reimplement f2xm1 using floatx80 operations") Fixes: ff57bb7 ("target/i386: reimplement fpatan using floatx80 operations") Signed-off-by: Laszlo Ersek <[email protected]> Signed-off-by: Alex Bennée <[email protected]> Reviewed-by: Alex Bennée <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Reviewed-by: Richard Henderson <[email protected]> Cc: Aurelien Jarno <[email protected]> Cc: Eduardo Habkost <[email protected]> Cc: Joseph Myers <[email protected]> Cc: Paolo Bonzini <[email protected]> Cc: Peter Maydell <[email protected]> Link: https://lists.gnu.org/archive/html/qemu-devel/2017-08/msg06566.html Link: https://lists.gnu.org/archive/html/qemu-devel/2020-07/msg04714.html Message-Id: <[email protected]> Message-Id: <[email protected]>
1 parent c83d628 commit 163b3d1

File tree

2 files changed

+214
-213
lines changed

2 files changed

+214
-213
lines changed

include/fpu/softfloat.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,7 @@ static inline bool floatx80_invalid_encoding(floatx80 a)
822822
}
823823

824824
#define floatx80_zero make_floatx80(0x0000, 0x0000000000000000LL)
825+
#define floatx80_zero_init make_floatx80_init(0x0000, 0x0000000000000000LL)
825826
#define floatx80_one make_floatx80(0x3fff, 0x8000000000000000LL)
826827
#define floatx80_ln2 make_floatx80(0x3ffe, 0xb17217f7d1cf79acLL)
827828
#define floatx80_pi make_floatx80(0x4000, 0xc90fdaa22168c235LL)

0 commit comments

Comments
 (0)