############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 19/Dec/2008 01:45:05 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = K:\Pasha\elf\_MY_PROJECT_\TED_w\linework.c # # Command line = K:\Pasha\elf\_MY_PROJECT_\TED_w\linework.c -D # # NEWSGOLD -D ELKA -lC K:\Pasha\elf\_MY_PROJECT_\TED_w # # \Release_ELKA\List\ -o K:\Pasha\elf\_MY_PROJECT_\TED # # _w\Release_ELKA\Obj\ -s9 --no_unroll # # --no_clustering --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None -I "K:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=9 # # List file = K:\Pasha\elf\_MY_PROJECT_\TED_w\Release_ELKA\List\li # # nework.lst # # Object file = K:\Pasha\elf\_MY_PROJECT_\TED_w\Release_ELKA\Obj\lin # # ework.r79 # # # # # ############################################################################## K:\Pasha\elf\_MY_PROJECT_\TED_w\linework.c 1 extern unsigned int STKSZ; 2 3 extern unsigned int usp; //Указатель на верхний стек 4 extern unsigned int dsp; //Указатель на нижний стек 5 extern char *dstk; 6 extern char *ustk; 7 \ In segment CODE, align 4, keep-with-next 8 unsigned int bl_us(unsigned int p) 9 { 10 char *u=ustk; \ bl_us: \ 00000000 ........ LDR R1,??DataTable11 ;; ustk 11 if (!p) return(p); \ 00000004 000050E3 CMP R0,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 1EFF2F01 BXEQ LR 12 do 13 { 14 if (!(--p)) break; \ ??bl_us_0: \ 00000010 010050E2 SUBS R0,R0,#+1 \ 00000014 1EFF2F01 BXEQ LR 15 } 16 while(u[p-1]); \ 00000018 012080E0 ADD R2,R0,R1 \ 0000001C 012052E5 LDRB R2,[R2, #-1] \ 00000020 000052E3 CMP R2,#+0 \ 00000024 F9FFFF1A BNE ??bl_us_0 17 return(p); \ 00000028 1EFF2FE1 BX LR ;; return 18 } 19 \ In segment CODE, align 4, keep-with-next 20 unsigned int bl_ds(unsigned int p) 21 { 22 char *d=dstk; 23 if (p==STKSZ) return(p); \ bl_ds: \ 00000000 ........ LDR R2,??DataTable10 ;; STKSZ \ 00000004 ........ LDR R1,??DataTable9 ;; dstk \ 00000008 002092E5 LDR R2,[R2, #+0] \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 020050E1 CMP R0,R2 \ 00000014 030000EA B ??bl_ds_0 24 do 25 { 26 p++; \ ??bl_ds_1: \ 00000018 010080E2 ADD R0,R0,#+1 27 } 28 while(d[p-1]); \ 0000001C 012080E0 ADD R2,R0,R1 \ 00000020 012052E5 LDRB R2,[R2, #-1] \ 00000024 000052E3 CMP R2,#+0 \ ??bl_ds_0: \ 00000028 FAFFFF1A BNE ??bl_ds_1 \ 0000002C 1EFF2FE1 BX LR 29 return(p); 30 } 31 32 //Перенос из верхнего стека в нижний (на строку вверх) \ In segment CODE, align 4, keep-with-next 33 void move_up(void) 34 { 35 unsigned int s=usp; \ move_up: \ 00000000 ........ LDR R0,??DataTable8 ;; usp 36 unsigned int d=dsp; 37 unsigned int c; 38 39 char *ds=dstk; \ 00000004 ........ LDR R2,??DataTable9 ;; dstk 40 char *us=ustk; \ 00000008 ........ LDR R3,??DataTable11 ;; ustk \ 0000000C 30002DE9 PUSH {R4,R5} \ 00000010 001090E5 LDR R1,[R0, #+0] \ 00000014 002092E5 LDR R2,[R2, #+0] \ 00000018 003093E5 LDR R3,[R3, #+0] 41 42 if (!s) return; \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 1D00000A BEQ ??move_up_0 43 ds[--d]=us[--s]; //Переносим 0 \ 00000024 ........ LDR R12,??DataTable7 ;; dsp \ 00000028 011041E2 SUB R1,R1,#+1 \ 0000002C 0350D1E7 LDRB R5,[R1, +R3] \ 00000030 00409CE5 LDR R4,[R12, #+0] \ 00000034 014044E2 SUB R4,R4,#+1 \ 00000038 0250C4E7 STRB R5,[R4, +R2] 44 if (s>256) \ 0000003C 0150A0E3 MOV R5,#+1 \ 00000040 405F85E3 ORR R5,R5,#0x100 \ 00000044 050051E1 CMP R1,R5 \ 00000048 0B00003A BCC ??move_up_1 \ 0000004C 010000EA B ??move_up_2 45 { 46 while((c=us[--s])) ds[--d]=c; \ ??move_up_3: \ 00000050 014044E2 SUB R4,R4,#+1 \ 00000054 0250C4E7 STRB R5,[R4, +R2] \ ??move_up_2: \ 00000058 011041E2 SUB R1,R1,#+1 \ 0000005C 0350D1E7 LDRB R5,[R1, +R3] \ 00000060 000055E3 CMP R5,#+0 \ 00000064 F9FFFF1A BNE ??move_up_3 47 s++; \ 00000068 011081E2 ADD R1,R1,#+1 \ 0000006C 080000EA B ??move_up_4 48 } 49 else 50 { 51 while(s) 52 { 53 if (!(c=us[s-1])) break; 54 s--; \ ??move_up_5: \ 00000070 011041E2 SUB R1,R1,#+1 55 ds[--d]=c; \ 00000074 014044E2 SUB R4,R4,#+1 \ 00000078 0250C4E7 STRB R5,[R4, +R2] \ ??move_up_1: \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0300000A BEQ ??move_up_4 \ 00000084 035081E0 ADD R5,R1,R3 \ 00000088 015055E5 LDRB R5,[R5, #-1] \ 0000008C 000055E3 CMP R5,#+0 \ 00000090 F6FFFF1A BNE ??move_up_5 56 } 57 } 58 usp=s; \ ??move_up_4: \ 00000094 001080E5 STR R1,[R0, #+0] 59 dsp=d; \ 00000098 00408CE5 STR R4,[R12, #+0] 60 } \ ??move_up_0: \ 0000009C 3000BDE8 POP {R4,R5} \ 000000A0 1EFF2FE1 BX LR ;; return 61 62 //Перенос из нижнего стека в верхний (на строку вниз) \ In segment CODE, align 4, keep-with-next 63 void move_dw(void) 64 { 65 unsigned int s=dsp; \ move_dw: \ 00000000 ........ LDR R0,??DataTable7 ;; dsp 66 unsigned int d=usp; \ 00000004 ........ LDR R2,??DataTable8 ;; usp \ 00000008 70002DE9 PUSH {R4-R6} 67 char *ds=dstk; \ 0000000C ........ LDR R4,??DataTable9 ;; dstk \ 00000010 001090E5 LDR R1,[R0, #+0] 68 char *us=ustk; 69 70 if (s==STKSZ) return; \ 00000014 ........ LDR R5,??DataTable10 ;; STKSZ \ 00000018 00C094E5 LDR R12,[R4, #+0] \ 0000001C ........ LDR R4,??DataTable11 ;; ustk \ 00000020 005095E5 LDR R5,[R5, #+0] \ 00000024 003092E5 LDR R3,[R2, #+0] \ 00000028 004094E5 LDR R4,[R4, #+0] \ 0000002C 050051E1 CMP R1,R5 \ 00000030 0800000A BEQ ??move_dw_0 71 while((us[d]=ds[s])) 72 { 73 d++; 74 s++; \ ??move_dw_1: \ 00000034 0C60D1E7 LDRB R6,[R1, +R12] \ 00000038 045083E0 ADD R5,R3,R4 \ 0000003C 011081E2 ADD R1,R1,#+1 \ 00000040 0060C5E5 STRB R6,[R5, #+0] \ 00000044 013083E2 ADD R3,R3,#+1 \ 00000048 000056E3 CMP R6,#+0 \ 0000004C F8FFFF1A BNE ??move_dw_1 75 } 76 d++; 77 s++; 78 dsp=s; \ 00000050 001080E5 STR R1,[R0, #+0] 79 usp=d; \ 00000054 003082E5 STR R3,[R2, #+0] 80 } \ ??move_dw_0: \ 00000058 7000BDE8 POP {R4-R6} \ 0000005C 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 dsp \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 usp \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 dstk \ In segment CODE, align 4, keep-with-next \ ??DataTable10: \ 00000000 ........ DC32 STKSZ \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 ustk Maximum stack usage in bytes: Function CSTACK -------- ------ bl_ds 0 bl_us 0 move_dw 12 move_up 8 Segment part sizes: Function/Label Bytes -------------- ----- bl_us 44 bl_ds 48 move_up 164 move_dw 96 ??DataTable7 4 ??DataTable8 4 ??DataTable9 4 ??DataTable10 4 ??DataTable11 4 Others 16 388 bytes in segment CODE 372 bytes of CODE memory (+ 16 bytes shared) Errors: none Warnings: none