IA64

From Ellcc

Jump to: navigation, search

Assembly generated by sieve.c:

./ia64-elf-ecc -v -O5 -S test/sieve.c
.ident "LLVM-ia64"

        .psr    lsb
        .radix  C
        .psr    abi64



        .section .text, "ax", "progbits"

        .align  32
        .global main
        .type   main, @function
main:
        alloc r32 = ar.pfs,0,2,2,0
        add r12 = -32, r12
        // PSEUDO_ALLOC
        addl out1 = @ltoff(str#), r1
        ;;
        ld8 out0 = [out1]
        adds r33 = 0, r0
        ;;
        br.call.sptk rp = puts
        (p0) brl.cond.sptk .BB1_8       // body2.outer
.BB1_1: // next
        addl r33 = @ltoff(.str1#), r1
        ;;
        ld8 out0 = [r33]
        ;;
        br.call.sptk rp = printf
        addl r33 = @ltoff(.str3#), r1
        ;;
        addl out0 = @ltoff(.str2#), r1
        ld8 out1 = [r33]
        ;;
        ld8 out0 = [out0]
        ;;
        br.call.sptk rp = printf
        addl r33 = @ltoff(.str4#), r1
        ;;
        ld8 out0 = [r33]
        adds out1 = 44, r0
        ;;
        br.call.sptk rp = printf
        addl r33 = @ltoff(.str6#), r1
        ;;
        addl out0 = @ltoff(.str5#), r1
        ld8 out1 = [r33]
        ;;
        ld8 out0 = [out0]
        ;;
        br.call.sptk rp = printf
        addl r33 = @ltoff(.str8#), r1
        ;;
        addl out0 = @ltoff(.str7#), r1
        ld8 out1 = [r33]
        ;;
        ld8 out0 = [out0]
        ;;
        br.call.sptk rp = printf
        addl r33 = @ltoff(.str9#), r1
        ;;
        ld8 out0 = [r33]
        adds r33 = 0, r0
        ;;
        mov out1 = r33
        ;;
        br.call.sptk rp = printf
        ;;
        addl out1 = @ltoff(.str10#), r1
        ;;
        ld8 out0 = [out1]
        adds out1 = 1, r0
        ;;
        br.call.sptk rp = printf
        ;;
        addl out1 = @ltoff(.str11#), r1
        ;;
        ld8 out0 = [out1]
        mov out1 = r33
        ;;
        br.call.sptk rp = printf
        ;;
        addl out1 = @ltoff(.str13#), r1
        addl out0 = @ltoff(.str12#), r1
        ;;
        ld8 out1 = [out1]
        ld8 out0 = [out0]
        ;;
        br.call.sptk rp = printf
        ;;
        addl out1 = @ltoff(.str15#), r1
        addl out0 = @ltoff(.str14#), r1
        ;;
        ld8 out1 = [out1]
        ld8 out0 = [out0]
        ;;
        br.call.sptk rp = printf
        ;;
        mov r8 = r33
        mov ar.pfs = r32
        add r12 = 32, r12
        ;;
        br.ret.sptk.many rp
.BB1_2: // body2
        addl out0 = @ltoff(flags#), r1
        ;;
        ld8 out0 = [out0]
        sxt4 r3 = out1
        adds out1 = 1, out1
        adds r8 = 1, r0
        ;;
        add out0 = out0, r3
        ;;
        st1 [out0] = r8
        zxt4 out0 = out1
        adds r3 = 8191, r0
        ;;
        cmp.ne p6, p0 = out0, r3
        ;;
        (p6) brl.cond.sptk .BB1_2       // body2
.BB1_3: // body2.body6_crit_edge
        adds out0 = 0, r0
        adds r3 = 3, r0
        ;;
        mov r8 = r3
        mov out1 = out0
.BB1_4: // body6
        addl r9 = @ltoff(flags#), r1
        ;;
        ld8 r9 = [r9]
        sxt4 r10 = out0
        ;;
        add r9 = r9, r10
        ;;
        ld1 r9 = [r9]
        adds r10 = 0, r0
        ;;
        cmp.ne p6, p0 = r9, r10
        ;;
        (p6) brl.cond.sptk .BB1_9       // ifTrue
.BB1_5: // body6.next9_crit_edge
        (p0) brl.cond.sptk .BB1_6       // next9
.BB1_6: // next9
        adds out0 = 1, out0
        adds r3 = 3, r3
        adds r8 = 2, r8
        ;;
        zxt4 r9 = out0
        adds r10 = 8191, r0
        ;;
        cmp.eq p6, p0 = r9, r10
        ;;
        (p6) brl.cond.sptk .BB1_7       // next8
        (p0) brl.cond.sptk .BB1_13      // next9.body6_crit_edge
.BB1_7: // next8
        adds r33 = 1, r33
        ;;
        zxt4 out0 = r33
        movl r3 = 10000
        ;;
        cmp.eq p6, p0 = out0, r3
        ;;
        (p6) brl.cond.sptk .BB1_1       // next
.BB1_8: // body2.outer
        adds out1 = 0, r0
        (p0) brl.cond.sptk .BB1_2       // body2
.BB1_9: // ifTrue
        sxt4 r9 = r3
        adds r10 = 8190, r0
        ;;
        cmp.gt p6, p0 = r9, r10
        ;;
        (p6) brl.cond.sptk .BB1_12      // next12
.BB1_10:        // ifTrue.body11_crit_edge
        mov r9 = r3
        (p0) brl.cond.sptk .BB1_11      // body11
.BB1_11:        // body11
        addl r10 = @ltoff(flags#), r1
        ;;
        ld8 r10 = [r10]
        sxt4 r11 = r9
        add r9 = r8, r9
        adds r14 = 0, r0
        ;;
        add r10 = r10, r11
        sxt4 r11 = r9
        adds r15 = 8191, r0
        ;;
        st1 [r10] = r14
        cmp.lt p6, p0 = r11, r15
        ;;
        (p6) brl.cond.sptk .BB1_11      // body11
.BB1_12:        // next12
        adds out1 = 1, out1
        (p0) brl.cond.sptk .BB1_6       // next9
.BB1_13:        // next9.body6_crit_edge
        (p0) brl.cond.sptk .BB1_4       // body6


        .global flags
.bss
        .align  16
        .type flags,@object
        .size flags,8191
flags:                          //  [8191 x i8] zeroinitializer
        .skip   8191


.data
        .type .str1,@object
        .size .str1,11
.str1:                          //  [11 x i8] c"%d primes\0A\00"
        .asciz  "%d primes\n"


        .type .str2,@object
        .size .str2,15
.str2:                          //  [15 x i8] c"__FILE__ = %s\0A\00"
        .asciz  "__FILE__ = %s\n"


        .type .str3,@object
        .size .str3,13
.str3:                          //  [13 x i8] c"test/sieve.c\00"
        .asciz  "test/sieve.c"


        .type .str4,@object
        .size .str4,15
.str4:                          //  [15 x i8] c"__LINE__ = %d\0A\00"
        .asciz  "__LINE__ = %d\n"


        .type .str5,@object
        .size .str5,15
.str5:                          //  [15 x i8] c"__DATE__ = %s\0A\00"
        .asciz  "__DATE__ = %s\n"


        .type .str6,@object
        .size .str6,12
.str6:                          //  [12 x i8] c"Jul 12 2008\00"
        .asciz  "Jul 12 2008"


        .type .str7,@object
        .size .str7,15
.str7:                          //  [15 x i8] c"__TIME__ = %s\0A\00"
        .asciz  "__TIME__ = %s\n"


        .type .str8,@object
        .size .str8,9
.str8:                          //  [9 x i8] c"06:01:17\00"
        .asciz  "06:01:17"


        .type .str9,@object
        .size .str9,16
.str9:                          //  [16 x i8] c"__ELLCC__ = %d\0A\00"
        .asciz  "__ELLCC__ = %d\n"


        .align  16
        .type .str10,@object
        .size .str10,22
.str10:                         //  [22 x i8] c"__ELLCC_MINOR__ = %d\0A\00"
        .asciz  "__ELLCC_MINOR__ = %d\n"


        .align  16
        .type .str11,@object
        .size .str11,27
.str11:                         //  [27 x i8] c"__ELLCC_PATCHLEVEL__ = %d\0A\00"
        .asciz  "__ELLCC_PATCHLEVEL__ = %d\n"


        .align  16
        .type .str12,@object
        .size .str12,31
.str12:                         //  [31 x i8] c"__ELLCC_VERSION_STRING__ = %s\0A\00"
        .asciz  "__ELLCC_VERSION_STRING__ = %s\n"


        .type .str13,@object
        .size .str13,6
.str13:                         //  [6 x i8] c"0.1.0\00"
        .asciz  "0.1.0"


        .align  16
        .type .str14,@object
        .size .str14,25
.str14:                         //  [25 x i8] c"__ELLCC_VERSIONG__ = %s\0A\00"
        .asciz  "__ELLCC_VERSIONG__ = %s\n"


        .align  16
        .type .str15,@object
        .size .str15,24
.str15:                         //  [24 x i8] c"0.1.0 ALPHA Jul 11 2008\00"
        .asciz  "0.1.0 ALPHA Jul 11 2008"


        .align  16
        .type str,@object
        .size str,17
str:                            //  [17 x i8] c"10000 iterations\00"
        .asciz  "10000 iterations"


// br.call targets referenced (and not defined) above:
        .global printf
        .type printf, @function
        .global puts
        .type puts, @function




// (external) symbols referenced (and not defined) above:

Personal tools