lkml.org 
[lkml]   [2008]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC patch 14/27] Immediate Values - Powerpc Optimization
    PowerPC optimization of the immediate values which uses a li instruction,
    patched with an immediate value.

    Changelog:
    - Put imv_set and _imv_set in the architecture independent header.
    - Pack the __imv section. Use smallest types required for size (char).
    - Remove architecture specific update code : now handled by architecture
    agnostic code.
    - Use imv_* instead of immediate_*.

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    CC: Rusty Russell <rusty@rustcorp.com.au>
    CC: Christoph Hellwig <hch@infradead.org>
    CC: Paul Mackerras <paulus@samba.org>
    CC: Adrian Bunk <bunk@stusta.de>
    CC: Andi Kleen <andi@firstfloor.org>
    CC: mingo@elte.hu
    CC: akpm@osdl.org
    ---
    arch/powerpc/Kconfig | 1
    include/asm-powerpc/immediate.h | 55 ++++++++++++++++++++++++++++++++++++++++
    2 files changed, 56 insertions(+)

    Index: linux-2.6-lttng/include/asm-powerpc/immediate.h
    ===================================================================
    --- /dev/null 1970-01-01 00:00:00.000000000 +0000
    +++ linux-2.6-lttng/include/asm-powerpc/immediate.h 2008-03-06 08:55:54.000000000 -0500
    @@ -0,0 +1,55 @@
    +#ifndef _ASM_POWERPC_IMMEDIATE_H
    +#define _ASM_POWERPC_IMMEDIATE_H
    +
    +/*
    + * Immediate values. PowerPC architecture optimizations.
    + *
    + * (C) Copyright 2006 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    + *
    + * This file is released under the GPLv2.
    + * See the file COPYING for more details.
    + */
    +
    +#include <asm/asm-compat.h>
    +
    +/**
    + * imv_read - read immediate variable
    + * @name: immediate value name
    + *
    + * Reads the value of @name.
    + * Optimized version of the immediate.
    + * Do not use in __init and __exit functions. Use _imv_read() instead.
    + */
    +#define imv_read(name) \
    + ({ \
    + __typeof__(name##__imv) value; \
    + BUILD_BUG_ON(sizeof(value) > 8); \
    + switch (sizeof(value)) { \
    + case 1: \
    + asm(".section __imv,\"a\",@progbits\n\t" \
    + PPC_LONG "%c1, ((1f)-1)\n\t" \
    + ".byte 1\n\t" \
    + ".previous\n\t" \
    + "li %0,0\n\t" \
    + "1:\n\t" \
    + : "=r" (value) \
    + : "i" (&name##__imv)); \
    + break; \
    + case 2: \
    + asm(".section __imv,\"a\",@progbits\n\t" \
    + PPC_LONG "%c1, ((1f)-2)\n\t" \
    + ".byte 2\n\t" \
    + ".previous\n\t" \
    + "li %0,0\n\t" \
    + "1:\n\t" \
    + : "=r" (value) \
    + : "i" (&name##__imv)); \
    + break; \
    + case 4: \
    + case 8: value = name##__imv; \
    + break; \
    + }; \
    + value; \
    + })
    +
    +#endif /* _ASM_POWERPC_IMMEDIATE_H */
    Index: linux-2.6-lttng/arch/powerpc/Kconfig
    ===================================================================
    --- linux-2.6-lttng.orig/arch/powerpc/Kconfig 2008-03-06 08:45:31.000000000 -0500
    +++ linux-2.6-lttng/arch/powerpc/Kconfig 2008-03-06 08:56:14.000000000 -0500
    @@ -91,6 +91,7 @@ config PPC
    select HAVE_OPROFILE
    select HAVE_KPROBES
    select HAVE_KRETPROBES
    + select HAVE_IMMEDIATE

    config EARLY_PRINTK
    bool
    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


    \
     
     \ /
      Last update: 2008-04-16 23:47    [W:0.026 / U:91.780 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site