| Ilya Zakharevich on Tue, 4 Mar 2003 17:04:08 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: linker warning |
On Wed, Mar 05, 2003 at 12:19:00AM +0100, Karim BELABAS wrote:
> > Now when hiremainder and friends are never in a register, why not take
> > them via a pointer supplied to the assembler routines? I do not see
> > how this can make a difference (IIUC, this is a pointer on stack
> > instead of a pointer in the code segment).
> > This would remove the need for globals at all.
> If CC = gcc, all the micro kernel is macroified [ about 20% faster ].
> This doesn't mix well with pointers [ without adding extra ugliness ]
Hmm, I thought that the kernel is inlined on gcc, not macroized...
Anyway, why macroization would lead to problems? gcc produces the
same assembler for
int
f(int a, int b)
{
int *c = &a;
return b + *c;
}
int
ff(int a, int b)
{
int c = a;
return b + c;
}
> Note that with conventional build environments (gcc:-), they are not really
> globals, only used as
>
> // no assembler kernel; same things exist with asm() statements
> #define LOCAL_HIREMAINDER ulong hiremainder
> #define divll(a,b) ({ \
> ulong __q, __r \
> ...
> hiremainder = __r; \
> __q; \
> })
>
> blah()
> {
> ulong q, r;
> LOCAL_HIREMAINDER;
>
> hiremainder = 0;
> q = divll(a, b);
> r = hiremainder;
> }
This is especially silly if we could give &hiremainder to divll.
> kernel=none + new macroified (portable) divll.h (need CC = gcc)
> +++ Total bench for gp-sta is 1550
> +++ Total bench for gp-dyn is 1566
> ix86 kernel. Beats gmp kernel ] currently yields
> +++ Total bench for gp-sta is 1072
> +++ Total bench for gp-dyn is 1096
Do not think "Total bench" is an appropriate benching tool.
I think bench spends a lot of time for bookkeeping (process startup
overhead, file read/write, etc). I would think the actual (i.e.,
tight-loop) difference between these two cases may be as high as 3x.
Ilya