📄 jdphuff.txt
字号:
;;;339 /* Completed MCU, so update state */
;;;340 BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
;;;341 ASSIGN_STATE(entropy->saved, state);
;;;342 }
;;;343
;;;344 /* Account for restart interval (no-op if not using restarts) */
;;;345 entropy->restarts_to_go--;
;;;346
;;;347 return TRUE;
;;;348 }
0000d6 b00f ADD sp,sp,#0x3c
0000d8 e8bd8ff0 POP {r4-r11,pc}
|L3.220|
0000dc e9dd8408 LDRD r8,r4,[sp,#0x20] ;327
|L3.224|
0000e0 1b64 SUBS r4,r4,r5 ;328
0000e2 fa48f004 ASR r0,r8,r4 ;328
0000e6 2101 MOVS r1,#1 ;328
0000e8 40a9 LSLS r1,r1,r5 ;328
0000ea 1e49 SUBS r1,r1,#1 ;328
0000ec 4008 ANDS r0,r0,r1 ;328
0000ee 4918 LDR r1,|L3.336|
0000f0 f8511025 LDR r1,[r1,r5,LSL #2] ;329
0000f4 4281 CMP r1,r0 ;329
0000f6 dd04 BLE |L3.258|
0000f8 4915 LDR r1,|L3.336|
0000fa 3140 ADDS r1,r1,#0x40 ;329
0000fc f8511025 LDR r1,[r1,r5,LSL #2] ;329
000100 4408 ADD r0,r0,r1 ;329
|L3.258|
000102 4605 MOV r5,r0 ;329
|L3.260|
000104 a801 ADD r0,sp,#4 ;333
000106 eb00018a ADD r1,r0,r10,LSL #2 ;333
00010a 6848 LDR r0,[r1,#4] ;333
00010c 4428 ADD r0,r0,r5 ;333
00010e 6048 STR r0,[r1,#4] ;336
000110 990b LDR r1,[sp,#0x2c] ;336
000112 4088 LSLS r0,r0,r1 ;336
000114 f8ab0000 STRH r0,[r11,#0] ;336
000118 f1090001 ADD r0,r9,#1 ;316
|L3.284|
00011c 4681 MOV r9,r0 ;316
00011e f8d60164 LDR r0,[r6,#0x164] ;316
000122 4548 CMP r0,r9 ;316
000124 dc93 BGT |L3.78|
000126 9806 LDR r0,[sp,#0x18] ;340
000128 e000 B |L3.300|
|L3.298|
00012a e00b B |L3.324|
|L3.300|
00012c 69b1 LDR r1,[r6,#0x18] ;340
00012e 2214 MOVS r2,#0x14 ;341
000130 6008 STR r0,[r1,#0] ;340
000132 69b1 LDR r1,[r6,#0x18] ;340
000134 9807 LDR r0,[sp,#0x1c] ;340
000136 6048 STR r0,[r1,#4] ;340
000138 e9c78403 STRD r8,r4,[r7,#0xc] ;341
00013c a901 ADD r1,sp,#4 ;341
00013e 980c LDR r0,[sp,#0x30] ;341
000140 f7fffffe BL __aeabi_memcpy4
|L3.324|
000144 6ab8 LDR r0,[r7,#0x28] ;345
000146 1e40 SUBS r0,r0,#1 ;345
000148 62b8 STR r0,[r7,#0x28] ;347
00014a 2001 MOVS r0,#1 ;347
00014c e7c3 B |L3.214|
;;;349
ENDP
00014e 0000 DCW 0x0000
|L3.336|
DCD ||.constdata||
AREA ||i.decode_mcu_DC_refine||, CODE, READONLY, ALIGN=2
decode_mcu_DC_refine PROC
;;;441 METHODDEF(boolean)
;;;442 decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
000000 e92d43f0 PUSH {r4-r9,lr}
;;;443 {
000004 4604 MOV r4,r0
000006 4689 MOV r9,r1
;;;444 phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;445 int p1 = 1 << cinfo->Al; /* 1 in the bit position being coded */
000008 f8d061bc LDR r6,[r0,#0x1bc]
00000c f8d0119c LDR r1,[r0,#0x19c]
000010 2001 MOVS r0,#1
;;;446 int blkn;
;;;447 JBLOCKROW block;
;;;448 BITREAD_STATE_VARS;
;;;449
;;;450 /* Process restart marker if needed; may have to suspend */
;;;451 if (cinfo->restart_interval) {
000012 f8d42114 LDR r2,[r4,#0x114]
000016 b085 SUB sp,sp,#0x14 ;443
000018 fa00f801 LSL r8,r0,r1 ;445
00001c b12a CBZ r2,|L4.42|
;;;452 if (entropy->restarts_to_go == 0)
00001e 6ab0 LDR r0,[r6,#0x28]
000020 b918 CBNZ r0,|L4.42|
;;;453 if (! process_restart(cinfo))
000022 4620 MOV r0,r4
000024 f7fffffe BL process_restart
000028 b198 CBZ r0,|L4.82|
|L4.42|
;;;454 return FALSE;
;;;455 }
;;;456
;;;457 /* Not worth the cycles to check insufficient_data here,
;;;458 * since we will not change the data anyway if we read zeroes.
;;;459 */
;;;460
;;;461 /* Load up working state */
;;;462 BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
00002a 9404 STR r4,[sp,#0x10]
00002c 69a0 LDR r0,[r4,#0x18]
;;;463
;;;464 /* Outer loop handles each block in the MCU */
;;;465
;;;466 for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
00002e 2500 MOVS r5,#0
000030 6801 LDR r1,[r0,#0] ;462
000032 9100 STR r1,[sp,#0] ;462
000034 6840 LDR r0,[r0,#4] ;462
000036 9001 STR r0,[sp,#4] ;462
000038 e9d61203 LDRD r1,r2,[r6,#0xc]
00003c e019 B |L4.114|
;;;467 block = MCU_data[blkn];
00003e bf00 NOP
|L4.64|
000040 f8597025 LDR r7,[r9,r5,LSL #2]
;;;468
;;;469 /* Encoded data is simply the next bit of the two's-complement DC value */
;;;470 CHECK_BIT_BUFFER(br_state, 1, return FALSE);
000044 2a01 CMP r2,#1
000046 da0a BGE |L4.94|
000048 2301 MOVS r3,#1
00004a 4668 MOV r0,sp
00004c f7fffffe BL jpeg_fill_bit_buffer
000050 b918 CBNZ r0,|L4.90|
|L4.82|
000052 2000 MOVS r0,#0
|L4.84|
;;;471 if (GET_BITS(1))
;;;472 (*block)[0] |= p1;
;;;473 /* Note: since we use |=, repeating the assignment later is safe */
;;;474 }
;;;475
;;;476 /* Completed MCU, so update state */
;;;477 BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
;;;478
;;;479 /* Account for restart interval (no-op if not using restarts) */
;;;480 entropy->restarts_to_go--;
;;;481
;;;482 return TRUE;
;;;483 }
000054 b005 ADD sp,sp,#0x14
000056 e8bd83f0 POP {r4-r9,pc}
|L4.90|
00005a e9dd1202 LDRD r1,r2,[sp,#8] ;470
|L4.94|
00005e 1e52 SUBS r2,r2,#1 ;471
000060 fa41f002 ASR r0,r1,r2 ;471
000064 07c0 LSLS r0,r0,#31 ;471
000066 d003 BEQ |L4.112|
000068 8838 LDRH r0,[r7,#0] ;472
00006a ea400008 ORR r0,r0,r8 ;472
00006e 8038 STRH r0,[r7,#0] ;472
|L4.112|
000070 1c6d ADDS r5,r5,#1 ;466
|L4.114|
000072 f8d40164 LDR r0,[r4,#0x164] ;466
000076 42a8 CMP r0,r5 ;466
000078 dce2 BGT |L4.64|
00007a 69a3 LDR r3,[r4,#0x18] ;477
00007c 9800 LDR r0,[sp,#0] ;477
00007e 6018 STR r0,[r3,#0] ;477
000080 69a3 LDR r3,[r4,#0x18] ;477
000082 9801 LDR r0,[sp,#4] ;477
000084 6058 STR r0,[r3,#4] ;477
000086 e9c61203 STRD r1,r2,[r6,#0xc] ;480
00008a 6ab0 LDR r0,[r6,#0x28] ;480
00008c 1e40 SUBS r0,r0,#1 ;480
00008e 62b0 STR r0,[r6,#0x28] ;482
000090 2001 MOVS r0,#1 ;482
000092 e7df B |L4.84|
;;;484
ENDP
AREA ||i.jinit_phuff_decoder||, CODE, READONLY, ALIGN=2
jinit_phuff_decoder PROC
;;;640 GLOBAL(void)
;;;641 jinit_phuff_decoder (j_decompress_ptr cinfo)
000000 b510 PUSH {r4,lr}
;;;642 {
000002 4604 MOV r4,r0
;;;643 phuff_entropy_ptr entropy;
;;;644 int *coef_bit_ptr;
;;;645 int ci, i;
;;;646
;;;647 entropy = (phuff_entropy_ptr)
000004 6840 LDR r0,[r0,#4]
000006 2240 MOVS r2,#0x40
000008 6803 LDR r3,[r0,#0]
00000a 2101 MOVS r1,#1
00000c 4620 MOV r0,r4
00000e 4798 BLX r3
;;;648 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;649 SIZEOF(phuff_entropy_decoder));
;;;650 cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
;;;651 entropy->pub.start_pass = start_pass_phuff_decoder;
000010 4910 LDR r1,|L5.84|
000012 f8c401bc STR r0,[r4,#0x1bc]
;;;652
;;;653 /* Mark derived tables unallocated */
;;;654 for (i = 0; i < NUM_HUFF_TBLS; i++) {
000016 6001 STR r1,[r0,#0]
000018 2100 MOVS r1,#0
00001a 460a MOV r2,r1
|L5.28|
;;;655 entropy->derived_tbls[i] = NULL;
00001c eb000381 ADD r3,r0,r1,LSL #2
000020 1c49 ADDS r1,r1,#1 ;654
000022 62da STR r2,[r3,#0x2c] ;654
000024 2904 CMP r1,#4 ;654
000026 dbf9 BLT |L5.28|
;;;656 }
;;;657
;;;658 /* Create progression status table */
;;;659 cinfo->coef_bits = (int (*)[DCTSIZE2])
000028 6a60 LDR r0,[r4,#0x24]
00002a 0202 LSLS r2,r0,#8
00002c 6860 LDR r0,[r4,#4]
00002e 2101 MOVS r1,#1
000030 6803 LDR r3,[r0,#0]
000032 4620 MOV r0,r4
000034 4798 BLX r3
;;;660 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;661 cinfo->num_components*DCTSIZE2*SIZEOF(int));
;;;662 coef_bit_ptr = & cinfo->coef_bits[0][0];
;;;663 for (ci = 0; ci < cinfo->num_components; ci++)
000036 2200 MOVS r2,#0
;;;664 for (i = 0; i < DCTSIZE2; i++)
;;;665 *coef_bit_ptr++ = -1;
000038 1e53 SUBS r3,r2,#1
00003a f8c400a0 STR r0,[r4,#0xa0] ;663
00003e e005 B |L5.76|
|L5.64|
000040 2100 MOVS r1,#0 ;664
|L5.66|
000042 c008 STM r0!,{r3}
000044 1c49 ADDS r1,r1,#1 ;664
000046 2940 CMP r1,#0x40 ;664
000048 dbfb BLT |L5.66|
00004a 1c52 ADDS r2,r2,#1 ;663
|L5.76|
00004c 6a61 LDR r1,[r4,#0x24] ;663
00004e 4291 CMP r1,r2 ;663
000050 dcf6 BGT |L5.64|
;;;666 }
000052 bd10 POP {r4,pc}
;;;667
ENDP
|L5.84|
DCD start_pass_phuff_decoder
AREA ||i.process_restart||, CODE, READONLY, ALIGN=2
process_restart PROC
;;;227 LOCAL(boolean)
;;;228 process_restart (j_decompress_ptr cinfo)
000000 b570 PUSH {r4-r6,lr}
;;;229 {
000002 4605 MOV r5,r0
;;;230 phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
;;;231 int ci;
;;;232
;;;233 /* Throw away any unused bits remaining in bit buffer; */
;;;234 /* include any full bytes in next_marker's count of discarded bytes */
;;;235 cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
000004 f8d041bc LDR r4,[r0,#0x1bc]
000008 f8d511b8 LDR r1,[r5,#0x1b8]
00000c 6920 LDR r0,[r4,#0x10]
00000e 698a LDR r2,[r1,#0x18]
000010 17c3 ASRS r3,r0,#31
000012 eb007053 ADD r0,r0,r3,LSR #29
000016 eb0200e0 ADD r0,r2,r0,ASR #3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -