lkml.org 
[lkml]   [2008]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/39] explicitly use edx in const delay function.
    Date
    For x86_64, we can't just use %0, as it would
    generate a mul against rdx, which is not really what we
    want (note the ">> 32" in x86_64 version).

    Using a u64 variable with a shift in i386 generates bad code,
    so the solution is to explicitly use %%edx in inline assembly
    for both.

    Signed-off-by: Glauber Costa <gcosta@redhat.com>
    ---
    arch/x86/lib/delay_32.c | 2 +-
    arch/x86/lib/delay_64.c | 11 +++++++++--
    2 files changed, 10 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/lib/delay_32.c b/arch/x86/lib/delay_32.c
    index bf6de05..0b659a3 100644
    --- a/arch/x86/lib/delay_32.c
    +++ b/arch/x86/lib/delay_32.c
    @@ -114,7 +114,7 @@ inline void __const_udelay(unsigned long xloops)
    int d0;

    xloops *= 4;
    - __asm__("mull %0"
    + __asm__("mull %%edx"
    :"=d" (xloops), "=&a" (d0)
    :"1" (xloops), "0"
    (cpu_data(raw_smp_processor_id()).loops_per_jiffy * (HZ/4)));
    diff --git a/arch/x86/lib/delay_64.c b/arch/x86/lib/delay_64.c
    index d0326d0..ff3dfec 100644
    --- a/arch/x86/lib/delay_64.c
    +++ b/arch/x86/lib/delay_64.c
    @@ -103,9 +103,16 @@ EXPORT_SYMBOL(__delay);

    inline void __const_udelay(unsigned long xloops)
    {
    - __delay(((xloops * HZ *
    - cpu_data(raw_smp_processor_id()).loops_per_jiffy) >> 32) + 1);
    + int d0;
    + xloops *= 4;
    + __asm__("mull %%edx"
    + :"=d" (xloops), "=&a" (d0)
    + :"1" (xloops), "0"
    + (cpu_data(raw_smp_processor_id()).loops_per_jiffy * (HZ/4)));
    +
    + __delay(++xloops);
    }
    +
    EXPORT_SYMBOL(__const_udelay);

    void __udelay(unsigned long usecs)
    --
    1.5.5.1


    \
     
     \ /
      Last update: 2008-06-27 23:43    [W:4.166 / U:0.344 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site