I added a test case in 22_floating_point.c and pushed the suggested fix in mod.
Christian From: Christian Jullien [mailto:eli...@orange.fr] Sent: Tuesday, November 05, 2019 08:14 To: 'tinycc-devel@nongnu.org' Subject: RE: [Tinycc-devel] Floating/Double issue on arm64 in mob I confirm this BUG which appends on my FC31 Rpi aarch64. I “think” 4104 can be interpreted as VT_EXTERN | VT_FLOAT (i.e 0x00001000 | 0x8) Quickly trying following diff looks to fix this issue (and makes the whole test suite still happy). I let maintainers tell me if it is the right fix to apply. diff --git a/arm64-gen.c b/arm64-gen.c index 5606271..5cd9e6b 100644 --- a/arm64-gen.c +++ b/arm64-gen.c @@ -1775,7 +1775,8 @@ ST_FUNC void gen_cvt_ftoi(int t) ST_FUNC void gen_cvt_ftof(int t) { - int f = vtop[0].type.t; + int f = vtop[0].type.t & VT_BTYPE; + assert(t == VT_FLOAT || t == VT_DOUBLE || t == VT_LDOUBLE); assert(f == VT_FLOAT || f == VT_DOUBLE || f == VT_LDOUBLE); if (t == f) From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=orange...@nongnu.org] On Behalf Of Charles Lohr Sent: Tuesday, November 05, 2019 07:52 To: tinycc-devel@nongnu.org Subject: [Tinycc-devel] Floating/Double issue on arm64 in mob Using default settings, in hash 96f1fb1, current mob head, I am having an internal compiler assert on arm64. The following program causes an assert. There are other cases but the assert remains the same. float fd; int main() { if( fd < 5.5 ) return 1; return 0; } root@omitted:~/apps/cnovr/lib/tinycc# ./tcc failtest.c -Iinclude tcc: arm64-gen.c:1781: gen_cvt_ftof: Assertion `f == VT_FLOAT || f == VT_DOUBLE || f == VT_LDOUBLE' failed. Aborted Digging a little further, turns out f is of type 4104. I'm not sure what the best path forward here is. Any clues?
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel