jidctint.txt

来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 592 行 · 第 1/2 页

TXT
592
字号
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jidctint.o --depend=.\Obj\jidctint.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\jidctint.c]
                          THUMB

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

                  jpeg_idct_islow PROC
;;;147    GLOBAL(void)
;;;148    jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;149    		 JCOEFPTR coef_block,
;;;150    		 JSAMPARRAY output_buf, JDIMENSION output_col)
;;;151    {
;;;152      INT32 tmp0, tmp1, tmp2, tmp3;
;;;153      INT32 tmp10, tmp11, tmp12, tmp13;
;;;154      INT32 z1, z2, z3, z4, z5;
;;;155      JCOEFPTR inptr;
;;;156      ISLOW_MULT_TYPE * quantptr;
;;;157      int * wsptr;
;;;158      JSAMPROW outptr;
;;;159      JSAMPLE *range_limit = IDCT_range_limit(cinfo);
;;;160      int ctr;
;;;161      int workspace[DCTSIZE2];	/* buffers data between passes */
;;;162      SHIFT_TEMPS
;;;163    
;;;164      /* Pass 1: process columns from input, store into work array. */
;;;165      /* Note results are scaled up by sqrt(8) compared to a true IDCT; */
;;;166      /* furthermore, we scale the results by 2**PASS1_BITS. */
;;;167    
;;;168      inptr = coef_block;
;;;169      quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
000004  f8d03144          LDR      r3,[r0,#0x144]
000008  b0ca              SUB      sp,sp,#0x128          ;151
00000a  6d09              LDR      r1,[r1,#0x50]
;;;170      wsptr = workspace;
00000c  4668              MOV      r0,sp
00000e  3380              ADDS     r3,r3,#0x80           ;159
;;;171      for (ctr = DCTSIZE; ctr > 0; ctr--) {
000010  f04f0b08          MOV      r11,#8
                  |L1.20|
;;;172        /* Due to quantization, we will usually find that many of the input
;;;173         * coefficients are zero, especially the AC terms.  We can exploit this
;;;174         * by short-circuiting the IDCT calculation for any column in which all
;;;175         * the AC terms are zero.  In that case each output is equal to the
;;;176         * DC coefficient (with scale factor as needed).
;;;177         * With typical images and quantization tables, half or more of the
;;;178         * column DCT calculations can be simplified this way.
;;;179         */
;;;180        
;;;181        if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
000014  f9b24010          LDRSH    r4,[r2,#0x10]
000018  46a0              MOV      r8,r4
00001a  bb0c              CBNZ     r4,|L1.96|
00001c  8c14              LDRH     r4,[r2,#0x20]
00001e  b9fc              CBNZ     r4,|L1.96|
;;;182    	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
000020  8e14              LDRH     r4,[r2,#0x30]
000022  b9ec              CBNZ     r4,|L1.96|
000024  f8b24040          LDRH     r4,[r2,#0x40]
000028  b9d4              CBNZ     r4,|L1.96|
;;;183    	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
00002a  f8b24050          LDRH     r4,[r2,#0x50]
00002e  b9bc              CBNZ     r4,|L1.96|
000030  f8b24060          LDRH     r4,[r2,#0x60]
000034  b9a4              CBNZ     r4,|L1.96|
;;;184    	inptr[DCTSIZE*7] == 0) {
000036  f8b24070          LDRH     r4,[r2,#0x70]
00003a  b98c              CBNZ     r4,|L1.96|
;;;185          /* AC terms all zero */
;;;186          int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
00003c  f9b24000          LDRSH    r4,[r2,#0]
000040  680d              LDR      r5,[r1,#0]
000042  436c              MULS     r4,r5,r4
000044  00a4              LSLS     r4,r4,#2
;;;187          
;;;188          wsptr[DCTSIZE*0] = dcval;
;;;189          wsptr[DCTSIZE*1] = dcval;
000046  6004              STR      r4,[r0,#0]
;;;190          wsptr[DCTSIZE*2] = dcval;
000048  6204              STR      r4,[r0,#0x20]
;;;191          wsptr[DCTSIZE*3] = dcval;
00004a  6404              STR      r4,[r0,#0x40]
;;;192          wsptr[DCTSIZE*4] = dcval;
00004c  6604              STR      r4,[r0,#0x60]
;;;193          wsptr[DCTSIZE*5] = dcval;
00004e  f8c04080          STR      r4,[r0,#0x80]
;;;194          wsptr[DCTSIZE*6] = dcval;
000052  f8c040a0          STR      r4,[r0,#0xa0]
;;;195          wsptr[DCTSIZE*7] = dcval;
000056  f8c040c0          STR      r4,[r0,#0xc0]
;;;196          
;;;197          inptr++;			/* advance pointers to next column */
;;;198          quantptr++;
;;;199          wsptr++;
;;;200          continue;
00005a  f8c040e0          STR      r4,[r0,#0xe0]
00005e  e0b9              B        |L1.468|
                  |L1.96|
;;;201        }
;;;202        
;;;203        /* Even part: reverse the even part of the forward DCT. */
;;;204        /* The rotator is sqrt(2)*c(-6). */
;;;205        
;;;206        z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
;;;207        z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
000060  f9b27060          LDRSH    r7,[r2,#0x60]
000064  f8d140c0          LDR      r4,[r1,#0xc0]
000068  f9b26020          LDRSH    r6,[r2,#0x20]         ;206
00006c  6c0d              LDR      r5,[r1,#0x40]         ;206
00006e  4367              MULS     r7,r4,r7
000070  436e              MULS     r6,r5,r6              ;206
;;;208        
;;;209        z1 = MULTIPLY(z2 + z3, FIX_0_541196100);
000072  19f5              ADDS     r5,r6,r7
000074  f2411451          MOV      r4,#0x1151
000078  4365              MULS     r5,r4,r5
;;;210        tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
00007a  4cc6              LDR      r4,|L1.916|
00007c  4367              MULS     r7,r4,r7
;;;211        tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
00007e  f640443f          MOV      r4,#0xc3f
000082  4366              MULS     r6,r4,r6
000084  eb070c05          ADD      r12,r7,r5             ;210
000088  eb050e46          ADD      lr,r5,r6,LSL #1
;;;212        
;;;213        z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
00008c  f9b24000          LDRSH    r4,[r2,#0]
;;;214        z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
000090  f9b26040          LDRSH    r6,[r2,#0x40]
000094  680d              LDR      r5,[r1,#0]            ;213
000096  f8d17080          LDR      r7,[r1,#0x80]
00009a  436c              MULS     r4,r5,r4              ;213
00009c  437e              MULS     r6,r7,r6
;;;215    
;;;216        tmp0 = (z2 + z3) << CONST_BITS;
00009e  19a5              ADDS     r5,r4,r6
;;;217        tmp1 = (z2 - z3) << CONST_BITS;
0000a0  1ba4              SUBS     r4,r4,r6
0000a2  036d              LSLS     r5,r5,#13             ;216
;;;218        
;;;219        tmp10 = tmp0 + tmp3;
0000a4  eb05060e          ADD      r6,r5,lr
;;;220        tmp13 = tmp0 - tmp3;
0000a8  eba5050e          SUB      r5,r5,lr
0000ac  0364              LSLS     r4,r4,#13             ;217
;;;221        tmp11 = tmp1 + tmp2;
0000ae  9544              STR      r5,[sp,#0x110]
0000b0  eb04050c          ADD      r5,r4,r12
;;;222        tmp12 = tmp1 - tmp2;
0000b4  eba4040c          SUB      r4,r4,r12
0000b8  9647              STR      r6,[sp,#0x11c]        ;221
;;;223        
;;;224        /* Odd part per figure 8; the matrix is unitary and hence its
;;;225         * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
;;;226         */
;;;227        
;;;228        tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
0000ba  9546              STR      r5,[sp,#0x118]
0000bc  9445              STR      r4,[sp,#0x114]
;;;229        tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
0000be  f9b27050          LDRSH    r7,[r2,#0x50]
0000c2  f8d150a0          LDR      r5,[r1,#0xa0]
0000c6  f9b2c070          LDRSH    r12,[r2,#0x70]        ;228
0000ca  fb07f905          MUL      r9,r7,r5
0000ce  f8d140e0          LDR      r4,[r1,#0xe0]         ;228
;;;230        tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
;;;231        tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
0000d2  6a0f              LDR      r7,[r1,#0x20]
0000d4  fb0cfc04          MUL      r12,r12,r4            ;228
0000d8  f9b24030          LDRSH    r4,[r2,#0x30]         ;230
0000dc  6e0d              LDR      r5,[r1,#0x60]         ;230
0000de  fb08f607          MUL      r6,r8,r7
0000e2  fb04fa05          MUL      r10,r4,r5             ;230
;;;232        
;;;233        z1 = tmp0 + tmp3;
;;;234        z2 = tmp1 + tmp2;
;;;235        z3 = tmp0 + tmp2;
0000e6  eb0c050a          ADD      r5,r12,r10
;;;236        z4 = tmp1 + tmp3;
0000ea  eb090706          ADD      r7,r9,r6
0000ee  eb09040a          ADD      r4,r9,r10             ;234
;;;237        z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
0000f2  eb050e07          ADD      lr,r5,r7
0000f6  9442              STR      r4,[sp,#0x108]
0000f8  f24254a1          MOV      r4,#0x25a1
0000fc  eb0c0806          ADD      r8,r12,r6             ;233
000100  fb0efe04          MUL      lr,lr,r4
;;;238        
;;;239        tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
000104  f640148e          MOV      r4,#0x98e
000108  fb0cfc04          MUL      r12,r12,r4
00010c  9541              STR      r5,[sp,#0x104]        ;237
;;;240        tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
00010e  f24414b3          MOV      r4,#0x41b3
000112  fb09f904          MUL      r9,r9,r4
;;;241        tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
000116  f2462554          MOV      r5,#0x6254
00011a  fb0afa05          MUL      r10,r10,r5
;;;242        tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
;;;243        z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
00011e  4c9e              LDR      r4,|L1.920|
000120  f243050b          MOV      r5,#0x300b            ;242
000124  436e              MULS     r6,r5,r6              ;242
000126  fb08f804          MUL      r8,r8,r4
;;;244        z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
00012a  4d9c              LDR      r5,|L1.924|
00012c  9c42              LDR      r4,[sp,#0x108]
00012e  9648              STR      r6,[sp,#0x120]
000130  436c              MULS     r4,r5,r4
;;;245        z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
000132  9d41              LDR      r5,[sp,#0x104]
000134  9740              STR      r7,[sp,#0x100]        ;237
000136  eba52605          SUB      r6,r5,r5,LSL #8
00013a  ebc61686          RSB      r6,r6,r6,LSL #6
00013e  eba60585          SUB      r5,r6,r5,LSL #2
;;;246        z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
000142  4e97              LDR      r6,|L1.928|
;;;247        
;;;248        z3 += z5;
;;;249        z4 += z5;
000144  9f40              LDR      r7,[sp,#0x100]
000146  4475              ADD      r5,r5,lr              ;248
000148  fb07ee06          MLA      lr,r7,r6,lr
;;;250        
;;;251        tmp0 += z1 + z3;
00014c  eb080605          ADD      r6,r8,r5
000150  44b4              ADD      r12,r12,r6
;;;252        tmp1 += z2 + z4;
000152  eb04060e          ADD      r6,r4,lr
000156  eb060709          ADD      r7,r6,r9
;;;253        tmp2 += z2 + z3;
00015a  4425              ADD      r5,r5,r4
00015c  eb05040a          ADD      r4,r5,r10
;;;254        tmp3 += z1 + z4;
000160  9e48              LDR      r6,[sp,#0x120]
000162  eb08050e          ADD      r5,r8,lr
000166  4435              ADD      r5,r5,r6
;;;255        
;;;256        /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
;;;257        
;;;258        wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS);
000168  9e47              LDR      r6,[sp,#0x11c]
00016a  442e              ADD      r6,r6,r5
00016c  f5066680          ADD      r6,r6,#0x400
000170  12f6              ASRS     r6,r6,#11
;;;259        wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS);
000172  6006              STR      r6,[r0,#0]
000174  9e47              LDR      r6,[sp,#0x11c]
000176  1b75              SUBS     r5,r6,r5
000178  f5056580          ADD      r5,r5,#0x400
00017c  12ed              ASRS     r5,r5,#11
;;;260        wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS);
00017e  f8c050e0          STR      r5,[r0,#0xe0]
000182  9d46              LDR      r5,[sp,#0x118]
000184  4425              ADD      r5,r5,r4
000186  f5056580          ADD      r5,r5,#0x400
00018a  12ed              ASRS     r5,r5,#11
;;;261        wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS);
00018c  6205              STR      r5,[r0,#0x20]
00018e  9d46              LDR      r5,[sp,#0x118]
000190  1b2c              SUBS     r4,r5,r4
000192  f5046480          ADD      r4,r4,#0x400
000196  12e4              ASRS     r4,r4,#11
;;;262        wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS);
000198  f8c040c0          STR      r4,[r0,#0xc0]
00019c  9c45              LDR      r4,[sp,#0x114]
00019e  443c              ADD      r4,r4,r7
0001a0  f5046480          ADD      r4,r4,#0x400
0001a4  12e4              ASRS     r4,r4,#11
;;;263        wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS);
0001a6  6404              STR      r4,[r0,#0x40]
0001a8  9c45              LDR      r4,[sp,#0x114]
0001aa  1be4              SUBS     r4,r4,r7
0001ac  f5046480          ADD      r4,r4,#0x400
0001b0  12e4              ASRS     r4,r4,#11
;;;264        wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS);
0001b2  f8c040a0          STR      r4,[r0,#0xa0]
0001b6  9d44              LDR      r5,[sp,#0x110]
0001b8  eb05040c          ADD      r4,r5,r12
0001bc  f5046480          ADD      r4,r4,#0x400
0001c0  12e4              ASRS     r4,r4,#11
;;;265        wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS);
0001c2  6604              STR      r4,[r0,#0x60]
0001c4  9d44              LDR      r5,[sp,#0x110]
0001c6  eba5040c          SUB      r4,r5,r12
0001ca  f5046480          ADD      r4,r4,#0x400
0001ce  12e4              ASRS     r4,r4,#11
0001d0  f8c04080          STR      r4,[r0,#0x80]
                  |L1.468|
;;;266        
;;;267        inptr++;			/* advance pointers to next column */
0001d4  1c92              ADDS     r2,r2,#2
;;;268        quantptr++;
0001d6  1d09              ADDS     r1,r1,#4
;;;269        wsptr++;
0001d8  1d00              ADDS     r0,r0,#4

⌨️ 快捷键说明

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