jdmainct.txt

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

TXT
767
字号
;;;217        for (i = 0; i < rgroup * (M + 2); i++) {
00003e  f1090502          ADD      r5,r9,#2
000042  689b              LDR      r3,[r3,#8]            ;216
000044  2100              MOVS     r1,#0
000046  fb00f605          MUL      r6,r0,r5
00004a  e006              B        |L3.90|
                  |L3.76|
;;;218          xbuf0[i] = xbuf1[i] = buf[i];
00004c  f8535021          LDR      r5,[r3,r1,LSL #2]
000050  f8445021          STR      r5,[r4,r1,LSL #2]
000054  f8475021          STR      r5,[r7,r1,LSL #2]
000058  1c49              ADDS     r1,r1,#1              ;217
                  |L3.90|
00005a  428e              CMP      r6,r1                 ;217
00005c  dcf6              BGT      |L3.76|
;;;219        }
;;;220        /* In the second list, put the last four row groups in swapped order */
;;;221        for (i = 0; i < rgroup * 2; i++) {
00005e  2100              MOVS     r1,#0
;;;222          xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i];
000060  f1a90602          SUB      r6,r9,#2
000064  e00d              B        |L3.130|
000066  bf00              NOP      
                  |L3.104|
000068  fb001e09          MLA      lr,r0,r9,r1
00006c  fb001c06          MLA      r12,r0,r6,r1
000070  f853502e          LDR      r5,[r3,lr,LSL #2]
000074  f844502c          STR      r5,[r4,r12,LSL #2]
;;;223          xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i];
000078  f853502c          LDR      r5,[r3,r12,LSL #2]
00007c  f844502e          STR      r5,[r4,lr,LSL #2]
000080  1c49              ADDS     r1,r1,#1              ;221
                  |L3.130|
000082  ebb10f40          CMP      r1,r0,LSL #1          ;221
000086  dbef              BLT      |L3.104|
;;;224        }
;;;225        /* The wraparound pointers at top and bottom will be filled later
;;;226         * (see set_wraparound_pointers, below).  Initially we want the "above"
;;;227         * pointers to duplicate the first actual data line.  This only needs
;;;228         * to happen in xbuffer[0].
;;;229         */
;;;230        for (i = 0; i < rgroup; i++) {
000088  2100              MOVS     r1,#0
00008a  e004              B        |L3.150|
                  |L3.140|
;;;231          xbuf0[i - rgroup] = xbuf0[0];
00008c  1a0c              SUBS     r4,r1,r0
00008e  683b              LDR      r3,[r7,#0]
000090  1c49              ADDS     r1,r1,#1              ;230
000092  f8473024          STR      r3,[r7,r4,LSL #2]
                  |L3.150|
000096  4281              CMP      r1,r0                 ;230
000098  dbf8              BLT      |L3.140|
00009a  1c52              ADDS     r2,r2,#1              ;210
00009c  f1080854          ADD      r8,r8,#0x54           ;210
                  |L3.160|
0000a0  f8da0024          LDR      r0,[r10,#0x24]        ;209
0000a4  4290              CMP      r0,r2                 ;209
0000a6  dcb7              BGT      |L3.24|
;;;232        }
;;;233      }
;;;234    }
0000a8  e8bd8ff0          POP      {r4-r11,pc}
;;;235    
                          ENDP


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

                  process_data_context_main PROC
;;;384    METHODDEF(void)
;;;385    process_data_context_main (j_decompress_ptr cinfo,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;386    			   JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
;;;387    			   JDIMENSION out_rows_avail)
;;;388    {
;;;389      my_main_ptr pMain = (my_main_ptr) cinfo->main;
;;;390    
;;;391      /* Read input data if we haven't filled the main buffer yet */
;;;392      if (! pMain->buffer_full) {
000004  f8d041a8          LDR      r4,[r0,#0x1a8]
000008  4605              MOV      r5,r0                 ;388
00000a  69a0              LDR      r0,[r4,#0x18]
00000c  b083              SUB      sp,sp,#0xc            ;388
00000e  4693              MOV      r11,r2                ;388
;;;393        if (! (*cinfo->coef->decompress_data) (cinfo,
;;;394    					   pMain->xbuffer[pMain->whichptr]))
;;;395          return;			/* suspension forced, can do nothing more */
;;;396        pMain->buffer_full = TRUE;	/* OK, we have an iMCU row to work with */
000010  f04f0a01          MOV      r10,#1
000014  b978              CBNZ     r0,|L4.54|
000016  6aa0              LDR      r0,[r4,#0x28]         ;393
000018  eb040080          ADD      r0,r4,r0,LSL #2       ;393
00001c  6a01              LDR      r1,[r0,#0x20]         ;393
00001e  f8d501ac          LDR      r0,[r5,#0x1ac]        ;393
000022  68c2              LDR      r2,[r0,#0xc]          ;393
000024  4628              MOV      r0,r5                 ;393
000026  4790              BLX      r2                    ;393
000028  2800              CMP      r0,#0                 ;393
00002a  d07e              BEQ      |L4.298|
;;;397        pMain->iMCU_row_ctr++;	/* count rows received */
00002c  f8c4a018          STR      r10,[r4,#0x18]
000030  6b60              LDR      r0,[r4,#0x34]
000032  1c40              ADDS     r0,r0,#1
000034  6360              STR      r0,[r4,#0x34]
                  |L4.54|
;;;398      }
;;;399    
;;;400      /* Postprocessor typically will not swallow all the input data it is handed
;;;401       * in one call (due to filling the output buffer first).  Must be prepared
;;;402       * to exit and restart.  This switch lets us keep track of how far we got.
;;;403       * Note that each case falls through to the next on successful completion.
;;;404       */
;;;405      switch (pMain->context_state) {
000036  6ae0              LDR      r0,[r4,#0x2c]
000038  b1f8              CBZ      r0,|L4.122|
00003a  2801              CMP      r0,#1
00003c  d063              BEQ      |L4.262|
00003e  2802              CMP      r0,#2
000040  d173              BNE      |L4.298|
;;;406      case CTX_POSTPONED_ROW:
;;;407        /* Call postprocessor using previously set pointers for postponed row */
;;;408        (*cinfo->post->post_process_data) (cinfo, pMain->xbuffer[pMain->whichptr],
000042  9b06              LDR      r3,[sp,#0x18]
000044  9904              LDR      r1,[sp,#0x10]
000046  e9cdb301          STRD     r11,r3,[sp,#4]
00004a  9100              STR      r1,[sp,#0]
00004c  6aa0              LDR      r0,[r4,#0x28]
00004e  6b23              LDR      r3,[r4,#0x30]
000050  eb040080          ADD      r0,r4,r0,LSL #2
000054  6a01              LDR      r1,[r0,#0x20]
000056  f8d501b0          LDR      r0,[r5,#0x1b0]
00005a  f104021c          ADD      r2,r4,#0x1c
00005e  6846              LDR      r6,[r0,#4]
000060  4628              MOV      r0,r5
000062  47b0              BLX      r6
;;;409    			&pMain->rowgroup_ctr, pMain->rowgroups_avail,
;;;410    			output_buf, out_row_ctr, out_rows_avail);
;;;411        if (pMain->rowgroup_ctr < pMain->rowgroups_avail)
000064  69e1              LDR      r1,[r4,#0x1c]
000066  6b20              LDR      r0,[r4,#0x30]
000068  4281              CMP      r1,r0
00006a  d35e              BCC      |L4.298|
;;;412          return;			/* Need to suspend */
;;;413        pMain->context_state = CTX_PREPARE_FOR_IMCU;
00006c  2000              MOVS     r0,#0
;;;414        if (*out_row_ctr >= out_rows_avail)
00006e  62e0              STR      r0,[r4,#0x2c]
000070  f8db1000          LDR      r1,[r11,#0]
000074  9806              LDR      r0,[sp,#0x18]
000076  4281              CMP      r1,r0
000078  d257              BCS      |L4.298|
                  |L4.122|
;;;415          return;			/* Postprocessor exactly filled output buf */
;;;416        /*FALLTHROUGH*/
;;;417      case CTX_PREPARE_FOR_IMCU:
;;;418        /* Prepare to process first M-1 row groups of this iMCU row */
;;;419        pMain->rowgroup_ctr = 0;
00007a  2000              MOVS     r0,#0
;;;420        pMain->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1);
00007c  61e0              STR      r0,[r4,#0x1c]
00007e  f8d5013c          LDR      r0,[r5,#0x13c]
000082  1e40              SUBS     r0,r0,#1
;;;421        /* Check for bottom of image: if so, tweak pointers to "duplicate"
;;;422         * the last sample row, and adjust rowgroups_avail to ignore padding rows.
;;;423         */
;;;424        if (pMain->iMCU_row_ctr == cinfo->total_iMCU_rows)
000084  6320              STR      r0,[r4,#0x30]
000086  6b61              LDR      r1,[r4,#0x34]
000088  f8d50140          LDR      r0,[r5,#0x140]
00008c  4281              CMP      r1,r0
00008e  d138              BNE      |L4.258|
000090  2200              MOVS     r2,#0
000092  f8d5c0d8          LDR      r12,[r5,#0xd8]
000096  f8d591a8          LDR      r9,[r5,#0x1a8]
00009a  e02f              B        |L4.252|
                  |L4.156|
00009c  f8dc6024          LDR      r6,[r12,#0x24]
0000a0  f8dc000c          LDR      r0,[r12,#0xc]
0000a4  f8d5313c          LDR      r3,[r5,#0x13c]
0000a8  4370              MULS     r0,r6,r0
0000aa  fb90f8f3          SDIV     r8,r0,r3
0000ae  f8dc102c          LDR      r1,[r12,#0x2c]
0000b2  fbb1f3f0          UDIV     r3,r1,r0
0000b6  fb001113          MLS      r1,r0,r3,r1
0000ba  b901              CBNZ     r1,|L4.190|
0000bc  4601              MOV      r1,r0
                  |L4.190|
0000be  b92a              CBNZ     r2,|L4.204|
0000c0  1e48              SUBS     r0,r1,#1
0000c2  fb90f0f8          SDIV     r0,r0,r8
0000c6  1c40              ADDS     r0,r0,#1
0000c8  f8c90030          STR      r0,[r9,#0x30]
                  |L4.204|
0000cc  f8d93028          LDR      r3,[r9,#0x28]
0000d0  2000              MOVS     r0,#0
0000d2  eb090383          ADD      r3,r9,r3,LSL #2
0000d6  6a1b              LDR      r3,[r3,#0x20]
0000d8  f8537022          LDR      r7,[r3,r2,LSL #2]
0000dc  eb070e81          ADD      lr,r7,r1,LSL #2
0000e0  e006              B        |L4.240|
0000e2  bf00              NOP      
                  |L4.228|
0000e4  180e              ADDS     r6,r1,r0
0000e6  f85e3c04          LDR      r3,[lr,#-4]
0000ea  1c40              ADDS     r0,r0,#1
0000ec  f8473026          STR      r3,[r7,r6,LSL #2]
                  |L4.240|
0000f0  ebb00f48          CMP      r0,r8,LSL #1
0000f4  dbf6              BLT      |L4.228|
0000f6  1c52              ADDS     r2,r2,#1
0000f8  f10c0c54          ADD      r12,r12,#0x54
                  |L4.252|
0000fc  6a68              LDR      r0,[r5,#0x24]
0000fe  4290              CMP      r0,r2
000100  dccc              BGT      |L4.156|
                  |L4.258|
;;;425          set_bottom_pointers(cinfo);
;;;426        pMain->context_state = CTX_PROCESS_IMCU;
000102  f8c4a02c          STR      r10,[r4,#0x2c]
                  |L4.262|
;;;427        /*FALLTHROUGH*/
;;;428      case CTX_PROCESS_IMCU:
;;;429        /* Call postprocessor using previously set pointers */
;;;430        (*cinfo->post->post_process_data) (cinfo, pMain->xbuffer[pMain->whichptr],
000106  9b06              LDR      r3,[sp,#0x18]
000108  9904              LDR      r1,[sp,#0x10]
00010a  e9cdb301          STRD     r11,r3,[sp,#4]
00010e  9100              STR      r1,[sp,#0]
000110  6aa0              LDR      r0,[r4,#0x28]
000112  6b23              LDR      r3,[r4,#0x30]
000114  eb040080          ADD      r0,r4,r0,LSL #2
000118  6a01              LDR      r1,[r0,#0x20]
00011a  f8d501b0          LDR      r0,[r5,#0x1b0]
00011e  f104021c          ADD      r2,r4,#0x1c
000122  6846              LDR      r6,[r0,#4]
000124  4628              MOV      r0,r5
000126  47b0              BLX      r6
;;;431    			&pMain->rowgroup_ctr, pMain->rowgroups_avail,
;;;432    			output_buf, out_row_ctr, out_rows_avail);
;;;433        if (pMain->rowgroup_ctr < pMain->rowgroups_avail)
000128  e000              B        |L4.300|
                  |L4.298|
00012a  e059              B        |L4.480|
                  |L4.300|
00012c  6b21              LDR      r1,[r4,#0x30]
00012e  69e0              LDR      r0,[r4,#0x1c]
000130  4288              CMP      r0,r1
000132  d355              BCC      |L4.480|
;;;434          return;			/* Need to suspend */
;;;435        /* After the first iMCU, change wraparound pointers to normal state */
;;;436        if (pMain->iMCU_row_ctr == 1)
000134  6b60              LDR      r0,[r4,#0x34]
000136  2801              CMP      r0,#1
000138  d142              BNE      |L4.448|
00013a  f8d591a8          LDR      r9,[r5,#0x1a8]

⌨️ 快捷键说明

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