Why the bulk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Someone asked me this:
>Why all this for a hello world program?
>
>What are all these loads and compares for?
>
>Is this all junk from iostream? After 3 minutes of looking through
>this mess without using the find function I still haven't figured out
>what section of the code relates to what I'm trying to do....
>
>
>Code:
me@computer[111] gcc -S example.cpp
me@computer[112] cat example.s
        .file   "example.cpp"
        .section        ".text"
        .align 4
        .type   _ZSt17__verify_groupingPKcjRKSs, #function
        .proc   04
_ZSt17__verify_groupingPKcjRKSs:
.LLFB1319:
        !#PROLOGUE# 0
        save    %sp, -144, %sp
.LLCFI0:
        !#PROLOGUE# 1
        st      %i0, [%fp+68]
        st      %i1, [%fp+72]
        st      %i2, [%fp+76]
        ld      [%fp+76], %o0
        call    _ZNKSs4sizeEv, 0
         nop
        mov     %o0, %g1
        add     %g1, -1, %g1
        st      %g1, [%fp-20]
        add     %fp, -20, %o5
        ld      [%fp+72], %g1
        add     %g1, -1, %g1
        st      %g1, [%fp-28]
        add     %fp, -28, %g1
        mov     %o5, %o0
        mov     %g1, %o1
        call    _ZSt3minIjERKT_S2_S2_, 0
         nop
        mov     %o0, %g1
        ld      [%g1], %g1
        st      %g1, [%fp-24]
        ld      [%fp-20], %g1
        st      %g1, [%fp-32]
        mov     1, %g1
        stb     %g1, [%fp-33]
        st      %g0, [%fp-40]
.LL2:
        ld      [%fp-40], %o5
        ld      [%fp-24], %g1
        cmp     %o5, %g1
        bgeu    .LL5
        nop
        ldub    [%fp-33], %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      .LL5
        nop
        ld      [%fp+76], %o0
        ld      [%fp-32], %o1
        call    _ZNKSsixEj, 0
         nop
        mov     %o0, %o4
        ld      [%fp+68], %o5
        ld      [%fp-40], %g1
        add     %o5, %g1, %o5
        ldub    [%o4], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %o4
        ldub    [%o5], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %g1
        xor     %o4, %g1, %g1
        subcc   %g0, %g1, %g0
        subx    %g0, -1, %g1
        stb     %g1, [%fp-33]
        ld      [%fp-32], %g1
        add     %g1, -1, %g1
        st      %g1, [%fp-32]
        ld      [%fp-40], %g1
        add     %g1, 1, %g1
        st      %g1, [%fp-40]
        b       .LL2
         nop
.LL5:
        ld      [%fp-32], %g1
        cmp     %g1, 0
        be      .LL6
        nop
        ldub    [%fp-33], %g1
        and     %g1, 0xff, %g1
        cmp     %g1, 0
        be      .LL6
        nop
        ld      [%fp+76], %o0
        ld      [%fp-32], %o1
        call    _ZNKSsixEj, 0
         nop
        mov     %o0, %o4
        ld      [%fp+68], %o5
        ld      [%fp-24], %g1
        add     %o5, %g1, %o5
        ldub    [%o4], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %o4
        ldub    [%o5], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %g1
        xor     %o4, %g1, %g1
        subcc   %g0, %g1, %g0
        subx    %g0, -1, %g1
        stb     %g1, [%fp-33]
        ld      [%fp-32], %g1
        add     %g1, -1, %g1
        st      %g1, [%fp-32]
        b       .LL5
         nop
.LL6:
        ld      [%fp+76], %o0
        mov     0, %o1
        call    _ZNKSsixEj, 0
         nop
        mov     %o0, %o4
        ld      [%fp+68], %o5
        ld      [%fp-24], %g1
        add     %o5, %g1, %o5
        ldub    [%o4], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %o4
        ldub    [%o5], %g1
        sll     %g1, 24, %g1
        sra     %g1, 24, %g1
        cmp     %o4, %g1
        bg      .LL8
        nop
        ldub    [%fp-33], %g1
        and     %g1, 0xff, %g1
        and     %g1, 1, %g1
        stb     %g1, [%fp-41]
        b       .LL9
         nop
.LL8:
        stb     %g0, [%fp-41]
.LL9:
        ldub    [%fp-41], %g1
        stb     %g1, [%fp-33]
        ldub    [%fp-33], %g1
        and     %g1, 0xff, %g1
        mov     %g1, %i0
        ret
        restore
.LLFE1319:
        .size   _ZSt17__verify_groupingPKcjRKSs, .-_ZSt17__verify_groupingPKcjRKSs
        .local  _ZSt8__ioinit
        .common _ZSt8__ioinit,1,1
        .section        ".rodata"
        .align 8
.LLC0:
        .asciz  "Hello World\n"
        .section        ".text"
        .align 4
        .global main
        .type   main, #function
        .proc   04
main:
.LLFB1400:
        !#PROLOGUE# 0
        save    %sp, -112, %sp
.LLCFI1:
        !#PROLOGUE# 1
        sethi   %hi(_ZSt4cout), %g1
        or      %g1, %lo(_ZSt4cout), %o0
        sethi   %hi(.LLC0), %g1
        or      %g1, %lo(.LLC0), %o1
        call    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc, 0
         nop
        mov     0, %g1
        mov     %g1, %i0
        ret
        restore
.LLFE1400:
        .size   main, .-main
        .section        ".gnu.linkonce.t._ZSt3minIjERKT_S2_S2_",#alloc,#execinstr
        .align 4
        .weak   _ZSt3minIjERKT_S2_S2_
        .type   _ZSt3minIjERKT_S2_S2_, #function
        .proc   0116
_ZSt3minIjERKT_S2_S2_:
.LLFB1401:
        !#PROLOGUE# 0
        save    %sp, -120, %sp
.LLCFI2:
        !#PROLOGUE# 1
        st      %i0, [%fp+68]
        st      %i1, [%fp+72]
        ld      [%fp+72], %g1
        ld      [%fp+68], %i5
        ld      [%g1], %i4
        ld      [%i5], %g1
        cmp     %i4, %g1
        bgeu    .LL12
        nop
        ld      [%fp+72], %g1
        st      %g1, [%fp-20]
        b       .LL11
         nop
.LL12:
        ld      [%fp+68], %g1
        st      %g1, [%fp-20]
.LL11:
        ld      [%fp-20], %i0
        ret
        restore
.LLFE1401:
        .size   _ZSt3minIjERKT_S2_S2_, .-_ZSt3minIjERKT_S2_S2_
        .section        ".text"
        .align 4
        .type   _Z41__static_initialization_and_destruction_0ii, #function
        .proc   020
_Z41__static_initialization_and_destruction_0ii:
.LLFB1407:
        !#PROLOGUE# 0
        save    %sp, -112, %sp
.LLCFI3:
        !#PROLOGUE# 1
        st      %i0, [%fp+68]
        st      %i1, [%fp+72]
        ld      [%fp+72], %g1
        sethi   %hi(64512), %o5
        or      %o5, 1023, %o5
        cmp     %g1, %o5
        bne     .LL14
        nop
        ld      [%fp+68], %g1
        cmp     %g1, 1
        bne     .LL14
        nop
        sethi   %hi(_ZSt8__ioinit), %g1
        or      %g1, %lo(_ZSt8__ioinit), %o0
        call    _ZNSt8ios_base4InitC1Ev, 0
         nop
.LL14:
        ld      [%fp+72], %g1
        sethi   %hi(64512), %o5
        or      %o5, 1023, %o5
        cmp     %g1, %o5
        bne     .LL13
        nop
        ld      [%fp+68], %g1
        cmp     %g1, 0
        bne     .LL13
        nop
        sethi   %hi(_ZSt8__ioinit), %g1
        or      %g1, %lo(_ZSt8__ioinit), %o0
        call    _ZNSt8ios_base4InitD1Ev, 0
         nop
.LL13:
        nop
        ret
        restore
.LLFE1407:
        .size   _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii
        .align 4
        .type   _GLOBAL__I_main, #function
        .proc   020
_GLOBAL__I_main:
.LLFB1408:
        !#PROLOGUE# 0
        save    %sp, -112, %sp
.LLCFI4:
        !#PROLOGUE# 1
        mov     1, %o0
        sethi   %hi(64512), %g1
        or      %g1, 1023, %o1
        call    _Z41__static_initialization_and_destruction_0ii, 0
         nop
        nop
        ret
        restore
.LLFE1408:
        .size   _GLOBAL__I_main, .-_GLOBAL__I_main
        .section        ".ctors",#alloc,#write
        .align 4
        .long   _GLOBAL__I_main
        .section        ".text"
        .align 4
        .type   _GLOBAL__D_main, #function
        .proc   020
_GLOBAL__D_main:
.LLFB1409:
        !#PROLOGUE# 0
        save    %sp, -112, %sp
