Thread (12 messages) flat view 12 messages, 7 authors, 2013-11-12

[PATCH v2] ARM: Use udiv/sdiv for __aeabi_{u}idiv library functions

From: Stephen Boyd <hidden>
Date: 2013-11-12 02:34:17
Also in: lkml

On 11/09/13 21:03, Nicolas Pitre wrote:
Bah..... NAK. We are doing runtime patching of the kernel for many
many things already. So why not do the same here?
static keys are a form of runtime patching, albeit not as extreme as
you're suggesting.
The obvious strategy is to simply overwrite the start of the existing 
__aeabi_idiv code with the "sdiv r0, r0, r1" and "bx lr" opcodes.  

Similarly for the unsigned case.
I was thinking the same thing when I wrote this, but I didn't know how
to tell the compiler to either inline this function or to let me inilne
an assembly stub with some section magic.
That let you test the hardware capability only once during boot instead 
of everytime a divide operation is performed.
The test for hardware capability really isn't done more than once during
boot. The assembly is like so at compile time

00000000 <__aeabi_idiv>:
   0:   nop     {0}
   4:   b       0 <___aeabi_idiv>
   8:   sdiv    r0, r0, r1
   c:   bx      lr

and after we test and find support for the instruction it will be
replaced with

00000000 <__aeabi_idiv>:
   0:   b       8
   4:   b       0 <___aeabi_idiv>
   8:   sdiv    r0, r0, r1
   c:   bx      lr

Unfortunately we still have to jump to this function. It would be great
if we could inline this function at the call site but as I already said
I don't know how to do that.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help