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