📄 lib_mem.lst
字号:
393 }
394 if (p1_mem == (void *)0) {
\ ??Mem_Cmp_0:
\ 0000001C 000053E3 CMP R3,#+0
\ 00000020 0100001A BNE ??Mem_Cmp_2
395 return (DEF_NO);
\ 00000024 0000A0E3 MOV R0,#+0
\ 00000028 510000EA B ??Mem_Cmp_1
396 }
397 if (p2_mem == (void *)0) {
\ ??Mem_Cmp_2:
\ 0000002C 000051E3 CMP R1,#+0
\ 00000030 0100001A BNE ??Mem_Cmp_3
398 return (DEF_NO);
\ 00000034 0000A0E3 MOV R0,#+0
\ 00000038 4D0000EA B ??Mem_Cmp_1
399 }
400
401
402 mem_cmp = DEF_YES;
\ ??Mem_Cmp_3:
\ 0000003C 0100A0E3 MOV R0,#+1
\ 00000040 00B0B0E1 MOVS R11,R0
403 size_rem = size;
\ 00000044 02C0B0E1 MOVS R12,R2
404 /* Start @ end of mem bufs (see Note #2). */
405 p1_mem_08 = (CPU_INT08U *)p1_mem + size;
\ 00000048 030092E0 ADDS R0,R2,R3
\ 0000004C 0060B0E1 MOVS R6,R0
406 p2_mem_08 = (CPU_INT08U *)p2_mem + size;
\ 00000050 010092E0 ADDS R0,R2,R1
\ 00000054 0070B0E1 MOVS R7,R0
407 /* See Note #4. */
408 mem_align_modulo_1 = (CPU_INT08U )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
\ 00000058 030016E2 ANDS R0,R6,#0x3 ;; Zero extend
\ 0000005C 0090B0E1 MOVS R9,R0
409 mem_align_modulo_2 = (CPU_INT08U )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
\ 00000060 03E017E2 ANDS LR,R7,#0x3 ;; Zero extend
\ 00000064 00E0CDE5 STRB LR,[SP, #+0]
410
411 mem_aligned = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
\ 00000068 0000DDE5 LDRB R0,[SP, #+0]
\ 0000006C FF9019E2 ANDS R9,R9,#0xFF ;; Zero extend
\ 00000070 000059E1 CMP R9,R0
\ 00000074 0100001A BNE ??Mem_Cmp_4
\ 00000078 01A0A0E3 MOV R10,#+1
\ 0000007C 000000EA B ??Mem_Cmp_5
\ ??Mem_Cmp_4:
\ 00000080 00A0A0E3 MOV R10,#+0
412
413 if (mem_aligned == DEF_YES) { /* If mem bufs' alignment offset equal, ... */
\ ??Mem_Cmp_5:
\ 00000084 FFA01AE2 ANDS R10,R10,#0xFF ;; Zero extend
\ 00000088 01005AE3 CMP R10,#+1
\ 0000008C 2900001A BNE ??Mem_Cmp_6
414 /* ... optimize cmp for mem buf alignment. */
415 if (mem_align_modulo_1 != 0) { /* If trailing octets avail, ... */
\ 00000090 FF9019E2 ANDS R9,R9,#0xFF ;; Zero extend
\ 00000094 000059E3 CMP R9,#+0
\ 00000098 1200000A BEQ ??Mem_Cmp_7
416 i = mem_align_modulo_1;
\ 0000009C 0980B0E1 MOVS R8,R9
417 while ((mem_cmp == DEF_YES) && /* ... cmp mem bufs while identical & ... */
418 (size_rem > 0) && /* ... start mem buf cmp with trailing octets ... */
419 (i > 0)) { /* ... until next CPU_ALIGN word boundary. */
\ ??Mem_Cmp_8:
\ 000000A0 01005BE3 CMP R11,#+1
\ 000000A4 0F00001A BNE ??Mem_Cmp_7
\ 000000A8 00005CE3 CMP R12,#+0
\ 000000AC 0D00000A BEQ ??Mem_Cmp_7
\ 000000B0 FF8018E2 ANDS R8,R8,#0xFF ;; Zero extend
\ 000000B4 010058E3 CMP R8,#+1
\ 000000B8 0A00003A BCC ??Mem_Cmp_7
420 p1_mem_08--;
\ 000000BC 016056E2 SUBS R6,R6,#+1
421 p2_mem_08--;
\ 000000C0 017057E2 SUBS R7,R7,#+1
422 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
\ 000000C4 0000D6E5 LDRB R0,[R6, #+0]
\ 000000C8 00E0D7E5 LDRB LR,[R7, #+0]
\ 000000CC 0E0050E1 CMP R0,LR
\ 000000D0 0100000A BEQ ??Mem_Cmp_9
423 mem_cmp = DEF_NO;
\ 000000D4 0000A0E3 MOV R0,#+0
\ 000000D8 00B0B0E1 MOVS R11,R0
424 }
425 size_rem -= sizeof(CPU_INT08U);
\ ??Mem_Cmp_9:
\ 000000DC 01C05CE2 SUBS R12,R12,#+1
426 i--;
\ 000000E0 018058E2 SUBS R8,R8,#+1
\ 000000E4 EDFFFFEA B ??Mem_Cmp_8
427 }
428 }
429
430 if (mem_cmp == DEF_YES) { /* If cmp still identical, cmp aligned mem bufs. */
\ ??Mem_Cmp_7:
\ 000000E8 01005BE3 CMP R11,#+1
\ 000000EC 1100001A BNE ??Mem_Cmp_6
431 p1_mem_align = (CPU_ALIGN *)p1_mem_08; /* See Note #3a. */
\ 000000F0 0640B0E1 MOVS R4,R6
432 p2_mem_align = (CPU_ALIGN *)p2_mem_08;
\ 000000F4 0750B0E1 MOVS R5,R7
433
434 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical & ... */
435 (size_rem >= sizeof(CPU_ALIGN))) { /* ... mem bufs aligned on CPU_ALIGN word boundaries. */
\ ??Mem_Cmp_10:
\ 000000F8 01005BE3 CMP R11,#+1
\ 000000FC 0B00001A BNE ??Mem_Cmp_11
\ 00000100 04005CE3 CMP R12,#+4
\ 00000104 0900003A BCC ??Mem_Cmp_11
436 p1_mem_align--;
\ 00000108 044054E2 SUBS R4,R4,#+4
437 p2_mem_align--;
\ 0000010C 045055E2 SUBS R5,R5,#+4
438 if (*p1_mem_align != *p2_mem_align) { /* If ANY data octet(s) NOT identical, cmp fails. */
\ 00000110 000094E5 LDR R0,[R4, #+0]
\ 00000114 00E095E5 LDR LR,[R5, #+0]
\ 00000118 0E0050E1 CMP R0,LR
\ 0000011C 0100000A BEQ ??Mem_Cmp_12
439 mem_cmp = DEF_NO;
\ 00000120 0000A0E3 MOV R0,#+0
\ 00000124 00B0B0E1 MOVS R11,R0
440 }
441 size_rem -= sizeof(CPU_ALIGN);
\ ??Mem_Cmp_12:
\ 00000128 04C05CE2 SUBS R12,R12,#+4
\ 0000012C F1FFFFEA B ??Mem_Cmp_10
442 }
443
444 p1_mem_08 = (CPU_INT08U *)p1_mem_align;
\ ??Mem_Cmp_11:
\ 00000130 0460B0E1 MOVS R6,R4
445 p2_mem_08 = (CPU_INT08U *)p2_mem_align;
\ 00000134 0570B0E1 MOVS R7,R5
446 }
447 }
448
449 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical ... */
450 (size_rem > 0)) { /* ... for unaligned mem bufs or trailing octets. */
\ ??Mem_Cmp_6:
\ 00000138 01005BE3 CMP R11,#+1
\ 0000013C 0B00001A BNE ??Mem_Cmp_13
\ 00000140 00005CE3 CMP R12,#+0
\ 00000144 0900000A BEQ ??Mem_Cmp_13
451 p1_mem_08--;
\ 00000148 016056E2 SUBS R6,R6,#+1
452 p2_mem_08--;
\ 0000014C 017057E2 SUBS R7,R7,#+1
453 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
\ 00000150 0000D6E5 LDRB R0,[R6, #+0]
\ 00000154 00E0D7E5 LDRB LR,[R7, #+0]
\ 00000158 0E0050E1 CMP R0,LR
\ 0000015C 0100000A BEQ ??Mem_Cmp_14
454 mem_cmp = DEF_NO;
\ 00000160 0000A0E3 MOV R0,#+0
\ 00000164 00B0B0E1 MOVS R11,R0
455 }
456 size_rem -= sizeof(CPU_INT08U);
\ ??Mem_Cmp_14:
\ 00000168 01C05CE2 SUBS R12,R12,#+1
\ 0000016C F1FFFFEA B ??Mem_Cmp_6
457 }
458
459 return (mem_cmp);
\ ??Mem_Cmp_13:
\ 00000170 0B00B0E1 MOVS R0,R11
\ ??Mem_Cmp_1:
\ 00000174 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 00000178 F08FBDE8 POP {R4-R11,PC} ;; return
460 }
461
Maximum stack usage in bytes:
Function CSTACK
-------- ------
Mem_Clr 12
Mem_Cmp 40
Mem_Copy 32
Mem_Set 20
Segment part sizes:
Function/Label Bytes
-------------- -----
Mem_Clr 32
Mem_Set 204
Mem_Copy 248
Mem_Cmp 380
864 bytes in segment CODE
864 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -