📄 guidev_8.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guidev_8.o --depend=.\Obj\guidev_8.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\MemDev\GUIDEV_8.c]
THUMB
AREA ||i._DrawBitLine1BPP||, CODE, READONLY, ALIGN=2
_DrawBitLine1BPP PROC
;;;89 */
;;;90 static void _DrawBitLine1BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, unsigned int xsize,
000000 e92d5fff PUSH {r0-r12,lr}
;;;91 const LCD_PIXELINDEX* pTrans, GUI_MEMDEV* pDev, PIXELINDEX* pDest)
;;;92 {
000004 4689 MOV r9,r1
000006 4698 MOV r8,r3
;;;93 PIXELINDEX Index1;
;;;94 PIXELINDEX IndexMask;
;;;95 unsigned pixels;
;;;96 unsigned PixelCnt;
;;;97 PixelCnt = 8 - Diff;
000008 e9dd170e LDRD r1,r7,[sp,#0x38]
;;;98 pixels = LCD_aMirror[*p] >> Diff;
00000c 781b LDRB r3,[r3,#0]
00000e 4d3e LDR r5,|L1.264|
000010 4683 MOV r11,r0 ;92
000012 5ced LDRB r5,[r5,r3]
000014 f1c10408 RSB r4,r1,#8 ;97
000018 40cd LSRS r5,r5,r1
;;;99
;;;100 GUI_DEBUG_ERROROUT3_IF( x < pDev->x0, "GUIDEV.c: DrawBitLine1BPP, Act= %d, Border= %d, Clip= %d", x,pDev->x0, GUI_Context.ClipRect.x0);
;;;101
;;;102 switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
00001a 493c LDR r1,|L1.268|
00001c a810 ADD r0,sp,#0x40
00001e c845 LDM r0,{r0,r2,r6}
000020 7b09 LDRB r1,[r1,#0xc] ; GUI_Context
000022 f0110103 ANDS r1,r1,#3
000026 d007 BEQ |L1.56|
000028 2901 CMP r1,#1
00002a d050 BEQ |L1.206|
00002c 2902 CMP r1,#2
00002e d168 BNE |L1.258|
;;;103 case 0: /* Write mode */
;;;104 do {
;;;105 /* Prepare loop */
;;;106 if (PixelCnt > xsize) {
;;;107 PixelCnt = xsize;
;;;108 }
;;;109 xsize -= PixelCnt;
;;;110 /* Write as many pixels as we are allowed to and have loaded in this inner loop */
;;;111 do {
;;;112 *pDest++ = *(pTrans + (pixels & 1));
;;;113 pixels >>= 1;
;;;114 } while (--PixelCnt);
;;;115 /* Check if an other Source byte needs to be loaded */
;;;116 if (xsize == 0) {
;;;117 return;
;;;118 }
;;;119 PixelCnt = 8;
;;;120 pixels = LCD_aMirror[*++p];
;;;121 } while (1);
;;;122 case LCD_DRAWMODE_TRANS:
;;;123 Index1 = *(pTrans + 1);
000030 8840 LDRH r0,[r0,#2]
000032 f0000aff AND r10,r0,#0xff
;;;124 do {
000036 e017 B |L1.104|
|L1.56|
000038 4933 LDR r1,|L1.264|
|L1.58|
00003a 42bc CMP r4,r7 ;106
00003c d900 BLS |L1.64|
00003e 463c MOV r4,r7 ;107
|L1.64|
000040 ebb70704 SUBS.W r7,r7,r4 ;109
|L1.68|
000044 f0050201 AND r2,r5,#1 ;112
000048 f8302012 LDRH r2,[r0,r2,LSL #1] ;112
00004c 086d LSRS r5,r5,#1 ;113
00004e f8062b01 STRB r2,[r6],#1 ;112
000052 1e64 SUBS r4,r4,#1 ;114
000054 d1f6 BNE |L1.68|
000056 2f00 CMP r7,#0 ;116
000058 d053 BEQ |L1.258|
00005a f1080201 ADD r2,r8,#1 ;120
00005e 4690 MOV r8,r2 ;120
000060 7812 LDRB r2,[r2,#0] ;120
000062 2408 MOVS r4,#8 ;119
000064 5c8d LDRB r5,[r1,r2] ;120
000066 e7e8 B |L1.58|
|L1.104|
;;;125 /* Prepare loop */
;;;126 if (PixelCnt > xsize) {
000068 42bc CMP r4,r7
00006a d900 BLS |L1.110|
;;;127 PixelCnt = xsize;
00006c 463c MOV r4,r7
|L1.110|
;;;128 }
;;;129 xsize -= PixelCnt;
00006e 1b3f SUBS r7,r7,r4
;;;130 if (pUsage) {
000070 f1bb0f00 CMP r11,#0
000074 d015 BEQ |L1.162|
|L1.118|
;;;131 do {
;;;132 if (pixels == 0) { /* Early out optimization; not required */
000076 b915 CBNZ r5,|L1.126|
;;;133 pDest += PixelCnt;
000078 4426 ADD r6,r6,r4
;;;134 x += PixelCnt;
00007a 44a1 ADD r9,r9,r4
;;;135 break;
00007c e01d B |L1.186|
|L1.126|
;;;136 }
;;;137 if ((pixels & 1)) {
00007e 07e8 LSLS r0,r5,#31
000080 d008 BEQ |L1.148|
;;;138 GUI_USAGE_AddPixel(pUsage, x, y);
000082 f8db0008 LDR r0,[r11,#8]
000086 4649 MOV r1,r9
000088 6803 LDR r3,[r0,#0]
00008a 4658 MOV r0,r11
00008c 9a02 LDR r2,[sp,#8]
00008e 4798 BLX r3
;;;139 *pDest = Index1;
000090 f886a000 STRB r10,[r6,#0]
|L1.148|
;;;140 }
;;;141 x++;
;;;142 pDest++;
000094 1c76 ADDS r6,r6,#1
000096 f1090901 ADD r9,r9,#1 ;141
;;;143 if (--PixelCnt == 0) {
00009a 1e64 SUBS r4,r4,#1
00009c d00d BEQ |L1.186|
;;;144 break;
;;;145 }
;;;146 pixels >>= 1;
00009e 086d LSRS r5,r5,#1
;;;147 } while (1);
0000a0 e7e9 B |L1.118|
|L1.162|
;;;148 } else {
;;;149 do {
;;;150 if (pixels == 0) { /* Early out optimization; not required */
0000a2 b90d CBNZ r5,|L1.168|
;;;151 pDest += PixelCnt;
0000a4 4426 ADD r6,r6,r4
;;;152 break;
0000a6 e008 B |L1.186|
|L1.168|
;;;153 }
;;;154 if ((pixels & 1)) {
0000a8 07e8 LSLS r0,r5,#31
0000aa d001 BEQ |L1.176|
;;;155 *pDest = Index1;
0000ac f886a000 STRB r10,[r6,#0]
|L1.176|
;;;156 }
;;;157 pDest++;
0000b0 1c76 ADDS r6,r6,#1
;;;158 if (--PixelCnt == 0) {
0000b2 1e64 SUBS r4,r4,#1
0000b4 d001 BEQ |L1.186|
;;;159 break;
;;;160 }
;;;161 pixels >>= 1;
0000b6 086d LSRS r5,r5,#1
;;;162 } while (1);
0000b8 e7f3 B |L1.162|
|L1.186|
;;;163 }
;;;164 /* Check if an other Source byte needs to be loaded */
;;;165 if (xsize == 0) {
0000ba 2f00 CMP r7,#0
0000bc d021 BEQ |L1.258|
;;;166 return;
;;;167 }
;;;168 PixelCnt = 8;
;;;169 pixels = LCD_aMirror[*(++p)];
0000be f1080001 ADD r0,r8,#1
0000c2 4680 MOV r8,r0
0000c4 7800 LDRB r0,[r0,#0]
0000c6 4910 LDR r1,|L1.264|
0000c8 2408 MOVS r4,#8 ;168
0000ca 5c0d LDRB r5,[r1,r0]
;;;170 } while (1);
0000cc e7cc B |L1.104|
|L1.206|
;;;171 case LCD_DRAWMODE_XOR:
;;;172 IndexMask = pDev->pfGetIndexMask();
0000ce 6a50 LDR r0,[r2,#0x24]
0000d0 4780 BLX r0
0000d2 490d LDR r1,|L1.264|
0000d4 b2c0 UXTB r0,r0
|L1.214|
;;;173 do {
;;;174 /* Prepare loop */
;;;175 if (PixelCnt > xsize) {
0000d6 42bc CMP r4,r7
0000d8 d900 BLS |L1.220|
;;;176 PixelCnt = xsize;
0000da 463c MOV r4,r7
|L1.220|
;;;177 }
;;;178 xsize -= PixelCnt;
0000dc 1b3f SUBS r7,r7,r4
|L1.222|
;;;179 /* Write as many pixels as we are allowed to and have loaded in this inner loop */
;;;180 do {
;;;181 if ((pixels & 1)) {
0000de 07ea LSLS r2,r5,#31
0000e0 d002 BEQ |L1.232|
;;;182 *pDest ^= IndexMask;
0000e2 7832 LDRB r2,[r6,#0]
0000e4 4042 EORS r2,r2,r0
0000e6 7032 STRB r2,[r6,#0]
|L1.232|
;;;183 }
;;;184 *pDest++;
0000e8 1c76 ADDS r6,r6,#1
;;;185 pixels >>= 1;
0000ea 086d LSRS r5,r5,#1
;;;186 } while (--PixelCnt);
0000ec 1e64 SUBS r4,r4,#1
0000ee d1f6 BNE |L1.222|
;;;187 /* Check if an other Source byte needs to be loaded */
;;;188 if (xsize == 0) {
0000f0 2f00 CMP r7,#0
0000f2 d006 BEQ |L1.258|
;;;189 return;
;;;190 }
;;;191 PixelCnt = 8;
;;;192 pixels = LCD_aMirror[*(++p)];
0000f4 f1080201 ADD r2,r8,#1
0000f8 4690 MOV r8,r2
0000fa 7812 LDRB r2,[r2,#0]
0000fc 2408 MOVS r4,#8 ;191
0000fe 5c8d LDRB r5,[r1,r2]
;;;193 } while (1);
000100 e7e9 B |L1.214|
|L1.258|
;;;194 }
;;;195 }
000102 e8bd9fff POP {r0-r12,pc}
;;;196
ENDP
000106 0000 DCW 0x0000
|L1.264|
DCD LCD_aMirror
|L1.268|
DCD GUI_Context
AREA ||i._DrawBitLine2BPP||, CODE, READONLY, ALIGN=2
_DrawBitLine2BPP PROC
;;;200 */
;;;201 static void _DrawBitLine2BPP(GUI_USAGE* pUsage, int x, int y, const U8 GUI_UNI_PTR * p, int Diff, int xsize,
000000 e92d5fff PUSH {r0-r12,lr}
;;;202 const LCD_PIXELINDEX* pTrans, PIXELINDEX* pDest)
;;;203 {
000004 4683 MOV r11,r0
;;;204 U8 pixels;
;;;205 U8 PixelCnt;
;;;206 PixelCnt = 4 - Diff;
000006 e9dd060e LDRD r0,r6,[sp,#0x38]
00000a 4689 MOV r9,r1 ;203
00000c f1c00104 RSB r1,r0,#4
000010 b2cc UXTB r4,r1
;;;207 pixels = (*p) << (Diff << 1);
000012 0042 LSLS r2,r0,#1
000014 7819 LDRB r1,[r3,#0]
;;;208 switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
000016 4832 LDR r0,|L2.224|
000018 4091 LSLS r1,r1,r2 ;207
00001a 7b00 LDRB r0,[r0,#0xc] ; GUI_Context
00001c e9dda710 LDRD r10,r7,[sp,#0x40]
000020 4698 MOV r8,r3 ;203
000022 b2cd UXTB r5,r1 ;207
000024 f0100003 ANDS r0,r0,#3
000028 d004 BEQ |L2.52|
00002a 2801 CMP r0,#1
00002c d03e BEQ |L2.172|
00002e 2802 CMP r0,#2
000030 d154 BNE |L2.220|
000032 e016 B |L2.98|
|L2.52|
;;;209 case 0: /* Write mode */
;;;210 PixelLoopWrite:
;;;211 if (PixelCnt > xsize) {
000034 42b4 CMP r4,r6
000036 dd00 BLE |L2.58|
;;;212 PixelCnt = xsize;
000038 b2f4 UXTB r4,r6
|L2.58|
;;;213 }
;;;214 xsize -= PixelCnt;
00003a 1b36 SUBS r6,r6,r4
|L2.60|
;;;215 do {
;;;216 *pDest++ = *(pTrans + (pixels >> 6));
00003c 09a8 LSRS r0,r5,#6
00003e f83a0010 LDRH r0,[r10,r0,LSL #1]
000042 f8070b01 STRB r0,[r7],#1
000046 06a8 LSLS r0,r5,#26
;;;217 pixels <<= 2;
000048 0e05 LSRS r5,r0,#24
;;;218 } while (--PixelCnt);
00004a 1e64 SUBS r4,r4,#1
00004c f01404ff ANDS r4,r4,#0xff
000050 d1f4 BNE |L2.60|
;;;219 if (xsize) {
000052 2e00 CMP r6,#0
000054 d042 BEQ |L2.220|
;;;220 PixelCnt = 4;
;;;221 pixels = *(++p);
000056 f1080001 ADD r0,r8,#1
00005a 2404 MOVS r4,#4 ;220
00005c 4680 MOV r8,r0
00005e 7805 LDRB r5,[r0,#0]
;;;222 goto PixelLoopWrite;
000060 e7e8 B |L2.52|
|L2.98|
;;;223 }
;;;224 break;
;;;225 case LCD_DRAWMODE_TRANS:
;;;226 PixelLoopTrans:
;;;227 if (PixelCnt > xsize)
000062 42b4 CMP r4,r6
000064 dd00 BLE |L2.104|
;;;228 PixelCnt = xsize;
000066 b2f4 UXTB r4,r6
|L2.104|
;;;229 xsize -= PixelCnt;
000068 1b36 SUBS r6,r6,r4
|L2.106|
;;;230 do {
;;;231 if (pixels & 0xc0) {
00006a 09a8 LSRS r0,r5,#6
00006c d00d BEQ |L2.138|
;;;232 *pDest = *(pTrans + (pixels >> 6));
00006e 09a8 LSRS r0,r5,#6
000070 f83a0010 LDRH r0,[r10,r0,LSL #1]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -