|
Message
From: y_chi_wai2003@y...<y_chi_wai2003@y...>
Date: Tue Jun 15 04:08:54 CEST 2004
Subject: [openrisc] Compiling the source code with large static array size
Thank you very much for your answer !!I tried to use : static int aii[100000];
the following assembly code generated :
00002000 <_main>: 2000: 9c 21 ff d0 l.addi r1,r1,0xffffffd0 2004: d4 01 48 00 l.sw 0x0(r1),r9 2008: d4 01 50 04 l.sw 0x4(r1),r10 200c: d4 01 60 08 l.sw 0x8(r1),r12
The error "EXCEPTION: write out of memory (32-bit access to > fffff2ec)" didn't occur anymore .
Do you know where the static array aii will be stored (in the memory) ? It shouldn't be stored in stack ?
Thanks !!
Regards, Yu Chi Wai
----- Original Message ----- From: Matjaz Breskvar<phoenix@o...> To: Date: Mon Jun 14 10:24:52 CEST 2004 Subject: [openrisc] Compiling the source code with large static array size
> * y_chi_wai2003@y... (y_chi_wai2003@y...) wrote: > > Dear all, > > I encounterred a problem when compiling the source code using > or32- > > gcc and simulating in or32 simulator. > > > > When I created a large static array , e.g : > > > > int main() > > { > > int aii[100000]; > > int i; > > > > for (i=0 ; i<100000; i ++) > > { > > aii[i+1] > > } > > ........ > > return 0; > > } > > > > After compiled the source code and got the Assembley code : > > > > 00002000 <_main>: > > 2000: 19 60 00 01 l.movhi r11,0x1 > > 2004: a9 6b 3a 30 l.ori r11,r11,0x3a30 > > 2008: e0 21 58 02 l.sub r1,r1,r11 > > 200c: d4 01 48 00 l.sw 0x0(r1),r9 > > 2010: d4 01 50 04 l.sw 0x4(r1),r10 > > 2014: d4 01 60 08 l.sw 0x8(r1),r12 > > 2018: d4 01 70 0c l.sw 0xc(r1),r14 > > 201c: d4 01 80 10 l.sw 0x10(r1),r16 > > 2020: d4 01 90 14 l.sw 0x14(r1),r18 > > 2024: d4 01 a0 18 l.sw 0x18(r1),r20 > > 2028: d4 01 b0 1c l.sw 0x1c(r1),r22 > > > > ..................... > > > > The series of l.sw instructions were not belong to my > "for loop". > > While did simulation until the instruction "l.sw > 0x0(r1),r9", the value of > > register "r1" became very large (== fffff2e8). The > simulation gave error > > message "EXCEPTION: write out of memory (32-bit access to > fffff2ec)" > > > > Do anyone know the use of these l.sw instructions ? And how to > limit > > the register "r1" 's value not become too large > during compilation ? > > > > Thank you very much ! > you busted the stack. aii[100000] was allocated on stack, but there > wasn't > that much space. (stack grows down)... try enlarging the stack > or use dynamic allocation... > regards, > p. > >
|
 |