Package: gcc-3.3
Version: 1:3.3.1-0pre0
Severity: wishlist

The program

--
#include <linux/time.h>

void foo(struct timespec *t, struct timespec *u)
{
        struct timespec zero = {0, 0};

        *t = zero;
        *u = zero;
}
--

produces the following code on i386 with -Os

--
        .file   "b.c"
        .text
.globl foo
        .type   foo, @function
foo:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        movl    $0, (%eax)
        movl    $0, 4(%eax)
        movl    12(%ebp), %eax
        movl    $0, (%eax)
        movl    $0, 4(%eax)
        leave
        ret
        .size   foo, .-foo
        .ident  "GCC: (GNU) 3.3.1 20030626 (Debian prerelease)"
--

It would be much better size-wise if it stored a zero in a register
and then stored the register into those locations.

-- System Information
Debian Release: testing/unstable
Kernel Version: Linux gondolin 2.4.21-2-686-smp #1 SMP Sat Jul 5 01:42:22 EST 
2003 i686 GNU/Linux

Versions of the packages gcc-3.3 depends on:
ii  binutils       2.14.90.0.4-0. The GNU assembler, linker and binary utiliti
ii  cpp-3.3        3.3.1-0pre0    The GNU C preprocessor
ii  gcc-3.3-base   3.3.1-0pre0    The GNU Compiler Collection (base package)
ii  libc6          2.3.1-16       GNU C Library: Shared libraries and Timezone
ii  libgcc1        3.3.1-0pre0    GCC support library


Reply via email to