[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [openrisc] Problem with jump behavior



As often seems to happen, when I post a message I figure out what the
problem was. The problem had nothing to do with gcc or the simulation.
I did not have the memory clock set correctly. Once I changed that and
the jumps behaved properly.

Sorry about that,
Damon

----- Original Message ----- 
From: "Damon Brantley" <brantley@m... > 
To: openrisc@o...  
Date: Sat, 19 Apr 2003 23:18:36 -0500 
Subject: [openrisc] Problem with jump behavior 

> 
> 
> I am getting started with experimenting with openrisc. I pulled 
> down and 
> built the 
> binutils and gcc for use with cygwin. I am using the ModelSim 
> simulator 
> that comes 
> with the Xilinx WebPack. 
> 
> While experimenting with some very simple  c programs, it looks 
> like my 
> jumps are off 
> by one instruction. 
> 
> A test program I have been working with is: 
> void main(){ 
> 	int i=0; 
> 	while(1){ 
> 		i=i+1; 
> 	} 
> } 
> 
> The disassembly is 
> 
> 00010000 <_start>: 
>    10000:       18 20 00 00     l.movhi r1,0x0 
>    10004:       a8 21 00 10     l.ori r1,r1,0x10 
>    10008:       00 00 00 04     l.j 10018 <_main> 
>    1000c:       15 00 00 00     l.nop 0x0 
>    10010:       15 00 00 00     l.nop 0x0 
>    10014:       03 ff ff fb     l.j 10000 <_start> 
> 
> 00010018 <_main>: 
>    10018:       9c 21 ff f8     l.addi r1,r1,0xfffffff8 
>    1001c:       d4 01 10 00     l.sw 0x0(r1),r2 
>    10020:       9c 41 00 08     l.addi r2,r1,0x8 
>    10024:       9c 60 00 00     l.addi r3,r0,0x0 
>    10028:       d7 e2 1f fc     l.sw 0xfffffffc(r2),r3 
>    1002c:       84 62 ff fc     l.lwz r3,0xfffffffc(r2) 
>    10030:       9c 63 00 01     l.addi r3,r3,0x1 
>    10034:       d7 e2 1f fc     l.sw 0xfffffffc(r2),r3 
>    10038:       03 ff ff fd     l.j 1002c <_main+0x14> 
>    1003c:       15 00 00 00     l.nop 0x0 
>    10040:       84 41 00 00     l.lwz r2,0x0(r1) 
>    10044:       44 00 48 00     l.jr r9 
>    10048:       9c 21 00 08     l.addi r1,r1,0x8 
> 
> 
> What I am seeing in the simulator is when a the jump at 10008 is 
> executed, 
> instead of seeing iwb_adr_o going to 
> 10018, I am seeing it go to 1001c. 
> 
> In this case the program simulates as expected, but when I add 
> function 
> calls the test programs fail because 
> the first instruction is missed, which is usually setting up a 
> stack frame. 
> 
> This is what I am using for building my test program: 
> 
> /opt/or32-uclinux/bin/or32-uclinux-gcc  -g -Wa,-a=crt0.asm  -c -o 
> crt0.or32 
> crt0.S 
> /opt/or32-uclinux/bin/or32-uclinux-gcc  -g -Wa,-a=test1.asm  -c -o 
> test1.or32 test1.c 
> /opt/or32-uclinux/bin/or32-uclinux-ld  -Ttext 10000 -Tdata 20 -o 
> test1.bin 
> crt0.or32 test1.or32 
> 
> Am I missing a compile or link flag or is model sim possibly doing 
> the 
> simulation wrong. 
> 
> Thanks, 
> Damon 
> 
--
To unsubscribe from openrisc mailing list please visit http://www.opencores.org/mailinglists.shtml