On Sat, 2006-07-15 at 10:37 +0200, Jan Kiszka wrote: > Philippe Gerum wrote: > > On Sat, 2006-07-15 at 10:06 +0200, Jan Kiszka wrote: > >> Philippe Gerum wrote: > >>> On Thu, 2006-07-13 at 13:13 +0200, Jan Kiszka wrote: > >>>> Hi, > >>>> > >>>> some may recall the "micro-optimisation" thread I once started. Here is > >>>> now a simple approach to deal with the yet suboptimal mux-code > >>>> calculation in user-space. Code saving: > >>>> > >>>> Before: > >>>> text data bss dec hex filename > >>>> 18004 476 8 18488 4838 native/.libs/libnative.so > >>>> 27445 696 4 28145 6df1 posix/.libs/libpthread_rt.so > >>>> > >>>> After: > >>>> text data bss dec hex filename > >>>> 17172 476 8 17656 44f8 native/.libs/libnative.so > >>>> 26805 696 4 27505 6b71 posix/.libs/libpthread_rt.so > >>>> > >>>> Of course, this also results in a few ops less being executed on each > >>>> Xenomai syscall invocation (not many cycles, though). > >>>> > >>>> Tested without problems on x86 so far. > >>>> > >>> This is post 2.2 stuff since we need to check this critical change > >>> against each and every supported arch. > >> Agree, there is no need to hurry in 2.2. > >> > >>> Since this breaks the ABI > >>> including the ascending compatibility between old apps and new kernel > >>> support, this won't make it during the v2 series either. > >> The ABI chance just took place due to my laziness - I didn't want to > >> touch every skin library. Anyway, this ABI breakage can be avoided with > >> slightly more effort, i.e. by doing the shift in user-space during the > >> binding. > >> > > > > Yes, the mangling should be done in xeno_user_skin_init(). > > Oh, great, I forgot the new common init code for the skin. This will help. > > > > >>>> Jan > >>>> plain text document attachment (optimise-muxcode-calculation.patch) > >>>> --- > >>>> include/asm-arm/syscall.h | 25 +++++++++++++------------ > >>>> include/asm-blackfin/syscall.h | 4 +++- > >>>> include/asm-i386/syscall.h | 3 ++- > >>>> include/asm-ia64/syscall.h | 23 ++++++++++++----------- > >>>> include/asm-powerpc/syscall.h | 3 ++- > >>>> ksrc/nucleus/shadow.c | 3 ++- > >>>> 6 files changed, 34 insertions(+), 27 deletions(-) > >>>> > >>>> Index: xenomai/include/asm-arm/syscall.h > >>>> =================================================================== > >>>> --- xenomai.orig/include/asm-arm/syscall.h > >>>> +++ xenomai/include/asm-arm/syscall.h > >>>> @@ -26,6 +26,7 @@ > >>>> #include <asm-generic/xenomai/syscall.h> > >>>> > >>>> #define __xn_mux_code(id,op) ((op << 24)|((id << 16) & > >>>> 0xff0000)|(__xn_sys_mux & 0xffff)) > >>>> +#define __xn_mux_code_shft(shifted_id,op) ((op << > >>>> 24)|shifted_id|(__xn_sys_mux & 0xffff)) > >>> +#define __xn_mux_code_shft(shifted_id,op) ((op << 24)|shifted_id) > >>> > >>> should be enough. > >> Given my current calculation of the muxid in the kernel, yes. But the > >> original variant has zero effect on the code and looks more consistent > >> to me. > > > > I don't get why actually. If the point is about reducing the number of > > micro operations per syscall, then leaving this redundancy is pointless. > > As "op" is typically, well, always constant, that __xn_sys_mux bits are > just merge during compile time into the same constant. >
Exactly, this is part of what I called "relative obfuscation". If both codes do the same thing, then one of them is one too many. > > The relative obfuscation this optimization brings to the code is already > > there, regardless of when the mux tag is crammed into the syscall code: > > in any case, we have an half-baked syscall code which is going to be > > adjusted at invocation time. > > My second approach will likely only shift the muxid ahead-of-time, thus > reduce obfuscation a bit again. > > > > >>> <snip> > >>> > >>>> Index: xenomai/include/asm-blackfin/syscall.h > >>>> =================================================================== > >>>> --- xenomai.orig/include/asm-blackfin/syscall.h > >>>> +++ xenomai/include/asm-blackfin/syscall.h > >>>> @@ -27,6 +27,7 @@ > >>>> (i.e. negative syscall number in orig_p0 meaning "non-syscall > >>>> entry"). */ > >>>> #define __xn_mux_code(id,op) ((id << 24)|((op << 16) & > >>>> 0xff0000)|(__xn_sys_mux & 0xffff)) > >>>> +#define __xn_mux_code_fast(shifted_id,op) ((op << > >>>> 24)|shifted_id|(__xn_sys_mux & 0xffff)) > >>>> > >>> Breakage alert. > >>> > >> Oops. > >> > >> Ok, I will rework this patch. > >> > >> Jan > >> > > -- Philippe. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core