Subject: GCC code generation...?
To: VAX porting list <port-vax@netbsd.org>
From: Johnny Billquist <bqt@softjar.se>
List: port-vax
Date: 08/06/2007 12:58:31
We've been told that gcc today is so much better than of old, which is why we 
should accept that it takes much longer to compile things today.

However, while trying to find why -current crashes, I found this code snippet:

netbsd:update_pcbs:     halt
netbsd:update_pcbs+0x1: halt
netbsd:update_pcbs+0x2: subl2   $4, sp
netbsd:update_pcbs+0x5: movl    4(ap), r2
netbsd:update_pcbs+0x9: movl    8(r2), r1
netbsd:update_pcbs+0xd: *beql   update_pcbs+0x50
netbsd:update_pcbs+0xf: movl    4(r1), r0
netbsd:update_pcbs+0x13:        movl    12(r2), 80(r0)
netbsd:update_pcbs+0x18:        movl    4(r1), r0
netbsd:update_pcbs+0x1c:        bisl3   $0x4000000, 16(r2), 84(r0)
netbsd:update_pcbs+0x26:        movl    4(r1), r0
netbsd:update_pcbs+0x2a:        movl    20(r2), 88(r0)
netbsd:update_pcbs+0x2f:        movl    4(r1), r0
netbsd:update_pcbs+0x33:        movl    24(r2), 92(r0)
netbsd:update_pcbs+0x38:        movl    (r1), r1
netbsd:update_pcbs+0x3b:        *bneq   update_pcbs+0xf

Notice how it reloads r0 with the same value several times. At +0xf, +0x18, 
+0x26 and +0x2f. What is going on here???

This is the while-loop in update_pcbs() in pmap.c. And ignore that beql at +0xd, 
that's been modified by me to hunt a bug.

	Johnny

-- 
Johnny Billquist                  || "I'm on a bus
                                   ||  on a psychedelic trip
email: bqt@softjar.se             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol