Le 04/09/2017 à 15:54, Kamil Rytarowski a écrit : > On 04.09.2017 02:27, Philippe Mathieu-Daudé wrote: >> On 09/03/2017 02:05 PM, Laurent Vivier wrote: >>> Le 03/09/2017 à 18:31, Kamil Rytarowski a écrit : >>>> GCC 4.7.2 on SunOS reports that the values assigned to array members >>>> are not >>>> real constants: >>>> >>>> target/m68k/fpu_helper.c:32:5: error: initializer element is not >>>> constant >>>> target/m68k/fpu_helper.c:32:5: error: (near initialization for >>>> 'fpu_rom[0]') >>>> rules.mak:66: recipe for target 'target/m68k/fpu_helper.o' failed >>>> >>>> Convert the array to switch() to workaround the issue. >>> >>> I don't like the idea. It's really an array and should be managed as an >>> array. >> >> I agree with Laurent. >> >>> >>> Could you try to use make_floatx80_init() instead of make_floatx80() ? >> >> I guess the problem comes from the macro which cast as not const: >> >> #define make_floatx80(exp, mant) ((floatx80) { mant, exp }) >> > > Adding const to make_floatx80 - ((const floatx80) { mant, exp }) - does > not fix the problem. > >> make_floatx80_init() doesn't cast so it might work, >> else we could add a macro such const_floatx80(): >> >> #define const_floatx80(exp, mant) ((const floatx80) { mant, exp }) > > Switching make_floatx80() to make_floatx80_init() in works. > > How about floatx80_zero, floatx80_one etc? We cannot translate them to > make_floatx80_init() as this breaks in other parts of the code in > functions like: > > void helper_fldpi_ST0(CPUX86State *env) > { > ST0 = floatx80_pi; > } > > -- target/i386/fpu_helper.c >
You can: either replace the "#define floatx80_pi make_floatx80(...)" by a "const floatx80 floatx80_pi = make_floatx80_init(...)" or replace all the macros in the m68k/fpu_helper.c array by make_floatx80_init(...) Thanks, Laurent
signature.asc
Description: OpenPGP digital signature