mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-08 23:04:13 +08:00
把fit_size的策略再改回去
This commit is contained in:
parent
23a7f4dfd7
commit
f830537f9e
@ -337,11 +337,13 @@ static CodeLocation rom_fit_newsize( CodeLocation rom, int realend, int totalsiz
|
||||
{
|
||||
u32 size = realend + totalsize;
|
||||
|
||||
if( size > SIZE_32M )
|
||||
{
|
||||
// get the biggest space that all bytes is 0
|
||||
CodeLocation found=NULL, current=NULL;
|
||||
int szfound=0, szcurrent=0;
|
||||
int reallen = INSTR_LEN( realend );
|
||||
instruction_t freeinstr = 0; // 0/0xffffffff will be free
|
||||
CodeLocation found=NULL, current=NULL;
|
||||
int szfound=0, szcurrent=0;
|
||||
int reallen = INSTR_LEN( realend );
|
||||
instruction_t freeinstr = 0; // 0/0xffffffff will be free
|
||||
|
||||
#define START_FREE_BLOCK(n) {\
|
||||
current = rom+i;\
|
||||
@ -357,45 +359,45 @@ static CodeLocation rom_fit_newsize( CodeLocation rom, int realend, int totalsiz
|
||||
szcurrent = 0;\
|
||||
}
|
||||
|
||||
for( int i=0; i < reallen; ++i )
|
||||
{
|
||||
if( rom[i] == 0 )
|
||||
for( int i=0; i < reallen; ++i )
|
||||
{
|
||||
if( szcurrent == 0 )
|
||||
if( rom[i] == 0 )
|
||||
{
|
||||
START_FREE_BLOCK(0);
|
||||
if( szcurrent == 0 )
|
||||
{
|
||||
START_FREE_BLOCK(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( freeinstr == 0 )// same block
|
||||
szcurrent += INSTR_SIZE;
|
||||
else END_FREE_BLOCK;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if( rom[i] == 0xffffffff )
|
||||
{
|
||||
if( freeinstr == 0 )// same block
|
||||
szcurrent += INSTR_SIZE;
|
||||
else END_FREE_BLOCK;
|
||||
}
|
||||
if( szcurrent == 0xffffffff )
|
||||
{
|
||||
START_FREE_BLOCK(0xffffffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( freeinstr == 0xffffffff )
|
||||
szcurrent += INSTR_SIZE;
|
||||
else END_FREE_BLOCK;
|
||||
}
|
||||
}
|
||||
else if( szcurrent > 0 ) END_FREE_BLOCK;
|
||||
}
|
||||
else if( rom[i] == 0xffffffff )
|
||||
{
|
||||
if( szcurrent == 0xffffffff )
|
||||
{
|
||||
START_FREE_BLOCK(0xffffffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( freeinstr == 0xffffffff )
|
||||
szcurrent += INSTR_SIZE;
|
||||
else END_FREE_BLOCK;
|
||||
}
|
||||
}
|
||||
else if( szcurrent > 0 ) END_FREE_BLOCK;
|
||||
}
|
||||
|
||||
// the zero-filled space is big enough, 3 is a guess value
|
||||
if( szfound > totalsize * 3 )
|
||||
{
|
||||
return found + FIT_SPACE_RESERVED;
|
||||
// the zero-filled space is big enough, 3 is a guess value
|
||||
if( szfound > totalsize * 3 )
|
||||
{
|
||||
return found + FIT_SPACE_RESERVED;
|
||||
}
|
||||
// cannot find a good block
|
||||
else return NULL;
|
||||
}
|
||||
|
||||
// cannot find a good block
|
||||
if( size > SIZE_32M ) return NULL;
|
||||
|
||||
// grow cart volumn
|
||||
else if( szrom < size || nextPow2(size) != nextPow2(szrom) )
|
||||
|
Loading…
x
Reference in New Issue
Block a user