jmemmgr.txt

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

TXT
1,415
字号
;;;296    	out_of_memory(cinfo, 2); /* jpeg_get_small failed */
000090  2102              MOVS     r1,#2
000092  4640              MOV      r0,r8
000094  f7fffffe          BL       out_of_memory
000098  e7f2              B        |L6.128|
                  |L6.154|
;;;297        }
;;;298        mem->total_space_allocated += min_request + slop;
00009a  f8d9104c          LDR      r1,[r9,#0x4c]
00009e  193b              ADDS     r3,r7,r4
0000a0  4419              ADD      r1,r1,r3
;;;299        /* Success, initialize the new pool header and add to end of list */
;;;300        hdr_ptr->hdr.next = NULL;
0000a2  2200              MOVS     r2,#0
0000a4  f8c9104c          STR      r1,[r9,#0x4c]
;;;301        hdr_ptr->hdr.bytes_used = 0;
0000a8  6002              STR      r2,[r0,#0]
;;;302        hdr_ptr->hdr.bytes_left = sizeofobject + slop;
0000aa  1929              ADDS     r1,r5,r4
;;;303        if (prev_hdr_ptr == NULL)	/* first pool in class? */
0000ac  e9c02101          STRD     r2,r1,[r0,#4]
0000b0  b916              CBNZ     r6,|L6.184|
;;;304          mem->small_list[pool_id] = hdr_ptr;
0000b2  f8ca0034          STR      r0,[r10,#0x34]
                  |L6.182|
0000b6  e000              B        |L6.186|
                  |L6.184|
;;;305        else
;;;306          prev_hdr_ptr->hdr.next = hdr_ptr;
0000b8  6030              STR      r0,[r6,#0]
                  |L6.186|
;;;307      }
;;;308    
;;;309      /* OK, allocate the object from the current pool */
;;;310      data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */
;;;311      data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */
0000ba  6841              LDR      r1,[r0,#4]
0000bc  f1000210          ADD      r2,r0,#0x10           ;310
0000c0  440a              ADD      r2,r2,r1
;;;312      hdr_ptr->hdr.bytes_used += sizeofobject;
0000c2  4429              ADD      r1,r1,r5
;;;313      hdr_ptr->hdr.bytes_left -= sizeofobject;
0000c4  6041              STR      r1,[r0,#4]
0000c6  6881              LDR      r1,[r0,#8]
0000c8  1b49              SUBS     r1,r1,r5
;;;314    
;;;315      return (void *) data_ptr;
0000ca  6081              STR      r1,[r0,#8]
0000cc  4610              MOV      r0,r2
;;;316    }
0000ce  e8bd87f0          POP      {r4-r10,pc}
;;;317    
                          ENDP

0000d2  0000              DCW      0x0000
                  |L6.212|
                          DCD      0x3b9ac9f0
                  |L6.216|
                          DCD      ||.constdata||

                          AREA ||i.do_barray_io||, CODE, READONLY, ALIGN=1

                  do_barray_io PROC
;;;685    /* Do backing store read or write of a virtual coefficient-block array */
;;;686    LOCAL(void) do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) {
000000  e92d4ff7          PUSH     {r0-r2,r4-r11,lr}
;;;687      long bytesperrow, file_offset, byte_count, rows, thisrow, i;
;;;688    
;;;689      bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK);
000004  6888              LDR      r0,[r1,#8]
;;;690      file_offset = ptr->cur_start_row * bytesperrow;
000006  698e              LDR      r6,[r1,#0x18]
000008  ea4f18c0          LSL      r8,r0,#7              ;689
00000c  b082              SUB      sp,sp,#8              ;686
00000e  460c              MOV      r4,r1                 ;686
000010  4692              MOV      r10,r2                ;686
;;;691      /* Loop to read or write each allocation chunk in mem_buffer */
;;;692      for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
000012  2500              MOVS     r5,#0
000014  fb06f608          MUL      r6,r6,r8              ;690
;;;693        /* One chunk, but check for short chunk at end of buffer */
;;;694        rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
;;;695        /* Transfer no more than is currently defined */
;;;696        thisrow = (long) ptr->cur_start_row + i;
;;;697        rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
;;;698        /* Transfer no more than fits in file */
;;;699        rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
;;;700        if (rows <= 0)		/* this chunk might be past end of file! */
;;;701          break;
;;;702        byte_count = rows * bytesperrow;
;;;703        if (writing)
;;;704          (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
000018  f1010b30          ADD      r11,r1,#0x30
00001c  e026              B        |L7.108|
                  |L7.30|
00001e  6961              LDR      r1,[r4,#0x14]         ;694
000020  1b40              SUBS     r0,r0,r5              ;694
000022  4281              CMP      r1,r0                 ;694
000024  da00              BGE      |L7.40|
000026  4608              MOV      r0,r1                 ;694
                  |L7.40|
000028  e9d41206          LDRD     r1,r2,[r4,#0x18]      ;697
00002c  4429              ADD      r1,r1,r5              ;696
00002e  1a52              SUBS     r2,r2,r1              ;697
000030  4282              CMP      r2,r0                 ;697
000032  dc00              BGT      |L7.54|
000034  4610              MOV      r0,r2                 ;697
                  |L7.54|
000036  6862              LDR      r2,[r4,#4]            ;699
000038  1a51              SUBS     r1,r2,r1              ;699
00003a  4281              CMP      r1,r0                 ;699
00003c  dc00              BGT      |L7.64|
00003e  4608              MOV      r0,r1                 ;699
                  |L7.64|
000040  2800              CMP      r0,#0                 ;700
000042  dd16              BLE      |L7.114|
000044  fb00f908          MUL      r9,r0,r8              ;702
000048  f8cd9000          STR      r9,[sp,#0]
00004c  6820              LDR      r0,[r4,#0]
00004e  f1ba0f00          CMP      r10,#0                ;703
000052  f8502025          LDR      r2,[r0,r5,LSL #2]
000056  d001              BEQ      |L7.92|
000058  6b67              LDR      r7,[r4,#0x34]
00005a  e000              B        |L7.94|
                  |L7.92|
;;;705    					    (void FAR *) ptr->mem_buffer[i],
;;;706    					    file_offset, byte_count);
;;;707        else
;;;708          (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
00005c  6b27              LDR      r7,[r4,#0x30]
                  |L7.94|
00005e  4633              MOV      r3,r6
000060  4659              MOV      r1,r11
000062  9802              LDR      r0,[sp,#8]
000064  47b8              BLX      r7
000066  6960              LDR      r0,[r4,#0x14]         ;692
;;;709    					   (void FAR *) ptr->mem_buffer[i],
;;;710    					   file_offset, byte_count);
;;;711        file_offset += byte_count;
000068  444e              ADD      r6,r6,r9
00006a  4405              ADD      r5,r5,r0              ;692
                  |L7.108|
00006c  6920              LDR      r0,[r4,#0x10]         ;692
00006e  42a8              CMP      r0,r5                 ;692
000070  dcd5              BGT      |L7.30|
                  |L7.114|
;;;712      }
;;;713    }
000072  b005              ADD      sp,sp,#0x14
000074  e8bd8ff0          POP      {r4-r11,pc}
;;;714    
                          ENDP


                          AREA ||i.do_sarray_io||, CODE, READONLY, ALIGN=1

                  do_sarray_io PROC
;;;653    
;;;654    LOCAL(void) do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) {
000000  e92d4ff7          PUSH     {r0-r2,r4-r11,lr}
;;;655    /* Do backing store read or write of a virtual sample array */
;;;656      long bytesperrow, file_offset, byte_count, rows, thisrow, i;
;;;657    
;;;658      bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE);
;;;659      file_offset = ptr->cur_start_row * bytesperrow;
000004  f8d18008          LDR      r8,[r1,#8]
000008  698e              LDR      r6,[r1,#0x18]
00000a  b082              SUB      sp,sp,#8              ;654
00000c  460c              MOV      r4,r1                 ;654
00000e  4692              MOV      r10,r2                ;654
;;;660      /* Loop to read or write each allocation chunk in mem_buffer */
;;;661      for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
000010  2500              MOVS     r5,#0
;;;662        /* One chunk, but check for short chunk at end of buffer */
;;;663        rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
;;;664        /* Transfer no more than is currently defined */
;;;665        thisrow = (long) ptr->cur_start_row + i;
;;;666        rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
;;;667        /* Transfer no more than fits in file */
;;;668        rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
;;;669        if (rows <= 0)		/* this chunk might be past end of file! */
;;;670          break;
;;;671        byte_count = rows * bytesperrow;
;;;672        if (writing)
;;;673          (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
000012  f1010b30          ADD      r11,r1,#0x30
000016  fb06f608          MUL      r6,r6,r8              ;659
00001a  e026              B        |L8.106|
                  |L8.28|
00001c  6961              LDR      r1,[r4,#0x14]         ;663
00001e  1b40              SUBS     r0,r0,r5              ;663
000020  4281              CMP      r1,r0                 ;663
000022  da00              BGE      |L8.38|
000024  4608              MOV      r0,r1                 ;663
                  |L8.38|
000026  e9d41206          LDRD     r1,r2,[r4,#0x18]      ;666
00002a  4429              ADD      r1,r1,r5              ;665
00002c  1a52              SUBS     r2,r2,r1              ;666
00002e  4282              CMP      r2,r0                 ;666
000030  dc00              BGT      |L8.52|
000032  4610              MOV      r0,r2                 ;666
                  |L8.52|
000034  6862              LDR      r2,[r4,#4]            ;668
000036  1a51              SUBS     r1,r2,r1              ;668
000038  4281              CMP      r1,r0                 ;668
00003a  dc00              BGT      |L8.62|
00003c  4608              MOV      r0,r1                 ;668
                  |L8.62|
00003e  2800              CMP      r0,#0                 ;669
000040  dd16              BLE      |L8.112|
000042  fb00f908          MUL      r9,r0,r8              ;671
000046  f8cd9000          STR      r9,[sp,#0]
00004a  6820              LDR      r0,[r4,#0]
00004c  f1ba0f00          CMP      r10,#0                ;672
000050  f8502025          LDR      r2,[r0,r5,LSL #2]
000054  d001              BEQ      |L8.90|
000056  6b67              LDR      r7,[r4,#0x34]
000058  e000              B        |L8.92|
                  |L8.90|
;;;674    					    (void FAR *) ptr->mem_buffer[i],
;;;675    					    file_offset, byte_count);
;;;676        else
;;;677          (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
00005a  6b27              LDR      r7,[r4,#0x30]
                  |L8.92|
00005c  4633              MOV      r3,r6
00005e  4659              MOV      r1,r11
000060  9802              LDR      r0,[sp,#8]
000062  47b8              BLX      r7
000064  6960              LDR      r0,[r4,#0x14]         ;661
;;;678    					   (void FAR *) ptr->mem_buffer[i],
;;;679    					   file_offset, byte_count);
;;;680        file_offset += byte_count;
000066  444e              ADD      r6,r6,r9
000068  4405              ADD      r5,r5,r0              ;661
                  |L8.106|
00006a  6920              LDR      r0,[r4,#0x10]         ;661
00006c  42a8              CMP      r0,r5                 ;661
00006e  dcd5              BGT      |L8.28|
                  |L8.112|
;;;681      }
;;;682    }
000070  b005              ADD      sp,sp,#0x14
000072  e8bd8ff0          POP      {r4-r11,pc}
;;;683    
                          ENDP


                          AREA ||i.free_pool||, CODE, READONLY, ALIGN=1

                  free_pool PROC
;;;882    METHODDEF(void)
;;;883    free_pool (j_common_ptr cinfo, int pool_id)
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;884    {
;;;885      my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
;;;886      small_pool_ptr shdr_ptr;
;;;887      large_pool_ptr lhdr_ptr;
;;;888      size_t space_freed;
;;;889    
;;;890      if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
000004  6845              LDR      r5,[r0,#4]
000006  4606              MOV      r6,r0                 ;884
000008  460f              MOV      r7,r1                 ;884
00000a  2902              CMP      r1,#2
00000c  d308              BCC      |L9.32|
;;;891        ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
00000e  6831              LDR      r1,[r6,#0]
000010  200e              MOVS     r0,#0xe
000012  6148              STR      r0,[r1,#0x14]
000014  6830              LDR      r0,[r6,#0]
000016  6187              STR      r7,[r0,#0x18]
000018  6830              LDR      r0,[r6,#0]
00001a  6801              LDR      r1,[r0,#0]
00001c  4630              MOV      r0,r6
00001e  4788              BLX      r1
                  |L9.32|
;;;892    
;;;893    #ifdef MEM_STATS
;;;894      if (cinfo->err->trace_level > 1)
;;;895        print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */
;;;896    #endif
;;;897    

⌨️ 快捷键说明

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