bebbo / gcc

Bebbo's gcc-6-branch for m68k-amigaos
GNU General Public License v2.0
33 stars 11 forks source link

"-msoft-float" issues GCC 6.50b #213

Closed Bearsoft749 closed 8 months ago

Bearsoft749 commented 8 months ago

m68k-amigaos-g++ 6.50b

//floatadd.cpp

float addValue(float a, float b) { return a+b; }

int main() { float result=addValue(10.0f, 20.0f); return 0;
}

m68k-amigaos-g++ -w -O3 -mno-align-int -funsafe-math-optimizations -ffast-math -msoft-float -fomit-frame-pointer -m68060 -noixemul -S floatadd.cpp

NO_APP

.text
.align  2
.globl  __Z8addValueff

__Z8addValueff: .LFB0: fsmove.s (4,sp),fp0 fsadd.s (8,sp),fp0 rts .LFE0: .section .text .align 2 .globl _main _main: .LFB1: clr.l d0 rts .LFE1:

m68k-amigaos-g++ -w -O3 -mno-align-int -funsafe-math-optimizations -ffast-math -msoft-float -fomit-frame-pointer -m68020-60 -noixemul -S floatadd.cpp

NO_APP

.text
.align  2
.globl  __Z8addValueff

__Z8addValueff: .LFB0: move.l (8,sp),-(sp) .LCFI0: move.l (8,sp),-(sp) .LCFI1: jsr ___addsf3 addq.l bebbo/amiga-gcc#8,sp .LCFI2: rts .LFE0: .section .text .align 2 .globl _main _main: .LFB1: clr.l d0 rts .LFE1:

bebbo commented 8 months ago

The code looks totally fine. What's the problem?

Bearsoft749 commented 8 months ago

I have set it to not use the fpu "-msoft-float".

with option -m68020-60, it works correctly. It's using the library. The code works on a 060 without fpu.

.LFB0: move.l (8,sp),-(sp) .LCFI0: move.l (8,sp),-(sp) .LCFI1: jsr ___addsf3 addq.l bebbo/amiga-gcc#8,sp .LCFI2: rts

With option -m68060 it's using the fpu. The code crashes on a 060 without fpu.

.LFB0: fsmove.s (4,sp),fp0 fsadd.s (8,sp),fp0 rts

bebbo commented 8 months ago

The switch -msoft-float has no effect if the cpu is 68060 or 68080.

Bearsoft749 commented 8 months ago

Okay... but it works on GCC13.1... Is there a way to fix it so it has an effect? Worse optimization with "-m68020-60".