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

📄 jidctfst.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
00014a  6603              STR      r3,[r0,#0x60]
                  |L1.332|
;;;271    
;;;272        inptr++;			/* advance pointers to next column */
00014c  1c92              ADDS     r2,r2,#2
;;;273        quantptr++;
00014e  1d09              ADDS     r1,r1,#4
;;;274        wsptr++;
000150  1d00              ADDS     r0,r0,#4
000152  f1a80801          SUB      r8,r8,#1              ;190
000156  f1b80f00          CMP      r8,#0                 ;190
00015a  f73faf5d          BGT      |L1.24|
;;;275      }
;;;276      
;;;277      /* Pass 2: process rows from work array, store into output array. */
;;;278      /* Note that we must descale the results by a factor of 8 == 2**3, */
;;;279      /* and also undo the PASS1_BITS scaling. */
;;;280    
;;;281      wsptr = workspace;
00015e  4668              MOV      r0,sp
;;;282      for (ctr = 0; ctr < DCTSIZE; ctr++) {
000160  f04f0e00          MOV      lr,#0
                  |L1.356|
;;;283        outptr = output_buf[ctr] + output_col;
000164  9946              LDR      r1,[sp,#0x118]
000166  f851202e          LDR      r2,[r1,lr,LSL #2]
00016a  9950              LDR      r1,[sp,#0x140]
00016c  4411              ADD      r1,r1,r2
;;;284        /* Rows of zeroes can be exploited in the same way as we did with columns.
;;;285         * However, the column calculation has created many nonzero AC terms, so
;;;286         * the simplification applies less often (typically 5% to 10% of the time).
;;;287         * On machines with very fast multiplication, it's possible that the
;;;288         * test takes more time than it's worth.  In that case this section
;;;289         * may be commented out.
;;;290         */
;;;291        
;;;292    #ifndef NO_ZERO_ROW_TEST
;;;293        if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
00016e  6842              LDR      r2,[r0,#4]
000170  4691              MOV      r9,r2
000172  b9ca              CBNZ     r2,|L1.424|
000174  6882              LDR      r2,[r0,#8]
000176  b9ba              CBNZ     r2,|L1.424|
000178  68c2              LDR      r2,[r0,#0xc]
00017a  b9aa              CBNZ     r2,|L1.424|
00017c  6902              LDR      r2,[r0,#0x10]
00017e  b99a              CBNZ     r2,|L1.424|
;;;294    	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
000180  6942              LDR      r2,[r0,#0x14]
000182  b98a              CBNZ     r2,|L1.424|
000184  6982              LDR      r2,[r0,#0x18]
000186  b97a              CBNZ     r2,|L1.424|
000188  69c2              LDR      r2,[r0,#0x1c]
00018a  b96a              CBNZ     r2,|L1.424|
;;;295          /* AC terms all zero */
;;;296          JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3)
00018c  6802              LDR      r2,[r0,#0]
00018e  f3c21249          UBFX     r2,r2,#5,#10
000192  f81c2002          LDRB     r2,[r12,r2]
;;;297    				  & RANGE_MASK];
;;;298          
;;;299          outptr[0] = dcval;
000196  700a              STRB     r2,[r1,#0]
;;;300          outptr[1] = dcval;
000198  704a              STRB     r2,[r1,#1]
;;;301          outptr[2] = dcval;
00019a  708a              STRB     r2,[r1,#2]
;;;302          outptr[3] = dcval;
00019c  70ca              STRB     r2,[r1,#3]
;;;303          outptr[4] = dcval;
00019e  710a              STRB     r2,[r1,#4]
;;;304          outptr[5] = dcval;
0001a0  714a              STRB     r2,[r1,#5]
;;;305          outptr[6] = dcval;
0001a2  718a              STRB     r2,[r1,#6]
;;;306          outptr[7] = dcval;
0001a4  71ca              STRB     r2,[r1,#7]
;;;307    
;;;308          wsptr += DCTSIZE;		/* advance pointer to next row */
;;;309          continue;
0001a6  e070              B        |L1.650|
                  |L1.424|
;;;310        }
;;;311    #endif
;;;312        
;;;313        /* Even part */
;;;314    
;;;315        tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
;;;316        tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
;;;317    
;;;318        tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
;;;319        tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562)
0001a8  6985              LDR      r5,[r0,#0x18]
0001aa  6884              LDR      r4,[r0,#8]
0001ac  6903              LDR      r3,[r0,#0x10]         ;316
0001ae  6802              LDR      r2,[r0,#0]            ;316
0001b0  1b66              SUBS     r6,r4,r5
0001b2  eba20a03          SUB      r10,r2,r3             ;316
0001b6  442c              ADD      r4,r4,r5              ;318
0001b8  441a              ADD      r2,r2,r3              ;315
0001ba  f44f77b5          MOV      r7,#0x16a
;;;320    	    - tmp13;
;;;321    
;;;322        tmp0 = tmp10 + tmp13;
0001be  eb020804          ADD      r8,r2,r4
0001c2  437e              MULS     r6,r7,r6              ;319
;;;323        tmp3 = tmp10 - tmp13;
0001c4  1b12              SUBS     r2,r2,r4
;;;324        tmp1 = tmp11 + tmp12;
;;;325        tmp2 = tmp11 - tmp12;
;;;326    
;;;327        /* Odd part */
;;;328    
;;;329        z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
0001c6  9241              STR      r2,[sp,#0x104]
0001c8  ebc42526          RSB      r5,r4,r6,ASR #8       ;319
;;;330        z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
0001cc  68c3              LDR      r3,[r0,#0xc]
0001ce  6942              LDR      r2,[r0,#0x14]
;;;331        z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
;;;332        z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
0001d0  69c4              LDR      r4,[r0,#0x1c]
0001d2  eb0a0b05          ADD      r11,r10,r5            ;324
0001d6  ebaa0a05          SUB      r10,r10,r5            ;325
0001da  1ad7              SUBS     r7,r2,r3              ;330
0001dc  eb090504          ADD      r5,r9,r4              ;331
0001e0  441a              ADD      r2,r2,r3              ;329
0001e2  eba90604          SUB      r6,r9,r4
;;;333    
;;;334        tmp7 = z11 + z13;		/* phase 5 */
0001e6  18ac              ADDS     r4,r5,r2
;;;335        tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
0001e8  1aab              SUBS     r3,r5,r2
0001ea  f44f72b5          MOV      r2,#0x16a
0001ee  4353              MULS     r3,r2,r3
0001f0  ea4f2923          ASR      r9,r3,#8
;;;336    
;;;337        z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
0001f4  19ba              ADDS     r2,r7,r6
0001f6  f24013d9          MOV      r3,#0x1d9
0001fa  435a              MULS     r2,r3,r2
;;;338        tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
0001fc  f2401315          MOV      r3,#0x115
000200  435e              MULS     r6,r3,r6
;;;339        tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
000202  f46f7327          MVN      r3,#0x29c
000206  435f              MULS     r7,r3,r7
;;;340    
;;;341        tmp6 = tmp12 - tmp7;	/* phase 2 */
;;;342        tmp5 = tmp11 - tmp6;
;;;343        tmp4 = tmp10 + tmp5;
;;;344    
;;;345        /* Final output stage: scale down by a factor of 8 and range-limit */
;;;346    
;;;347        outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
000208  eb080304          ADD      r3,r8,r4
00020c  f3c31349          UBFX     r3,r3,#5,#10
000210  f81c3003          LDRB     r3,[r12,r3]
000214  1212              ASRS     r2,r2,#8              ;337
000216  700b              STRB     r3,[r1,#0]
000218  ebc22526          RSB      r5,r2,r6,ASR #8       ;338
;;;348    			    & RANGE_MASK];
;;;349        outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
00021c  eba80304          SUB      r3,r8,r4
000220  eb022227          ADD      r2,r2,r7,ASR #8       ;339
000224  f3c31349          UBFX     r3,r3,#5,#10
000228  1b12              SUBS     r2,r2,r4              ;341
00022a  f81c3003          LDRB     r3,[r12,r3]
00022e  71cb              STRB     r3,[r1,#7]
;;;350    			    & RANGE_MASK];
;;;351        outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
000230  eb0b0302          ADD      r3,r11,r2
000234  eba90602          SUB      r6,r9,r2              ;342
000238  f3c31349          UBFX     r3,r3,#5,#10
00023c  f81c3003          LDRB     r3,[r12,r3]
;;;352    			    & RANGE_MASK];
;;;353        outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
000240  ebab0202          SUB      r2,r11,r2
000244  704b              STRB     r3,[r1,#1]            ;351
000246  f3c21249          UBFX     r2,r2,#5,#10
00024a  f81c2002          LDRB     r2,[r12,r2]
00024e  718a              STRB     r2,[r1,#6]
;;;354    			    & RANGE_MASK];
;;;355        outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
000250  eb0a0206          ADD      r2,r10,r6
000254  f3c21249          UBFX     r2,r2,#5,#10
000258  f81c2002          LDRB     r2,[r12,r2]
00025c  708a              STRB     r2,[r1,#2]
;;;356    			    & RANGE_MASK];
;;;357        outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
00025e  ebaa0206          SUB      r2,r10,r6
000262  f3c21249          UBFX     r2,r2,#5,#10
000266  f81c2002          LDRB     r2,[r12,r2]
00026a  714a              STRB     r2,[r1,#5]
;;;358    			    & RANGE_MASK];
;;;359        outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
00026c  9a41              LDR      r2,[sp,#0x104]
00026e  4435              ADD      r5,r5,r6              ;343
000270  442a              ADD      r2,r2,r5
000272  f3c21249          UBFX     r2,r2,#5,#10
000276  f81c2002          LDRB     r2,[r12,r2]
00027a  710a              STRB     r2,[r1,#4]
;;;360    			    & RANGE_MASK];
;;;361        outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
00027c  9a41              LDR      r2,[sp,#0x104]
00027e  1b52              SUBS     r2,r2,r5
000280  f3c21249          UBFX     r2,r2,#5,#10
000284  f81c2002          LDRB     r2,[r12,r2]
000288  70ca              STRB     r2,[r1,#3]
                  |L1.650|
;;;362    			    & RANGE_MASK];
;;;363    
;;;364        wsptr += DCTSIZE;		/* advance pointer to next row */
00028a  3020              ADDS     r0,r0,#0x20
00028c  f10e0e01          ADD      lr,lr,#1              ;282
000290  f1be0f08          CMP      lr,#8                 ;282
000294  f6ffaf66          BLT      |L1.356|
;;;365      }
;;;366    }
000298  b047              ADD      sp,sp,#0x11c
00029a  e8bd8ff0          POP      {r4-r11,pc}
;;;367    
                          ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -