C By Example Part 3: Compiler, Assembler and Linker

Exercises

Practice your editor skills and create following files in a directory of your choice:

Translate the source files into an executable

First use the following one-line command and check that the executable does what you expect:

theon$ gcc foo.c bar.c
theon$ a.out
foo bar
theon$ 

Of course you also do things more manual. And you will see there are reasons why this is of advantage. For example with

theon$ gcc -S foo.c
theon$ gcc -c foo.s
theon$ gcc -S bar.c
theon$ gcc -c bar.s
theon$ gcc  foo.o bar.o
theon$ a.out
foo bar
theon$ 

we invoke the tools one by one. Actually except for the preprocessor which will be invoked together with the compiler when you use the option -S.

Quiz 5

Assume that for some reason it is actually of advantage (food for thought) to translate the source files step by step with one of the following commands:

1
2
3
4
5
gcc -S foo.c
gcc -c foo.s
gcc -S bar.c
gcc -c bar.s
gcc  foo.o bar.o

Also assume that you already did this. But then you had to modify file bar.c because you came up with a great idea to improve its implementation:

What commands do you need to re-run to generate an executable. Of course the number of commands should be minimal. Write this commands in the order you have to execute them into a file quiz05.txt.

Submit your solution with submit hpc quiz05 quiz05.txt. If you do not get an error message the submission was successful.

Using the ULM C Compiler on theon

In the video you will see that the ULM C Compiler ucc can be used to observe the generated assembly code, object file and executable. In order to use ucc on theon you have to add the directory of the installation to your path:

1
export PATH=$PATH:/home/numerik/pub/bin

To make this permanent append the above line to your .bashrc. For example with

1
echo 'export PATH=$PATH:/home/numerik/pub/bin' >> $HOME/.bashrc

or alternatively (but do not do both) with

1
echo 'export PATH=$PATH:/home/numerik/pub/bin' >> ~/.bashrc

Limitations of the ULM Compiler

Note that currently the ULM C compiler only supports a (serious) subset of the C programming language. Here a list of unsupported features:

Testing the ULM Compiler

Like with gcc you can compile the two C source files into an executable with this one-line command:

theon$ ucc foo.c bar.c
theon$ a.out
foo bar
theon$ 

Or you can generate intermediate results (except the result of the preprocessor) as follows:

theon$ ucc -S foo.c
theon$ ucc -c foo.s
theon$ ucc -S bar.c
theon$ ucc -c bar.s
theon$ ucc  foo.o bar.o
theon$ a.out
foo bar
theon$ 

Also have a look into the generated files. For educational purposes the output format of the object files and executable is a readable text file. So for the sake of education we waste some space on the hard disk:

  • Assembly files foo.s and bar.s

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
            .equ     ZERO,   0
            .equ     FP,     1
            .equ     SP,     2
            .equ     RET,    3
    
    
            .text
    /*
     * function main
     **/
            .globl  main
    main:
            // function prologue
            movq     %RET,   (%SP)
            movq     %FP,    8(%SP)
            addq     0,      %SP,    %FP
            subq     0,      %SP,    %SP
    
            // begin of the function body
            #0 {...
            # bar();
            subq     16,     %SP,    %SP
            ldzwq    @w3(bar),       %4
            shldwq   @w2(bar),       %4
            shldwq   @w1(bar),       %4
            shldwq   @w0(bar),       %4
            jmp      %4,     %RET
            addq     16,     %SP,    %SP
            #0 ...}
            // end of the function body
    
            // function epilogue
            // 'main' returns 0 if there is no return statement
            movw     %0,     16(%FP)
    leave.L0:
            addq     0,      %FP,    %SP
            movq     8(%SP),         %FP
            movq     (%SP),  %RET
            jmp      %RET,   %0
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
            .equ     ZERO,   0
            .equ     FP,     1
            .equ     SP,     2
            .equ     RET,    3
    
    
            .data
    str.L0:
            .string         "foo bar\n"
    
            .text
    /*
     * function bar
     **/
            .globl  bar
    bar:
            // function prologue
            movq     %RET,   (%SP)
            movq     %FP,    8(%SP)
            addq     0,      %SP,    %FP
            subq     0,      %SP,    %SP
    
            // begin of the function body
            #0 {...
            # printf("foo bar\n");
            subq     32,     %SP,    %SP
            ldzwq    @w3(str.L0),    %4
            shldwq   @w2(str.L0),    %4
            shldwq   @w1(str.L0),    %4
            shldwq   @w0(str.L0),    %4
            movq     %4,     24(%SP)
            ldzwq    @w3(printf),    %4
            shldwq   @w2(printf),    %4
            shldwq   @w1(printf),    %4
            shldwq   @w0(printf),    %4
            jmp      %4,     %RET
            movswq   16(%SP),        %4
            addq     32,     %SP,    %SP
            #0 ...}
            // end of the function body
    
            // function epilogue
    leave.L1:
            addq     0,      %FP,    %SP
            movq     8(%SP),         %FP
            movq     (%SP),  %RET
            jmp      %RET,   %0
    
  • Object files foo.o and bar.o

    #TEXT 4
    0x0000000000000000: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000004: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000008: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x000000000000000c: 39 00 02 02 #       subq    0,      %SP,    %SP
    0x0000000000000010: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x0000000000000014: 56 00 00 04 #       ldzwq   @w3(bar),       %4
    0x0000000000000018: 5d 00 00 04 #       shldwq  @w2(bar),       %4
    0x000000000000001c: 5d 00 00 04 #       shldwq  @w1(bar),       %4
    0x0000000000000020: 5d 00 00 04 #       shldwq  @w0(bar),       %4
    0x0000000000000024: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000028: 38 10 02 02 #       addq    16,     %SP,    %SP
    0x000000000000002c: 2a 00 10 01 #       movw    %0,     16(%FP)
    0x0000000000000030: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000034: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000038: 18 00 02 03 #       movq    0(%SP),         %RET
    0x000000000000003c: 40 03 00 00 #       jmp     %RET,   %0
    #SYMTAB
    t leave.L0                    0x0000000000000030
    U bar                         0x0000000000000000
    T main                        0x0000000000000000
    a RET                         0x0000000000000003
    a SP                          0x0000000000000002
    a FP                          0x0000000000000001
    a ZERO                        0x0000000000000000
    #FIXUPS
    text 0x0000000000000020 1 2 w0 bar
    text 0x000000000000001c 1 2 w1 bar
    text 0x0000000000000018 1 2 w2 bar
    text 0x0000000000000014 1 2 w3 bar
    
    #TEXT 4
    0x0000000000000000: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000004: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000008: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x000000000000000c: 39 00 02 02 #       subq    0,      %SP,    %SP
    0x0000000000000010: 39 20 02 02 #       subq    32,     %SP,    %SP
    0x0000000000000014: 56 00 00 04 #       ldzwq   @w3(str.L0),    %4
    0x0000000000000018: 5d 00 00 04 #       shldwq  @w2(str.L0),    %4
    0x000000000000001c: 5d 00 00 04 #       shldwq  @w1(str.L0),    %4
    0x0000000000000020: 5d 00 54 04 #       shldwq  @w0(str.L0),    %4
    0x0000000000000024: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000028: 56 00 00 04 #       ldzwq   @w3(printf),    %4
    0x000000000000002c: 5d 00 00 04 #       shldwq  @w2(printf),    %4
    0x0000000000000030: 5d 00 00 04 #       shldwq  @w1(printf),    %4
    0x0000000000000034: 5d 00 00 04 #       shldwq  @w0(printf),    %4
    0x0000000000000038: 40 04 03 00 #       jmp     %4,     %RET
    0x000000000000003c: 1e 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000040: 38 20 02 02 #       addq    32,     %SP,    %SP
    0x0000000000000044: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000048: 18 08 02 01 #       movq    8(%SP),         %FP
    0x000000000000004c: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000050: 40 03 00 00 #       jmp     %RET,   %0
    #DATA 1
    0x0000000000000054: 66 6f 6f 20 62 61 72 0a 00 #        .string         "foo bar\n"
    #SYMTAB
    t leave.L1                    0x0000000000000044
    U printf                      0x0000000000000000
    T bar                         0x0000000000000000
    d str.L0                      0x0000000000000000
    a RET                         0x0000000000000003
    a SP                          0x0000000000000002
    a FP                          0x0000000000000001
    a ZERO                        0x0000000000000000
    #FIXUPS
    text 0x0000000000000034 1 2 w0 printf
    text 0x0000000000000030 1 2 w1 printf
    text 0x000000000000002c 1 2 w2 printf
    text 0x0000000000000028 1 2 w3 printf
    text 0x0000000000000020 1 2 w0 [data]
    text 0x000000000000001c 1 2 w1 [data]
    text 0x0000000000000018 1 2 w2 [data]
    text 0x0000000000000014 1 2 w3 [data]
    
  • The executable a.out

    #!/usr/bin/env ulm
    #TEXT 4
    # from: generated by ulmld
    0x0000000000000000: 56 00 00 01 #       ldzwq @w3(_start), %1
    0x0000000000000004: 5D 00 00 01 #       shldwq @w2(_start), %1
    0x0000000000000008: 5D 00 00 01 #       shldwq @w1(_start), %1
    0x000000000000000C: 5D 00 A8 01 #       shldwq @w0(_start), %1
    0x0000000000000010: 40 01 02 00 #       jmp %1, %2
    # from: foo.o
    #main:
    0x0000000000000014: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000018: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x000000000000001C: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000020: 39 00 02 02 #       subq    0,      %SP,    %SP
    0x0000000000000024: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x0000000000000028: 56 00 00 04 #       ldzwq   @w3(bar),       %4
    0x000000000000002C: 5D 00 00 04 #       shldwq  @w2(bar),       %4
    0x0000000000000030: 5D 00 00 04 #       shldwq  @w1(bar),       %4
    0x0000000000000034: 5D 00 54 04 #       shldwq  @w0(bar),       %4
    0x0000000000000038: 40 04 03 00 #       jmp     %4,     %RET
    0x000000000000003C: 38 10 02 02 #       addq    16,     %SP,    %SP
    0x0000000000000040: 2A 00 10 01 #       movw    %0,     16(%FP)
    #leave.L0:
    0x0000000000000044: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000048: 18 08 02 01 #       movq    8(%SP),         %FP
    0x000000000000004C: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000050: 40 03 00 00 #       jmp     %RET,   %0
    # from: bar.o
    #bar:
    0x0000000000000054: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000058: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x000000000000005C: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000060: 39 00 02 02 #       subq    0,      %SP,    %SP
    0x0000000000000064: 39 20 02 02 #       subq    32,     %SP,    %SP
    0x0000000000000068: 56 00 00 04 #       ldzwq   @w3(str.L0),    %4
    0x000000000000006C: 5D 00 00 04 #       shldwq  @w2(str.L0),    %4
    0x0000000000000070: 5D 00 00 04 #       shldwq  @w1(str.L0),    %4
    0x0000000000000074: 5D 0E 78 04 #       shldwq  @w0(str.L0),    %4
    0x0000000000000078: 28 04 18 02 #       movq    %4,     24(%SP)
    0x000000000000007C: 56 00 00 04 #       ldzwq   @w3(printf),    %4
    0x0000000000000080: 5D 00 00 04 #       shldwq  @w2(printf),    %4
    0x0000000000000084: 5D 00 00 04 #       shldwq  @w1(printf),    %4
    0x0000000000000088: 5D 0D DC 04 #       shldwq  @w0(printf),    %4
    0x000000000000008C: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000090: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000094: 38 20 02 02 #       addq    32,     %SP,    %SP
    #leave.L1:
    0x0000000000000098: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x000000000000009C: 18 08 02 01 #       movq    8(%SP),         %FP
    0x00000000000000A0: 18 00 02 03 #       movq    0(%SP),         %RET
    0x00000000000000A4: 40 03 00 00 #       jmp     %RET,   %0
    # from: /home/numerik/pub/ulmcc/lib/libulm.a(crt0.o)
    #_start:
    0x00000000000000A8: 56 00 00 02 #       ldzwq   0,      %SP
    0x00000000000000AC: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x00000000000000B0: 56 00 14 04 #       ldzwq   main,   %4
    0x00000000000000B4: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000000B8: 1E 10 02 04 #       movswq  rval(%SP),      %4
    0x00000000000000BC: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x00000000000000C0: 01 04 00 00 #       halt    %4
    # from: /home/numerik/pub/ulmcc/lib/libulm.a(stdio.o)
    #print_uint64:
    0x00000000000000C4: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x00000000000000C8: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x00000000000000CC: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x00000000000000D0: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x00000000000000D4: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000000D8: 56 00 0A 05 #       ldzwq   10,     %5
    0x00000000000000DC: 56 00 00 07 #       ldzwq   0,      %7
    0x00000000000000E0: 38 00 04 06 #       addq    0,      %4,     %6
    0x00000000000000E4: 33 05 06 08 #       divq    %5,     %6,     %8
    0x00000000000000E8: 2A 0A FE 01 #       movw    %10,    -2(%FP)
    0x00000000000000EC: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000000F0: 56 00 0A 05 #       ldzwq   10,     %5
    0x00000000000000F4: 56 00 00 07 #       ldzwq   0,      %7
    0x00000000000000F8: 38 00 04 06 #       addq    0,      %4,     %6
    0x00000000000000FC: 33 05 06 08 #       divq    %5,     %6,     %8
    0x0000000000000100: 28 08 20 01 #       movq    %8,     32(%FP)
    0x0000000000000104: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000108: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000010C: 42 00 00 19 #       jz      else.L4
    0x0000000000000110: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000114: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000118: 42 00 00 04 #       jz      .L5
    0x000000000000011C: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000120: 39 01 04 05 #       subq    1,      %4,     %5
    0x0000000000000124: 41 00 00 02 #       jmp     .L6
    #.L5:
    0x0000000000000128: 56 00 00 05 #       ldzwq   0,      %5
    #.L6:
    0x000000000000012C: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000130: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000134: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x0000000000000138: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x000000000000013C: 1B 11 01 04 #       movzbq  17(%FP),        %4
    0x0000000000000140: 2B 04 11 02 #       movb    %4,     17(%SP)
    0x0000000000000144: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000148: 28 04 18 02 #       movq    %4,     24(%SP)
    0x000000000000014C: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000150: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000154: 56 00 00 04 #       ldzwq   @w3(print_uint64),      %4
    0x0000000000000158: 5D 00 00 04 #       shldwq  @w2(print_uint64),      %4
    0x000000000000015C: 5D 00 00 04 #       shldwq  @w1(print_uint64),      %4
    0x0000000000000160: 5D 00 C4 04 #       shldwq  @w0(print_uint64),      %4
    0x0000000000000164: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000168: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x000000000000016C: 41 00 00 27 #       jmp     endif.L3
    #else.L4:
    0x0000000000000170: 56 00 01 04 #       ldzwq   1,      %4
    0x0000000000000174: 28 04 F0 01 #       movq    %4,     -16(%FP)
    #check.for.cond.L7:
    0x0000000000000178: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x000000000000017C: 18 18 01 05 #       movq    24(%FP),        %5
    0x0000000000000180: 31 05 04 00 #       subq    %5,     %4,     %0
    0x0000000000000184: 49 00 00 14 #       jae     for.end.L9
    0x0000000000000188: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x000000000000018C: 1B 11 01 04 #       movzbq  17(%FP),        %4
    0x0000000000000190: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000194: 42 00 00 03 #       jz      .L10
    0x0000000000000198: 56 00 30 04 #       ldzwq   48,     %4
    0x000000000000019C: 41 00 00 02 #       jmp     .L11
    #.L10:
    0x00000000000001A0: 56 00 20 04 #       ldzwq   32,     %4
    #.L11:
    0x00000000000001A4: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x00000000000001A8: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000001AC: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000001B0: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000001B4: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000001B8: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000001BC: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000001C0: 38 18 02 02 #       addq    24,     %SP,    %SP
    #for.incr.L8:
    0x00000000000001C4: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x00000000000001C8: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000001CC: 28 05 F0 01 #       movq    %5,     -16(%FP)
    0x00000000000001D0: 41 FF FF EA #       jmp     check.for.cond.L7
    #for.end.L9:
    0x00000000000001D4: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x00000000000001D8: 31 00 04 00 #       subq    %0,     %4,     %0
    0x00000000000001DC: 42 00 00 0B #       jz      endif.L12
    0x00000000000001E0: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x00000000000001E4: 56 00 2D 04 #       ldzwq   45,     %4
    0x00000000000001E8: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x00000000000001EC: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000001F0: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000001F4: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000001F8: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000001FC: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000200: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000204: 38 18 02 02 #       addq    24,     %SP,    %SP
    #endif.L12:
    #endif.L3:
    0x0000000000000208: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x000000000000020C: 1E FE 01 04 #       movswq  -2(%FP),        %4
    0x0000000000000210: 38 30 04 05 #       addq    48,     %4,     %5
    0x0000000000000214: 2B 05 12 02 #       movb    %5,     18(%SP)
    0x0000000000000218: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x000000000000021C: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000220: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x0000000000000224: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000228: 40 04 03 00 #       jmp     %4,     %RET
    0x000000000000022C: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000230: 38 18 02 02 #       addq    24,     %SP,    %SP
    #leave.L2:
    0x0000000000000234: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000238: 18 08 02 01 #       movq    8(%SP),         %FP
    0x000000000000023C: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000240: 40 03 00 00 #       jmp     %RET,   %0
    #print_int64_hex:
    0x0000000000000244: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000248: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x000000000000024C: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000250: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x0000000000000254: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000258: 56 00 10 05 #       ldzwq   16,     %5
    0x000000000000025C: 56 00 00 07 #       ldzwq   0,      %7
    0x0000000000000260: 38 00 04 06 #       addq    0,      %4,     %6
    0x0000000000000264: 33 05 06 08 #       divq    %5,     %6,     %8
    0x0000000000000268: 2A 0A FE 01 #       movw    %10,    -2(%FP)
    0x000000000000026C: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000270: 56 00 10 05 #       ldzwq   16,     %5
    0x0000000000000274: 56 00 00 07 #       ldzwq   0,      %7
    0x0000000000000278: 38 00 04 06 #       addq    0,      %4,     %6
    0x000000000000027C: 33 05 06 08 #       divq    %5,     %6,     %8
    0x0000000000000280: 28 08 20 01 #       movq    %8,     32(%FP)
    0x0000000000000284: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000288: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000028C: 42 00 00 17 #       jz      else.L15
    0x0000000000000290: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000294: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000298: 42 00 00 04 #       jz      .L16
    0x000000000000029C: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000002A0: 39 01 04 05 #       subq    1,      %4,     %5
    0x00000000000002A4: 41 00 00 02 #       jmp     .L17
    #.L16:
    0x00000000000002A8: 56 00 00 05 #       ldzwq   0,      %5
    #.L17:
    0x00000000000002AC: 28 05 18 01 #       movq    %5,     24(%FP)
    0x00000000000002B0: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x00000000000002B4: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x00000000000002B8: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x00000000000002BC: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000002C0: 28 04 18 02 #       movq    %4,     24(%SP)
    0x00000000000002C4: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000002C8: 28 04 20 02 #       movq    %4,     32(%SP)
    0x00000000000002CC: 56 00 00 04 #       ldzwq   @w3(print_int64_hex),   %4
    0x00000000000002D0: 5D 00 00 04 #       shldwq  @w2(print_int64_hex),   %4
    0x00000000000002D4: 5D 00 00 04 #       shldwq  @w1(print_int64_hex),   %4
    0x00000000000002D8: 5D 02 44 04 #       shldwq  @w0(print_int64_hex),   %4
    0x00000000000002DC: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000002E0: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x00000000000002E4: 41 00 00 1A #       jmp     endif.L14
    #else.L15:
    0x00000000000002E8: 56 00 01 04 #       ldzwq   1,      %4
    0x00000000000002EC: 28 04 F0 01 #       movq    %4,     -16(%FP)
    #check.for.cond.L18:
    0x00000000000002F0: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x00000000000002F4: 18 18 01 05 #       movq    24(%FP),        %5
    0x00000000000002F8: 31 05 04 00 #       subq    %5,     %4,     %0
    0x00000000000002FC: 49 00 00 14 #       jae     for.end.L20
    0x0000000000000300: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000304: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x0000000000000308: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000030C: 42 00 00 03 #       jz      .L21
    0x0000000000000310: 56 00 30 04 #       ldzwq   48,     %4
    0x0000000000000314: 41 00 00 02 #       jmp     .L22
    #.L21:
    0x0000000000000318: 56 00 20 04 #       ldzwq   32,     %4
    #.L22:
    0x000000000000031C: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x0000000000000320: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x0000000000000324: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000328: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x000000000000032C: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000330: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000334: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000338: 38 18 02 02 #       addq    24,     %SP,    %SP
    #for.incr.L19:
    0x000000000000033C: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x0000000000000340: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000344: 28 05 F0 01 #       movq    %5,     -16(%FP)
    0x0000000000000348: 41 FF FF EA #       jmp     check.for.cond.L18
    #for.end.L20:
    #endif.L14:
    0x000000000000034C: 1E FE 01 04 #       movswq  -2(%FP),        %4
    0x0000000000000350: 39 0A 04 00 #       subq    10,     %4,     %0
    0x0000000000000354: 45 00 00 0D #       jge     else.L24
    0x0000000000000358: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x000000000000035C: 1E FE 01 04 #       movswq  -2(%FP),        %4
    0x0000000000000360: 38 30 04 05 #       addq    48,     %4,     %5
    0x0000000000000364: 2B 05 12 02 #       movb    %5,     18(%SP)
    0x0000000000000368: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x000000000000036C: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000370: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x0000000000000374: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000378: 40 04 03 00 #       jmp     %4,     %RET
    0x000000000000037C: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000380: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x0000000000000384: 41 00 00 0D #       jmp     endif.L23
    #else.L24:
    0x0000000000000388: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x000000000000038C: 1E FE 01 04 #       movswq  -2(%FP),        %4
    0x0000000000000390: 39 0A 04 05 #       subq    10,     %4,     %5
    0x0000000000000394: 38 61 05 04 #       addq    97,     %5,     %4
    0x0000000000000398: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x000000000000039C: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000003A0: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000003A4: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000003A8: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000003AC: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000003B0: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000003B4: 38 18 02 02 #       addq    24,     %SP,    %SP
    #leave.L13:
    #endif.L23:
    0x00000000000003B8: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x00000000000003BC: 18 08 02 01 #       movq    8(%SP),         %FP
    0x00000000000003C0: 18 00 02 03 #       movq    0(%SP),         %RET
    0x00000000000003C4: 40 03 00 00 #       jmp     %RET,   %0
    #print_uint64_oct:
    0x00000000000003C8: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x00000000000003CC: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x00000000000003D0: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x00000000000003D4: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x00000000000003D8: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000003DC: 56 00 08 05 #       ldzwq   8,      %5
    0x00000000000003E0: 56 00 00 07 #       ldzwq   0,      %7
    0x00000000000003E4: 38 00 04 06 #       addq    0,      %4,     %6
    0x00000000000003E8: 33 05 06 08 #       divq    %5,     %6,     %8
    0x00000000000003EC: 2A 0A FE 01 #       movw    %10,    -2(%FP)
    0x00000000000003F0: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000003F4: 56 00 08 05 #       ldzwq   8,      %5
    0x00000000000003F8: 56 00 00 07 #       ldzwq   0,      %7
    0x00000000000003FC: 38 00 04 06 #       addq    0,      %4,     %6
    0x0000000000000400: 33 05 06 08 #       divq    %5,     %6,     %8
    0x0000000000000404: 28 08 20 01 #       movq    %8,     32(%FP)
    0x0000000000000408: 18 20 01 04 #       movq    32(%FP),        %4
    0x000000000000040C: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000410: 42 00 00 17 #       jz      else.L27
    0x0000000000000414: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000418: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000041C: 42 00 00 04 #       jz      .L28
    0x0000000000000420: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000424: 39 01 04 05 #       subq    1,      %4,     %5
    0x0000000000000428: 41 00 00 02 #       jmp     .L29
    #.L28:
    0x000000000000042C: 56 00 00 05 #       ldzwq   0,      %5
    #.L29:
    0x0000000000000430: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000434: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000438: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x000000000000043C: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000440: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000444: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000448: 18 20 01 04 #       movq    32(%FP),        %4
    0x000000000000044C: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000450: 56 00 00 04 #       ldzwq   @w3(print_uint64_oct),  %4
    0x0000000000000454: 5D 00 00 04 #       shldwq  @w2(print_uint64_oct),  %4
    0x0000000000000458: 5D 00 00 04 #       shldwq  @w1(print_uint64_oct),  %4
    0x000000000000045C: 5D 03 C8 04 #       shldwq  @w0(print_uint64_oct),  %4
    0x0000000000000460: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000464: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000468: 41 00 00 1A #       jmp     endif.L26
    #else.L27:
    0x000000000000046C: 56 00 01 04 #       ldzwq   1,      %4
    0x0000000000000470: 28 04 F0 01 #       movq    %4,     -16(%FP)
    #check.for.cond.L30:
    0x0000000000000474: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x0000000000000478: 18 18 01 05 #       movq    24(%FP),        %5
    0x000000000000047C: 31 05 04 00 #       subq    %5,     %4,     %0
    0x0000000000000480: 49 00 00 14 #       jae     for.end.L32
    0x0000000000000484: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000488: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x000000000000048C: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000490: 42 00 00 03 #       jz      .L33
    0x0000000000000494: 56 00 30 04 #       ldzwq   48,     %4
    0x0000000000000498: 41 00 00 02 #       jmp     .L34
    #.L33:
    0x000000000000049C: 56 00 20 04 #       ldzwq   32,     %4
    #.L34:
    0x00000000000004A0: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x00000000000004A4: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000004A8: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000004AC: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000004B0: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000004B4: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000004B8: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000004BC: 38 18 02 02 #       addq    24,     %SP,    %SP
    #for.incr.L31:
    0x00000000000004C0: 18 F0 01 04 #       movq    -16(%FP),       %4
    0x00000000000004C4: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000004C8: 28 05 F0 01 #       movq    %5,     -16(%FP)
    0x00000000000004CC: 41 FF FF EA #       jmp     check.for.cond.L30
    #for.end.L32:
    #endif.L26:
    0x00000000000004D0: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x00000000000004D4: 1E FE 01 04 #       movswq  -2(%FP),        %4
    0x00000000000004D8: 38 30 04 05 #       addq    48,     %4,     %5
    0x00000000000004DC: 2B 05 12 02 #       movb    %5,     18(%SP)
    0x00000000000004E0: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000004E4: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000004E8: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000004EC: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000004F0: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000004F4: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000004F8: 38 18 02 02 #       addq    24,     %SP,    %SP
    #leave.L25:
    0x00000000000004FC: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000500: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000504: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000508: 40 03 00 00 #       jmp     %RET,   %0
    #print_int64:
    0x000000000000050C: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000510: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000514: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000518: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x000000000000051C: 56 00 00 04 #       ldzwq   0,      %4
    0x0000000000000520: 2B 04 FF 01 #       movb    %4,     -1(%FP)
    0x0000000000000524: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000528: 39 00 04 00 #       subq    0,      %4,     %0
    0x000000000000052C: 45 00 00 0C #       jge     endif.L36
    0x0000000000000530: 56 00 01 04 #       ldzwq   1,      %4
    0x0000000000000534: 2B 04 FF 01 #       movb    %4,     -1(%FP)
    0x0000000000000538: 18 20 01 04 #       movq    32(%FP),        %4
    0x000000000000053C: 31 04 00 04 #       subq    %4,     %0,     %4
    0x0000000000000540: 28 04 20 01 #       movq    %4,     32(%FP)
    0x0000000000000544: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000548: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000054C: 42 00 00 04 #       jz      endif.L37
    0x0000000000000550: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000554: 39 01 04 05 #       subq    1,      %4,     %5
    0x0000000000000558: 28 05 18 01 #       movq    %5,     24(%FP)
    #endif.L37:
    #endif.L36:
    0x000000000000055C: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000560: 1B FF 01 04 #       movzbq  -1(%FP),        %4
    0x0000000000000564: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000568: 1B 10 01 04 #       movzbq  16(%FP),        %4
    0x000000000000056C: 2B 04 11 02 #       movb    %4,     17(%SP)
    0x0000000000000570: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000574: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000578: 18 20 01 04 #       movq    32(%FP),        %4
    0x000000000000057C: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000580: 56 00 00 04 #       ldzwq   @w3(print_uint64),      %4
    0x0000000000000584: 5D 00 00 04 #       shldwq  @w2(print_uint64),      %4
    0x0000000000000588: 5D 00 00 04 #       shldwq  @w1(print_uint64),      %4
    0x000000000000058C: 5D 00 C4 04 #       shldwq  @w0(print_uint64),      %4
    0x0000000000000590: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000594: 38 28 02 02 #       addq    40,     %SP,    %SP
    #leave.L35:
    0x0000000000000598: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x000000000000059C: 18 08 02 01 #       movq    8(%SP),         %FP
    0x00000000000005A0: 18 00 02 03 #       movq    0(%SP),         %RET
    0x00000000000005A4: 40 03 00 00 #       jmp     %RET,   %0
    #puts_:
    0x00000000000005A8: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x00000000000005AC: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x00000000000005B0: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x00000000000005B4: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x00000000000005B8: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000005BC: 31 00 04 00 #       subq    %0,     %4,     %0
    0x00000000000005C0: 43 00 00 10 #       jnz     endif.L39
    0x00000000000005C4: 39 20 02 02 #       subq    32,     %SP,    %SP
    0x00000000000005C8: 56 00 00 04 #       ldzwq   @w3(str.L0),    %4
    0x00000000000005CC: 5D 00 00 04 #       shldwq  @w2(str.L0),    %4
    0x00000000000005D0: 5D 00 00 04 #       shldwq  @w1(str.L0),    %4
    0x00000000000005D4: 5D 0E 81 04 #       shldwq  @w0(str.L0),    %4
    0x00000000000005D8: 28 04 18 02 #       movq    %4,     24(%SP)
    0x00000000000005DC: 56 00 00 04 #       ldzwq   @w3(puts_),     %4
    0x00000000000005E0: 5D 00 00 04 #       shldwq  @w2(puts_),     %4
    0x00000000000005E4: 5D 00 00 04 #       shldwq  @w1(puts_),     %4
    0x00000000000005E8: 5D 05 A8 04 #       shldwq  @w0(puts_),     %4
    0x00000000000005EC: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000005F0: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000005F4: 38 20 02 02 #       addq    32,     %SP,    %SP
    0x00000000000005F8: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x00000000000005FC: 41 00 00 17 #       jmp     leave.L38
    #check.while.cond.L40:
    #endif.L39:
    0x0000000000000600: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000604: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000608: 31 00 04 00 #       subq    %0,     %4,     %0
    0x000000000000060C: 42 00 00 10 #       jz      while.end.L41
    0x0000000000000610: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000614: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000618: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000061C: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x0000000000000620: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x0000000000000624: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000628: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x000000000000062C: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000630: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000634: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000638: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x000000000000063C: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000640: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000644: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000648: 41 FF FF EE #       jmp     check.while.cond.L40
    #while.end.L41:
    0x000000000000064C: 56 00 01 04 #       ldzwq   1,      %4
    0x0000000000000650: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x0000000000000654: 41 00 00 01 #       jmp     leave.L38
    #leave.L38:
    0x0000000000000658: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x000000000000065C: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000660: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000664: 40 03 00 00 #       jmp     %RET,   %0
    #puts:
    0x0000000000000668: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x000000000000066C: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000670: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000674: 39 10 02 02 #       subq    16,     %SP,    %SP
    0x0000000000000678: 39 20 02 02 #       subq    32,     %SP,    %SP
    0x000000000000067C: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000680: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000684: 56 00 00 04 #       ldzwq   @w3(puts_),     %4
    0x0000000000000688: 5D 00 00 04 #       shldwq  @w2(puts_),     %4
    0x000000000000068C: 5D 00 00 04 #       shldwq  @w1(puts_),     %4
    0x0000000000000690: 5D 05 A8 04 #       shldwq  @w0(puts_),     %4
    0x0000000000000694: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000698: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x000000000000069C: 38 20 02 02 #       addq    32,     %SP,    %SP
    0x00000000000006A0: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x00000000000006A4: 56 00 0A 04 #       ldzwq   10,     %4
    0x00000000000006A8: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x00000000000006AC: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000006B0: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000006B4: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000006B8: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000006BC: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000006C0: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000006C4: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x00000000000006C8: 56 00 01 04 #       ldzwq   1,      %4
    0x00000000000006CC: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x00000000000006D0: 41 00 00 01 #       jmp     leave.L42
    #leave.L42:
    0x00000000000006D4: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x00000000000006D8: 18 08 02 01 #       movq    8(%SP),         %FP
    0x00000000000006DC: 18 00 02 03 #       movq    0(%SP),         %RET
    0x00000000000006E0: 40 03 00 00 #       jmp     %RET,   %0
    #vprintf:
    0x00000000000006E4: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x00000000000006E8: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x00000000000006EC: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x00000000000006F0: 39 38 02 02 #       subq    56,     %SP,    %SP
    0x00000000000006F4: 56 00 00 04 #       ldzwq   0,      %4
    0x00000000000006F8: 28 04 F8 01 #       movq    %4,     -8(%FP)
    #check.for.cond.L44:
    0x00000000000006FC: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000700: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000704: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000708: 42 00 01 AE #       jz      for.end.L46
    0x000000000000070C: 56 00 00 04 #       ldzwq   0,      %4
    0x0000000000000710: 2B 04 F7 01 #       movb    %4,     -9(%FP)
    0x0000000000000714: 56 00 00 04 #       ldzwq   0,      %4
    0x0000000000000718: 28 04 E8 01 #       movq    %4,     -24(%FP)
    0x000000000000071C: 56 00 00 04 #       ldzwq   0,      %4
    0x0000000000000720: 2B 04 E7 01 #       movb    %4,     -25(%FP)
    0x0000000000000724: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000728: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000072C: 39 25 04 00 #       subq    37,     %4,     %0
    0x0000000000000730: 42 00 00 0D #       jz      else.L48
    0x0000000000000734: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000738: 18 18 01 04 #       movq    24(%FP),        %4
    0x000000000000073C: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000740: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x0000000000000744: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x0000000000000748: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x000000000000074C: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x0000000000000750: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000754: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000758: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x000000000000075C: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x0000000000000760: 41 00 01 94 #       jmp     endif.L47
    #else.L48:
    0x0000000000000764: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000768: 38 01 04 05 #       addq    1,      %4,     %5
    0x000000000000076C: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000770: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000774: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000778: 39 25 04 00 #       subq    37,     %4,     %0
    0x000000000000077C: 43 00 00 0D #       jnz     else.L50
    0x0000000000000780: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000784: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000788: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000078C: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x0000000000000790: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x0000000000000794: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000798: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x000000000000079C: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000007A0: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000007A4: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000007A8: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x00000000000007AC: 41 00 01 81 #       jmp     endif.L49
    #else.L50:
    0x00000000000007B0: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000007B4: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x00000000000007B8: 39 2B 04 00 #       subq    43,     %4,     %0
    0x00000000000007BC: 43 00 00 06 #       jnz     endif.L51
    0x00000000000007C0: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000007C4: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000007C8: 28 05 18 01 #       movq    %5,     24(%FP)
    0x00000000000007CC: 56 00 01 04 #       ldzwq   1,      %4
    0x00000000000007D0: 2B 04 E7 01 #       movb    %4,     -25(%FP)
    #endif.L51:
    0x00000000000007D4: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000007D8: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x00000000000007DC: 39 30 04 00 #       subq    48,     %4,     %0
    0x00000000000007E0: 43 00 00 06 #       jnz     endif.L52
    0x00000000000007E4: 56 00 01 04 #       ldzwq   1,      %4
    0x00000000000007E8: 2B 04 F7 01 #       movb    %4,     -9(%FP)
    0x00000000000007EC: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000007F0: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000007F4: 28 05 18 01 #       movq    %5,     24(%FP)
    #check.while.cond.L53:
    #endif.L52:
    0x00000000000007F8: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000007FC: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000800: 39 30 04 00 #       subq    48,     %4,     %0
    0x0000000000000804: 48 00 00 10 #       jb      while.end.L54
    0x0000000000000808: 18 18 01 04 #       movq    24(%FP),        %4
    0x000000000000080C: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000810: 39 39 04 00 #       subq    57,     %4,     %0
    0x0000000000000814: 4B 00 00 0C #       ja      while.end.L54
    0x0000000000000818: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x000000000000081C: 3C 0A 04 05 #       imulq   10,     %4,     %5
    0x0000000000000820: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000824: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000828: 30 04 05 06 #       addq    %4,     %5,     %6
    0x000000000000082C: 39 30 06 04 #       subq    48,     %6,     %4
    0x0000000000000830: 28 04 E8 01 #       movq    %4,     -24(%FP)
    0x0000000000000834: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000838: 38 01 04 05 #       addq    1,      %4,     %5
    0x000000000000083C: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000840: 41 FF FF EE #       jmp     check.while.cond.L53
    #while.end.L54:
    0x0000000000000844: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000848: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000084C: 39 73 04 00 #       subq    115,    %4,     %0
    0x0000000000000850: 43 00 00 10 #       jnz     else.L56
    0x0000000000000854: 39 20 02 02 #       subq    32,     %SP,    %SP
    0x0000000000000858: 18 20 01 04 #       movq    32(%FP),        %4
    0x000000000000085C: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x0000000000000860: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000864: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000868: 18 00 06 06 #       movq    0(%6),  %6
    0x000000000000086C: 28 06 18 02 #       movq    %6,     24(%SP)
    0x0000000000000870: 56 00 00 04 #       ldzwq   @w3(puts_),     %4
    0x0000000000000874: 5D 00 00 04 #       shldwq  @w2(puts_),     %4
    0x0000000000000878: 5D 00 00 04 #       shldwq  @w1(puts_),     %4
    0x000000000000087C: 5D 05 A8 04 #       shldwq  @w0(puts_),     %4
    0x0000000000000880: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000884: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000888: 38 20 02 02 #       addq    32,     %SP,    %SP
    0x000000000000088C: 41 00 01 46 #       jmp     endif.L55
    #else.L56:
    0x0000000000000890: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000894: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000898: 39 63 04 00 #       subq    99,     %4,     %0
    0x000000000000089C: 43 00 00 10 #       jnz     else.L58
    0x00000000000008A0: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x00000000000008A4: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000008A8: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x00000000000008AC: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x00000000000008B0: 30 05 04 06 #       addq    %5,     %4,     %6
    0x00000000000008B4: 18 00 06 06 #       movq    0(%6),  %6
    0x00000000000008B8: 2B 06 12 02 #       movb    %6,     18(%SP)
    0x00000000000008BC: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x00000000000008C0: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x00000000000008C4: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x00000000000008C8: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x00000000000008CC: 40 04 03 00 #       jmp     %4,     %RET
    0x00000000000008D0: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x00000000000008D4: 38 18 02 02 #       addq    24,     %SP,    %SP
    0x00000000000008D8: 41 00 01 33 #       jmp     endif.L57
    #else.L58:
    0x00000000000008DC: 56 00 02 04 #       ldzwq   2,      %4
    0x00000000000008E0: 28 04 D8 01 #       movq    %4,     -40(%FP)
    0x00000000000008E4: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000008E8: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x00000000000008EC: 39 6C 04 00 #       subq    108,    %4,     %0
    0x00000000000008F0: 43 00 00 11 #       jnz     else.L60
    0x00000000000008F4: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000008F8: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000008FC: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000900: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000904: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000908: 39 6C 04 00 #       subq    108,    %4,     %0
    0x000000000000090C: 43 00 00 07 #       jnz     else.L62
    0x0000000000000910: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000914: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000918: 28 05 18 01 #       movq    %5,     24(%FP)
    0x000000000000091C: 56 00 04 04 #       ldzwq   4,      %4
    0x0000000000000920: 28 04 D8 01 #       movq    %4,     -40(%FP)
    0x0000000000000924: 41 00 00 03 #       jmp     endif.L61
    #else.L62:
    0x0000000000000928: 56 00 08 04 #       ldzwq   8,      %4
    0x000000000000092C: 28 04 D8 01 #       movq    %4,     -40(%FP)
    #endif.L61:
    0x0000000000000930: 41 00 00 22 #       jmp     endif.L59
    #else.L60:
    0x0000000000000934: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000938: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000093C: 39 7A 04 00 #       subq    122,    %4,     %0
    0x0000000000000940: 42 00 00 05 #       jz      .L65
    0x0000000000000944: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000948: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x000000000000094C: 39 74 04 00 #       subq    116,    %4,     %0
    0x0000000000000950: 43 00 00 07 #       jnz     else.L64
    #.L65:
    0x0000000000000954: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000958: 38 01 04 05 #       addq    1,      %4,     %5
    0x000000000000095C: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000960: 56 00 08 04 #       ldzwq   8,      %4
    0x0000000000000964: 28 04 D8 01 #       movq    %4,     -40(%FP)
    0x0000000000000968: 41 00 00 14 #       jmp     endif.L63
    #else.L64:
    0x000000000000096C: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000970: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000974: 39 68 04 00 #       subq    104,    %4,     %0
    0x0000000000000978: 43 00 00 10 #       jnz     endif.L66
    0x000000000000097C: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000980: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000984: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000988: 18 18 01 04 #       movq    24(%FP),        %4
    0x000000000000098C: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000990: 39 68 04 00 #       subq    104,    %4,     %0
    0x0000000000000994: 43 00 00 07 #       jnz     else.L68
    0x0000000000000998: 18 18 01 04 #       movq    24(%FP),        %4
    0x000000000000099C: 38 01 04 05 #       addq    1,      %4,     %5
    0x00000000000009A0: 28 05 18 01 #       movq    %5,     24(%FP)
    0x00000000000009A4: 56 00 01 04 #       ldzwq   1,      %4
    0x00000000000009A8: 28 04 D8 01 #       movq    %4,     -40(%FP)
    0x00000000000009AC: 41 00 00 03 #       jmp     endif.L67
    #else.L68:
    0x00000000000009B0: 56 00 02 04 #       ldzwq   2,      %4
    0x00000000000009B4: 28 04 D8 01 #       movq    %4,     -40(%FP)
    #endif.L67:
    #endif.L66:
    #endif.L63:
    #endif.L59:
    0x00000000000009B8: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000009BC: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x00000000000009C0: 39 64 04 00 #       subq    100,    %4,     %0
    0x00000000000009C4: 42 00 00 05 #       jz      .L71
    0x00000000000009C8: 18 18 01 04 #       movq    24(%FP),        %4
    0x00000000000009CC: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x00000000000009D0: 39 69 04 00 #       subq    105,    %4,     %0
    0x00000000000009D4: 43 00 00 3C #       jnz     else.L70
    #.L71:
    0x00000000000009D8: 18 20 01 04 #       movq    32(%FP),        %4
    0x00000000000009DC: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x00000000000009E0: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x00000000000009E4: 30 05 04 06 #       addq    %5,     %4,     %6
    0x00000000000009E8: 38 08 06 04 #       addq    8,      %6,     %4
    0x00000000000009EC: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x00000000000009F0: 31 05 04 06 #       subq    %5,     %4,     %6
    0x00000000000009F4: 28 06 D0 01 #       movq    %6,     -48(%FP)
    0x00000000000009F8: 18 D8 01 04 #       movq    -40(%FP),       %4
    0x00000000000009FC: 39 01 04 00 #       subq    1,      %4,     %0
    0x0000000000000A00: 43 00 00 04 #       jnz     .L72
    0x0000000000000A04: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000A08: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000A0C: 41 00 00 0F #       jmp     .L73
    #.L72:
    0x0000000000000A10: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000A14: 39 02 05 00 #       subq    2,      %5,     %0
    0x0000000000000A18: 43 00 00 04 #       jnz     .L74
    0x0000000000000A1C: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000A20: 1E 00 04 04 #       movswq  0(%4),  %4
    0x0000000000000A24: 41 00 00 09 #       jmp     .L75
    #.L74:
    0x0000000000000A28: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000A2C: 39 04 05 00 #       subq    4,      %5,     %0
    0x0000000000000A30: 43 00 00 04 #       jnz     .L76
    0x0000000000000A34: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000A38: 1D 00 04 04 #       movslq  0(%4),  %4
    0x0000000000000A3C: 41 00 00 03 #       jmp     .L77
    #.L76:
    0x0000000000000A40: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000A44: 18 00 04 04 #       movq    0(%4),  %4
    #.L77:
    #.L75:
    #.L73:
    0x0000000000000A48: 28 04 C8 01 #       movq    %4,     -56(%FP)
    0x0000000000000A4C: 1B E7 01 04 #       movzbq  -25(%FP),       %4
    0x0000000000000A50: 31 00 04 00 #       subq    %0,     %4,     %0
    0x0000000000000A54: 42 00 00 0E #       jz      endif.L78
    0x0000000000000A58: 18 C8 01 04 #       movq    -56(%FP),       %4
    0x0000000000000A5C: 39 00 04 00 #       subq    0,      %4,     %0
    0x0000000000000A60: 44 00 00 0B #       jl      endif.L78
    0x0000000000000A64: 39 18 02 02 #       subq    24,     %SP,    %SP
    0x0000000000000A68: 56 00 2B 04 #       ldzwq   43,     %4
    0x0000000000000A6C: 2B 04 12 02 #       movb    %4,     18(%SP)
    0x0000000000000A70: 56 00 00 04 #       ldzwq   @w3(putchar),   %4
    0x0000000000000A74: 5D 00 00 04 #       shldwq  @w2(putchar),   %4
    0x0000000000000A78: 5D 00 00 04 #       shldwq  @w1(putchar),   %4
    0x0000000000000A7C: 5D 0E 48 04 #       shldwq  @w0(putchar),   %4
    0x0000000000000A80: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000A84: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000A88: 38 18 02 02 #       addq    24,     %SP,    %SP
    #endif.L78:
    0x0000000000000A8C: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000A90: 1B F7 01 04 #       movzbq  -9(%FP),        %4
    0x0000000000000A94: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000A98: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x0000000000000A9C: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000AA0: 18 C8 01 04 #       movq    -56(%FP),       %4
    0x0000000000000AA4: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000AA8: 56 00 00 04 #       ldzwq   @w3(print_int64),       %4
    0x0000000000000AAC: 5D 00 00 04 #       shldwq  @w2(print_int64),       %4
    0x0000000000000AB0: 5D 00 00 04 #       shldwq  @w1(print_int64),       %4
    0x0000000000000AB4: 5D 05 0C 04 #       shldwq  @w0(print_int64),       %4
    0x0000000000000AB8: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000ABC: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000AC0: 41 00 00 B9 #       jmp     endif.L69
    #else.L70:
    0x0000000000000AC4: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000AC8: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000ACC: 39 75 04 00 #       subq    117,    %4,     %0
    0x0000000000000AD0: 43 00 00 2E #       jnz     else.L80
    0x0000000000000AD4: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000AD8: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x0000000000000ADC: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000AE0: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000AE4: 38 08 06 04 #       addq    8,      %6,     %4
    0x0000000000000AE8: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000AEC: 31 05 04 06 #       subq    %5,     %4,     %6
    0x0000000000000AF0: 28 06 D0 01 #       movq    %6,     -48(%FP)
    0x0000000000000AF4: 18 D8 01 04 #       movq    -40(%FP),       %4
    0x0000000000000AF8: 39 01 04 00 #       subq    1,      %4,     %0
    0x0000000000000AFC: 43 00 00 04 #       jnz     .L81
    0x0000000000000B00: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000B04: 1B 00 04 04 #       movzbq  0(%4),  %4
    0x0000000000000B08: 41 00 00 0F #       jmp     .L82
    #.L81:
    0x0000000000000B0C: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000B10: 39 02 05 00 #       subq    2,      %5,     %0
    0x0000000000000B14: 43 00 00 04 #       jnz     .L83
    0x0000000000000B18: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000B1C: 1A 00 04 04 #       movzwq  0(%4),  %4
    0x0000000000000B20: 41 00 00 09 #       jmp     .L84
    #.L83:
    0x0000000000000B24: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000B28: 39 04 05 00 #       subq    4,      %5,     %0
    0x0000000000000B2C: 43 00 00 04 #       jnz     .L85
    0x0000000000000B30: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000B34: 19 00 04 04 #       movzlq  0(%4),  %4
    0x0000000000000B38: 41 00 00 03 #       jmp     .L86
    #.L85:
    0x0000000000000B3C: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000B40: 18 00 04 04 #       movq    0(%4),  %4
    #.L86:
    #.L84:
    #.L82:
    0x0000000000000B44: 28 04 C8 01 #       movq    %4,     -56(%FP)
    0x0000000000000B48: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000B4C: 56 00 00 04 #       ldzwq   0,      %4
    0x0000000000000B50: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000B54: 1B F7 01 04 #       movzbq  -9(%FP),        %4
    0x0000000000000B58: 2B 04 11 02 #       movb    %4,     17(%SP)
    0x0000000000000B5C: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x0000000000000B60: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000B64: 18 C8 01 04 #       movq    -56(%FP),       %4
    0x0000000000000B68: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000B6C: 56 00 00 04 #       ldzwq   @w3(print_uint64),      %4
    0x0000000000000B70: 5D 00 00 04 #       shldwq  @w2(print_uint64),      %4
    0x0000000000000B74: 5D 00 00 04 #       shldwq  @w1(print_uint64),      %4
    0x0000000000000B78: 5D 00 C4 04 #       shldwq  @w0(print_uint64),      %4
    0x0000000000000B7C: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000B80: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000B84: 41 00 00 88 #       jmp     endif.L79
    #else.L80:
    0x0000000000000B88: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000B8C: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000B90: 39 6F 04 00 #       subq    111,    %4,     %0
    0x0000000000000B94: 43 00 00 2C #       jnz     else.L88
    0x0000000000000B98: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000B9C: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x0000000000000BA0: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000BA4: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000BA8: 38 08 06 04 #       addq    8,      %6,     %4
    0x0000000000000BAC: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000BB0: 31 05 04 06 #       subq    %5,     %4,     %6
    0x0000000000000BB4: 28 06 D0 01 #       movq    %6,     -48(%FP)
    0x0000000000000BB8: 18 D8 01 04 #       movq    -40(%FP),       %4
    0x0000000000000BBC: 39 01 04 00 #       subq    1,      %4,     %0
    0x0000000000000BC0: 43 00 00 04 #       jnz     .L89
    0x0000000000000BC4: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000BC8: 1B 00 04 04 #       movzbq  0(%4),  %4
    0x0000000000000BCC: 41 00 00 0F #       jmp     .L90
    #.L89:
    0x0000000000000BD0: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000BD4: 39 02 05 00 #       subq    2,      %5,     %0
    0x0000000000000BD8: 43 00 00 04 #       jnz     .L91
    0x0000000000000BDC: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000BE0: 1A 00 04 04 #       movzwq  0(%4),  %4
    0x0000000000000BE4: 41 00 00 09 #       jmp     .L92
    #.L91:
    0x0000000000000BE8: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000BEC: 39 04 05 00 #       subq    4,      %5,     %0
    0x0000000000000BF0: 43 00 00 04 #       jnz     .L93
    0x0000000000000BF4: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000BF8: 19 00 04 04 #       movzlq  0(%4),  %4
    0x0000000000000BFC: 41 00 00 03 #       jmp     .L94
    #.L93:
    0x0000000000000C00: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000C04: 18 00 04 04 #       movq    0(%4),  %4
    #.L94:
    #.L92:
    #.L90:
    0x0000000000000C08: 28 04 C8 01 #       movq    %4,     -56(%FP)
    0x0000000000000C0C: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000C10: 1B F7 01 04 #       movzbq  -9(%FP),        %4
    0x0000000000000C14: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000C18: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x0000000000000C1C: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000C20: 18 C8 01 04 #       movq    -56(%FP),       %4
    0x0000000000000C24: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000C28: 56 00 00 04 #       ldzwq   @w3(print_uint64_oct),  %4
    0x0000000000000C2C: 5D 00 00 04 #       shldwq  @w2(print_uint64_oct),  %4
    0x0000000000000C30: 5D 00 00 04 #       shldwq  @w1(print_uint64_oct),  %4
    0x0000000000000C34: 5D 03 C8 04 #       shldwq  @w0(print_uint64_oct),  %4
    0x0000000000000C38: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000C3C: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000C40: 41 00 00 59 #       jmp     endif.L87
    #else.L88:
    0x0000000000000C44: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000C48: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000C4C: 39 78 04 00 #       subq    120,    %4,     %0
    0x0000000000000C50: 43 00 00 2C #       jnz     else.L96
    0x0000000000000C54: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000C58: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x0000000000000C5C: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000C60: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000C64: 38 08 06 04 #       addq    8,      %6,     %4
    0x0000000000000C68: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000C6C: 31 05 04 06 #       subq    %5,     %4,     %6
    0x0000000000000C70: 28 06 D0 01 #       movq    %6,     -48(%FP)
    0x0000000000000C74: 18 D8 01 04 #       movq    -40(%FP),       %4
    0x0000000000000C78: 39 01 04 00 #       subq    1,      %4,     %0
    0x0000000000000C7C: 43 00 00 04 #       jnz     .L97
    0x0000000000000C80: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000C84: 1B 00 04 04 #       movzbq  0(%4),  %4
    0x0000000000000C88: 41 00 00 0F #       jmp     .L98
    #.L97:
    0x0000000000000C8C: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000C90: 39 02 05 00 #       subq    2,      %5,     %0
    0x0000000000000C94: 43 00 00 04 #       jnz     .L99
    0x0000000000000C98: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000C9C: 1A 00 04 04 #       movzwq  0(%4),  %4
    0x0000000000000CA0: 41 00 00 09 #       jmp     .L100
    #.L99:
    0x0000000000000CA4: 18 D8 01 05 #       movq    -40(%FP),       %5
    0x0000000000000CA8: 39 04 05 00 #       subq    4,      %5,     %0
    0x0000000000000CAC: 43 00 00 04 #       jnz     .L101
    0x0000000000000CB0: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000CB4: 19 00 04 04 #       movzlq  0(%4),  %4
    0x0000000000000CB8: 41 00 00 03 #       jmp     .L102
    #.L101:
    0x0000000000000CBC: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000CC0: 18 00 04 04 #       movq    0(%4),  %4
    #.L102:
    #.L100:
    #.L98:
    0x0000000000000CC4: 28 04 C8 01 #       movq    %4,     -56(%FP)
    0x0000000000000CC8: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000CCC: 1B F7 01 04 #       movzbq  -9(%FP),        %4
    0x0000000000000CD0: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000CD4: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x0000000000000CD8: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000CDC: 18 C8 01 04 #       movq    -56(%FP),       %4
    0x0000000000000CE0: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000CE4: 56 00 00 04 #       ldzwq   @w3(print_int64_hex),   %4
    0x0000000000000CE8: 5D 00 00 04 #       shldwq  @w2(print_int64_hex),   %4
    0x0000000000000CEC: 5D 00 00 04 #       shldwq  @w1(print_int64_hex),   %4
    0x0000000000000CF0: 5D 02 44 04 #       shldwq  @w0(print_int64_hex),   %4
    0x0000000000000CF4: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000CF8: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000CFC: 41 00 00 2A #       jmp     endif.L95
    #else.L96:
    0x0000000000000D00: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000D04: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000D08: 39 70 04 00 #       subq    112,    %4,     %0
    0x0000000000000D0C: 43 00 00 15 #       jnz     else.L104
    0x0000000000000D10: 18 20 01 04 #       movq    32(%FP),        %4
    0x0000000000000D14: 18 F8 01 05 #       movq    -8(%FP),        %5
    0x0000000000000D18: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000D1C: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000D20: 18 00 06 06 #       movq    0(%6),  %6
    0x0000000000000D24: 28 06 D0 01 #       movq    %6,     -48(%FP)
    0x0000000000000D28: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000D2C: 1B F7 01 04 #       movzbq  -9(%FP),        %4
    0x0000000000000D30: 2B 04 10 02 #       movb    %4,     16(%SP)
    0x0000000000000D34: 18 E8 01 04 #       movq    -24(%FP),       %4
    0x0000000000000D38: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000D3C: 18 D0 01 04 #       movq    -48(%FP),       %4
    0x0000000000000D40: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000D44: 56 00 00 04 #       ldzwq   @w3(print_int64_hex),   %4
    0x0000000000000D48: 5D 00 00 04 #       shldwq  @w2(print_int64_hex),   %4
    0x0000000000000D4C: 5D 00 00 04 #       shldwq  @w1(print_int64_hex),   %4
    0x0000000000000D50: 5D 02 44 04 #       shldwq  @w0(print_int64_hex),   %4
    0x0000000000000D54: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000D58: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000D5C: 41 00 00 12 #       jmp     endif.L103
    #else.L104:
    0x0000000000000D60: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000D64: 56 00 00 04 #       ldzwq   @w3(str.L1),    %4
    0x0000000000000D68: 5D 00 00 04 #       shldwq  @w2(str.L1),    %4
    0x0000000000000D6C: 5D 00 00 04 #       shldwq  @w1(str.L1),    %4
    0x0000000000000D70: 5D 0E 88 04 #       shldwq  @w0(str.L1),    %4
    0x0000000000000D74: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000D78: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000D7C: 1F 00 04 04 #       movsbq  0(%4),  %4
    0x0000000000000D80: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000D84: 56 00 00 04 #       ldzwq   @w3(printf),    %4
    0x0000000000000D88: 5D 00 00 04 #       shldwq  @w2(printf),    %4
    0x0000000000000D8C: 5D 00 00 04 #       shldwq  @w1(printf),    %4
    0x0000000000000D90: 5D 0D DC 04 #       shldwq  @w0(printf),    %4
    0x0000000000000D94: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000D98: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000D9C: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000DA0: 41 00 00 04 #       jmp     for.incr.L45
    #endif.L103:
    #endif.L95:
    #endif.L87:
    #endif.L79:
    #endif.L69:
    #endif.L57:
    #endif.L55:
    0x0000000000000DA4: 18 F8 01 04 #       movq    -8(%FP),        %4
    0x0000000000000DA8: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000DAC: 28 05 F8 01 #       movq    %5,     -8(%FP)
    #for.incr.L45:
    #endif.L49:
    #endif.L47:
    0x0000000000000DB0: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000DB4: 38 01 04 05 #       addq    1,      %4,     %5
    0x0000000000000DB8: 28 05 18 01 #       movq    %5,     24(%FP)
    0x0000000000000DBC: 41 FF FE 50 #       jmp     check.for.cond.L44
    #for.end.L46:
    0x0000000000000DC0: 56 00 01 04 #       ldzwq   1,      %4
    0x0000000000000DC4: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x0000000000000DC8: 41 00 00 01 #       jmp     leave.L43
    #leave.L43:
    0x0000000000000DCC: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000DD0: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000DD4: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000DD8: 40 03 00 00 #       jmp     %RET,   %0
    #printf:
    0x0000000000000DDC: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000DE0: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000DE4: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000DE8: 39 38 02 02 #       subq    56,     %SP,    %SP
    0x0000000000000DEC: 38 18 01 04 #       addq    24,     %FP,    %4
    0x0000000000000DF0: 56 00 01 05 #       ldzwq   1,      %5
    0x0000000000000DF4: 3C 08 05 05 #       imulq   8,      %5,     %5
    0x0000000000000DF8: 30 05 04 06 #       addq    %5,     %4,     %6
    0x0000000000000DFC: 28 06 F8 01 #       movq    %6,     -8(%FP)
    0x0000000000000E00: 39 28 02 02 #       subq    40,     %SP,    %SP
    0x0000000000000E04: 18 18 01 04 #       movq    24(%FP),        %4
    0x0000000000000E08: 28 04 18 02 #       movq    %4,     24(%SP)
    0x0000000000000E0C: 18 F8 01 04 #       movq    -8(%FP),        %4
    0x0000000000000E10: 28 04 20 02 #       movq    %4,     32(%SP)
    0x0000000000000E14: 56 00 00 04 #       ldzwq   @w3(vprintf),   %4
    0x0000000000000E18: 5D 00 00 04 #       shldwq  @w2(vprintf),   %4
    0x0000000000000E1C: 5D 00 00 04 #       shldwq  @w1(vprintf),   %4
    0x0000000000000E20: 5D 06 E4 04 #       shldwq  @w0(vprintf),   %4
    0x0000000000000E24: 40 04 03 00 #       jmp     %4,     %RET
    0x0000000000000E28: 1E 10 02 04 #       movswq  16(%SP),        %4
    0x0000000000000E2C: 38 28 02 02 #       addq    40,     %SP,    %SP
    0x0000000000000E30: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x0000000000000E34: 41 00 00 01 #       jmp     leave.L105
    #leave.L105:
    0x0000000000000E38: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000E3C: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000E40: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000E44: 40 03 00 00 #       jmp     %RET,   %0
    # from: /home/numerik/pub/ulmcc/lib/libulm.a(putchar.o)
    #putchar:
    0x0000000000000E48: 28 03 00 02 #       movq    %RET,   0(%SP)
    0x0000000000000E4C: 28 01 08 02 #       movq    %FP,    8(%SP)
    0x0000000000000E50: 38 00 02 01 #       addq    0,      %SP,    %FP
    0x0000000000000E54: 39 00 02 02 #       subq    0,      %SP,    %SP
    0x0000000000000E58: 1F 12 01 04 #       movsbq  18(%FP),        %4
    0x0000000000000E5C: 61 04 00 00 #       putc    %4
    0x0000000000000E60: 2A 04 10 01 #       movw    %4,     16(%FP)
    0x0000000000000E64: 41 00 00 01 #       jmp     leave.L0
    #leave.L0:
    0x0000000000000E68: 38 00 01 02 #       addq    0,      %FP,    %SP
    0x0000000000000E6C: 18 08 02 01 #       movq    8(%SP),         %FP
    0x0000000000000E70: 18 00 02 03 #       movq    0(%SP),         %RET
    0x0000000000000E74: 40 03 00 00 #       jmp     %RET,   %0
    #DATA 1
    # from: bar.o
    #str.L0:
    0x0000000000000E78: 66 6F 6F 20 
                        62 61 72 0A 
                        00          #       .string         "foo bar\n"
    # from: /home/numerik/pub/ulmcc/lib/libulm.a(stdio.o)
    #str.L0:
    0x0000000000000E81:    28 6E 75 
                        6C 6C 29 00 #       .string         "(null)"
    #str.L1:
    0x0000000000000E88: 0A 70 72 69 
                        6E 74 66 3A 
                        20 75 6E 65 
                        78 70 65 63 
                        74 65 64 20 
                        66 6F 72 6D 
                        61 74 20 73 
                        70 65 63 69 
                        66 69 65 72 
                        20 60 25 63 
                        27 0A 00    #       .string         "\nprintf: unexpected format specifier `%c'\n"
    #BSS 1 0
    #(begins at 0xEB3)
    #SYMTAB 
    T _start                      0x00000000000000A8
    T bar                         0x0000000000000054
    T main                        0x0000000000000014
    T printf                      0x0000000000000DDC
    T putchar                     0x0000000000000E48
    T puts                        0x0000000000000668
    T vprintf                     0x00000000000006E4
    a FP                          0x0000000000000001
    a FP                          0x0000000000000001
    a FP                          0x0000000000000001
    a FP                          0x0000000000000001
    a FP                          0x0000000000000001
    a RET                         0x0000000000000003
    a RET                         0x0000000000000003
    a RET                         0x0000000000000003
    a RET                         0x0000000000000003
    a RET                         0x0000000000000003
    a SP                          0x0000000000000002
    a SP                          0x0000000000000002
    a SP                          0x0000000000000002
    a SP                          0x0000000000000002
    a SP                          0x0000000000000002
    a ZERO                        0x0000000000000000
    a ZERO                        0x0000000000000000
    a ZERO                        0x0000000000000000
    a ZERO                        0x0000000000000000
    t check.for.cond.L18          0x00000000000002F0
    t check.for.cond.L30          0x0000000000000474
    t check.for.cond.L44          0x00000000000006FC
    t check.for.cond.L7           0x0000000000000178
    t check.while.cond.L40        0x0000000000000600
    t check.while.cond.L53        0x00000000000007F8
    t else.L104                   0x0000000000000D60
    t else.L15                    0x00000000000002E8
    t else.L24                    0x0000000000000388
    t else.L27                    0x000000000000046C
    t else.L4                     0x0000000000000170
    t else.L48                    0x0000000000000764
    t else.L50                    0x00000000000007B0
    t else.L56                    0x0000000000000890
    t else.L58                    0x00000000000008DC
    t else.L60                    0x0000000000000934
    t else.L62                    0x0000000000000928
    t else.L64                    0x000000000000096C
    t else.L68                    0x00000000000009B0
    t else.L70                    0x0000000000000AC4
    t else.L80                    0x0000000000000B88
    t else.L88                    0x0000000000000C44
    t else.L96                    0x0000000000000D00
    t endif.L103                  0x0000000000000DA4
    t endif.L12                   0x0000000000000208
    t endif.L14                   0x000000000000034C
    t endif.L23                   0x00000000000003B8
    t endif.L26                   0x00000000000004D0
    t endif.L3                    0x0000000000000208
    t endif.L36                   0x000000000000055C
    t endif.L37                   0x000000000000055C
    t endif.L39                   0x0000000000000600
    t endif.L47                   0x0000000000000DB0
    t endif.L49                   0x0000000000000DB0
    t endif.L51                   0x00000000000007D4
    t endif.L52                   0x00000000000007F8
    t endif.L55                   0x0000000000000DA4
    t endif.L57                   0x0000000000000DA4
    t endif.L59                   0x00000000000009B8
    t endif.L61                   0x0000000000000930
    t endif.L63                   0x00000000000009B8
    t endif.L66                   0x00000000000009B8
    t endif.L67                   0x00000000000009B8
    t endif.L69                   0x0000000000000DA4
    t endif.L78                   0x0000000000000A8C
    t endif.L79                   0x0000000000000DA4
    t endif.L87                   0x0000000000000DA4
    t endif.L95                   0x0000000000000DA4
    t for.end.L20                 0x000000000000034C
    t for.end.L32                 0x00000000000004D0
    t for.end.L46                 0x0000000000000DC0
    t for.end.L9                  0x00000000000001D4
    t for.incr.L19                0x000000000000033C
    t for.incr.L31                0x00000000000004C0
    t for.incr.L45                0x0000000000000DB0
    t for.incr.L8                 0x00000000000001C4
    a fp                          0x0000000000000008
    t leave.L0                    0x0000000000000044
    t leave.L0                    0x0000000000000E68
    t leave.L1                    0x0000000000000098
    t leave.L105                  0x0000000000000E38
    t leave.L13                   0x00000000000003B8
    t leave.L2                    0x0000000000000234
    t leave.L25                   0x00000000000004FC
    t leave.L35                   0x0000000000000598
    t leave.L38                   0x0000000000000658
    t leave.L42                   0x00000000000006D4
    t leave.L43                   0x0000000000000DCC
    t print_int64                 0x000000000000050C
    t print_int64_hex             0x0000000000000244
    t print_uint64                0x00000000000000C4
    t print_uint64_oct            0x00000000000003C8
    t puts_                       0x00000000000005A8
    a ret                         0x0000000000000000
    a rval                        0x0000000000000010
    d str.L0                      0x0000000000000000
    d str.L0                      0x0000000000000009
    d str.L1                      0x0000000000000010
    t while.end.L41               0x000000000000064C
    t while.end.L54               0x0000000000000844
    

No Error Message means ...

... the compiler tools could not help you to find the errors in your code. So you are on your own :(

Usually beginners in programming do not like error messages, but they should. Because the above statement will often be true. Here an example for a program that compiles perfectly but crashes terribly when you run it. The problem might be obvious. But in general the same type of problem can be hidden with within several thousands lines of code:

This compiles without any error or even warning into an executable:

theon$ gcc -Wall foo.c bar.c
theon$ 

And this happens when you run it (it will run, but just for a few instructions):

theon$ a.out
Segmentation Fault (core dumped)
theon$ echo $?
theon$