On Thu, 26 May 2011, Dave Martin wrote: > > The core logic spans 5 instructions. Only 3 of them are actually the > > same in both cases i.e. those with no references to 1b or 2b, and > > they're perfectly interlaced in between the others. Trying to make this > > into common runtime code would result in even bigger code I'm afraid. > > This could be made into common source code via a macro though. > > Fair enough -- a macro might be worth a try _if_ it simplifies things > in the source, but I think you're right that merging the actual code > probably isn't worth it just to save a few words in the vectors page > (which eats up 4K regardless of what we put in it) and a few cycles per > fault (which already costs many, many cycles).
In the normal cases, there is no additional cycles per fault as the inline check remains unchanged, and it goes like this: @ Make sure our user space atomic helper is restarted @ if it was interrupted in a critical region. Here we @ perform a quick test inline since it should be false @ 99.9999% of the time. The rest is done out of line. cmp r2, #TASK_SIZE blhs kuser_cmpxchg_fixup In most cases the branch is not taken. Nicolas _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev