IA64
From Ellcc
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:
