diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /device/lib/stm8/malloc.lst | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'device/lib/stm8/malloc.lst')
| -rw-r--r-- | device/lib/stm8/malloc.lst | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/device/lib/stm8/malloc.lst b/device/lib/stm8/malloc.lst new file mode 100644 index 0000000..cdcb2ce --- /dev/null +++ b/device/lib/stm8/malloc.lst @@ -0,0 +1,182 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.9.3 #11345 (Linux) + 4 ;-------------------------------------------------------- + 5 .module malloc + 6 .optsdcc -mstm8 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl ___sdcc_heap_init + 12 .globl ___sdcc_heap_free + 13 .globl _malloc + 14 ;-------------------------------------------------------- + 15 ; ram data + 16 ;-------------------------------------------------------- + 17 .area DATA + 000000 18 ___sdcc_heap_free:: + 000000 19 .ds 2 + 20 ;-------------------------------------------------------- + 21 ; ram data + 22 ;-------------------------------------------------------- + 23 .area INITIALIZED + 24 ;-------------------------------------------------------- + 25 ; absolute external ram data + 26 ;-------------------------------------------------------- + 27 .area DABS (ABS) + 28 + 29 ; default segment ordering for linker + 30 .area HOME + 31 .area GSINIT + 32 .area GSFINAL + 33 .area CONST + 34 .area INITIALIZER + 35 .area CODE + 36 + 37 ;-------------------------------------------------------- + 38 ; global & static initialisations + 39 ;-------------------------------------------------------- + 40 .area HOME + 41 .area GSINIT + 42 .area GSFINAL + 43 .area GSINIT + 44 ;-------------------------------------------------------- + 45 ; Home + 46 ;-------------------------------------------------------- + 47 .area HOME + 48 .area HOME + 49 ;-------------------------------------------------------- + 50 ; code + 51 ;-------------------------------------------------------- + 52 .area CODE + 53 ; ../malloc.c: 65: void __sdcc_heap_init(void) + 54 ; ----------------------------------------- + 55 ; function __sdcc_heap_init + 56 ; ----------------------------------------- + 000000 57 ___sdcc_heap_init: + 58 ; ../malloc.c: 67: __sdcc_heap_free = HEAP_START; + 000000 AEr00r00 [ 2] 59 ldw x, #(___sdcc_heap + 0) + 000003 CFu00u00 [ 2] 60 ldw ___sdcc_heap_free+0, x + 61 ; ../malloc.c: 68: __sdcc_heap_free->next = HEAP_END; + 000006 AEr00r00 [ 2] 62 ldw x, #___sdcc_heap_end+0 + 000009 72 CFu00u00 [ 5] 63 ldw [___sdcc_heap_free+0], x + 64 ; ../malloc.c: 69: __sdcc_heap_free->next_free = 0; + 00000D CEu00u00 [ 2] 65 ldw x, ___sdcc_heap_free+0 + 000010 5C [ 1] 66 incw x + 000011 5C [ 1] 67 incw x + 000012 6F 01 [ 1] 68 clr (0x1, x) + 000014 7F [ 1] 69 clr (x) + 70 ; ../malloc.c: 70: } + 000015 81 [ 4] 71 ret + 72 ; ../malloc.c: 75: void *malloc(size_t size) + 73 ; ----------------------------------------- + 74 ; function malloc + 75 ; ----------------------------------------- + 000016 76 _malloc: + 000016 52 0C [ 2] 77 sub sp, #12 + 78 ; ../malloc.c: 86: if(!size || size + offsetof(struct header, next_free) < size) + 000018 1E 0F [ 2] 79 ldw x, (0x0f, sp) + 00001A 27 06 [ 1] 80 jreq 00101$ + 00001C 5C [ 1] 81 incw x + 00001D 5C [ 1] 82 incw x + 00001E 13 0F [ 2] 83 cpw x, (0x0f, sp) + 000020 24 03 [ 1] 84 jrnc 00102$ + 000022 85 00101$: + 86 ; ../malloc.c: 87: return(0); + 000022 5F [ 1] 87 clrw x + 000023 20 74 [ 2] 88 jra 00115$ + 000025 89 00102$: + 90 ; ../malloc.c: 88: size += offsetof(struct header, next_free); + 91 ; ../malloc.c: 89: if(size < sizeof(struct header)) // Requiring a minimum size makes it easier to implement free(), and avoid memory leaks. + 000025 1F 0F [ 2] 92 ldw (0x0f, sp), x + 000027 A3 00 04 [ 2] 93 cpw x, #0x0004 + 00002A 24 05 [ 1] 94 jrnc 00105$ + 95 ; ../malloc.c: 90: size = sizeof(struct header); + 00002C AE 00 04 [ 2] 96 ldw x, #0x0004 + 00002F 1F 0F [ 2] 97 ldw (0x0f, sp), x + 000031 98 00105$: + 99 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + 000031 CEu00u00 [ 2] 100 ldw x, ___sdcc_heap_free+0 + 000034 1F 01 [ 2] 101 ldw (0x01, sp), x + 000036 AEr00r00 [ 2] 102 ldw x, #(___sdcc_heap_free + 0) + 000039 1F 03 [ 2] 103 ldw (0x03, sp), x + 00003B 104 00113$: + 105 ; ../malloc.c: 94: size_t blocksize = (char HEAPSPACE *)(h->next) - (char HEAPSPACE *)h; + 00003B 1E 01 [ 2] 106 ldw x, (0x01, sp) + 00003D 27 59 [ 1] 107 jreq 00111$ + 00003F FE [ 2] 108 ldw x, (x) + 000040 1F 05 [ 2] 109 ldw (0x05, sp), x + 000042 90 93 [ 1] 110 ldw y, x + 000044 1E 01 [ 2] 111 ldw x, (0x01, sp) + 000046 1F 07 [ 2] 112 ldw (0x07, sp), x + 000048 72 F2 07 [ 2] 113 subw y, (0x07, sp) + 114 ; ../malloc.c: 101: newheader->next_free = h->next_free; + 00004B 1E 01 [ 2] 115 ldw x, (0x01, sp) + 00004D 5C [ 1] 116 incw x + 00004E 5C [ 1] 117 incw x + 00004F 1F 09 [ 2] 118 ldw (0x09, sp), x + 119 ; ../malloc.c: 95: if(blocksize >= size) // Found free block of sufficient size. + 000051 51 [ 1] 120 exgw x, y + 000052 13 0F [ 2] 121 cpw x, (0x0f, sp) + 000054 51 [ 1] 122 exgw x, y + 000055 25 36 [ 1] 123 jrc 00114$ + 124 ; ../malloc.c: 97: if(blocksize >= size + sizeof(struct header)) // It is worth creating a new free block + 000057 1E 0F [ 2] 125 ldw x, (0x0f, sp) + 000059 1C 00 04 [ 2] 126 addw x, #0x0004 + 00005C 1F 0B [ 2] 127 ldw (0x0b, sp), x + 00005E 93 [ 1] 128 ldw x, y + 00005F 13 0B [ 2] 129 cpw x, (0x0b, sp) + 000061 25 1F [ 1] 130 jrc 00107$ + 131 ; ../malloc.c: 99: header_t *const newheader = (header_t *const)((char HEAPSPACE *)h + size); + 000063 1E 07 [ 2] 132 ldw x, (0x07, sp) + 000065 72 FB 0F [ 2] 133 addw x, (0x0f, sp) + 134 ; ../malloc.c: 100: newheader->next = h->next; + 000068 1F 0B [ 2] 135 ldw (0x0b, sp), x + 00006A 16 05 [ 2] 136 ldw y, (0x05, sp) + 00006C FF [ 2] 137 ldw (x), y + 138 ; ../malloc.c: 101: newheader->next_free = h->next_free; + 00006D 1E 0B [ 2] 139 ldw x, (0x0b, sp) + 00006F 5C [ 1] 140 incw x + 000070 5C [ 1] 141 incw x + 000071 16 09 [ 2] 142 ldw y, (0x09, sp) + 000073 90 FE [ 2] 143 ldw y, (y) + 000075 FF [ 2] 144 ldw (x), y + 145 ; ../malloc.c: 102: *f = newheader; + 000076 1E 03 [ 2] 146 ldw x, (0x03, sp) + 000078 16 0B [ 2] 147 ldw y, (0x0b, sp) + 00007A FF [ 2] 148 ldw (x), y + 149 ; ../malloc.c: 103: h->next = newheader; + 00007B 1E 01 [ 2] 150 ldw x, (0x01, sp) + 00007D 16 0B [ 2] 151 ldw y, (0x0b, sp) + 00007F FF [ 2] 152 ldw (x), y + 000080 20 07 [ 2] 153 jra 00108$ + 000082 154 00107$: + 155 ; ../malloc.c: 106: *f = h->next_free; + 000082 1E 09 [ 2] 156 ldw x, (0x09, sp) + 000084 FE [ 2] 157 ldw x, (x) + 000085 16 03 [ 2] 158 ldw y, (0x03, sp) + 000087 90 FF [ 2] 159 ldw (y), x + 000089 160 00108$: + 161 ; ../malloc.c: 108: return(&(h->next_free)); + 000089 1E 09 [ 2] 162 ldw x, (0x09, sp) + 00008B 20 0C [ 2] 163 jra 00115$ + 00008D 164 00114$: + 165 ; ../malloc.c: 92: for(h = __sdcc_heap_free, f = &__sdcc_heap_free; h; f = &(h->next_free), h = h->next_free) + 00008D 16 09 [ 2] 166 ldw y, (0x09, sp) + 00008F 17 03 [ 2] 167 ldw (0x03, sp), y + 000091 1E 09 [ 2] 168 ldw x, (0x09, sp) + 000093 FE [ 2] 169 ldw x, (x) + 000094 1F 01 [ 2] 170 ldw (0x01, sp), x + 000096 20 A3 [ 2] 171 jra 00113$ + 000098 172 00111$: + 173 ; ../malloc.c: 112: return(0); + 000098 5F [ 1] 174 clrw x + 000099 175 00115$: + 176 ; ../malloc.c: 113: } + 000099 5B 0C [ 2] 177 addw sp, #12 + 00009B 81 [ 4] 178 ret + 179 .area CODE + 180 .area CONST + 181 .area INITIALIZER + 182 .area CABS (ABS) |
