📄 jdphuff.txt
字号:
00002c 984c LDR r0,[sp,#0x130]
00002e 6a80 LDR r0,[r0,#0x28]
000030 b920 CBNZ r0,|L2.60|
;;;509 if (! process_restart(cinfo))
000032 4658 MOV r0,r11
000034 f7fffffe BL process_restart
000038 2800 CMP r0,#0
00003a d071 BEQ |L2.288|
|L2.60|
;;;510 return FALSE;
;;;511 }
;;;512
;;;513 /* If we've run out of data, don't modify the MCU.
;;;514 */
;;;515 if (! entropy->pub.insufficient_data) {
00003c 984c LDR r0,[sp,#0x130]
00003e 6880 LDR r0,[r0,#8]
000040 2800 CMP r0,#0
000042 d16e BNE |L2.290|
;;;516
;;;517 /* Load up working state */
;;;518 BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
000044 f8cdb11c STR r11,[sp,#0x11c]
;;;519 EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
;;;520
;;;521 /* There is always only one block per MCU */
;;;522 block = MCU_data[0];
;;;523 tbl = entropy->ac_derived_tbl;
000048 f8db0018 LDR r0,[r11,#0x18]
;;;524
;;;525 /* If we are forced to suspend, we must undo the assignments to any newly
;;;526 * nonzero coefficients in the block, because otherwise we'd get confused
;;;527 * next time about which coefficients were already nonzero.
;;;528 * But we need not undo addition of bits to already-nonzero coefficients;
;;;529 * instead, we can test the current bit to see if we already did it.
;;;530 */
;;;531 num_newnz = 0;
00004c 2200 MOVS r2,#0
00004e 9241 STR r2,[sp,#0x104] ;518
000050 6803 LDR r3,[r0,#0] ;518
000052 9343 STR r3,[sp,#0x10c] ;518
000054 6840 LDR r0,[r0,#4] ;518
000056 994c LDR r1,[sp,#0x130]
000058 9044 STR r0,[sp,#0x110] ;518
00005a e9d16403 LDRD r6,r4,[r1,#0xc] ;522
00005e 6948 LDR r0,[r1,#0x14] ;522
000060 682b LDR r3,[r5,#0] ;523
000062 6bc9 LDR r1,[r1,#0x3c] ;523
;;;532
;;;533 /* initialize coefficient loop counter to start of band */
;;;534 k = cinfo->Ss;
000064 9049 STR r0,[sp,#0x124]
000066 f8db5190 LDR r5,[r11,#0x190] ;522
;;;535
;;;536 if (EOBRUN == 0) {
00006a 9348 STR r3,[sp,#0x120]
00006c 2800 CMP r0,#0
00006e 9142 STR r1,[sp,#0x108]
000070 d178 BNE |L2.356|
000072 e0b9 B |L2.488|
|L2.116|
;;;537 for (; k <= Se; k++) {
;;;538 HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
000074 2c08 CMP r4,#8
000076 da0d BGE |L2.148|
000078 2300 MOVS r3,#0
00007a 4622 MOV r2,r4
00007c 4631 MOV r1,r6
00007e a843 ADD r0,sp,#0x10c
000080 f7fffffe BL jpeg_fill_bit_buffer
000084 2800 CMP r0,#0
|L2.134|
000086 d06e BEQ |L2.358|
000088 9c46 LDR r4,[sp,#0x118]
00008a 9e45 LDR r6,[sp,#0x114]
00008c 2c08 CMP r4,#8
00008e da01 BGE |L2.148|
000090 2301 MOVS r3,#1
000092 e011 B |L2.184|
|L2.148|
000094 f1a40008 SUB r0,r4,#8
000098 fa46f000 ASR r0,r6,r0
00009c 9942 LDR r1,[sp,#0x108]
00009e b2c0 UXTB r0,r0
0000a0 eb010180 ADD r1,r1,r0,LSL #2
0000a4 f8d11090 LDR r1,[r1,#0x90]
0000a8 b129 CBZ r1,|L2.182|
0000aa 1a64 SUBS r4,r4,r1
0000ac 9942 LDR r1,[sp,#0x108]
0000ae 4408 ADD r0,r0,r1
0000b0 f8900490 LDRB r0,[r0,#0x490]
0000b4 e00b B |L2.206|
|L2.182|
0000b6 2309 MOVS r3,#9
|L2.184|
0000b8 9300 STR r3,[sp,#0]
0000ba 4622 MOV r2,r4
0000bc 4631 MOV r1,r6
0000be a843 ADD r0,sp,#0x10c
0000c0 9b42 LDR r3,[sp,#0x108]
0000c2 f7fffffe BL jpeg_huff_decode
0000c6 2800 CMP r0,#0
0000c8 db4d BLT |L2.358|
0000ca 9e45 LDR r6,[sp,#0x114]
0000cc 9c46 LDR r4,[sp,#0x118]
|L2.206|
;;;539 r = s >> 4;
0000ce ea4f1920 ASR r9,r0,#4
;;;540 s &= 15;
0000d2 f010080f ANDS r8,r0,#0xf
;;;541 if (s) {
0000d6 d025 BEQ |L2.292|
;;;542 if (s != 1) /* size of new coef should always be 1 */
0000d8 f1b80f01 CMP r8,#1
0000dc d00a BEQ |L2.244|
;;;543 WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
0000de f8db1000 LDR r1,[r11,#0]
0000e2 2076 MOVS r0,#0x76
0000e4 6148 STR r0,[r1,#0x14]
0000e6 f8db0000 LDR r0,[r11,#0]
0000ea f04f31ff MOV r1,#0xffffffff
0000ee 6842 LDR r2,[r0,#4]
0000f0 4658 MOV r0,r11
0000f2 4790 BLX r2
|L2.244|
;;;544 CHECK_BIT_BUFFER(br_state, 1, goto undoit);
0000f4 2c01 CMP r4,#1
0000f6 da09 BGE |L2.268|
0000f8 2301 MOVS r3,#1
0000fa 4622 MOV r2,r4
0000fc 4631 MOV r1,r6
0000fe a843 ADD r0,sp,#0x10c
000100 f7fffffe BL jpeg_fill_bit_buffer
000104 2800 CMP r0,#0
000106 d0be BEQ |L2.134|
000108 9e45 LDR r6,[sp,#0x114]
00010a 9c46 LDR r4,[sp,#0x118]
|L2.268|
;;;545 if (GET_BITS(1))
00010c 1e64 SUBS r4,r4,#1
00010e fa46f004 ASR r0,r6,r4
000112 07c0 LSLS r0,r0,#31
000114 d001 BEQ |L2.282|
;;;546 s = p1; /* newly nonzero coef is positive */
000116 4650 MOV r0,r10
000118 e000 B |L2.284|
|L2.282|
;;;547 else
;;;548 s = m1; /* newly nonzero coef is negative */
00011a 984a LDR r0,[sp,#0x128]
|L2.284|
00011c 4680 MOV r8,r0
00011e e023 B |L2.360|
|L2.288|
000120 e0ba B |L2.664|
|L2.290|
000122 e0a2 B |L2.618|
|L2.292|
;;;549 } else {
;;;550 if (r != 15) {
000124 f1b90f0f CMP r9,#0xf
000128 d01e BEQ |L2.360|
;;;551 EOBRUN = 1 << r; /* EOBr, run length is 2^r + appended bits */
00012a 2701 MOVS r7,#1
00012c fa07f709 LSL r7,r7,r9
;;;552 if (r) {
000130 9749 STR r7,[sp,#0x124]
000132 f1b90f00 CMP r9,#0
000136 d05b BEQ |L2.496|
;;;553 CHECK_BIT_BUFFER(br_state, r, goto undoit);
000138 454c CMP r4,r9
00013a da09 BGE |L2.336|
00013c 464b MOV r3,r9
00013e 4622 MOV r2,r4
000140 4631 MOV r1,r6
000142 a843 ADD r0,sp,#0x10c
000144 f7fffffe BL jpeg_fill_bit_buffer
000148 2800 CMP r0,#0
00014a d09c BEQ |L2.134|
00014c 9e45 LDR r6,[sp,#0x114]
00014e 9c46 LDR r4,[sp,#0x118]
|L2.336|
;;;554 r = GET_BITS(r);
;;;555 EOBRUN += r;
000150 9949 LDR r1,[sp,#0x124]
000152 eba40409 SUB r4,r4,r9 ;554
000156 fa46f004 ASR r0,r6,r4 ;554
00015a 1e7f SUBS r7,r7,#1 ;554
00015c 4038 ANDS r0,r0,r7 ;554
00015e 4408 ADD r0,r0,r1
000160 9049 STR r0,[sp,#0x124]
000162 e045 B |L2.496|
|L2.356|
000164 e06c B |L2.576|
|L2.358|
000166 e089 B |L2.636|
|L2.360|
;;;556 }
;;;557 break; /* rest of block is handled by EOB logic */
;;;558 }
;;;559 /* note s = 0 for processing ZRL */
;;;560 }
;;;561 /* Advance over already-nonzero coefs and r still-zero coefs,
;;;562 * appending correction bits to the nonzeroes. A correction bit is 1
;;;563 * if the absolute value of the coefficient must be increased.
;;;564 */
;;;565 do {
;;;566 thiscoef = *block + jpeg_natural_order[k];
000168 484c LDR r0,|L2.668|
00016a 9948 LDR r1,[sp,#0x120]
00016c f8500025 LDR r0,[r0,r5,LSL #2]
000170 eb010740 ADD r7,r1,r0,LSL #1
;;;567 if (*thiscoef != 0) {
000174 8838 LDRH r0,[r7,#0]
000176 b1e8 CBZ r0,|L2.436|
;;;568 CHECK_BIT_BUFFER(br_state, 1, goto undoit);
000178 2c01 CMP r4,#1
00017a da09 BGE |L2.400|
00017c 2301 MOVS r3,#1
00017e 4622 MOV r2,r4
000180 4631 MOV r1,r6
000182 a843 ADD r0,sp,#0x10c
000184 f7fffffe BL jpeg_fill_bit_buffer
000188 2800 CMP r0,#0
00018a d077 BEQ |L2.636|
00018c 9e45 LDR r6,[sp,#0x114]
00018e 9c46 LDR r4,[sp,#0x118]
|L2.400|
;;;569 if (GET_BITS(1)) {
000190 1e64 SUBS r4,r4,#1
000192 fa46f004 ASR r0,r6,r4
000196 07c0 LSLS r0,r0,#31
000198 d011 BEQ |L2.446|
;;;570 if ((*thiscoef & p1) == 0) { /* do nothing if already set it */
00019a f9b70000 LDRSH r0,[r7,#0]
00019e ea100f0a TST r0,r10
0001a2 d10c BNE |L2.446|
;;;571 if (*thiscoef >= 0)
0001a4 2800 CMP r0,#0
0001a6 db01 BLT |L2.428|
;;;572 *thiscoef += p1;
0001a8 4651 MOV r1,r10
0001aa e000 B |L2.430|
|L2.428|
;;;573 else
;;;574 *thiscoef += m1;
0001ac 994a LDR r1,[sp,#0x128]
|L2.430|
0001ae 4408 ADD r0,r0,r1 ;572
0001b0 8038 STRH r0,[r7,#0] ;572
0001b2 e004 B |L2.446|
|L2.436|
;;;575 }
;;;576 }
;;;577 } else {
;;;578 if (--r < 0)
0001b4 f1a90001 SUB r0,r9,#1
0001b8 f1b00900 SUBS r9,r0,#0
0001bc db03 BLT |L2.454|
|L2.446|
;;;579 break; /* reached target zero coefficient */
;;;580 }
;;;581 k++;
;;;582 } while (k <= Se);
0001be 984b LDR r0,[sp,#0x12c]
0001c0 1c6d ADDS r5,r5,#1 ;581
0001c2 4285 CMP r5,r0
0001c4 ddd0 BLE |L2.360|
|L2.454|
;;;583 if (s) {
0001c6 f1b80f00 CMP r8,#0
0001ca d00c BEQ |L2.486|
;;;584 int pos = jpeg_natural_order[k];
0001cc 4833 LDR r0,|L2.668|
;;;585 /* Output newly nonzero coefficient */
;;;586 (*block)[pos] = (JCOEF) s;
0001ce 9a48 LDR r2,[sp,#0x120]
0001d0 f8500025 LDR r0,[r0,r5,LSL #2] ;584
0001d4 f8228010 STRH r8,[r2,r0,LSL #1]
;;;587 /* Remember its position in case we have to suspend */
;;;588 newnz_pos[num_newnz++] = pos;
0001d8 9941 LDR r1,[sp,#0x104]
0001da aa01 ADD r2,sp,#4
0001dc f8420021 STR r0,[r2,r1,LSL #2]
0001e0 9841 LDR r0,[sp,#0x104]
0001e2 1c40 ADDS r0,r0,#1
0001e4 9041 STR r0,[sp,#0x104]
|L2.486|
0001e6 1c6d ADDS r5,r5,#1 ;537
|L2.488|
0001e8 984b LDR r0,[sp,#0x12c] ;537
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -