⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdphuff.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; 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 + -