ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 1 1 .cpu cortex-m4 2 .arch armv7e-m 3 .fpu fpv4-sp-d16 4 .eabi_attribute 27, 1 5 .eabi_attribute 28, 1 6 .eabi_attribute 20, 1 7 .eabi_attribute 21, 1 8 .eabi_attribute 23, 3 9 .eabi_attribute 24, 1 10 .eabi_attribute 25, 1 11 .eabi_attribute 26, 1 12 .eabi_attribute 30, 6 13 .eabi_attribute 34, 1 14 .eabi_attribute 18, 4 15 .file "rkfifo.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .section .text.fls_int,"ax",%progbits 20 .align 1 21 .syntax unified 22 .thumb 23 .thumb_func 25 fls_int: 26 .LFB0: 27 .file 1 "user_src/rkfifo.c" 1:user_src/rkfifo.c **** #include "rkfifo.h" 2:user_src/rkfifo.c **** #include 3:user_src/rkfifo.c **** 4:user_src/rkfifo.c **** #define min(x,y) \ 5:user_src/rkfifo.c **** ({ \ 6:user_src/rkfifo.c **** typeof(x) _min1 = x; \ 7:user_src/rkfifo.c **** typeof(y) _min2 = y; \ 8:user_src/rkfifo.c **** (void)(&_min1 == &_min2); \ 9:user_src/rkfifo.c **** _min1 < _min2 ? _min1 : _min2; \ 10:user_src/rkfifo.c **** }) 11:user_src/rkfifo.c **** 12:user_src/rkfifo.c **** #define max(x,y) \ 13:user_src/rkfifo.c **** ({ \ 14:user_src/rkfifo.c **** typeof(x) _max1 = x; \ 15:user_src/rkfifo.c **** typeof(y) _max2 = y; \ 16:user_src/rkfifo.c **** (void)(&_max1 == &_max2); \ 17:user_src/rkfifo.c **** _max1 > _max2 ? _max1 : _max2; \ 18:user_src/rkfifo.c **** }) 19:user_src/rkfifo.c **** 20:user_src/rkfifo.c **** /* 检查是否是 2 的幂次数 */ 21:user_src/rkfifo.c **** #define is_power_of_2(x) ((x) != 0 && (((x) & ((x)-1)) == 0)) 22:user_src/rkfifo.c **** 23:user_src/rkfifo.c **** /** 24:user_src/rkfifo.c **** * @brief 返回输入参数的最高有效 bit 位 25:user_src/rkfifo.c **** * 26:user_src/rkfifo.c **** * @param x 输入参数 27:user_src/rkfifo.c **** * @return int 最高有效 bit 位, 从低到高 1~32, 0 表示无输入参数为 0 28:user_src/rkfifo.c **** */ 29:user_src/rkfifo.c **** static inline int fls_int(int x) 30:user_src/rkfifo.c **** { 28 .loc 1 30 1 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 2 29 .cfi_startproc 30 @ args = 0, pretend = 0, frame = 16 31 @ frame_needed = 1, uses_anonymous_args = 0 32 @ link register save eliminated. 33 0000 80B4 push {r7} 34 .LCFI0: 35 .cfi_def_cfa_offset 4 36 .cfi_offset 7, -4 37 0002 85B0 sub sp, sp, #20 38 .LCFI1: 39 .cfi_def_cfa_offset 24 40 0004 00AF add r7, sp, #0 41 .LCFI2: 42 .cfi_def_cfa_register 7 43 0006 7860 str r0, [r7, #4] 31:user_src/rkfifo.c **** int r = 32; 44 .loc 1 31 9 45 0008 2023 movs r3, #32 46 000a FB60 str r3, [r7, #12] 32:user_src/rkfifo.c **** 33:user_src/rkfifo.c **** if (!x) 47 .loc 1 33 8 48 000c 7B68 ldr r3, [r7, #4] 49 000e 002B cmp r3, #0 50 0010 01D1 bne .L2 34:user_src/rkfifo.c **** return 0; 51 .loc 1 34 16 52 0012 0023 movs r3, #0 53 0014 35E0 b .L3 54 .L2: 35:user_src/rkfifo.c **** if (!(x & 0xffff0000u)) 55 .loc 1 35 13 56 0016 7B68 ldr r3, [r7, #4] 57 0018 1B0C lsrs r3, r3, #16 58 001a 1B04 lsls r3, r3, #16 59 .loc 1 35 8 60 001c 002B cmp r3, #0 61 001e 05D1 bne .L4 36:user_src/rkfifo.c **** { 37:user_src/rkfifo.c **** x <<= 16; 62 .loc 1 37 11 63 0020 7B68 ldr r3, [r7, #4] 64 0022 1B04 lsls r3, r3, #16 65 0024 7B60 str r3, [r7, #4] 38:user_src/rkfifo.c **** r -= 16; 66 .loc 1 38 11 67 0026 FB68 ldr r3, [r7, #12] 68 0028 103B subs r3, r3, #16 69 002a FB60 str r3, [r7, #12] 70 .L4: 39:user_src/rkfifo.c **** } 40:user_src/rkfifo.c **** if (!(x & 0xff000000u)) 71 .loc 1 40 13 72 002c 7B68 ldr r3, [r7, #4] 73 002e 03F07F43 and r3, r3, #-16777216 74 .loc 1 40 8 75 0032 002B cmp r3, #0 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 3 76 0034 05D1 bne .L5 41:user_src/rkfifo.c **** { 42:user_src/rkfifo.c **** x <<= 8; 77 .loc 1 42 11 78 0036 7B68 ldr r3, [r7, #4] 79 0038 1B02 lsls r3, r3, #8 80 003a 7B60 str r3, [r7, #4] 43:user_src/rkfifo.c **** r -= 8; 81 .loc 1 43 11 82 003c FB68 ldr r3, [r7, #12] 83 003e 083B subs r3, r3, #8 84 0040 FB60 str r3, [r7, #12] 85 .L5: 44:user_src/rkfifo.c **** } 45:user_src/rkfifo.c **** if (!(x & 0xf0000000u)) 86 .loc 1 45 13 87 0042 7B68 ldr r3, [r7, #4] 88 0044 03F07043 and r3, r3, #-268435456 89 .loc 1 45 8 90 0048 002B cmp r3, #0 91 004a 05D1 bne .L6 46:user_src/rkfifo.c **** { 47:user_src/rkfifo.c **** x <<= 4; 92 .loc 1 47 11 93 004c 7B68 ldr r3, [r7, #4] 94 004e 1B01 lsls r3, r3, #4 95 0050 7B60 str r3, [r7, #4] 48:user_src/rkfifo.c **** r -= 4; 96 .loc 1 48 11 97 0052 FB68 ldr r3, [r7, #12] 98 0054 043B subs r3, r3, #4 99 0056 FB60 str r3, [r7, #12] 100 .L6: 49:user_src/rkfifo.c **** } 50:user_src/rkfifo.c **** if (!(x & 0xc0000000u)) 101 .loc 1 50 13 102 0058 7B68 ldr r3, [r7, #4] 103 005a 03F04043 and r3, r3, #-1073741824 104 .loc 1 50 8 105 005e 002B cmp r3, #0 106 0060 05D1 bne .L7 51:user_src/rkfifo.c **** { 52:user_src/rkfifo.c **** x <<= 2; 107 .loc 1 52 11 108 0062 7B68 ldr r3, [r7, #4] 109 0064 9B00 lsls r3, r3, #2 110 0066 7B60 str r3, [r7, #4] 53:user_src/rkfifo.c **** r -= 2; 111 .loc 1 53 11 112 0068 FB68 ldr r3, [r7, #12] 113 006a 023B subs r3, r3, #2 114 006c FB60 str r3, [r7, #12] 115 .L7: 54:user_src/rkfifo.c **** } 55:user_src/rkfifo.c **** if (!(x & 0x80000000u)) 116 .loc 1 55 8 117 006e 7B68 ldr r3, [r7, #4] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 4 118 0070 002B cmp r3, #0 119 0072 05DB blt .L8 56:user_src/rkfifo.c **** { 57:user_src/rkfifo.c **** x <<= 1; 120 .loc 1 57 11 121 0074 7B68 ldr r3, [r7, #4] 122 0076 5B00 lsls r3, r3, #1 123 0078 7B60 str r3, [r7, #4] 58:user_src/rkfifo.c **** r -= 1; 124 .loc 1 58 11 125 007a FB68 ldr r3, [r7, #12] 126 007c 013B subs r3, r3, #1 127 007e FB60 str r3, [r7, #12] 128 .L8: 59:user_src/rkfifo.c **** } 60:user_src/rkfifo.c **** return r; 129 .loc 1 60 12 130 0080 FB68 ldr r3, [r7, #12] 131 .L3: 61:user_src/rkfifo.c **** } 132 .loc 1 61 1 133 0082 1846 mov r0, r3 134 0084 1437 adds r7, r7, #20 135 .LCFI3: 136 .cfi_def_cfa_offset 4 137 0086 BD46 mov sp, r7 138 .LCFI4: 139 .cfi_def_cfa_register 13 140 @ sp needed 141 0088 5DF8047B ldr r7, [sp], #4 142 .LCFI5: 143 .cfi_restore 7 144 .cfi_def_cfa_offset 0 145 008c 7047 bx lr 146 .cfi_endproc 147 .LFE0: 149 .section .text.rounddown_pow_of_two,"ax",%progbits 150 .align 1 151 .syntax unified 152 .thumb 153 .thumb_func 155 rounddown_pow_of_two: 156 .LFB1: 62:user_src/rkfifo.c **** 63:user_src/rkfifo.c **** /** 64:user_src/rkfifo.c **** * @brief 找到 n 向下取最大的 2 的幂次数 65:user_src/rkfifo.c **** * 66:user_src/rkfifo.c **** * @param n 输入整数 n 67:user_src/rkfifo.c **** * @return uint32_t n 向下取最大的 2 的幂次数 68:user_src/rkfifo.c **** */ 69:user_src/rkfifo.c **** static inline uint32_t rounddown_pow_of_two(uint32_t n) 70:user_src/rkfifo.c **** { 157 .loc 1 70 1 158 .cfi_startproc 159 @ args = 0, pretend = 0, frame = 8 160 @ frame_needed = 1, uses_anonymous_args = 0 161 0000 80B5 push {r7, lr} ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 5 162 .LCFI6: 163 .cfi_def_cfa_offset 8 164 .cfi_offset 7, -8 165 .cfi_offset 14, -4 166 0002 82B0 sub sp, sp, #8 167 .LCFI7: 168 .cfi_def_cfa_offset 16 169 0004 00AF add r7, sp, #0 170 .LCFI8: 171 .cfi_def_cfa_register 7 172 0006 7860 str r0, [r7, #4] 71:user_src/rkfifo.c **** if (0 == n || is_power_of_2(n)) 173 .loc 1 71 8 174 0008 7B68 ldr r3, [r7, #4] 175 000a 002B cmp r3, #0 176 000c 08D0 beq .L10 177 .loc 1 71 16 discriminator 1 178 000e 7B68 ldr r3, [r7, #4] 179 0010 002B cmp r3, #0 180 0012 07D0 beq .L11 181 .loc 1 71 19 discriminator 2 182 0014 7B68 ldr r3, [r7, #4] 183 0016 5A1E subs r2, r3, #1 184 0018 7B68 ldr r3, [r7, #4] 185 001a 1340 ands r3, r3, r2 186 001c 002B cmp r3, #0 187 001e 01D1 bne .L11 188 .L10: 72:user_src/rkfifo.c **** { 73:user_src/rkfifo.c **** return n; 189 .loc 1 73 16 190 0020 7B68 ldr r3, [r7, #4] 191 0022 08E0 b .L12 192 .L11: 74:user_src/rkfifo.c **** } 75:user_src/rkfifo.c **** else 76:user_src/rkfifo.c **** { 77:user_src/rkfifo.c **** return 1 << (fls_int(n) - 1); 193 .loc 1 77 22 194 0024 7B68 ldr r3, [r7, #4] 195 0026 1846 mov r0, r3 196 0028 FFF7FEFF bl fls_int 197 002c 0346 mov r3, r0 198 .loc 1 77 33 199 002e 013B subs r3, r3, #1 200 .loc 1 77 18 201 0030 0122 movs r2, #1 202 0032 02FA03F3 lsl r3, r2, r3 203 .L12: 78:user_src/rkfifo.c **** } 79:user_src/rkfifo.c **** } 204 .loc 1 79 1 205 0036 1846 mov r0, r3 206 0038 0837 adds r7, r7, #8 207 .LCFI9: 208 .cfi_def_cfa_offset 8 209 003a BD46 mov sp, r7 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 6 210 .LCFI10: 211 .cfi_def_cfa_register 13 212 @ sp needed 213 003c 80BD pop {r7, pc} 214 .cfi_endproc 215 .LFE1: 217 .section .text.kfifo_unused,"ax",%progbits 218 .align 1 219 .syntax unified 220 .thumb 221 .thumb_func 223 kfifo_unused: 224 .LFB2: 80:user_src/rkfifo.c **** 81:user_src/rkfifo.c **** /** 82:user_src/rkfifo.c **** * @brief 查找 fifo 中的剩余空间 83:user_src/rkfifo.c **** * 84:user_src/rkfifo.c **** * @param fifo 85:user_src/rkfifo.c **** * @return unsigned int 86:user_src/rkfifo.c **** */ 87:user_src/rkfifo.c **** static inline unsigned int kfifo_unused(rkfifo_t *fifo) 88:user_src/rkfifo.c **** { 225 .loc 1 88 1 226 .cfi_startproc 227 @ args = 0, pretend = 0, frame = 8 228 @ frame_needed = 1, uses_anonymous_args = 0 229 @ link register save eliminated. 230 0000 80B4 push {r7} 231 .LCFI11: 232 .cfi_def_cfa_offset 4 233 .cfi_offset 7, -4 234 0002 83B0 sub sp, sp, #12 235 .LCFI12: 236 .cfi_def_cfa_offset 16 237 0004 00AF add r7, sp, #0 238 .LCFI13: 239 .cfi_def_cfa_register 7 240 0006 7860 str r0, [r7, #4] 89:user_src/rkfifo.c **** return (fifo->mask + 1) - (fifo->in - fifo->out); 241 .loc 1 89 17 242 0008 7B68 ldr r3, [r7, #4] 243 000a 9A68 ldr r2, [r3, #8] 244 .loc 1 89 47 245 000c 7B68 ldr r3, [r7, #4] 246 000e 5968 ldr r1, [r3, #4] 247 .loc 1 89 36 248 0010 7B68 ldr r3, [r7, #4] 249 0012 1B68 ldr r3, [r3] 250 .loc 1 89 41 251 0014 CB1A subs r3, r1, r3 252 .loc 1 89 29 253 0016 1344 add r3, r3, r2 254 0018 0133 adds r3, r3, #1 90:user_src/rkfifo.c **** } 255 .loc 1 90 1 256 001a 1846 mov r0, r3 257 001c 0C37 adds r7, r7, #12 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 7 258 .LCFI14: 259 .cfi_def_cfa_offset 4 260 001e BD46 mov sp, r7 261 .LCFI15: 262 .cfi_def_cfa_register 13 263 @ sp needed 264 0020 5DF8047B ldr r7, [sp], #4 265 .LCFI16: 266 .cfi_restore 7 267 .cfi_def_cfa_offset 0 268 0024 7047 bx lr 269 .cfi_endproc 270 .LFE2: 272 .section .text.rkfifo_init,"ax",%progbits 273 .align 1 274 .global rkfifo_init 275 .syntax unified 276 .thumb 277 .thumb_func 279 rkfifo_init: 280 .LFB3: 91:user_src/rkfifo.c **** 92:user_src/rkfifo.c **** int rkfifo_init(rkfifo_t *fifo, void *buffer, uint32_t size, uint32_t esize) 93:user_src/rkfifo.c **** { 281 .loc 1 93 1 282 .cfi_startproc 283 @ args = 0, pretend = 0, frame = 16 284 @ frame_needed = 1, uses_anonymous_args = 0 285 0000 80B5 push {r7, lr} 286 .LCFI17: 287 .cfi_def_cfa_offset 8 288 .cfi_offset 7, -8 289 .cfi_offset 14, -4 290 0002 84B0 sub sp, sp, #16 291 .LCFI18: 292 .cfi_def_cfa_offset 24 293 0004 00AF add r7, sp, #0 294 .LCFI19: 295 .cfi_def_cfa_register 7 296 0006 F860 str r0, [r7, #12] 297 0008 B960 str r1, [r7, #8] 298 000a 7A60 str r2, [r7, #4] 299 000c 3B60 str r3, [r7] 94:user_src/rkfifo.c **** size /= esize; 300 .loc 1 94 10 301 000e 7A68 ldr r2, [r7, #4] 302 0010 3B68 ldr r3, [r7] 303 0012 B2FBF3F3 udiv r3, r2, r3 304 0016 7B60 str r3, [r7, #4] 95:user_src/rkfifo.c **** 96:user_src/rkfifo.c **** /* size 必须是 2 的幂次数 */ 97:user_src/rkfifo.c **** if (!is_power_of_2(size)) 305 .loc 1 97 8 306 0018 7B68 ldr r3, [r7, #4] 307 001a 002B cmp r3, #0 308 001c 05D0 beq .L16 309 .loc 1 97 10 discriminator 1 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 8 310 001e 7B68 ldr r3, [r7, #4] 311 0020 5A1E subs r2, r3, #1 312 0022 7B68 ldr r3, [r7, #4] 313 0024 1340 ands r3, r3, r2 314 .loc 1 97 9 discriminator 1 315 0026 002B cmp r3, #0 316 0028 03D0 beq .L17 317 .L16: 98:user_src/rkfifo.c **** { 99:user_src/rkfifo.c **** size = rounddown_pow_of_two(size); 318 .loc 1 99 16 319 002a 7868 ldr r0, [r7, #4] 320 002c FFF7FEFF bl rounddown_pow_of_two 321 0030 7860 str r0, [r7, #4] 322 .L17: 100:user_src/rkfifo.c **** } 101:user_src/rkfifo.c **** 102:user_src/rkfifo.c **** fifo->in = 0; 323 .loc 1 102 14 324 0032 FB68 ldr r3, [r7, #12] 325 0034 0022 movs r2, #0 326 0036 1A60 str r2, [r3] 103:user_src/rkfifo.c **** fifo->out = 0; 327 .loc 1 103 15 328 0038 FB68 ldr r3, [r7, #12] 329 003a 0022 movs r2, #0 330 003c 5A60 str r2, [r3, #4] 104:user_src/rkfifo.c **** fifo->esize = esize; 331 .loc 1 104 17 332 003e FB68 ldr r3, [r7, #12] 333 0040 3A68 ldr r2, [r7] 334 0042 DA60 str r2, [r3, #12] 105:user_src/rkfifo.c **** fifo->data = buffer; 335 .loc 1 105 16 336 0044 FB68 ldr r3, [r7, #12] 337 0046 BA68 ldr r2, [r7, #8] 338 0048 1A61 str r2, [r3, #16] 106:user_src/rkfifo.c **** 107:user_src/rkfifo.c **** if (size < 2) 339 .loc 1 107 8 340 004a 7B68 ldr r3, [r7, #4] 341 004c 012B cmp r3, #1 342 004e 05D8 bhi .L18 108:user_src/rkfifo.c **** { 109:user_src/rkfifo.c **** fifo->mask = 0; 343 .loc 1 109 20 344 0050 FB68 ldr r3, [r7, #12] 345 0052 0022 movs r2, #0 346 0054 9A60 str r2, [r3, #8] 110:user_src/rkfifo.c **** return -RKFIFO_EINVAL; 347 .loc 1 110 16 348 0056 6FF01503 mvn r3, #21 349 005a 04E0 b .L19 350 .L18: 111:user_src/rkfifo.c **** } 112:user_src/rkfifo.c **** 113:user_src/rkfifo.c **** fifo->mask = size - 1; ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 9 351 .loc 1 113 23 352 005c 7B68 ldr r3, [r7, #4] 353 005e 5A1E subs r2, r3, #1 354 .loc 1 113 16 355 0060 FB68 ldr r3, [r7, #12] 356 0062 9A60 str r2, [r3, #8] 114:user_src/rkfifo.c **** 115:user_src/rkfifo.c **** return 0; 357 .loc 1 115 12 358 0064 0023 movs r3, #0 359 .L19: 116:user_src/rkfifo.c **** } 360 .loc 1 116 1 361 0066 1846 mov r0, r3 362 0068 1037 adds r7, r7, #16 363 .LCFI20: 364 .cfi_def_cfa_offset 8 365 006a BD46 mov sp, r7 366 .LCFI21: 367 .cfi_def_cfa_register 13 368 @ sp needed 369 006c 80BD pop {r7, pc} 370 .cfi_endproc 371 .LFE3: 373 .section .text.__rkfifo_copy_in,"ax",%progbits 374 .align 1 375 .syntax unified 376 .thumb 377 .thumb_func 379 __rkfifo_copy_in: 380 .LFB4: 117:user_src/rkfifo.c **** 118:user_src/rkfifo.c **** static void __rkfifo_copy_in(rkfifo_t *fifo, const void *src, unsigned int len, 119:user_src/rkfifo.c **** unsigned int offset) 120:user_src/rkfifo.c **** { 381 .loc 1 120 1 382 .cfi_startproc 383 @ args = 0, pretend = 0, frame = 40 384 @ frame_needed = 1, uses_anonymous_args = 0 385 0000 80B5 push {r7, lr} 386 .LCFI22: 387 .cfi_def_cfa_offset 8 388 .cfi_offset 7, -8 389 .cfi_offset 14, -4 390 0002 8AB0 sub sp, sp, #40 391 .LCFI23: 392 .cfi_def_cfa_offset 48 393 0004 00AF add r7, sp, #0 394 .LCFI24: 395 .cfi_def_cfa_register 7 396 0006 F860 str r0, [r7, #12] 397 0008 B960 str r1, [r7, #8] 398 000a 7A60 str r2, [r7, #4] 399 000c 3B60 str r3, [r7] 121:user_src/rkfifo.c **** unsigned int size = fifo->mask + 1; 400 .loc 1 121 29 401 000e FB68 ldr r3, [r7, #12] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 10 402 0010 9B68 ldr r3, [r3, #8] 403 .loc 1 121 18 404 0012 0133 adds r3, r3, #1 405 0014 7B62 str r3, [r7, #36] 122:user_src/rkfifo.c **** unsigned int esize = fifo->esize; 406 .loc 1 122 18 407 0016 FB68 ldr r3, [r7, #12] 408 0018 DB68 ldr r3, [r3, #12] 409 001a 3B62 str r3, [r7, #32] 123:user_src/rkfifo.c **** unsigned int l; 124:user_src/rkfifo.c **** 125:user_src/rkfifo.c **** offset &= fifo->mask; 410 .loc 1 125 19 411 001c FB68 ldr r3, [r7, #12] 412 001e 9B68 ldr r3, [r3, #8] 413 .loc 1 125 12 414 0020 3A68 ldr r2, [r7] 415 0022 1340 ands r3, r3, r2 416 0024 3B60 str r3, [r7] 126:user_src/rkfifo.c **** if (esize != 1) 417 .loc 1 126 8 418 0026 3B6A ldr r3, [r7, #32] 419 0028 012B cmp r3, #1 420 002a 0ED0 beq .L21 127:user_src/rkfifo.c **** { 128:user_src/rkfifo.c **** offset *= esize; 421 .loc 1 128 16 422 002c 3B68 ldr r3, [r7] 423 002e 3A6A ldr r2, [r7, #32] 424 0030 02FB03F3 mul r3, r2, r3 425 0034 3B60 str r3, [r7] 129:user_src/rkfifo.c **** size *= esize; 426 .loc 1 129 14 427 0036 7B6A ldr r3, [r7, #36] 428 0038 3A6A ldr r2, [r7, #32] 429 003a 02FB03F3 mul r3, r2, r3 430 003e 7B62 str r3, [r7, #36] 130:user_src/rkfifo.c **** len *= esize; 431 .loc 1 130 13 432 0040 7B68 ldr r3, [r7, #4] 433 0042 3A6A ldr r2, [r7, #32] 434 0044 02FB03F3 mul r3, r2, r3 435 0048 7B60 str r3, [r7, #4] 436 .L21: 437 .LBB2: 131:user_src/rkfifo.c **** } 132:user_src/rkfifo.c **** l = min(len, size - offset); 438 .loc 1 132 9 439 004a 7B68 ldr r3, [r7, #4] 440 004c BB61 str r3, [r7, #24] 441 004e 7A6A ldr r2, [r7, #36] 442 0050 3B68 ldr r3, [r7] 443 0052 D31A subs r3, r2, r3 444 0054 7B61 str r3, [r7, #20] 445 0056 7A69 ldr r2, [r7, #20] 446 0058 BB69 ldr r3, [r7, #24] 447 005a 9342 cmp r3, r2 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 11 448 005c 28BF it cs 449 005e 1346 movcs r3, r2 450 .LBE2: 451 .loc 1 132 7 452 0060 FB61 str r3, [r7, #28] 133:user_src/rkfifo.c **** 134:user_src/rkfifo.c **** memcpy((uint8_t*)fifo->data + offset, src, l); 453 .loc 1 134 26 454 0062 FB68 ldr r3, [r7, #12] 455 0064 1A69 ldr r2, [r3, #16] 456 .loc 1 134 5 457 0066 3B68 ldr r3, [r7] 458 0068 1344 add r3, r3, r2 459 006a FA69 ldr r2, [r7, #28] 460 006c B968 ldr r1, [r7, #8] 461 006e 1846 mov r0, r3 462 0070 FFF7FEFF bl memcpy 135:user_src/rkfifo.c **** memcpy(fifo->data, (uint8_t*)src + l, len - l); 463 .loc 1 135 5 464 0074 FB68 ldr r3, [r7, #12] 465 0076 1869 ldr r0, [r3, #16] 466 0078 BA68 ldr r2, [r7, #8] 467 007a FB69 ldr r3, [r7, #28] 468 007c D118 adds r1, r2, r3 469 007e 7A68 ldr r2, [r7, #4] 470 0080 FB69 ldr r3, [r7, #28] 471 0082 D31A subs r3, r2, r3 472 0084 1A46 mov r2, r3 473 0086 FFF7FEFF bl memcpy 136:user_src/rkfifo.c **** 137:user_src/rkfifo.c **** /* 多核处理器需要内存屏障 */ 138:user_src/rkfifo.c **** /* smp_wmb(); */ 139:user_src/rkfifo.c **** } 474 .loc 1 139 1 475 008a 00BF nop 476 008c 2837 adds r7, r7, #40 477 .LCFI25: 478 .cfi_def_cfa_offset 8 479 008e BD46 mov sp, r7 480 .LCFI26: 481 .cfi_def_cfa_register 13 482 @ sp needed 483 0090 80BD pop {r7, pc} 484 .cfi_endproc 485 .LFE4: 487 .section .text.rkfifo_in,"ax",%progbits 488 .align 1 489 .global rkfifo_in 490 .syntax unified 491 .thumb 492 .thumb_func 494 rkfifo_in: 495 .LFB5: 140:user_src/rkfifo.c **** 141:user_src/rkfifo.c **** unsigned int rkfifo_in(rkfifo_t *fifo, const void *buf, unsigned int len) 142:user_src/rkfifo.c **** { 496 .loc 1 142 1 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 12 497 .cfi_startproc 498 @ args = 0, pretend = 0, frame = 24 499 @ frame_needed = 1, uses_anonymous_args = 0 500 0000 80B5 push {r7, lr} 501 .LCFI27: 502 .cfi_def_cfa_offset 8 503 .cfi_offset 7, -8 504 .cfi_offset 14, -4 505 0002 86B0 sub sp, sp, #24 506 .LCFI28: 507 .cfi_def_cfa_offset 32 508 0004 00AF add r7, sp, #0 509 .LCFI29: 510 .cfi_def_cfa_register 7 511 0006 F860 str r0, [r7, #12] 512 0008 B960 str r1, [r7, #8] 513 000a 7A60 str r2, [r7, #4] 143:user_src/rkfifo.c **** unsigned int l; 144:user_src/rkfifo.c **** 145:user_src/rkfifo.c **** l = kfifo_unused(fifo); 514 .loc 1 145 9 515 000c F868 ldr r0, [r7, #12] 516 000e FFF7FEFF bl kfifo_unused 517 0012 7861 str r0, [r7, #20] 146:user_src/rkfifo.c **** 147:user_src/rkfifo.c **** if (len > l) 518 .loc 1 147 8 519 0014 7A68 ldr r2, [r7, #4] 520 0016 7B69 ldr r3, [r7, #20] 521 0018 9A42 cmp r2, r3 522 001a 06D9 bls .L23 148:user_src/rkfifo.c **** { 149:user_src/rkfifo.c **** len = l; 523 .loc 1 149 13 524 001c 7B69 ldr r3, [r7, #20] 525 001e 7B60 str r3, [r7, #4] 150:user_src/rkfifo.c **** fifo->error++; 526 .loc 1 150 13 527 0020 FB68 ldr r3, [r7, #12] 528 0022 5B69 ldr r3, [r3, #20] 529 .loc 1 150 20 530 0024 5A1C adds r2, r3, #1 531 0026 FB68 ldr r3, [r7, #12] 532 0028 5A61 str r2, [r3, #20] 533 .L23: 151:user_src/rkfifo.c **** } 152:user_src/rkfifo.c **** 153:user_src/rkfifo.c **** __rkfifo_copy_in(fifo, buf, len, fifo->in); 534 .loc 1 153 42 535 002a FB68 ldr r3, [r7, #12] 536 002c 1B68 ldr r3, [r3] 537 .loc 1 153 5 538 002e 7A68 ldr r2, [r7, #4] 539 0030 B968 ldr r1, [r7, #8] 540 0032 F868 ldr r0, [r7, #12] 541 0034 FFF7FEFF bl __rkfifo_copy_in 154:user_src/rkfifo.c **** fifo->in += len; ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 13 542 .loc 1 154 14 543 0038 FB68 ldr r3, [r7, #12] 544 003a 1A68 ldr r2, [r3] 545 003c 7B68 ldr r3, [r7, #4] 546 003e 1A44 add r2, r2, r3 547 0040 FB68 ldr r3, [r7, #12] 548 0042 1A60 str r2, [r3] 155:user_src/rkfifo.c **** return len; 549 .loc 1 155 12 550 0044 7B68 ldr r3, [r7, #4] 156:user_src/rkfifo.c **** } 551 .loc 1 156 1 552 0046 1846 mov r0, r3 553 0048 1837 adds r7, r7, #24 554 .LCFI30: 555 .cfi_def_cfa_offset 8 556 004a BD46 mov sp, r7 557 .LCFI31: 558 .cfi_def_cfa_register 13 559 @ sp needed 560 004c 80BD pop {r7, pc} 561 .cfi_endproc 562 .LFE5: 564 .section .text.__rkfifo_copy_out,"ax",%progbits 565 .align 1 566 .syntax unified 567 .thumb 568 .thumb_func 570 __rkfifo_copy_out: 571 .LFB6: 157:user_src/rkfifo.c **** 158:user_src/rkfifo.c **** static void __rkfifo_copy_out(rkfifo_t *fifo, void *dst, unsigned int len, 159:user_src/rkfifo.c **** unsigned int off) 160:user_src/rkfifo.c **** { 572 .loc 1 160 1 573 .cfi_startproc 574 @ args = 0, pretend = 0, frame = 40 575 @ frame_needed = 1, uses_anonymous_args = 0 576 0000 80B5 push {r7, lr} 577 .LCFI32: 578 .cfi_def_cfa_offset 8 579 .cfi_offset 7, -8 580 .cfi_offset 14, -4 581 0002 8AB0 sub sp, sp, #40 582 .LCFI33: 583 .cfi_def_cfa_offset 48 584 0004 00AF add r7, sp, #0 585 .LCFI34: 586 .cfi_def_cfa_register 7 587 0006 F860 str r0, [r7, #12] 588 0008 B960 str r1, [r7, #8] 589 000a 7A60 str r2, [r7, #4] 590 000c 3B60 str r3, [r7] 161:user_src/rkfifo.c **** unsigned int size = fifo->mask + 1; 591 .loc 1 161 29 592 000e FB68 ldr r3, [r7, #12] 593 0010 9B68 ldr r3, [r3, #8] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 14 594 .loc 1 161 18 595 0012 0133 adds r3, r3, #1 596 0014 7B62 str r3, [r7, #36] 162:user_src/rkfifo.c **** unsigned int esize = fifo->esize; 597 .loc 1 162 18 598 0016 FB68 ldr r3, [r7, #12] 599 0018 DB68 ldr r3, [r3, #12] 600 001a 3B62 str r3, [r7, #32] 163:user_src/rkfifo.c **** unsigned int l; 164:user_src/rkfifo.c **** 165:user_src/rkfifo.c **** off &= fifo->mask; 601 .loc 1 165 16 602 001c FB68 ldr r3, [r7, #12] 603 001e 9B68 ldr r3, [r3, #8] 604 .loc 1 165 9 605 0020 3A68 ldr r2, [r7] 606 0022 1340 ands r3, r3, r2 607 0024 3B60 str r3, [r7] 166:user_src/rkfifo.c **** if (esize != 1) 608 .loc 1 166 8 609 0026 3B6A ldr r3, [r7, #32] 610 0028 012B cmp r3, #1 611 002a 0ED0 beq .L26 167:user_src/rkfifo.c **** { 168:user_src/rkfifo.c **** off *= esize; 612 .loc 1 168 13 613 002c 3B68 ldr r3, [r7] 614 002e 3A6A ldr r2, [r7, #32] 615 0030 02FB03F3 mul r3, r2, r3 616 0034 3B60 str r3, [r7] 169:user_src/rkfifo.c **** size *= esize; 617 .loc 1 169 14 618 0036 7B6A ldr r3, [r7, #36] 619 0038 3A6A ldr r2, [r7, #32] 620 003a 02FB03F3 mul r3, r2, r3 621 003e 7B62 str r3, [r7, #36] 170:user_src/rkfifo.c **** len *= esize; 622 .loc 1 170 13 623 0040 7B68 ldr r3, [r7, #4] 624 0042 3A6A ldr r2, [r7, #32] 625 0044 02FB03F3 mul r3, r2, r3 626 0048 7B60 str r3, [r7, #4] 627 .L26: 628 .LBB3: 171:user_src/rkfifo.c **** } 172:user_src/rkfifo.c **** l = min(len, size - off); 629 .loc 1 172 9 630 004a 7B68 ldr r3, [r7, #4] 631 004c BB61 str r3, [r7, #24] 632 004e 7A6A ldr r2, [r7, #36] 633 0050 3B68 ldr r3, [r7] 634 0052 D31A subs r3, r2, r3 635 0054 7B61 str r3, [r7, #20] 636 0056 7A69 ldr r2, [r7, #20] 637 0058 BB69 ldr r3, [r7, #24] 638 005a 9342 cmp r3, r2 639 005c 28BF it cs ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 15 640 005e 1346 movcs r3, r2 641 .LBE3: 642 .loc 1 172 7 643 0060 FB61 str r3, [r7, #28] 173:user_src/rkfifo.c **** 174:user_src/rkfifo.c **** memcpy(dst, (uint8_t*)fifo->data + off, l); 644 .loc 1 174 31 645 0062 FB68 ldr r3, [r7, #12] 646 0064 1A69 ldr r2, [r3, #16] 647 .loc 1 174 5 648 0066 3B68 ldr r3, [r7] 649 0068 1344 add r3, r3, r2 650 006a FA69 ldr r2, [r7, #28] 651 006c 1946 mov r1, r3 652 006e B868 ldr r0, [r7, #8] 653 0070 FFF7FEFF bl memcpy 175:user_src/rkfifo.c **** memcpy((uint8_t*)dst + l, fifo->data, len - l); 654 .loc 1 175 5 655 0074 BA68 ldr r2, [r7, #8] 656 0076 FB69 ldr r3, [r7, #28] 657 0078 D018 adds r0, r2, r3 658 .loc 1 175 35 659 007a FB68 ldr r3, [r7, #12] 660 007c 1969 ldr r1, [r3, #16] 661 .loc 1 175 5 662 007e 7A68 ldr r2, [r7, #4] 663 0080 FB69 ldr r3, [r7, #28] 664 0082 D31A subs r3, r2, r3 665 0084 1A46 mov r2, r3 666 0086 FFF7FEFF bl memcpy 176:user_src/rkfifo.c **** 177:user_src/rkfifo.c **** /* smp_wmb(); */ 178:user_src/rkfifo.c **** } 667 .loc 1 178 1 668 008a 00BF nop 669 008c 2837 adds r7, r7, #40 670 .LCFI35: 671 .cfi_def_cfa_offset 8 672 008e BD46 mov sp, r7 673 .LCFI36: 674 .cfi_def_cfa_register 13 675 @ sp needed 676 0090 80BD pop {r7, pc} 677 .cfi_endproc 678 .LFE6: 680 .section .text.rkfifo_out_peek,"ax",%progbits 681 .align 1 682 .global rkfifo_out_peek 683 .syntax unified 684 .thumb 685 .thumb_func 687 rkfifo_out_peek: 688 .LFB7: 179:user_src/rkfifo.c **** 180:user_src/rkfifo.c **** unsigned int rkfifo_out_peek(rkfifo_t *fifo, void *buf, unsigned int len) 181:user_src/rkfifo.c **** { 689 .loc 1 181 1 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 16 690 .cfi_startproc 691 @ args = 0, pretend = 0, frame = 24 692 @ frame_needed = 1, uses_anonymous_args = 0 693 0000 80B5 push {r7, lr} 694 .LCFI37: 695 .cfi_def_cfa_offset 8 696 .cfi_offset 7, -8 697 .cfi_offset 14, -4 698 0002 86B0 sub sp, sp, #24 699 .LCFI38: 700 .cfi_def_cfa_offset 32 701 0004 00AF add r7, sp, #0 702 .LCFI39: 703 .cfi_def_cfa_register 7 704 0006 F860 str r0, [r7, #12] 705 0008 B960 str r1, [r7, #8] 706 000a 7A60 str r2, [r7, #4] 182:user_src/rkfifo.c **** unsigned int l; 183:user_src/rkfifo.c **** 184:user_src/rkfifo.c **** l = fifo->in - fifo->out; 707 .loc 1 184 13 708 000c FB68 ldr r3, [r7, #12] 709 000e 1A68 ldr r2, [r3] 710 .loc 1 184 24 711 0010 FB68 ldr r3, [r7, #12] 712 0012 5B68 ldr r3, [r3, #4] 713 .loc 1 184 7 714 0014 D31A subs r3, r2, r3 715 0016 7B61 str r3, [r7, #20] 185:user_src/rkfifo.c **** if (len > l) 716 .loc 1 185 8 717 0018 7A68 ldr r2, [r7, #4] 718 001a 7B69 ldr r3, [r7, #20] 719 001c 9A42 cmp r2, r3 720 001e 01D9 bls .L28 186:user_src/rkfifo.c **** len = l; 721 .loc 1 186 13 722 0020 7B69 ldr r3, [r7, #20] 723 0022 7B60 str r3, [r7, #4] 724 .L28: 187:user_src/rkfifo.c **** 188:user_src/rkfifo.c **** __rkfifo_copy_out(fifo, buf, len, fifo->out); 725 .loc 1 188 43 726 0024 FB68 ldr r3, [r7, #12] 727 0026 5B68 ldr r3, [r3, #4] 728 .loc 1 188 5 729 0028 7A68 ldr r2, [r7, #4] 730 002a B968 ldr r1, [r7, #8] 731 002c F868 ldr r0, [r7, #12] 732 002e FFF7FEFF bl __rkfifo_copy_out 189:user_src/rkfifo.c **** return len; 733 .loc 1 189 12 734 0032 7B68 ldr r3, [r7, #4] 190:user_src/rkfifo.c **** } 735 .loc 1 190 1 736 0034 1846 mov r0, r3 737 0036 1837 adds r7, r7, #24 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 17 738 .LCFI40: 739 .cfi_def_cfa_offset 8 740 0038 BD46 mov sp, r7 741 .LCFI41: 742 .cfi_def_cfa_register 13 743 @ sp needed 744 003a 80BD pop {r7, pc} 745 .cfi_endproc 746 .LFE7: 748 .section .text.rkfifo_out,"ax",%progbits 749 .align 1 750 .global rkfifo_out 751 .syntax unified 752 .thumb 753 .thumb_func 755 rkfifo_out: 756 .LFB8: 191:user_src/rkfifo.c **** 192:user_src/rkfifo.c **** unsigned int rkfifo_out(rkfifo_t *fifo, void *buf, unsigned int len) 193:user_src/rkfifo.c **** { 757 .loc 1 193 1 758 .cfi_startproc 759 @ args = 0, pretend = 0, frame = 16 760 @ frame_needed = 1, uses_anonymous_args = 0 761 0000 80B5 push {r7, lr} 762 .LCFI42: 763 .cfi_def_cfa_offset 8 764 .cfi_offset 7, -8 765 .cfi_offset 14, -4 766 0002 84B0 sub sp, sp, #16 767 .LCFI43: 768 .cfi_def_cfa_offset 24 769 0004 00AF add r7, sp, #0 770 .LCFI44: 771 .cfi_def_cfa_register 7 772 0006 F860 str r0, [r7, #12] 773 0008 B960 str r1, [r7, #8] 774 000a 7A60 str r2, [r7, #4] 194:user_src/rkfifo.c **** len = rkfifo_out_peek(fifo, buf, len); 775 .loc 1 194 11 776 000c 7A68 ldr r2, [r7, #4] 777 000e B968 ldr r1, [r7, #8] 778 0010 F868 ldr r0, [r7, #12] 779 0012 FFF7FEFF bl rkfifo_out_peek 780 0016 7860 str r0, [r7, #4] 195:user_src/rkfifo.c **** fifo->out += len; 781 .loc 1 195 15 782 0018 FB68 ldr r3, [r7, #12] 783 001a 5A68 ldr r2, [r3, #4] 784 001c 7B68 ldr r3, [r7, #4] 785 001e 1A44 add r2, r2, r3 786 0020 FB68 ldr r3, [r7, #12] 787 0022 5A60 str r2, [r3, #4] 196:user_src/rkfifo.c **** return len; 788 .loc 1 196 12 789 0024 7B68 ldr r3, [r7, #4] 197:user_src/rkfifo.c **** } ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 18 790 .loc 1 197 1 791 0026 1846 mov r0, r3 792 0028 1037 adds r7, r7, #16 793 .LCFI45: 794 .cfi_def_cfa_offset 8 795 002a BD46 mov sp, r7 796 .LCFI46: 797 .cfi_def_cfa_register 13 798 @ sp needed 799 002c 80BD pop {r7, pc} 800 .cfi_endproc 801 .LFE8: 803 .text 804 .Letext0: 805 .file 2 "d:\\arm-gcc\\arm-none-eabi\\include\\machine\\_default_types.h" 806 .file 3 "d:\\arm-gcc\\arm-none-eabi\\include\\sys\\_stdint.h" 807 .file 4 "user_inc/rkfifo.h" ARM GAS C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s page 19 DEFINED SYMBOLS *ABS*:00000000 rkfifo.c C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:20 .text.fls_int:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:25 .text.fls_int:00000000 fls_int C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:150 .text.rounddown_pow_of_two:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:155 .text.rounddown_pow_of_two:00000000 rounddown_pow_of_two C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:218 .text.kfifo_unused:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:223 .text.kfifo_unused:00000000 kfifo_unused C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:273 .text.rkfifo_init:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:279 .text.rkfifo_init:00000000 rkfifo_init C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:374 .text.__rkfifo_copy_in:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:379 .text.__rkfifo_copy_in:00000000 __rkfifo_copy_in C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:488 .text.rkfifo_in:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:494 .text.rkfifo_in:00000000 rkfifo_in C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:565 .text.__rkfifo_copy_out:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:570 .text.__rkfifo_copy_out:00000000 __rkfifo_copy_out C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:681 .text.rkfifo_out_peek:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:687 .text.rkfifo_out_peek:00000000 rkfifo_out_peek C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:749 .text.rkfifo_out:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccd7h6eA.s:755 .text.rkfifo_out:00000000 rkfifo_out UNDEFINED SYMBOLS memcpy