############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jul/2011 16:25:21 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\IMGHDR_work.c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\IMGHDR_work.c -D # # X75 -D GUI_INTERFACE -D START_OFFLINE --preprocess # # D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \List\ -lC D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_ST # # ART_OFFLINE\List\ -o D:\pasha\elf\_MY_PROJECT_\_NATI # # CQ2\X75_START_OFFLINE\Obj\ -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \List\IMGHDR_work.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \Obj\IMGHDR_work.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\IMGHDR_work.c 1 #include "../inc/swilib.h" 2 3 // compressing bitmap of IMGHDR struct 4 \ In segment CODE, align 4, keep-with-next 5 void PressImg(IMGHDR *imgsrc, char freemap) // freemap=1 if need mfree(imgsrc->bitmap) 6 { \ PressImg: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 \ 00000008 0050B0E1 MOVS R5,R0 7 // проверка 8 if(!imgsrc) return; 9 if(!imgsrc->bitmap) return; \ 0000000C 04009515 LDRNE R0,[R5, #+4] \ 00000010 00005013 CMPNE R0,#+0 \ 00000014 3300000A BEQ ??PressImg_0 10 char c=0; 11 switch(imgsrc->bpnum) // формат изображения: \ 00000018 B200D5E1 LDRH R0,[R5, #+2] \ 0000001C 051050E2 SUBS R1,R0,#+5 \ 00000020 0500000A BEQ ??PressImg_1 \ 00000024 031051E2 SUBS R1,R1,#+3 \ 00000028 0500000A BEQ ??PressImg_2 \ 0000002C 021051E2 SUBS R1,R1,#+2 \ 00000030 0500000A BEQ ??PressImg_3 \ 00000034 18D08DE2 ADD SP,SP,#+24 \ 00000038 F08FBDE8 POP {R4-R11,PC} 12 { 13 case 5: c=1; break; // 8-битный \ ??PressImg_1: \ 0000003C 0140A0E3 MOV R4,#+1 \ 00000040 020000EA B ??PressImg_4 14 case 8: c=2; break; // 16-битный \ ??PressImg_2: \ 00000044 0240A0E3 MOV R4,#+2 \ 00000048 000000EA B ??PressImg_4 15 case 0xA: c=4; break; // 32-битный \ ??PressImg_3: \ 0000004C 0440A0E3 MOV R4,#+4 16 default: return; // уже сжатый или другой, прерывание функции 17 } 18 imgsrc->bpnum+=0x80; \ ??PressImg_4: \ 00000050 800080E2 ADD R0,R0,#+128 \ 00000054 B200C5E1 STRH R0,[R5, #+2] 19 20 // само сжатие 21 int cps=0, tsz; 22 unsigned int tc[2]; 23 unsigned int tmpBufsz=0; 24 char *tmpBuf=malloc(imgsrc->h*imgsrc->w*(c+1)); // временный буфер \ 00000058 0100D5E5 LDRB R0,[R5, #+1] \ 0000005C 0010D5E5 LDRB R1,[R5, #+0] \ 00000060 0060A0E3 MOV R6,#+0 \ 00000064 0070A0E3 MOV R7,#+0 \ 00000068 910000E0 MUL R0,R1,R0 \ 0000006C 011084E2 ADD R1,R4,#+1 \ 00000070 910000E0 MUL R0,R1,R0 \ 00000074 0680A0E1 MOV R8,R6 \ 00000078 140000EF SWI +20 \ 0000007C 10008DE5 STR R0,[SP, #+16] 25 zeromem(tmpBuf, imgsrc->h*imgsrc->w*(c+1)); \ 00000080 0100D5E5 LDRB R0,[R5, #+1] \ 00000084 0010D5E5 LDRB R1,[R5, #+0] \ 00000088 012084E2 ADD R2,R4,#+1 \ 0000008C 910000E0 MUL R0,R1,R0 \ 00000090 920001E0 MUL R1,R2,R0 \ 00000094 10009DE5 LDR R0,[SP, #+16] \ 00000098 1D0100EF SWI +285 \ 0000009C 0100D5E5 LDRB R0,[R5, #+1] \ 000000A0 0010D5E5 LDRB R1,[R5, #+0] \ 000000A4 910000E0 MUL R0,R1,R0 \ 000000A8 010050E3 CMP R0,#+1 \ 000000AC 390000AA BGE ??PressImg_5 26 while(cpsh*imgsrc->w) 27 { 28 tsz=0; 29 tc[0]=0; 30 tc[1]=0; 31 memcpy(&tc[0], imgsrc->bitmap+cps*c, c); 32 memcpy(&tc[1], imgsrc->bitmap+cps*c+c, c); 33 if((tc[0]==tc[1])) 34 { 35 do 36 { 37 tsz++; 38 tc[0]=0; 39 tc[1]=0; 40 memcpy(&tc[0], imgsrc->bitmap+(tsz+cps)*c, c); 41 memcpy(&tc[1], imgsrc->bitmap+(tsz+cps)*c+c, c); 42 }while((tc[0]==tc[1]) && (tsz<127) && ((tsz+cps)h*imgsrc->w)); 43 tmpBuf[tmpBufsz]=tsz; 44 memcpy(tmpBuf+tmpBufsz+1, imgsrc->bitmap+cps*c, c); 45 tmpBufsz+=c+1; 46 } 47 else 48 { 49 do 50 { 51 tsz++; 52 tc[0]=0; 53 tc[1]=0; 54 memcpy(&tc[0], imgsrc->bitmap+(tsz+cps)*c, c); 55 memcpy(&tc[1], imgsrc->bitmap+(tsz+cps)*c+c, c); 56 }while((tc[0]!=tc[1]) && (tsz<127) && ((tsz+cps)h*imgsrc->w)); 57 tmpBuf[tmpBufsz]=0x100-tsz; 58 memcpy(tmpBuf+tmpBufsz+1, imgsrc->bitmap+cps*c, tsz*c); 59 tmpBufsz+=tsz*c+1; 60 } 61 cps+=tsz; 62 } 63 char *buf2=malloc(tmpBufsz); \ ??PressImg_6: \ 000000B0 0800A0E1 MOV R0,R8 \ 000000B4 140000EF SWI +20 64 memcpy(buf2,tmpBuf,tmpBufsz); \ 000000B8 10109DE5 LDR R1,[SP, #+16] \ 000000BC 0040A0E1 MOV R4,R0 \ 000000C0 0820A0E1 MOV R2,R8 \ 000000C4 1E0100EF SWI +286 65 if(freemap) mfree(imgsrc->bitmap); \ 000000C8 1400DDE5 LDRB R0,[SP, #+20] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0100000A BEQ ??PressImg_7 \ 000000D4 040095E5 LDR R0,[R5, #+4] \ 000000D8 150000EF SWI +21 66 imgsrc->bitmap=buf2; \ ??PressImg_7: \ 000000DC 044085E5 STR R4,[R5, #+4] 67 mfree(tmpBuf); \ 000000E0 10009DE5 LDR R0,[SP, #+16] \ 000000E4 150000EF SWI +21 68 } \ ??PressImg_0: \ 000000E8 18D08DE2 ADD SP,SP,#+24 ;; stack cleaning \ 000000EC F08FBDE8 POP {R4-R11,PC} ;; return \ ??PressImg_8: \ 000000F0 019089E2 ADD R9,R9,#+1 \ 000000F4 00708DE5 STR R7,[SP, #+0] \ 000000F8 04708DE5 STR R7,[SP, #+4] \ 000000FC 040095E5 LDR R0,[R5, #+4] \ 00000100 09A086E0 ADD R10,R6,R9 \ 00000104 940A0BE0 MUL R11,R4,R10 \ 00000108 0420A0E1 MOV R2,R4 \ 0000010C 00108BE0 ADD R1,R11,R0 \ 00000110 0D00A0E1 MOV R0,SP \ 00000114 1E0100EF SWI +286 \ 00000118 040095E5 LDR R0,[R5, #+4] \ 0000011C 0420A0E1 MOV R2,R4 \ 00000120 000084E0 ADD R0,R4,R0 \ 00000124 00108BE0 ADD R1,R11,R0 \ 00000128 04008DE2 ADD R0,SP,#+4 \ 0000012C 1E0100EF SWI +286 \ 00000130 00009DE5 LDR R0,[SP, #+0] \ 00000134 04109DE5 LDR R1,[SP, #+4] \ 00000138 010050E1 CMP R0,R1 \ 0000013C 0600000A BEQ ??PressImg_9 \ 00000140 7F0059E3 CMP R9,#+127 \ 00000144 040000AA BGE ??PressImg_9 \ 00000148 0100D5E5 LDRB R0,[R5, #+1] \ 0000014C 0010D5E5 LDRB R1,[R5, #+0] \ 00000150 910000E0 MUL R0,R1,R0 \ 00000154 00005AE1 CMP R10,R0 \ 00000158 E4FFFFBA BLT ??PressImg_8 \ ??PressImg_9: \ 0000015C 08009DE5 LDR R0,[SP, #+8] \ 00000160 0910A0E1 MOV R1,R9 \ 00000164 001061E2 RSB R1,R1,#+0 \ 00000168 0010C0E5 STRB R1,[R0, #+0] \ 0000016C 0C009DE5 LDR R0,[SP, #+12] \ 00000170 041095E5 LDR R1,[R5, #+4] \ 00000174 94090AE0 MUL R10,R4,R9 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 08009DE5 LDR R0,[SP, #+8] \ 00000180 0A20A0E1 MOV R2,R10 \ 00000184 010080E2 ADD R0,R0,#+1 \ 00000188 1E0100EF SWI +286 \ 0000018C 01008AE2 ADD R0,R10,#+1 \ ??PressImg_10: \ 00000190 088080E0 ADD R8,R0,R8 \ 00000194 066089E0 ADD R6,R9,R6 \ ??PressImg_5: \ 00000198 0100D5E5 LDRB R0,[R5, #+1] \ 0000019C 0010D5E5 LDRB R1,[R5, #+0] \ 000001A0 910000E0 MUL R0,R1,R0 \ 000001A4 000056E1 CMP R6,R0 \ 000001A8 C0FFFFAA BGE ??PressImg_6 \ 000001AC 940601E0 MUL R1,R4,R6 \ 000001B0 00708DE5 STR R7,[SP, #+0] \ 000001B4 04708DE5 STR R7,[SP, #+4] \ 000001B8 0C108DE5 STR R1,[SP, #+12] \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 041095E5 LDR R1,[R5, #+4] \ 000001C4 0420A0E1 MOV R2,R4 \ 000001C8 011080E0 ADD R1,R0,R1 \ 000001CC 0D00A0E1 MOV R0,SP \ 000001D0 1E0100EF SWI +286 \ 000001D4 0C009DE5 LDR R0,[SP, #+12] \ 000001D8 041095E5 LDR R1,[R5, #+4] \ 000001DC 0420A0E1 MOV R2,R4 \ 000001E0 011084E0 ADD R1,R4,R1 \ 000001E4 011080E0 ADD R1,R0,R1 \ 000001E8 04008DE2 ADD R0,SP,#+4 \ 000001EC 1E0100EF SWI +286 \ 000001F0 10109DE5 LDR R1,[SP, #+16] \ 000001F4 0090A0E3 MOV R9,#+0 \ 000001F8 011088E0 ADD R1,R8,R1 \ 000001FC 08108DE5 STR R1,[SP, #+8] \ 00000200 00009DE5 LDR R0,[SP, #+0] \ 00000204 04109DE5 LDR R1,[SP, #+4] \ 00000208 010050E1 CMP R0,R1 \ 0000020C B7FFFF1A BNE ??PressImg_8 \ ??PressImg_11: \ 00000210 019089E2 ADD R9,R9,#+1 \ 00000214 00708DE5 STR R7,[SP, #+0] \ 00000218 04708DE5 STR R7,[SP, #+4] \ 0000021C 040095E5 LDR R0,[R5, #+4] \ 00000220 09A086E0 ADD R10,R6,R9 \ 00000224 940A0BE0 MUL R11,R4,R10 \ 00000228 0420A0E1 MOV R2,R4 \ 0000022C 00108BE0 ADD R1,R11,R0 \ 00000230 0D00A0E1 MOV R0,SP \ 00000234 1E0100EF SWI +286 \ 00000238 040095E5 LDR R0,[R5, #+4] \ 0000023C 0420A0E1 MOV R2,R4 \ 00000240 000084E0 ADD R0,R4,R0 \ 00000244 00108BE0 ADD R1,R11,R0 \ 00000248 04008DE2 ADD R0,SP,#+4 \ 0000024C 1E0100EF SWI +286 \ 00000250 00009DE5 LDR R0,[SP, #+0] \ 00000254 04109DE5 LDR R1,[SP, #+4] \ 00000258 010050E1 CMP R0,R1 \ 0000025C 0600001A BNE ??PressImg_12 \ 00000260 7F0059E3 CMP R9,#+127 \ 00000264 040000AA BGE ??PressImg_12 \ 00000268 0100D5E5 LDRB R0,[R5, #+1] \ 0000026C 0010D5E5 LDRB R1,[R5, #+0] \ 00000270 910000E0 MUL R0,R1,R0 \ 00000274 00005AE1 CMP R10,R0 \ 00000278 E4FFFFBA BLT ??PressImg_11 \ ??PressImg_12: \ 0000027C 08009DE5 LDR R0,[SP, #+8] \ 00000280 0420A0E1 MOV R2,R4 \ 00000284 0090C0E5 STRB R9,[R0, #+0] \ 00000288 0C009DE5 LDR R0,[SP, #+12] \ 0000028C 041095E5 LDR R1,[R5, #+4] \ 00000290 011080E0 ADD R1,R0,R1 \ 00000294 08009DE5 LDR R0,[SP, #+8] \ 00000298 010080E2 ADD R0,R0,#+1 \ 0000029C 1E0100EF SWI +286 \ 000002A0 010084E2 ADD R0,R4,#+1 \ 000002A4 B9FFFFEA B ??PressImg_10 69 70 \ In segment CODE, align 4, keep-with-next 71 int drawimg2img(IMGHDR * onse, IMGHDR * timage2, int x, int y, int xRect, int yRect,int xxRect, int yyRect) 72 { \ drawimg2img: \ 00000000 FC4F2DE9 PUSH {R2-R11,LR} \ 00000004 2C209DE5 LDR R2,[SP, #+44] \ 00000008 30309DE5 LDR R3,[SP, #+48] \ 0000000C 34609DE5 LDR R6,[SP, #+52] \ 00000010 38709DE5 LDR R7,[SP, #+56] 73 74 if (!onse) return 1; \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100A003 MOVEQ R0,#+1 \ 0000001C F68FBD08 POPEQ {R1,R2,R4-R11,PC} \ 00000020 0140D0E5 LDRB R4,[R0, #+1] \ 00000024 000053E3 CMP R3,#+0 \ 00000028 0100004A BMI ??drawimg2img_0 \ 0000002C 040053E1 CMP R3,R4 \ 00000030 000000BA BLT ??drawimg2img_1 75 if (yRect<0 || yRect>=onse->h) yRect = 0; \ ??drawimg2img_0: \ 00000034 0030A0E3 MOV R3,#+0 76 if (xRect<0 || xRect>=onse->w) xRect = 0; \ ??drawimg2img_1: \ 00000038 0050D0E5 LDRB R5,[R0, #+0] \ 0000003C 000052E3 CMP R2,#+0 \ 00000040 0100004A BMI ??drawimg2img_2 \ 00000044 050052E1 CMP R2,R5 \ 00000048 000000BA BLT ??drawimg2img_3 \ ??drawimg2img_2: \ 0000004C 0020A0E3 MOV R2,#+0 77 if (yyRect==0 || (yRect+yyRect >= onse->h)) yyRect = onse->h-yRect; \ ??drawimg2img_3: \ 00000050 000057E3 CMP R7,#+0 \ 00000054 0200000A BEQ ??drawimg2img_4 \ 00000058 038087E0 ADD R8,R7,R3 \ 0000005C 040058E1 CMP R8,R4 \ 00000060 000000BA BLT ??drawimg2img_5 \ ??drawimg2img_4: \ 00000064 037044E0 SUB R7,R4,R3 78 if (xxRect==0 || (xRect+xxRect >= onse->w)) xxRect = onse->w-xRect; \ ??drawimg2img_5: \ 00000068 000056E3 CMP R6,#+0 \ 0000006C 0200000A BEQ ??drawimg2img_6 \ 00000070 024086E0 ADD R4,R6,R2 \ 00000074 050054E1 CMP R4,R5 \ 00000078 000000BA BLT ??drawimg2img_7 \ ??drawimg2img_6: \ 0000007C 026045E0 SUB R6,R5,R2 79 int *scr = (int*)((char*)timage2->bitmap); \ ??drawimg2img_7: \ 00000080 04C091E5 LDR R12,[R1, #+4] 80 int *pic = (int*)((char*)onse->bitmap); \ 00000084 044090E5 LDR R4,[R0, #+4] 81 int i,j; 82 83 for (i = xRect; i < xRect+xxRect; i++) \ 00000088 0250A0E1 MOV R5,R2 \ 0000008C 026086E0 ADD R6,R6,R2 \ 00000090 060055E1 CMP R5,R6 \ 00000094 240000AA BGE ??drawimg2img_8 \ 00000098 037087E0 ADD R7,R7,R3 84 { 85 for(j = yRect; j < yRect+yyRect; j++) \ ??drawimg2img_9: \ 0000009C 0380A0E1 MOV R8,R3 \ 000000A0 070058E1 CMP R8,R7 \ 000000A4 1D0000AA BGE ??drawimg2img_10 86 { 87 if (((y+j-yRect)h) && ((x+i-xRect)w) && ((y+j-yRect)>=0) && ((x+i-xRect)>=0) 88 &&(i>=xRect)&&(j>=yRect)&&(iw+i+x-xRect] = pic[(j)*onse->w+i]; \ 000000FC 9AB929E0 MLA R9,R10,R9,R11 \ 00000100 00A0D0E5 LDRB R10,[R0, #+0] \ 00000104 029049E0 SUB R9,R9,R2 \ 00000108 9A582BE0 MLA R11,R10,R8,R5 \ 0000010C 0BA194E7 LDR R10,[R4, +R11, LSL #+2] \ 00000110 09A18CE7 STR R10,[R12, +R9, LSL #+2] 91 } 92 } \ ??drawimg2img_12: \ 00000114 018088E2 ADD R8,R8,#+1 \ 00000118 070058E1 CMP R8,R7 \ 0000011C E1FFFFBA BLT ??drawimg2img_11 93 } \ ??drawimg2img_10: \ 00000120 015085E2 ADD R5,R5,#+1 \ 00000124 060055E1 CMP R5,R6 \ 00000128 DBFFFFBA BLT ??drawimg2img_9 94 return 0; \ ??drawimg2img_8: \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return 95 } 96 97 Maximum stack usage in bytes: Function CSTACK -------- ------ PressImg 60 drawimg2img 44 Segment part sizes: Function/Label Bytes -------------- ----- PressImg 680 drawimg2img 308 Others 8 996 bytes in segment CODE 988 bytes of CODE memory (+ 8 bytes shared) Errors: none Warnings: none