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 + -
显示快捷键?