.LLCFI5:
        !#PROLOGUE# 1
        mov     0, %o0
        sethi   %hi(64512), %g1
        or      %g1, 1023, %o1
        call    _Z41__static_initialization_and_destruction_0ii, 0
         nop
        nop
        ret
        restore
.LLFE1409:
        .size   _GLOBAL__D_main, .-_GLOBAL__D_main
        .section        ".dtors",#alloc,#write
        .align 4
        .long   _GLOBAL__D_main
        .weak   pthread_mutex_unlock
        .weak   pthread_mutex_trylock
        .weak   pthread_mutex_lock
        .weak   pthread_create
        .weak   pthread_setspecific
        .weak   pthread_getspecific
        .weak   pthread_key_delete
        .weak   pthread_key_create
        .weak   pthread_once
        .section        ".eh_frame",#alloc
.LLframe1:
        .uaword .LLECIE1-.LLSCIE1
.LLSCIE1:
        .uaword 0x0
        .byte   0x1
        .asciz  "zP"
        .uleb128 0x1
        .sleb128 -4
        .byte   0xf
        .uleb128 0x5
        .byte   0x0
        .uaword __gxx_personality_v0
        .byte   0xc
        .uleb128 0xe
        .uleb128 0x0
        .align 4
.LLECIE1:
.LLSFDE1:
        .uaword .LLEFDE1-.LLASFDE1
.LLASFDE1:
        .uaword .LLASFDE1-.LLframe1
        .uaword .LLFB1319
        .uaword .LLFE1319-.LLFB1319
        .uleb128 0x0
        .byte   0x4
        .uaword .LLCFI0-.LLFB1319
        .byte   0xd
        .uleb128 0x1e
        .byte   0x2d
        .byte   0x9
        .uleb128 0xf
        .uleb128 0x1f
        .align 4
.LLEFDE1:
.LLSFDE3:
        .uaword .LLEFDE3-.LLASFDE3
.LLASFDE3:
        .uaword .LLASFDE3-.LLframe1
        .uaword .LLFB1400
        .uaword .LLFE1400-.LLFB1400
        .uleb128 0x0
        .byte   0x4
        .uaword .LLCFI1-.LLFB1400
        .byte   0xd
        .uleb128 0x1e
        .byte   0x2d
        .byte   0x9
        .uleb128 0xf
        .uleb128 0x1f
        .align 4
.LLEFDE3:
.LLSFDE7:
        .uaword .LLEFDE7-.LLASFDE7
.LLASFDE7:
        .uaword .LLASFDE7-.LLframe1
        .uaword .LLFB1407
        .uaword .LLFE1407-.LLFB1407
        .uleb128 0x0
        .byte   0x4
        .uaword .LLCFI3-.LLFB1407
        .byte   0xd
        .uleb128 0x1e
        .byte   0x2d
        .byte   0x9
        .uleb128 0xf
        .uleb128 0x1f
        .align 4
.LLEFDE7:
.LLSFDE9:
        .uaword .LLEFDE9-.LLASFDE9
.LLASFDE9:
        .uaword .LLASFDE9-.LLframe1
        .uaword .LLFB1408
        .uaword .LLFE1408-.LLFB1408
        .uleb128 0x0
        .byte   0x4
        .uaword .LLCFI4-.LLFB1408
        .byte   0xd
        .uleb128 0x1e
        .byte   0x2d
        .byte   0x9
        .uleb128 0xf
        .uleb128 0x1f
        .align 4
.LLEFDE9:
.LLSFDE11:
        .uaword .LLEFDE11-.LLASFDE11
.LLASFDE11:
        .uaword .LLASFDE11-.LLframe1
        .uaword .LLFB1409
        .uaword .LLFE1409-.LLFB1409
        .uleb128 0x0
        .byte   0x4
        .uaword .LLCFI5-.LLFB1409
        .byte   0xd
        .uleb128 0x1e
        .byte   0x2d
        .byte   0x9
        .uleb128 0xf
        .uleb128 0x1f
        .align 4
.LLEFDE11:
        .ident  "GCC: (GNU) 3.4.1"
End code.

So what IS all that junk? Is it strictly neccessary? If yes, why? If no, why don't anyone remove it?

It would be nice to get some comments from persons who actually are involved with the compiler on this.

Få din gratis e-post hos http://genialt.zzn.com
____________________________________________________________
Få din egen Web-baserte e-post tjeneste hos http://www.zzn.com


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux