[lkml]   [2004]   [Jan]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] Add CONFIG for -mregparm=3

    Using -mregparm=3 shrinks the kernel further:

    (compiled with gcc 3.4, without -funit-at-a-time, using the later
    and together with -Os shrinks .text even more, making over 700KB difference)

    4129346 708629 207240 5045215 4cfbdf vmlinux
    3892905 708629 207240 4808774 496046 vmlinux-regparm

    This one helps even more, >236KB .text difference. Clearly worth
    the effort.

    This patch adds an option to use -mregparm=3 while compiling the kernel.
    I did an LTP run and it showed no additional failures over an non
    regparm kernel.

    According to some gcc developers it should be safe to use in all
    gccs that are still supports (2.95 and up)

    I didn't make it the default because it will break all binary only
    modules (although they can be fixed by adding a wrapper that
    calls them with "asmlinkage"). Actually it may be a good idea to
    make this default with 2.7.1 or somesuch.

    diff -u linux-34/arch/i386/Kconfig-o linux-34/arch/i386/Kconfig
    --- linux-34/arch/i386/Kconfig-o 2004-01-09 09:27:09.000000000 +0100
    +++ linux-34/arch/i386/Kconfig 2004-01-14 08:43:29.815530072 +0100
    @@ -820,6 +820,14 @@
    depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI))
    default y

    +config REGPARM
    + bool "Use register arguments (EXPERIMENTAL)"
    + default n
    + help
    + Compile the kernel with -mregparm=3. This uses an different ABI
    + and passes the first three arguments of a function call in registers.
    + This will probably break binary only modules.

    diff -u linux-34/arch/i386/Makefile-o linux-34/arch/i386/Makefile
    --- linux-34/arch/i386/Makefile-o 2003-09-28 10:53:14.000000000 +0200
    +++ linux-34/arch/i386/Makefile 2004-01-13 20:16:32.000000000 +0100
    @@ -47,6 +47,8 @@
    cflags-$(CONFIG_MCYRIXIII) += $(call check_gcc,-march=c3,-march=i486) $(align)-functions=0 $(align)-jumps=0 $(align)-loops=0
    cflags-$(CONFIG_MVIAC3_2) += $(call check_gcc,-march=c3-2,-march=i686)

    +cflags-$(CONFIG_REGPARM) += -mregparm=3
    CFLAGS += $(cflags-y)

    # Default subarch .c files

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:00    [W:4.980 / U:0.356 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site