From mboxrd@z Thu Jan 1 00:00:00 1970 From: mjn3@codepoet.org (Manuel Novoa III) Subject: approx 2k reduction in kernel code size -- 300 bytes in data (patch) Date: Tue, 18 Jun 2002 13:12:30 -0600 Sender: linux-8086-owner@vger.kernel.org Message-ID: <20020618191230.GA18693@codepoet.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="8t9RHnE3ZwKMSgU+" Return-path: Content-Disposition: inline List-Id: To: linux-8086@vger.kernel.org --8t9RHnE3ZwKMSgU+ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello all, Sunday afternoon I felt like taking I break so I started looking at the elks kernel. After doing lots of repetitive bcc-specific optimizations, as well as reworking a few things (arch/i86/lib/memmove.c and kernel/sys.c in particular -- I'd appreciate a second pair of eyes on those), this is what I have for the config file below. cvs source (with fs/minix/bitmap.c fix): Root device is (0, 0) Boot sector 512 bytes. Setup is 1772 bytes. System is 120672 B (61456 B code, 7940 B data and 51276d B bss) System is 69428 cvs source with attached patch: Root device is (0, 0) Boot sector 512 bytes. Setup is 1772 bytes. System is 118380 B (59472 B code, 7640 B data and 51268d B bss) System is 67144 So, a savings of just under 2k in code and 300 bytes in data. bcc optimizations used mainly fell under the following categories: 1) Reworked codeflow for better bcc code generation. 2) Use of "register char *"s as counters, as bcc can't seem to place ints in registers. (yes, this is ugly, but it is effective) 3) Allocation of different register variables in different blocks in on subroutine, as bcc seems to limit you to two register variables active at a time (di/si). 4) Collection of common work. Hopefully in a couple of weeks I'll have some time to look at the driver files as well. Enjoy. Manuel Modified files: arch/i86/lib/ bitops.c memmove.c arch/i86/mm/ init.c malloc.c fs/ block_dev.c devices.c exec.c fcntl.c file_table.c inode.c ioctl.c namei.c open.c pipe.c read_write.c readdir.c select.c stat.c super.c fs/minix/ bitmap.c file.c inode.c namei.c symlink.c kernel/ exit.c fork.c printk.c sched.c signal.c sleepwake.c sys.c time.c lib/ chqueue.c string.c Config file - activated options: CONFIG_ARCH_AUTO=y CONFIG_PC_AUTO=y CONFIG_CONSOLE_DIRECT=y CONFIG_DCON_VT52=y CONFIG_DCON_ANSI=y CONFIG_KEYMAP_US=y CONFIG_CHAR_DEV_RS=y CONFIG_CHAR_DEV_LP=y CONFIG_CHAR_DEV_MEM=y CONFIG_PSEUDO_TTY=y CONFIG_BLK_DEV_BIOS=y CONFIG_BLK_DEV_BFD=y CONFIG_BLK_DEV_BHD=y CONFIG_GENDISK=y CONFIG_BLK_DEV_CHAR=y CONFIG_MINIX_FS=y CONFIG_FS_EXTERNAL_BUFFER=y CONFIG_PIPE=y CONFIG_EXEC_MINIX=y CONFIG_SOCKET=y CONFIG_INET=y CONFIG_INET_STATUS=y CONFIG_SYS_VERSION=y CONFIG_ROOTDEV_FD0=y --8t9RHnE3ZwKMSgU+ Content-Type: application/octet-stream Content-Disposition: attachment; filename="elks.diff-mjn3.gz" Content-Transfer-Encoding: base64 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 --8t9RHnE3ZwKMSgU+--