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

📄 jfdctint.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jfdctint.o --depend=.\Obj\jfdctint.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\jfdctint.c]
                          THUMB

                          AREA ||i.jpeg_fdct_islow||, CODE, READONLY, ALIGN=2

                  jpeg_fdct_islow PROC
;;;139    GLOBAL(void)
;;;140    jpeg_fdct_islow (DCTELEM * data)
000000  e92d4ff1          PUSH     {r0,r4-r11,lr}
;;;141    {
000004  b081              SUB      sp,sp,#4
;;;142      INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
;;;143      INT32 tmp10, tmp11, tmp12, tmp13;
;;;144      INT32 z1, z2, z3, z4, z5;
;;;145      DCTELEM *dataptr;
;;;146      int ctr;
;;;147      SHIFT_TEMPS
;;;148    
;;;149      /* Pass 1: process rows. */
;;;150      /* Note results are scaled up by sqrt(8) compared to a true DCT; */
;;;151      /* furthermore, we scale the results by 2**PASS1_BITS. */
;;;152    
;;;153      dataptr = data;
;;;154      for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
000006  f8dde004          LDR      lr,[sp,#4]
00000a  f04f0b07          MOV      r11,#7
;;;155        tmp0 = dataptr[0] + dataptr[7];
;;;156        tmp7 = dataptr[0] - dataptr[7];
00000e  bf00              NOP      
                  |L1.16|
000010  f8de101c          LDR      r1,[lr,#0x1c]
000014  f8de0000          LDR      r0,[lr,#0]
;;;157        tmp1 = dataptr[1] + dataptr[6];
;;;158        tmp6 = dataptr[1] - dataptr[6];
000018  f8de3018          LDR      r3,[lr,#0x18]
00001c  f8de2004          LDR      r2,[lr,#4]
;;;159        tmp2 = dataptr[2] + dataptr[5];
;;;160        tmp5 = dataptr[2] - dataptr[5];
000020  f8de5014          LDR      r5,[lr,#0x14]
000024  f8de4008          LDR      r4,[lr,#8]
;;;161        tmp3 = dataptr[3] + dataptr[4];
;;;162        tmp4 = dataptr[3] - dataptr[4];
000028  e9de6703          LDRD     r6,r7,[lr,#0xc]
00002c  eba00a01          SUB      r10,r0,r1             ;156
000030  4408              ADD      r0,r0,r1              ;155
000032  eba40805          SUB      r8,r4,r5              ;160
000036  19f1              ADDS     r1,r6,r7              ;161
000038  442c              ADD      r4,r4,r5              ;159
00003a  eba20903          SUB      r9,r2,r3              ;158
;;;163        
;;;164        /* Even part per LL&M figure 1 --- note that published figure is faulty;
;;;165         * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
;;;166         */
;;;167        
;;;168        tmp10 = tmp0 + tmp3;
00003e  1845              ADDS     r5,r0,r1
;;;169        tmp13 = tmp0 - tmp3;
000040  1a40              SUBS     r0,r0,r1
000042  441a              ADD      r2,r2,r3              ;157
;;;170        tmp11 = tmp1 + tmp2;
000044  1911              ADDS     r1,r2,r4
;;;171        tmp12 = tmp1 - tmp2;
;;;172        
;;;173        dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
000046  186b              ADDS     r3,r5,r1
000048  009b              LSLS     r3,r3,#2
;;;174        dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
00004a  1a69              SUBS     r1,r5,r1
;;;175        
;;;176        z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
00004c  f8ce3000          STR      r3,[lr,#0]
000050  0089              LSLS     r1,r1,#2              ;174
000052  1b12              SUBS     r2,r2,r4              ;171
000054  f8ce1010          STR      r1,[lr,#0x10]
000058  1811              ADDS     r1,r2,r0
00005a  f2411351          MOV      r3,#0x1151
00005e  4359              MULS     r1,r3,r1
;;;177        dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
000060  f640433f          MOV      r3,#0xc3f
000064  4358              MULS     r0,r3,r0
000066  eb010040          ADD      r0,r1,r0,LSL #1
00006a  f5006080          ADD      r0,r0,#0x400
00006e  12c0              ASRS     r0,r0,#11
;;;178    				   CONST_BITS-PASS1_BITS);
;;;179        dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
000070  f8ce0008          STR      r0,[lr,#8]
000074  487b              LDR      r0,|L1.612|
000076  eba60c07          SUB      r12,r6,r7             ;162
00007a  fb001002          MLA      r0,r0,r2,r1
00007e  f5006080          ADD      r0,r0,#0x400
000082  12c0              ASRS     r0,r0,#11
;;;180    				   CONST_BITS-PASS1_BITS);
;;;181        
;;;182        /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
;;;183         * cK represents cos(K*pi/16).
;;;184         * i0..i3 in the paper are tmp4..tmp7 here.
;;;185         */
;;;186        
;;;187        z1 = tmp4 + tmp7;
;;;188        z2 = tmp5 + tmp6;
000084  f8ce0018          STR      r0,[lr,#0x18]
000088  eb080309          ADD      r3,r8,r9
;;;189        z3 = tmp4 + tmp6;
00008c  eb0c0009          ADD      r0,r12,r9
;;;190        z4 = tmp5 + tmp7;
000090  eb08010a          ADD      r1,r8,r10
;;;191        z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
000094  9300              STR      r3,[sp,#0]
000096  1842              ADDS     r2,r0,r1
000098  f24253a1          MOV      r3,#0x25a1
00009c  435a              MULS     r2,r3,r2
00009e  eb0c070a          ADD      r7,r12,r10            ;187
;;;192        
;;;193        tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
0000a2  f640138e          MOV      r3,#0x98e
0000a6  fb0cfc03          MUL      r12,r12,r3
;;;194        tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
0000aa  f24413b3          MOV      r3,#0x41b3
0000ae  fb08f603          MUL      r6,r8,r3
;;;195        tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
;;;196        tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
0000b2  f243050b          MOV      r5,#0x300b
0000b6  fb0af805          MUL      r8,r10,r5
;;;197        z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
0000ba  4d6b              LDR      r5,|L1.616|
0000bc  f2462354          MOV      r3,#0x6254            ;195
0000c0  fb09f403          MUL      r4,r9,r3              ;195
0000c4  436f              MULS     r7,r5,r7
;;;198        z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
0000c6  4d69              LDR      r5,|L1.620|
0000c8  9b00              LDR      r3,[sp,#0]
0000ca  436b              MULS     r3,r5,r3
;;;199        z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
0000cc  eba02500          SUB      r5,r0,r0,LSL #8
0000d0  ebc51585          RSB      r5,r5,r5,LSL #6
0000d4  eba50080          SUB      r0,r5,r0,LSL #2
;;;200        z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
0000d8  4d65              LDR      r5,|L1.624|
;;;201        
;;;202        z3 += z5;
0000da  4410              ADD      r0,r0,r2
;;;203        z4 += z5;
0000dc  fb012105          MLA      r1,r1,r5,r2
;;;204        
;;;205        dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
0000e0  eb0c0207          ADD      r2,r12,r7
0000e4  4402              ADD      r2,r2,r0
0000e6  f5026280          ADD      r2,r2,#0x400
0000ea  ea4f22e2          ASR      r2,r2,#11
;;;206        dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
0000ee  f8ce201c          STR      r2,[lr,#0x1c]
0000f2  18f2              ADDS     r2,r6,r3
0000f4  440a              ADD      r2,r2,r1
0000f6  f5026280          ADD      r2,r2,#0x400
0000fa  ea4f22e2          ASR      r2,r2,#11
;;;207        dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
0000fe  f8ce2014          STR      r2,[lr,#0x14]
000102  18e2              ADDS     r2,r4,r3
000104  4410              ADD      r0,r0,r2
000106  f5006080          ADD      r0,r0,#0x400
00010a  ea4f20e0          ASR      r0,r0,#11
;;;208        dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
00010e  f8ce000c          STR      r0,[lr,#0xc]
000112  eb080007          ADD      r0,r8,r7
000116  4408              ADD      r0,r0,r1
000118  f5006080          ADD      r0,r0,#0x400
00011c  ea4f20e0          ASR      r0,r0,#11
;;;209        
;;;210        dataptr += DCTSIZE;		/* advance pointer to next row */
000120  f8ce0004          STR      r0,[lr,#4]
000124  f10e0e20          ADD      lr,lr,#0x20
000128  f1bb0b01          SUBS     r11,r11,#1            ;154
00012c  f57faf70          BPL      |L1.16|
;;;211      }
;;;212    
;;;213      /* Pass 2: process columns.

⌨️ 快捷键说明

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