Hi, Przemek
> An now I compared BCC-5.5 and GCC-4.3.1 assembler code generated for
> such modified HVM and this simple code:
>
> void func( void )
> {
> hb_stackPush();
> hb_stackPop();
> }
GCC generates wonderfull code
In my experience BCC produces best code by changing, say
#define hb_stackPush( ) do { \
if( ++hb_stack.pPos == hb_stack.pEnd ) \
hb_stackIncrease(); \
} while ( 0 )
#define hb_stackPop( ) do { --hb_stack.pPos; \
if( HB_IS_COMPLEX( * hb_stack.pPos ) ) \
hb_itemClear( * hb_stack.pPos ); \
} while ( 0 )
into
#define hb_stackPush( ) do { PHB_STACK p = &hb_stack; \
if( ++p->pPos == p->pEnd ) \
hb_stackIncrease(); \
} while ( 0 )
#define hb_stackPop( ) do { PHB_STACK p = &hb_stack; --p->pPos; \
if( HB_IS_COMPLEX( * p->pPos ) ) \
hb_itemClear( * p->pPos ); \
} while ( 0 )
This gives:
mov eax,offset _hb_stack
add dword ptr [eax+4],4
mov edx,dword ptr [eax+4]
cmp edx,dword ptr [eax+8]
jne short @3
call _hb_stackIncrease
@3:
mov eax,offset _hb_stack
sub dword ptr [eax+4],4
mov edx,dword ptr [eax+4]
mov edx,dword ptr [edx]
test dword ptr [edx],46085
je short @6
push edx
call _hb_itemClear
pop ecx
@6:
Anyway, this is not lifebuoy, there is no possibilities in all places
do translators work.
Best regards,
Saulius
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour