📄 jdphuff.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jdphuff.o --depend=.\Obj\jdphuff.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\JPEG\jdphuff.c]
THUMB
AREA ||i.decode_mcu_AC_first||, CODE, READONLY, ALIGN=2
decode_mcu_AC_first PROC
;;;356 METHODDEF(boolean)
;;;357 decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;358 {
000004 4680 MOV r8,r0
000006 460c MOV r4,r1
;;;359 phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;360 int Se = cinfo->Se;
;;;361 int Al = cinfo->Al;
000008 f8d051bc LDR r5,[r0,#0x1bc]
00000c f8d01194 LDR r1,[r0,#0x194]
000010 b089 SUB sp,sp,#0x24 ;358
000012 f8d0019c LDR r0,[r0,#0x19c]
000016 f8d82114 LDR r2,[r8,#0x114] ;360
;;;362 register int s, k, r;
;;;363 unsigned int EOBRUN;
;;;364 JBLOCKROW block;
;;;365 BITREAD_STATE_VARS;
;;;366 d_derived_tbl * tbl;
;;;367
;;;368 /* Process restart marker if needed; may have to suspend */
;;;369 if (cinfo->restart_interval) {
00001a e9cd0107 STRD r0,r1,[sp,#0x1c]
00001e b132 CBZ r2,|L1.46|
;;;370 if (entropy->restarts_to_go == 0)
000020 6aa8 LDR r0,[r5,#0x28]
000022 b920 CBNZ r0,|L1.46|
;;;371 if (! process_restart(cinfo))
000024 4640 MOV r0,r8
000026 f7fffffe BL process_restart
00002a 2800 CMP r0,#0
00002c d07e BEQ |L1.300|
|L1.46|
;;;372 return FALSE;
;;;373 }
;;;374
;;;375 /* If we've run out of data, just leave the MCU set to zeroes.
;;;376 * This way, we return uniform gray for the remainder of the segment.
;;;377 */
;;;378 if (! entropy->pub.insufficient_data) {
00002e 68a8 LDR r0,[r5,#8]
000030 2800 CMP r0,#0
000032 d179 BNE |L1.296|
;;;379
;;;380 /* Load up working state.
;;;381 * We can avoid loading/saving bitread state if in an EOB run.
;;;382 */
;;;383 EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
;;;384
;;;385 /* There is always only one block per MCU */
;;;386
;;;387 if (EOBRUN > 0) /* if it's a band of zeroes... */
000034 f8d59014 LDR r9,[r5,#0x14]
000038 f1b90f00 CMP r9,#0
00003c d002 BEQ |L1.68|
;;;388 EOBRUN--; /* ...process it now (we do nothing) */
00003e f1a90901 SUB r9,r9,#1
000042 e06f B |L1.292|
|L1.68|
;;;389 else {
;;;390 BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
000044 f8cd8018 STR r8,[sp,#0x18]
000048 f8d80018 LDR r0,[r8,#0x18]
00004c 6801 LDR r1,[r0,#0]
00004e 9102 STR r1,[sp,#8]
000050 6840 LDR r0,[r0,#4]
000052 9003 STR r0,[sp,#0xc]
;;;391 block = MCU_data[0];
000054 e9d51203 LDRD r1,r2,[r5,#0xc]
;;;392 tbl = entropy->ac_derived_tbl;
000058 f8d4b000 LDR r11,[r4,#0]
;;;393
;;;394 for (k = cinfo->Ss; k <= Se; k++) {
00005c f8d5a03c LDR r10,[r5,#0x3c]
000060 f8d87190 LDR r7,[r8,#0x190]
000064 e051 B |L1.266|
|L1.102|
;;;395 HUFF_DECODE(s, br_state, tbl, return FALSE, label2);
000066 2a08 CMP r2,#8
000068 da0b BGE |L1.130|
00006a 2300 MOVS r3,#0
00006c a802 ADD r0,sp,#8
00006e f7fffffe BL jpeg_fill_bit_buffer
000072 2800 CMP r0,#0
000074 d06b BEQ |L1.334|
000076 e9dd1204 LDRD r1,r2,[sp,#0x10]
00007a 2a08 CMP r2,#8
00007c da01 BGE |L1.130|
00007e 2301 MOVS r3,#1
000080 e00f B |L1.162|
|L1.130|
000082 f1a20008 SUB r0,r2,#8
000086 fa41f000 ASR r0,r1,r0
00008a b2c0 UXTB r0,r0
00008c eb0a0380 ADD r3,r10,r0,LSL #2
000090 f8d33090 LDR r3,[r3,#0x90]
000094 b123 CBZ r3,|L1.160|
000096 4450 ADD r0,r0,r10
000098 1ad2 SUBS r2,r2,r3
00009a f8900490 LDRB r0,[r0,#0x490]
00009e e009 B |L1.180|
|L1.160|
0000a0 2309 MOVS r3,#9
|L1.162|
0000a2 9300 STR r3,[sp,#0]
0000a4 4653 MOV r3,r10
0000a6 a802 ADD r0,sp,#8
0000a8 f7fffffe BL jpeg_huff_decode
0000ac 2800 CMP r0,#0
0000ae db4e BLT |L1.334|
0000b0 e9dd1204 LDRD r1,r2,[sp,#0x10]
|L1.180|
;;;396 r = s >> 4;
0000b4 1106 ASRS r6,r0,#4
;;;397 s &= 15;
0000b6 f010040f ANDS r4,r0,#0xf
;;;398 if (s) {
0000ba d022 BEQ |L1.258|
;;;399 k += r;
0000bc 4437 ADD r7,r7,r6
;;;400 CHECK_BIT_BUFFER(br_state, s, return FALSE);
0000be 42a2 CMP r2,r4
0000c0 da06 BGE |L1.208|
0000c2 4623 MOV r3,r4
0000c4 a802 ADD r0,sp,#8
0000c6 f7fffffe BL jpeg_fill_bit_buffer
0000ca b378 CBZ r0,|L1.300|
0000cc e9dd1204 LDRD r1,r2,[sp,#0x10]
|L1.208|
;;;401 r = GET_BITS(s);
0000d0 1b12 SUBS r2,r2,r4
0000d2 fa41f002 ASR r0,r1,r2
0000d6 2301 MOVS r3,#1
0000d8 40a3 LSLS r3,r3,r4
0000da 1e5b SUBS r3,r3,#1
0000dc 4018 ANDS r0,r0,r3
;;;402 s = HUFF_EXTEND(r, s);
0000de 4b22 LDR r3,|L1.360|
0000e0 f8533024 LDR r3,[r3,r4,LSL #2]
0000e4 4283 CMP r3,r0
0000e6 dd04 BLE |L1.242|
0000e8 4b1f LDR r3,|L1.360|
0000ea 3340 ADDS r3,r3,#0x40
0000ec f8533024 LDR r3,[r3,r4,LSL #2]
0000f0 4418 ADD r0,r0,r3
|L1.242|
;;;403 /* Scale and output coefficient in natural (dezigzagged) order */
;;;404 (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al);
0000f2 9b07 LDR r3,[sp,#0x1c]
0000f4 4098 LSLS r0,r0,r3
0000f6 4b1d LDR r3,|L1.364|
0000f8 f8533027 LDR r3,[r3,r7,LSL #2]
0000fc f82b0013 STRH r0,[r11,r3,LSL #1]
000100 e002 B |L1.264|
|L1.258|
;;;405 } else {
;;;406 if (r == 15) { /* ZRL */
000102 2e0f CMP r6,#0xf
000104 d119 BNE |L1.314|
;;;407 k += 15; /* skip 15 zeroes in band */
000106 370f ADDS r7,r7,#0xf
|L1.264|
000108 1c7f ADDS r7,r7,#1 ;394
|L1.266|
00010a 9808 LDR r0,[sp,#0x20] ;394
00010c 4287 CMP r7,r0 ;394
00010e ddaa BLE |L1.102|
|L1.272|
;;;408 } else { /* EOBr, run length is 2^r + appended bits */
;;;409 EOBRUN = 1 << r;
;;;410 if (r) { /* EOBr, r > 0 */
;;;411 CHECK_BIT_BUFFER(br_state, r, return FALSE);
;;;412 r = GET_BITS(r);
;;;413 EOBRUN += r;
;;;414 }
;;;415 EOBRUN--; /* this band is processed at this moment */
;;;416 break; /* force end-of-band */
;;;417 }
;;;418 }
;;;419 }
;;;420
;;;421 BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
000110 f8d83018 LDR r3,[r8,#0x18]
000114 9802 LDR r0,[sp,#8]
000116 6018 STR r0,[r3,#0]
000118 f8d80018 LDR r0,[r8,#0x18]
00011c 9b03 LDR r3,[sp,#0xc]
00011e 6043 STR r3,[r0,#4]
000120 e9c51203 STRD r1,r2,[r5,#0xc]
|L1.292|
;;;422 }
;;;423
;;;424 /* Completed MCU, so update state */
;;;425 entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
000124 f8c59014 STR r9,[r5,#0x14]
|L1.296|
;;;426 }
;;;427
;;;428 /* Account for restart interval (no-op if not using restarts) */
;;;429 entropy->restarts_to_go--;
000128 6aa8 LDR r0,[r5,#0x28]
00012a e000 B |L1.302|
|L1.300|
00012c e00f B |L1.334|
|L1.302|
00012e 1e40 SUBS r0,r0,#1
;;;430
;;;431 return TRUE;
000130 62a8 STR r0,[r5,#0x28]
000132 2001 MOVS r0,#1
|L1.308|
;;;432 }
000134 b009 ADD sp,sp,#0x24
000136 e8bd8ff0 POP {r4-r11,pc}
|L1.314|
00013a 2401 MOVS r4,#1 ;409
00013c 40b4 LSLS r4,r4,r6 ;409
00013e b186 CBZ r6,|L1.354|
000140 42b2 CMP r2,r6 ;411
000142 da08 BGE |L1.342|
000144 4633 MOV r3,r6 ;411
000146 a802 ADD r0,sp,#8 ;411
000148 f7fffffe BL jpeg_fill_bit_buffer
00014c b908 CBNZ r0,|L1.338|
|L1.334|
00014e 2000 MOVS r0,#0 ;411
000150 e7f0 B |L1.308|
|L1.338|
000152 e9dd1204 LDRD r1,r2,[sp,#0x10] ;411
|L1.342|
000156 1b92 SUBS r2,r2,r6 ;412
000158 fa41f002 ASR r0,r1,r2 ;412
00015c 1e63 SUBS r3,r4,#1 ;412
00015e 4018 ANDS r0,r0,r3 ;412
000160 4404 ADD r4,r4,r0 ;413
|L1.354|
000162 f1a40901 SUB r9,r4,#1 ;415
000166 e7d3 B |L1.272|
;;;433
ENDP
|L1.360|
DCD ||.constdata||
|L1.364|
DCD jpeg_natural_order
AREA ||i.decode_mcu_AC_refine||, CODE, READONLY, ALIGN=2
decode_mcu_AC_refine PROC
;;;490 METHODDEF(boolean)
;;;491 decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;492 {
000004 460d MOV r5,r1
000006 4683 MOV r11,r0
;;;493 phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;494 int Se = cinfo->Se;
;;;495 int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */
000008 f8d02194 LDR r2,[r0,#0x194]
00000c f8d011bc LDR r1,[r0,#0x1bc]
000010 b0cd SUB sp,sp,#0x134 ;492
000012 f8d0019c LDR r0,[r0,#0x19c]
000016 914c STR r1,[sp,#0x130]
000018 2101 MOVS r1,#1
00001a fa01fa00 LSL r10,r1,r0
;;;496 int m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */
00001e 1e89 SUBS r1,r1,#2
000020 4081 LSLS r1,r1,r0
000022 924b STR r2,[sp,#0x12c] ;495
;;;497 register int s, k, r;
;;;498 unsigned int EOBRUN;
;;;499 JBLOCKROW block;
;;;500 JCOEFPTR thiscoef;
;;;501 BITREAD_STATE_VARS;
;;;502 d_derived_tbl * tbl;
;;;503 int num_newnz;
;;;504 int newnz_pos[DCTSIZE2];
;;;505
;;;506 /* Process restart marker if needed; may have to suspend */
;;;507 if (cinfo->restart_interval) {
000024 914a STR r1,[sp,#0x128]
000026 f8db0114 LDR r0,[r11,#0x114]
00002a b138 CBZ r0,|L2.60|
;;;508 if (entropy->restarts_to_go == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -