On 24.03.2021 18:32, Dmitry Timoshkov wrote:
Gabriel Ivăncescu gabrielopcode@gmail.com wrote:
On 24/03/2021 15:02, Dmitry Timoshkov wrote:
Gabriel Ivăncescu gabrielopcode@gmail.com wrote:
Looks like a bug in Clang to me, although working around it is fine, but it's not my call.
Nevertheless I think you should report it to Clang so they fix it.
Why do you think that it's a clang bug? Using fldl + fstpl to store and fetch the double to/from the floating point stack is perfectly legitimate.
Well, because jsval_t is a union, not a double. Shouldn't assignment be a bitwise copy? The compiler can't know what actual type is used by the union here. Unless I misremember the C standard.
If I understand correctly, the compiler have chosen the memeber of a maximal bits width and used it for a copy. That's unfortunate that the chosen member happened to be of type 'double', and as a result floating point instructions were used to perform the copying operation.
Compiler is free to use any copy implementation it wants, but it can't affect stored values. If it changes stored values, it's obviously a compiler bug. But it would be good to understand what's exactly going on before jumping to that conclusion. From your description, I don't yet see the exact problem. I also can't reproduce it with my builds. Could you please send me your jscript.dll build?
As I mentioned, when enums are involved, I'd suspect them because they are a known incompatibility between compilers. In 32-bit case, I don't see how they could cause a problem, but it may be worth trying to change them as well, like the attached patch.
Jacek