jdmainct.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 767 行 · 第 1/3 页
TXT
767 行
00013e f8d5213c LDR r2,[r5,#0x13c]
000142 f8d500d8 LDR r0,[r5,#0xd8]
000146 f04f0e00 MOV lr,#0
00014a 9202 STR r2,[sp,#8]
00014c e034 B |L4.440|
00014e bf00 NOP
|L4.336|
000150 f8d83024 LDR r3,[r8,#0x24]
000154 f8d8000c LDR r0,[r8,#0xc]
000158 f8d5113c LDR r1,[r5,#0x13c]
00015c 4358 MULS r0,r3,r0
00015e fb90f1f1 SDIV r1,r0,r1
000162 f8d93024 LDR r3,[r9,#0x24]
000166 f8d92020 LDR r2,[r9,#0x20]
00016a f853702e LDR r7,[r3,lr,LSL #2]
00016e 9b02 LDR r3,[sp,#8]
000170 f852202e LDR r2,[r2,lr,LSL #2]
000174 2000 MOVS r0,#0
000176 f1030b02 ADD r11,r3,#2
00017a f1030a01 ADD r10,r3,#1
00017e e015 B |L4.428|
|L4.384|
000180 fb010c0a MLA r12,r1,r10,r0
000184 f852602c LDR r6,[r2,r12,LSL #2]
000188 1a43 SUBS r3,r0,r1
00018a f8426023 STR r6,[r2,r3,LSL #2]
00018e f857602c LDR r6,[r7,r12,LSL #2]
000192 f8476023 STR r6,[r7,r3,LSL #2]
000196 fb01060b MLA r6,r1,r11,r0
00019a f8523020 LDR r3,[r2,r0,LSL #2]
00019e f8423026 STR r3,[r2,r6,LSL #2]
0001a2 f8573020 LDR r3,[r7,r0,LSL #2]
0001a6 f8473026 STR r3,[r7,r6,LSL #2]
0001aa 1c40 ADDS r0,r0,#1
|L4.428|
0001ac 4288 CMP r0,r1
0001ae dbe7 BLT |L4.384|
0001b0 f10e0e01 ADD lr,lr,#1
0001b4 f1080054 ADD r0,r8,#0x54
|L4.440|
0001b8 4680 MOV r8,r0
0001ba 6a68 LDR r0,[r5,#0x24]
0001bc 4570 CMP r0,lr
0001be dcc7 BGT |L4.336|
|L4.448|
;;;437 set_wraparound_pointers(cinfo);
;;;438 /* Prepare to load new iMCU row using other xbuffer list */
;;;439 pMain->whichptr ^= 1; /* 0=>1 or 1=>0 */
0001c0 6aa1 LDR r1,[r4,#0x28]
;;;440 pMain->buffer_full = FALSE;
0001c2 2000 MOVS r0,#0
0001c4 f0810101 EOR r1,r1,#1 ;439
;;;441 /* Still need to process last row group of this iMCU row, */
;;;442 /* which is saved at index M+1 of the other xbuffer */
;;;443 pMain->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1);
0001c8 62a1 STR r1,[r4,#0x28]
0001ca 61a0 STR r0,[r4,#0x18]
0001cc f8d5013c LDR r0,[r5,#0x13c]
;;;444 pMain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2);
;;;445 pMain->context_state = CTX_POSTPONED_ROW;
0001d0 2102 MOVS r1,#2
0001d2 1c40 ADDS r0,r0,#1 ;443
0001d4 61e0 STR r0,[r4,#0x1c] ;444
0001d6 f8d5013c LDR r0,[r5,#0x13c] ;444
0001da 1c80 ADDS r0,r0,#2 ;444
0001dc e9c4100b STRD r1,r0,[r4,#0x2c] ;405
|L4.480|
;;;446 }
;;;447 }
0001e0 b007 ADD sp,sp,#0x1c
0001e2 e8bd8ff0 POP {r4-r11,pc}
;;;448
ENDP
AREA ||i.process_data_crank_post||, CODE, READONLY, ALIGN=1
process_data_crank_post PROC
;;;458 METHODDEF(void)
;;;459 process_data_crank_post (j_decompress_ptr cinfo,
000000 b53e PUSH {r1-r5,lr}
;;;460 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;461 JDIMENSION out_rows_avail)
;;;462 {
;;;463 (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL,
000002 e88d000e STM sp,{r1-r3}
000006 f8d011b0 LDR r1,[r0,#0x1b0]
00000a 2300 MOVS r3,#0
00000c 684c LDR r4,[r1,#4]
00000e 461a MOV r2,r3
000010 4619 MOV r1,r3
000012 47a0 BLX r4
;;;464 (JDIMENSION *) NULL, (JDIMENSION) 0,
;;;465 output_buf, out_row_ctr, out_rows_avail);
;;;466 }
000014 bd3e POP {r1-r5,pc}
;;;467
ENDP
AREA ||i.process_data_simple_main||, CODE, READONLY, ALIGN=1
process_data_simple_main PROC
;;;344 METHODDEF(void)
;;;345 process_data_simple_main (j_decompress_ptr cinfo,
000000 e92d43fe PUSH {r1-r9,lr}
;;;346 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;347 JDIMENSION out_rows_avail)
;;;348 {
;;;349 my_main_ptr pMain = (my_main_ptr) cinfo->main;
;;;350 JDIMENSION rowgroups_avail;
;;;351
;;;352 /* Read input data if we haven't filled the main buffer yet */
;;;353 if (! pMain->buffer_full) {
000004 f8d041a8 LDR r4,[r0,#0x1a8]
000008 4605 MOV r5,r0 ;348
00000a 69a0 LDR r0,[r4,#0x18]
00000c 460f MOV r7,r1 ;348
00000e 4690 MOV r8,r2 ;348
000010 4699 MOV r9,r3 ;348
000012 b950 CBNZ r0,|L6.42|
;;;354 if (! (*cinfo->coef->decompress_data) (cinfo, pMain->buffer))
000014 f8d501ac LDR r0,[r5,#0x1ac]
000018 f1040108 ADD r1,r4,#8
00001c 68c2 LDR r2,[r0,#0xc]
00001e 4628 MOV r0,r5
000020 4790 BLX r2
000022 2800 CMP r0,#0
000024 d015 BEQ |L6.82|
;;;355 return; /* suspension forced, can do nothing more */
;;;356 pMain->buffer_full = TRUE; /* OK, we have an iMCU row to work with */
000026 2001 MOVS r0,#1
000028 61a0 STR r0,[r4,#0x18]
|L6.42|
;;;357 }
;;;358
;;;359 /* There are always min_DCT_scaled_size row groups in an iMCU row. */
;;;360 rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size;
;;;361 /* Note: at the bottom of the image, we may pass extra garbage row groups
;;;362 * to the postprocessor. The postprocessor has to check for bottom
;;;363 * of image anyway (at row resolution), so no point in us doing it too.
;;;364 */
;;;365
;;;366 /* Feed the postprocessor */
;;;367 (*cinfo->post->post_process_data) (cinfo, pMain->buffer,
00002a f8d5613c LDR r6,[r5,#0x13c]
00002e e88d0380 STM sp,{r7-r9}
000032 f8d501b0 LDR r0,[r5,#0x1b0]
000036 4633 MOV r3,r6
000038 6847 LDR r7,[r0,#4]
00003a f104021c ADD r2,r4,#0x1c
00003e f1040108 ADD r1,r4,#8
000042 4628 MOV r0,r5
000044 47b8 BLX r7
;;;368 &pMain->rowgroup_ctr, rowgroups_avail,
;;;369 output_buf, out_row_ctr, out_rows_avail);
;;;370
;;;371 /* Has postprocessor consumed all the data yet? If so, mark buffer empty */
;;;372 if (pMain->rowgroup_ctr >= rowgroups_avail) {
000046 69e0 LDR r0,[r4,#0x1c]
000048 42b0 CMP r0,r6
00004a d302 BCC |L6.82|
;;;373 pMain->buffer_full = FALSE;
00004c 2000 MOVS r0,#0
;;;374 pMain->rowgroup_ctr = 0;
00004e 61a0 STR r0,[r4,#0x18]
000050 61e0 STR r0,[r4,#0x1c]
|L6.82|
;;;375 }
;;;376 }
000052 e8bd83fe POP {r1-r9,pc}
;;;377
ENDP
AREA ||i.start_pass_main||, CODE, READONLY, ALIGN=2
start_pass_main PROC
;;;306 METHODDEF(void)
;;;307 start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
000000 b570 PUSH {r4-r6,lr}
;;;308 {
;;;309 my_main_ptr pMain = (my_main_ptr) cinfo->main;
;;;310
;;;311 switch (pass_mode) {
000002 f8d041a8 LDR r4,[r0,#0x1a8]
000006 b121 CBZ r1,|L7.18|
000008 2902 CMP r1,#2
00000a d114 BNE |L7.54|
;;;312 case JBUF_PASS_THRU:
;;;313 if (cinfo->upsample->need_context_rows) {
;;;314 pMain->pub.process_data = process_data_context_main;
;;;315 make_funny_pointers(cinfo); /* Create the xbuffer[] lists */
;;;316 pMain->whichptr = 0; /* Read first iMCU row into xbuffer[0] */
;;;317 pMain->context_state = CTX_PREPARE_FOR_IMCU;
;;;318 pMain->iMCU_row_ctr = 0;
;;;319 } else {
;;;320 /* Simple case with no context needed */
;;;321 pMain->pub.process_data = process_data_simple_main;
;;;322 }
;;;323 pMain->buffer_full = FALSE; /* Mark buffer empty */
;;;324 pMain->rowgroup_ctr = 0;
;;;325 break;
;;;326 #ifdef QUANT_2PASS_SUPPORTED
;;;327 case JBUF_CRANK_DEST:
;;;328 /* For last pass of 2-pass quantization, just crank the postprocessor */
;;;329 pMain->pub.process_data = process_data_crank_post;
00000c 480e LDR r0,|L7.72|
;;;330 break;
00000e 6060 STR r0,[r4,#4]
;;;331 #endif
;;;332 default:
;;;333 ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
;;;334 break;
;;;335 }
;;;336 }
000010 bd70 POP {r4-r6,pc}
|L7.18|
000012 f8d011c4 LDR r1,[r0,#0x1c4] ;313
000016 2500 MOVS r5,#0 ;308
000018 6889 LDR r1,[r1,#8] ;313
00001a b139 CBZ r1,|L7.44|
00001c 490b LDR r1,|L7.76|
00001e 6061 STR r1,[r4,#4] ;315
000020 f7fffffe BL make_funny_pointers
000024 62a5 STR r5,[r4,#0x28] ;317
000026 62e5 STR r5,[r4,#0x2c] ;318
000028 6365 STR r5,[r4,#0x34] ;318
00002a e001 B |L7.48|
|L7.44|
00002c 4808 LDR r0,|L7.80|
00002e 6060 STR r0,[r4,#4] ;321
|L7.48|
000030 61a5 STR r5,[r4,#0x18] ;324
000032 61e5 STR r5,[r4,#0x1c] ;325
000034 bd70 POP {r4-r6,pc}
|L7.54|
000036 6802 LDR r2,[r0,#0] ;333
000038 2104 MOVS r1,#4 ;333
00003a 6151 STR r1,[r2,#0x14] ;333
00003c 6801 LDR r1,[r0,#0] ;333
00003e 6809 LDR r1,[r1,#0] ;333
000040 e8bd4070 POP {r4-r6,lr} ;333
000044 4708 BX r1 ;333
;;;337
ENDP
000046 0000 DCW 0x0000
|L7.72|
DCD process_data_crank_post
|L7.76|
DCD process_data_context_main
|L7.80|
DCD process_data_simple_main
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?