jdmainct.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 767 行 · 第 1/3 页
TXT
767 行
;;;217 for (i = 0; i < rgroup * (M + 2); i++) {
00003e f1090502 ADD r5,r9,#2
000042 689b LDR r3,[r3,#8] ;216
000044 2100 MOVS r1,#0
000046 fb00f605 MUL r6,r0,r5
00004a e006 B |L3.90|
|L3.76|
;;;218 xbuf0[i] = xbuf1[i] = buf[i];
00004c f8535021 LDR r5,[r3,r1,LSL #2]
000050 f8445021 STR r5,[r4,r1,LSL #2]
000054 f8475021 STR r5,[r7,r1,LSL #2]
000058 1c49 ADDS r1,r1,#1 ;217
|L3.90|
00005a 428e CMP r6,r1 ;217
00005c dcf6 BGT |L3.76|
;;;219 }
;;;220 /* In the second list, put the last four row groups in swapped order */
;;;221 for (i = 0; i < rgroup * 2; i++) {
00005e 2100 MOVS r1,#0
;;;222 xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i];
000060 f1a90602 SUB r6,r9,#2
000064 e00d B |L3.130|
000066 bf00 NOP
|L3.104|
000068 fb001e09 MLA lr,r0,r9,r1
00006c fb001c06 MLA r12,r0,r6,r1
000070 f853502e LDR r5,[r3,lr,LSL #2]
000074 f844502c STR r5,[r4,r12,LSL #2]
;;;223 xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i];
000078 f853502c LDR r5,[r3,r12,LSL #2]
00007c f844502e STR r5,[r4,lr,LSL #2]
000080 1c49 ADDS r1,r1,#1 ;221
|L3.130|
000082 ebb10f40 CMP r1,r0,LSL #1 ;221
000086 dbef BLT |L3.104|
;;;224 }
;;;225 /* The wraparound pointers at top and bottom will be filled later
;;;226 * (see set_wraparound_pointers, below). Initially we want the "above"
;;;227 * pointers to duplicate the first actual data line. This only needs
;;;228 * to happen in xbuffer[0].
;;;229 */
;;;230 for (i = 0; i < rgroup; i++) {
000088 2100 MOVS r1,#0
00008a e004 B |L3.150|
|L3.140|
;;;231 xbuf0[i - rgroup] = xbuf0[0];
00008c 1a0c SUBS r4,r1,r0
00008e 683b LDR r3,[r7,#0]
000090 1c49 ADDS r1,r1,#1 ;230
000092 f8473024 STR r3,[r7,r4,LSL #2]
|L3.150|
000096 4281 CMP r1,r0 ;230
000098 dbf8 BLT |L3.140|
00009a 1c52 ADDS r2,r2,#1 ;210
00009c f1080854 ADD r8,r8,#0x54 ;210
|L3.160|
0000a0 f8da0024 LDR r0,[r10,#0x24] ;209
0000a4 4290 CMP r0,r2 ;209
0000a6 dcb7 BGT |L3.24|
;;;232 }
;;;233 }
;;;234 }
0000a8 e8bd8ff0 POP {r4-r11,pc}
;;;235
ENDP
AREA ||i.process_data_context_main||, CODE, READONLY, ALIGN=2
process_data_context_main PROC
;;;384 METHODDEF(void)
;;;385 process_data_context_main (j_decompress_ptr cinfo,
000000 e92d4fff PUSH {r0-r11,lr}
;;;386 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;387 JDIMENSION out_rows_avail)
;;;388 {
;;;389 my_main_ptr pMain = (my_main_ptr) cinfo->main;
;;;390
;;;391 /* Read input data if we haven't filled the main buffer yet */
;;;392 if (! pMain->buffer_full) {
000004 f8d041a8 LDR r4,[r0,#0x1a8]
000008 4605 MOV r5,r0 ;388
00000a 69a0 LDR r0,[r4,#0x18]
00000c b083 SUB sp,sp,#0xc ;388
00000e 4693 MOV r11,r2 ;388
;;;393 if (! (*cinfo->coef->decompress_data) (cinfo,
;;;394 pMain->xbuffer[pMain->whichptr]))
;;;395 return; /* suspension forced, can do nothing more */
;;;396 pMain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */
000010 f04f0a01 MOV r10,#1
000014 b978 CBNZ r0,|L4.54|
000016 6aa0 LDR r0,[r4,#0x28] ;393
000018 eb040080 ADD r0,r4,r0,LSL #2 ;393
00001c 6a01 LDR r1,[r0,#0x20] ;393
00001e f8d501ac LDR r0,[r5,#0x1ac] ;393
000022 68c2 LDR r2,[r0,#0xc] ;393
000024 4628 MOV r0,r5 ;393
000026 4790 BLX r2 ;393
000028 2800 CMP r0,#0 ;393
00002a d07e BEQ |L4.298|
;;;397 pMain->iMCU_row_ctr++; /* count rows received */
00002c f8c4a018 STR r10,[r4,#0x18]
000030 6b60 LDR r0,[r4,#0x34]
000032 1c40 ADDS r0,r0,#1
000034 6360 STR r0,[r4,#0x34]
|L4.54|
;;;398 }
;;;399
;;;400 /* Postprocessor typically will not swallow all the input data it is handed
;;;401 * in one call (due to filling the output buffer first). Must be prepared
;;;402 * to exit and restart. This switch lets us keep track of how far we got.
;;;403 * Note that each case falls through to the next on successful completion.
;;;404 */
;;;405 switch (pMain->context_state) {
000036 6ae0 LDR r0,[r4,#0x2c]
000038 b1f8 CBZ r0,|L4.122|
00003a 2801 CMP r0,#1
00003c d063 BEQ |L4.262|
00003e 2802 CMP r0,#2
000040 d173 BNE |L4.298|
;;;406 case CTX_POSTPONED_ROW:
;;;407 /* Call postprocessor using previously set pointers for postponed row */
;;;408 (*cinfo->post->post_process_data) (cinfo, pMain->xbuffer[pMain->whichptr],
000042 9b06 LDR r3,[sp,#0x18]
000044 9904 LDR r1,[sp,#0x10]
000046 e9cdb301 STRD r11,r3,[sp,#4]
00004a 9100 STR r1,[sp,#0]
00004c 6aa0 LDR r0,[r4,#0x28]
00004e 6b23 LDR r3,[r4,#0x30]
000050 eb040080 ADD r0,r4,r0,LSL #2
000054 6a01 LDR r1,[r0,#0x20]
000056 f8d501b0 LDR r0,[r5,#0x1b0]
00005a f104021c ADD r2,r4,#0x1c
00005e 6846 LDR r6,[r0,#4]
000060 4628 MOV r0,r5
000062 47b0 BLX r6
;;;409 &pMain->rowgroup_ctr, pMain->rowgroups_avail,
;;;410 output_buf, out_row_ctr, out_rows_avail);
;;;411 if (pMain->rowgroup_ctr < pMain->rowgroups_avail)
000064 69e1 LDR r1,[r4,#0x1c]
000066 6b20 LDR r0,[r4,#0x30]
000068 4281 CMP r1,r0
00006a d35e BCC |L4.298|
;;;412 return; /* Need to suspend */
;;;413 pMain->context_state = CTX_PREPARE_FOR_IMCU;
00006c 2000 MOVS r0,#0
;;;414 if (*out_row_ctr >= out_rows_avail)
00006e 62e0 STR r0,[r4,#0x2c]
000070 f8db1000 LDR r1,[r11,#0]
000074 9806 LDR r0,[sp,#0x18]
000076 4281 CMP r1,r0
000078 d257 BCS |L4.298|
|L4.122|
;;;415 return; /* Postprocessor exactly filled output buf */
;;;416 /*FALLTHROUGH*/
;;;417 case CTX_PREPARE_FOR_IMCU:
;;;418 /* Prepare to process first M-1 row groups of this iMCU row */
;;;419 pMain->rowgroup_ctr = 0;
00007a 2000 MOVS r0,#0
;;;420 pMain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1);
00007c 61e0 STR r0,[r4,#0x1c]
00007e f8d5013c LDR r0,[r5,#0x13c]
000082 1e40 SUBS r0,r0,#1
;;;421 /* Check for bottom of image: if so, tweak pointers to "duplicate"
;;;422 * the last sample row, and adjust rowgroups_avail to ignore padding rows.
;;;423 */
;;;424 if (pMain->iMCU_row_ctr == cinfo->total_iMCU_rows)
000084 6320 STR r0,[r4,#0x30]
000086 6b61 LDR r1,[r4,#0x34]
000088 f8d50140 LDR r0,[r5,#0x140]
00008c 4281 CMP r1,r0
00008e d138 BNE |L4.258|
000090 2200 MOVS r2,#0
000092 f8d5c0d8 LDR r12,[r5,#0xd8]
000096 f8d591a8 LDR r9,[r5,#0x1a8]
00009a e02f B |L4.252|
|L4.156|
00009c f8dc6024 LDR r6,[r12,#0x24]
0000a0 f8dc000c LDR r0,[r12,#0xc]
0000a4 f8d5313c LDR r3,[r5,#0x13c]
0000a8 4370 MULS r0,r6,r0
0000aa fb90f8f3 SDIV r8,r0,r3
0000ae f8dc102c LDR r1,[r12,#0x2c]
0000b2 fbb1f3f0 UDIV r3,r1,r0
0000b6 fb001113 MLS r1,r0,r3,r1
0000ba b901 CBNZ r1,|L4.190|
0000bc 4601 MOV r1,r0
|L4.190|
0000be b92a CBNZ r2,|L4.204|
0000c0 1e48 SUBS r0,r1,#1
0000c2 fb90f0f8 SDIV r0,r0,r8
0000c6 1c40 ADDS r0,r0,#1
0000c8 f8c90030 STR r0,[r9,#0x30]
|L4.204|
0000cc f8d93028 LDR r3,[r9,#0x28]
0000d0 2000 MOVS r0,#0
0000d2 eb090383 ADD r3,r9,r3,LSL #2
0000d6 6a1b LDR r3,[r3,#0x20]
0000d8 f8537022 LDR r7,[r3,r2,LSL #2]
0000dc eb070e81 ADD lr,r7,r1,LSL #2
0000e0 e006 B |L4.240|
0000e2 bf00 NOP
|L4.228|
0000e4 180e ADDS r6,r1,r0
0000e6 f85e3c04 LDR r3,[lr,#-4]
0000ea 1c40 ADDS r0,r0,#1
0000ec f8473026 STR r3,[r7,r6,LSL #2]
|L4.240|
0000f0 ebb00f48 CMP r0,r8,LSL #1
0000f4 dbf6 BLT |L4.228|
0000f6 1c52 ADDS r2,r2,#1
0000f8 f10c0c54 ADD r12,r12,#0x54
|L4.252|
0000fc 6a68 LDR r0,[r5,#0x24]
0000fe 4290 CMP r0,r2
000100 dccc BGT |L4.156|
|L4.258|
;;;425 set_bottom_pointers(cinfo);
;;;426 pMain->context_state = CTX_PROCESS_IMCU;
000102 f8c4a02c STR r10,[r4,#0x2c]
|L4.262|
;;;427 /*FALLTHROUGH*/
;;;428 case CTX_PROCESS_IMCU:
;;;429 /* Call postprocessor using previously set pointers */
;;;430 (*cinfo->post->post_process_data) (cinfo, pMain->xbuffer[pMain->whichptr],
000106 9b06 LDR r3,[sp,#0x18]
000108 9904 LDR r1,[sp,#0x10]
00010a e9cdb301 STRD r11,r3,[sp,#4]
00010e 9100 STR r1,[sp,#0]
000110 6aa0 LDR r0,[r4,#0x28]
000112 6b23 LDR r3,[r4,#0x30]
000114 eb040080 ADD r0,r4,r0,LSL #2
000118 6a01 LDR r1,[r0,#0x20]
00011a f8d501b0 LDR r0,[r5,#0x1b0]
00011e f104021c ADD r2,r4,#0x1c
000122 6846 LDR r6,[r0,#4]
000124 4628 MOV r0,r5
000126 47b0 BLX r6
;;;431 &pMain->rowgroup_ctr, pMain->rowgroups_avail,
;;;432 output_buf, out_row_ctr, out_rows_avail);
;;;433 if (pMain->rowgroup_ctr < pMain->rowgroups_avail)
000128 e000 B |L4.300|
|L4.298|
00012a e059 B |L4.480|
|L4.300|
00012c 6b21 LDR r1,[r4,#0x30]
00012e 69e0 LDR r0,[r4,#0x1c]
000130 4288 CMP r0,r1
000132 d355 BCC |L4.480|
;;;434 return; /* Need to suspend */
;;;435 /* After the first iMCU, change wraparound pointers to normal state */
;;;436 if (pMain->iMCU_row_ctr == 1)
000134 6b60 LDR r0,[r4,#0x34]
000136 2801 CMP r0,#1
000138 d142 BNE |L4.448|
00013a f8d591a8 LDR r9,[r5,#0x1a8]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?