📄 gui_fillpolygon.txt
字号:
00012e e009 B |L1.324|
|L1.304|
000130 4610 MOV r0,r2
000132 42a2 CMP r2,r4
000134 dc1a BGT |L1.364|
000136 461a MOV r2,r3
000138 42a3 CMP r3,r4
00013a db17 BLT |L1.364|
00013c f9bec000 LDRSH r12,[lr,#0]
000140 f9b11000 LDRSH r1,[r1,#0]
|L1.324|
000144 1a23 SUBS r3,r4,r0
000146 eba1010c SUB r1,r1,r12
00014a 4359 MULS r1,r3,r1
00014c 2900 CMP r1,#0
00014e eba20300 SUB r3,r2,r0
000152 dd02 BLE |L1.346|
000154 eb010163 ADD r1,r1,r3,ASR #1
000158 e002 B |L1.352|
|L1.346|
00015a eba10163 SUB r1,r1,r3,ASR #1
00015e 1c49 ADDS r1,r1,#1
|L1.352|
000160 1a10 SUBS r0,r2,r0
000162 fb91f0f0 SDIV r0,r1,r0
000166 4460 ADD r0,r0,r12
|L1.360|
;;;247 int xIntersect;
;;;248 if (_CheckYInterSect(y, &xIntersect, paPoint + i, paPoint + i1)) {
;;;249 _Add(xIntersect);
000168 f7fffffe BL _Add
|L1.364|
00016c 1c6d ADDS r5,r5,#1 ;231
|L1.366|
00016e 454d CMP r5,r9 ;231
000170 f6ffaf7e BLT |L1.112|
;;;250 }
;;;251 }
;;;252 }
;;;253 }
;;;254 _Flush(xOff, y + yOff);
000174 eb04000a ADD r0,r4,r10
000178 9000 STR r0,[sp,#0]
00017a 2000 MOVS r0,#0
00017c 4680 MOV r8,r0
00017e 4605 MOV r5,r0
000180 e011 B |L1.422|
|L1.386|
000182 4910 LDR r1,|L1.452|
000184 f1b80f00 CMP r8,#0
000188 f931b015 LDRSH r11,[r1,r5,LSL #1]
00018c d007 BEQ |L1.414|
00018e 490b LDR r1,|L1.444|
000190 eb07020b ADD r2,r7,r11
000194 6d89 LDR r1,[r1,#0x58] ; GUI_Context
000196 4438 ADD r0,r0,r7
000198 680b LDR r3,[r1,#0]
00019a 9900 LDR r1,[sp,#0]
00019c 4798 BLX r3
|L1.414|
00019e f0880801 EOR r8,r8,#1
0001a2 4658 MOV r0,r11
0001a4 1c6d ADDS r5,r5,#1
|L1.422|
0001a6 4906 LDR r1,|L1.448|
0001a8 6809 LDR r1,[r1,#0] ; GL_FP_Cnt
0001aa 428d CMP r5,r1
0001ac dbe9 BLT |L1.386|
0001ae 1c64 ADDS r4,r4,#1 ;228
|L1.432|
0001b0 9801 LDR r0,[sp,#4] ;228
0001b2 4284 CMP r4,r0 ;228
0001b4 f77faf54 BLE |L1.96|
;;;255 }
;;;256 }
0001b8 e8bd8ffe POP {r1-r11,pc}
;;;257
ENDP
|L1.444|
DCD GUI_Context
|L1.448|
DCD ||.data||
|L1.452|
DCD ||.bss||
AREA ||i.GUI_FillPolygon||, CODE, READONLY, ALIGN=2
GUI_FillPolygon PROC
;;;261 */
;;;262 void GUI_FillPolygon(const GUI_POINT* pPoints, int NumPoints, int x0, int y0) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4606 MOV r6,r0
;;;263 GUI_LOCK();
;;;264 #if (GUI_WINSUPPORT)
;;;265 WM_ADDORG(x0, y0);
000006 480b LDR r0,|L2.52|
000008 460f MOV r7,r1 ;262
00000a 6c01 LDR r1,[r0,#0x40] ; GUI_Context
00000c 6c40 LDR r0,[r0,#0x44] ; GUI_Context
00000e 188c ADDS r4,r1,r2
000010 18c5 ADDS r5,r0,r3
;;;266 WM_ITERATE_START(NULL); {
000012 2000 MOVS r0,#0
000014 f7fffffe BL WM__InitIVRSearch
000018 e007 B |L2.42|
|L2.26|
;;;267 #endif
;;;268 GL_FillPolygon (pPoints, NumPoints, x0, y0);
00001a 462b MOV r3,r5
00001c 4622 MOV r2,r4
00001e 4639 MOV r1,r7
000020 4630 MOV r0,r6
000022 f7fffffe BL GL_FillPolygon
;;;269 #if (GUI_WINSUPPORT)
;;;270 } WM_ITERATE_END();
000026 f7fffffe BL WM__GetNextIVR
|L2.42|
00002a 2800 CMP r0,#0
00002c d1f5 BNE |L2.26|
;;;271 #endif
;;;272 GUI_UNLOCK();
;;;273 }
00002e e8bd81f0 POP {r4-r8,pc}
;;;274
ENDP
000032 0000 DCW 0x0000
|L2.52|
DCD GUI_Context
AREA ||i._Add||, CODE, READONLY, ALIGN=2
_Add PROC
;;;115 */
;;;116 static void _Add(int x) {
000000 b530 PUSH {r4,r5,lr}
;;;117 if (GL_FP_Cnt < GUI_FP_MAXCOUNT) {
000002 4d0b LDR r5,|L3.48|
000004 682b LDR r3,[r5,#0] ; GL_FP_Cnt
000006 2b0c CMP r3,#0xc
000008 da10 BGE |L3.44|
;;;118 int i;
;;;119 /* Move all entries to the right (bigger x-value) */
;;;120 for (i=GL_FP_Cnt; i ; i--) {
;;;121 if (_aX[i-1] < x)
00000a 4c0a LDR r4,|L3.52|
00000c 0019 MOVS r1,r3 ;117
00000e d009 BEQ |L3.36|
|L3.16|
000010 eb040241 ADD r2,r4,r1,LSL #1
000014 f9322c02 LDRSH r2,[r2,#-2]
000018 4282 CMP r2,r0
00001a db03 BLT |L3.36|
;;;122 break;
;;;123 _aX[i] = _aX[i-1];
00001c f8242011 STRH r2,[r4,r1,LSL #1]
000020 1e49 SUBS r1,r1,#1 ;120
000022 d1f5 BNE |L3.16|
|L3.36|
;;;124 }
;;;125 /* Insert new entry */
;;;126 _aX[i] = x;
000024 f8240011 STRH r0,[r4,r1,LSL #1]
;;;127 GL_FP_Cnt++;
000028 1c5b ADDS r3,r3,#1
;;;128 }
00002a 602b STR r3,[r5,#0] ; GL_FP_Cnt
|L3.44|
;;;129 }
00002c bd30 POP {r4,r5,pc}
;;;130
ENDP
00002e 0000 DCW 0x0000
|L3.48|
DCD ||.data||
|L3.52|
DCD ||.bss||
AREA ||.bss||, DATA, NOINIT, ALIGN=1
_aX
% 24
AREA ||.data||, DATA, ALIGN=2
GL_FP_Cnt
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -