001 .arch armv6 002 .section .rodata 003 .align 2 004 .LC0: 005 .ascii "Found %d primes:\000" 006 .align 2 007 .LC1: 008 .ascii " %d\000" 009 .text 010 .align 2 011 .global main 012 .type main, %function 013 main: 014 stmfd sp!, {fp, lr} 015 add fp, sp, #4 016 sub sp, sp, #56 017 mov r3, #320 018 str r3, [fp, #-20] 019 mov r3, #0 020 str r3, [fp, #-8] 021 mov r3, #0 022 str r3, [fp, #-16] 023 b .L2 024 .L3: 025 ldr r3, [fp, #-16] 026 mov r3, r3, asl #2 027 sub r2, fp, #4 028 add r3, r2, r3 029 mov r2, #0 030 str r2, [r3, #-56] 031 ldr r3, [fp, #-16] 032 add r3, r3, #1 033 str r3, [fp, #-16] 034 .L2: 035 ldr r3, [fp, #-16] 036 cmp r3, #9 037 ble .L3 038 mov r3, #2 039 str r3, [fp, #-12] 040 b .L4 041 .L6: 042 ldr r2, [fp, #-12] 043 sub r3, fp, #60 044 mov r0, r2 045 mov r1, r3 046 bl checkNum 047 mov r3, r0 048 cmp r3, #0 049 beq .L5 050 ldr r3, [fp, #-8] 051 add r3, r3, #1 052 str r3, [fp, #-8] 053 .L5: 054 ldr r3, [fp, #-12] 055 add r3, r3, #1 056 str r3, [fp, #-12] 057 .L4: 058 ldr r2, [fp, #-12] 059 ldr r3, [fp, #-20] 060 cmp r2, r3 061 blt .L6 062 ldr r0, .L10 063 ldr r1, [fp, #-8] 064 bl printf 065 mov r3, #0 066 str r3, [fp, #-12] 067 b .L7 068 .L9: 069 ldr r3, [fp, #-12] 070 mov r3, r3, lsr #5 071 mov r3, r3, asl #2 072 sub r2, fp, #4 073 add r3, r2, r3 074 ldr r2, [r3, #-56] 075 ldr r3, [fp, #-12] 076 and r3, r3, #31 077 mov r3, r2, lsr r3 078 and r3, r3, #1 079 cmp r3, #0 080 beq .L8 081 ldr r0, .L10+4 082 ldr r1, [fp, #-12] 083 bl printf 084 .L8: 085 ldr r3, [fp, #-12] 086 add r3, r3, #1 087 str r3, [fp, #-12] 088 .L7: 089 ldr r2, [fp, #-12] 090 ldr r3, [fp, #-20] 091 cmp r2, r3 092 blt .L9 093 mov r0, #10 094 bl putchar 095 mov r0, #0 096 sub sp, fp, #4 097 ldmfd sp!, {fp, pc} 098 .L11: 099 .align 2 100 101 102 .L10: 103 .word .LC0 104 .word .LC1 105 .size main, .-main 106 .global __aeabi_uidivmod 107 .align 2 108 .global checkNum 109 .type checkNum, %function 110 111 checkNum: 112 stmfd sp!, {fp, lr} 113 add fp, sp, #4 114 sub sp, sp, #16 115 str r0, [fp, #-16] 116 str r1, [fp, #-20] 117 mov r3, #2 118 str r3, [fp, #-8] 119 b .L13 120 .L15: 121 ldr r3, [fp, #-8] 122 add r3, r3, #1 123 str r3, [fp, #-8] 124 .L13: 125 ldr r2, [fp, #-8] 126 ldr r3, [fp, #-16] 127 cmp r2, r3 128 bcs .L14 129 ldr r3, [fp, #-8] 130 ldr r2, [fp, #-16] 131 mov r0, r2 132 mov r1, r3 133 bl __aeabi_uidivmod 134 mov r3, r1 135 cmp r3, #0 136 bne .L15 137 .L14: 138 ldr r2, [fp, #-8] 139 ldr r3, [fp, #-16] 140 cmp r2, r3 141 bne .L16 142 ldr r0, [fp, #-16] 143 ldr r1, [fp, #-20] 144 bl setBit 145 .L16: 146 ldr r2, [fp, #-8] 147 ldr r3, [fp, #-16] 148 cmp r2, r3 149 moveq r3, #1 150 movne r3, #0 151 uxtb r3, r3 152 mov r0, r3 153 sub sp, fp, #4 154 ldmfd sp!, {fp, pc} 155 .size checkNum, .-checkNum 156 .align 2 157 .global setBit 158 .type setBit, %function 159 160 setBit: 161 str fp, [sp, #-4]! 162 add fp, sp, #0 163 sub sp, sp, #12 164 str r0, [fp, #-8] 165 str r1, [fp, #-12] 166 ldr r3, [fp, #-8] 167 mov r3, r3, lsr #5 168 mov r3, r3, asl #2 169 ldr r2, [fp, #-12] 170 add r3, r2, r3 171 ldr r2, [fp, #-8] 172 mov r2, r2, lsr #5 173 mov r2, r2, asl #2 174 ldr r1, [fp, #-12] 175 add r2, r1, r2 176 ldr r2, [r2] 177 ldr r1, [fp, #-8] 178 and r1, r1, #31 179 mov r0, #1 180 mov r1, r0, asl r1 181 orr r2, r2, r1 182 str r2, [r3] 183 sub sp, fp, #0 184 ldr fp, [sp], #4 185 bx lr