NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: port-mips/57680: printf("%.1f") shows wrong results on R3000mipseb
The following reply was made to PR port-mips/57680; it has been noted by GNATS.
From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>
To: simonb%NetBSD.org@localhost
Cc: gnats-bugs%netbsd.org@localhost, tsutsui%ceres.dti.ne.jp@localhost
Subject: Re: port-mips/57680: printf("%.1f") shows wrong results on R3000mipseb
Date: Tue, 14 Nov 2023 02:20:50 +0900
I wrote:
> At least changing ${DESTDIR}/usr/include/mips/fenv.h from
> >> static inline fpu_control_t
> >> __rfs(void)
> to
> >> static __noinline fpu_control_t
> >> __rfs(void)
> also solves the problem, but asm outputs are completely different
> in these two cases.
It looks gcc (7.5.0 from NetBSD 9.3) -O2 drops some nops
if __rfs() is defined as inline:
--- dtoa.s-inline-rts 2023-11-14 01:37:09.566670724 +0900
+++ dtoa.s-noinline-rts 2023-11-14 01:36:56.834009058 +0900
: c7a00024 lwc1 $f0,36(sp)
+ : 00000000 nop
: c7a10020 lwc1 $f1,32(sp)
+ : 00000000 nop
: e7a0002c swc1 $f0,44(sp)
: e7a10028 swc1 $f1,40(sp)
[...]
: 8f820000 lw v0,0(gp)
: 46201001 sub.d $f0,$f2,$f0
: c4420004 lwc1 $f2,4(v0)
+ : 00000000 nop
: c4430000 lwc1 $f3,0(v0)
: 8f820000 lw v0,0(gp)
: 46220002 mul.d $f0,$f0,$f2
[...]
: 468010a1 cvt.d.w $f2,$f2
: 46241082 mul.d $f2,$f2,$f4
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
+ : 00000000 nop
: 46240000 add.d $f0,$f0,$f4
: 46220000 add.d $f0,$f0,$f2
: 44801000 mtc1 zero,$f2
+ : 00000000 nop
: 44801800 mtc1 zero,$f3
: 00000000 nop
: 4622003c c.lt.d $f0,$f2
[...]
: c7a20024 lwc1 $f2,36(sp)
: c4410000 lwc1 $f1,0(v0)
: c7a30020 lwc1 $f3,32(sp)
+ : 00000000 nop
: 4620103c c.lt.d $f2,$f0
: 00000000 nop
[...]
: 001018c0 sll v1,s0,0x3
: 00431021 addu v0,v0,v1
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
: 2402ffff li v0,-1
: afa20028 sw v0,40(sp)
[...]
: c4410000 lwc1 $f1,0(v0)
+ : 00000000 nop
: 46201000 add.d $f0,$f2,$f0
: 44090000 mfc1 t1,$f0
: 44080800 mfc1 t0,$f1
[...]
: 8f820000 lw v0,0(gp)
: 00000000 nop
: c4420004 lwc1 $f2,4(v0)
+ : 00000000 nop
: c4430000 lwc1 $f3,0(v0)
+ : 00000000 nop
: 4622003c c.lt.d $f0,$f2
: 00000000 nop
- : 45010345 bc1t 1498 <__dtoa+0x1498>
+ : 4501035d bc1t 153c <__dtoa+0x1530>
: 00000000 nop
: 44881000 mtc1 t0,$f2
: 8f820000 lw v0,0(gp)
: 468010a1 cvt.d.w $f2,$f2
: 46201082 mul.d $f2,$f2,$f0
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
+ : 00000000 nop
: 46241080 add.d $f2,$f2,$f4
: 44031000 mfc1 v1,$f2
: 44021800 mfc1 v0,$f3
[...]
: 8f8a0000 lw t2,0(gp)
: 00000000 nop
: c5420004 lwc1 $f2,4(t2)
+ : 00000000 nop
: c5430000 lwc1 $f3,0(t2)
+ : 00000000 nop
: 46241083 div.d $f2,$f2,$f4
: 46281081 sub.d $f2,$f2,$f8
: 4622003c c.lt.d $f0,$f2
: 00000000 nop
- : 45010030 bc1t 920 <__dtoa+0x920>
+ : 45010033 bc1t 980 <__dtoa+0x974>
: a2220000 sb v0,0(s1)
: 8f840000 lw a0,0(gp)
: 00000000 nop
: c4880004 lwc1 $f8,4(a0)
+ : 00000000 nop
: c4890000 lwc1 $f9,0(a0)
+ : 00000000 nop
: 46204101 sub.d $f4,$f8,$f0
: 4622203c c.lt.d $f4,$f2
: 00000000 nop
- : 45010366 bc1t 161c <__dtoa+0x161c>
+ : 45010378 bc1t 16c0 <__dtoa+0x16b4>
: 00000000 nop
: 24020001 li v0,1
- : 11220141 beq t1,v0,d94 <__dtoa+0xd94>
+ : 11220147 beq t1,v0,e08 <__dtoa+0xdfc>
: 02294821 addu t1,s1,t1
: 8f850000 lw a1,0(gp)
: 00000000 nop
: c4a40004 lwc1 $f4,4(a1)
+ : 00000000 nop
: c4a50000 lwc1 $f5,0(a1)
- : 10000009 b 8cc <__dtoa+0x8cc>
+ : 10000009 b 92c <__dtoa+0x920>
: 46240002 mul.d $f0,$f0,$f4
: 46204181 sub.d $f6,$f8,$f0
: 4622303c c.lt.d $f6,$f2
: 00000000 nop
[...]
: 46201082 mul.d $f2,$f2,$f0
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
+ : 00000000 nop
: 46241080 add.d $f2,$f2,$f4
: 44031000 mfc1 v1,$f2
: 44021800 mfc1 v0,$f3
[...]
: 8f820000 lw v0,0(gp)
: 00000000 nop
: c4420004 lwc1 $f2,4(v0)
+ : 00000000 nop
: c4430000 lwc1 $f3,0(v0)
+ : 00000000 nop
: 46220001 sub.d $f0,$f0,$f2
: 44851000 mtc1 a1,$f2
+ : 00000000 nop
: 44841800 mtc1 a0,$f3
: 00000000 nop
: 4620103c c.lt.d $f2,$f0
: 00000000 nop
[...]
: 8f820000 lw v0,0(gp)
: 00000000 nop
: 00431021 addu v0,v0,v1
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
: 8fa20084 lw v0,132(sp)
: 00000000 nop
- : 0441fd39 bgez v0,2b0 <__dtoa+0x2b0>
+ : 0441fd28 bgez v0,2e4 <__dtoa+0x2d8>
: 00000000 nop
: 8fa20028 lw v0,40(sp)
: 00000000 nop
- : 1c40fd35 bgtz v0,2b0 <__dtoa+0x2b0>
+ : 1c40fd24 bgtz v0,2e4 <__dtoa+0x2d8>
: 00000000 nop
- : 1440000c bnez v0,e14 <__dtoa+0xe14>
+ : 14400010 bnez v0,e9c <__dtoa+0xe90>
: 00000000 nop
: 8f820000 lw v0,0(gp)
: 00000000 nop
: c4400004 lwc1 $f0,4(v0)
+ : 00000000 nop
: c4410000 lwc1 $f1,0(v0)
+ : 00000000 nop
: 46202102 mul.d $f4,$f4,$f0
: c7a00024 lwc1 $f0,36(sp)
+ : 00000000 nop
: c7a10020 lwc1 $f1,32(sp)
+ : 00000000 nop
: 4624003e c.le.d $f0,$f4
: 00000000 nop
- : 45000153 bc1f 135c <__dtoa+0x135c>
+ : 45000154 bc1f 13e8 <__dtoa+0x13dc>
: 0000a825 move s5,zero
: 8f990000 lw t9,0(gp)
: 00000000 nop
[...]
: 8f850000 lw a1,0(gp)
: 00000000 nop
: c4a80004 lwc1 $f8,4(a1)
+ : 00000000 nop
: c4a90000 lwc1 $f9,0(a1)
+ : 00000000 nop
: 46280002 mul.d $f0,$f0,$f8
: 26e50001 addiu a1,s7,1
: 4442f800 cfc1 v0,$31
[...]
: 8f820000 lw v0,0(gp)
: 00000000 nop
: c4440004 lwc1 $f4,4(v0)
+ : 00000000 nop
: c4450000 lwc1 $f5,0(v0)
+ : 00000000 nop
: 46241180 add.d $f6,$f2,$f4
: 4620303c c.lt.d $f6,$f0
: 00000000 nop
- : 45000052 bc1f 15a8 <__dtoa+0x15a8>
+ : 45000053 bc1f 164c <__dtoa+0x1640>
: 00a0b825 move s7,a1
: 80a2ffff lb v0,-1(a1)
- : 1000ff6c b 121c <__dtoa+0x121c>
+ : 1000ff66 b 12a4 <__dtoa+0x1298>
: 01008025 move s0,t0
: a2220000 sb v0,0(s1)
: 82e2ffff lb v0,-1(s7)
: 26100001 addiu s0,s0,1
: 24420001 addiu v0,v0,1
- : 1000fbb4 b 354 <__dtoa+0x354>
+ : 1000fb99 b 388 <__dtoa+0x37c>
: a0820000 sb v0,0(a0)
: c7a00024 lwc1 $f0,36(sp)
+ : 00000000 nop
: c7a10020 lwc1 $f1,32(sp)
- : 1000fcb1 b 758 <__dtoa+0x758>
+ : 1000fc97 b 794 <__dtoa+0x788>
: 24080002 li t0,2
: 8fa20028 lw v0,40(sp)
: 00000000 nop
---
gcc --save-temps shows completely different ".set" usages
and it also comments out nops in inline case???
---
--- dtoa.s-save-temps-inline-rts 2023-11-14 01:44:51.063959690 +0900
+++ dtoa.s-save-temps-noinline-rts 2023-11-14 01:44:29.319827284 +0900
[...]
-$L5:
+$L7:
lwc1 $f0,36($sp)
- #nop
+ nop
lwc1 $f1,32($sp)
- #nop
+ nop
swc1 $f0,44($sp)
swc1 $f1,40($sp)
lwc1 $f2,44($sp)
mtc1 $0,$f0
lwc1 $f3,40($sp)
mtc1 $0,$f1
- #nop
+ nop
c.eq.d $f2,$f0
- #nop
- .set noreorder
- .set nomacro
- bc1t $L335
+ nop
+ bc1t $L336
slt $2,$20,2
- .set macro
- .set reorder
- bne $2,$0,$L9
- lw $2,0($3)
- #nop
- .set noreorder
- .set nomacro
- beq $2,$0,$L10
+ bne $2,$0,$L11
+ nop
+
+ lw $2,0($4)
+ nop
+ beq $2,$0,$L12
li $2,2 # 0x2
- .set macro
- .set reorder
- .set noreorder
- .set nomacro
- beq $20,$2,$L9
+ beq $20,$2,$L11
move $20,$0
- .set macro
- .set reorder
li $20,2 # 0x2
[...]
---
---
Izumi Tsutsui
Home |
Main Index |
Thread Index |
Old Index