Subversion Repositories Kolibri OS

Rev

Rev 887 | Rev 889 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 887 Rev 888
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 887 $
8
$Revision: 888 $
9
 
9
 
Line 147... Line 147...
147
           test al, USED_BLOCK
147
           test al, USED_BLOCK
148
           jz .cantfree
148
           jz .cantfree
149
           test al, DONT_FREE_BLOCK
149
           test al, DONT_FREE_BLOCK
150
           jnz .cantfree
150
           jnz .cantfree
Line -... Line 151...
-
 
151
 
-
 
152
           push edi
151
 
153
 
152
           and eax, not 4095
154
           and eax, not 4095
153
           mov ecx, eax
155
           mov edi, eax
154
           or al, FREE_BLOCK
156
           or al, FREE_BLOCK
155
           mov [page_tabs+(esi-1)*4], eax
157
           mov [page_tabs+(esi-1)*4], eax
156
           sub ecx, 4096
158
           sub edi, 4096
157
           mov ebx, ecx
159
           mov ebx, edi
158
           shr ecx, 12
160
           shr edi, 12
159
           jz .released
161
           jz .released
160
.release:
162
.release:
161
           xor eax, eax
163
           xor ecx, ecx
162
           xchg eax, [page_tabs+esi*4]
164
           xchg ecx, [page_tabs+esi*4]
163
           test al, 1
165
           test cl, 1
-
 
166
           jz @F
164
           jz @F
167
 
165
           call free_page
168
           call @core_free@4
166
           mov eax, esi
169
           mov eax, esi
167
           shl eax, 12
170
           shl eax, 12
168
           invlpg [eax]
171
           invlpg [eax]
169
@@:
172
@@:
170
           inc esi
173
           inc esi
171
           dec ecx
174
           dec edi
172
           jnz .release
175
           jnz .release
173
.released:
-
 
174
           push edi
-
 
175
 
176
.released:
176
           mov edx, [current_slot]
177
           mov edx, [current_slot]
177
           mov esi, dword [edx+APPDATA.heap_base]
178
           mov esi, dword [edx+APPDATA.heap_base]
178
           mov edi, dword [edx+APPDATA.heap_top]
179
           mov edi, dword [edx+APPDATA.heap_top]
179
           sub ebx, [edx+APPDATA.mem_size]
180
           sub ebx, [edx+APPDATA.mem_size]
Line 274... Line 275...
274
        add     edx, ecx
275
        add     edx, ecx
275
        add     ebx, ecx
276
        add     ebx, ecx
276
        cmp     edx, ebx
277
        cmp     edx, ebx
277
        jb      .realloc_add
278
        jb      .realloc_add
278
; release part of allocated memory
279
; release part of allocated memory
-
 
280
 
-
 
281
        push ecx
279
.loop:
282
.loop:
280
        cmp     edx, ebx
283
        cmp     edx, ebx
281
        jz      .release_done
284
        jz      .release_done
282
        dec     edx
285
        dec     edx
283
        xor     eax, eax
286
        xor     ecx, ecx
284
        xchg    eax, [page_tabs+edx*4]
287
        xchg    ecx, [page_tabs+edx*4]
285
        test    al, 1
288
        test    al, 1
286
        jz      .loop
289
        jz      .loop
-
 
290
 
-
 
291
        push edx
287
        call    free_page
292
        call    @core_free@4
-
 
293
        pop edx
288
        mov     eax, edx
294
        mov     eax, edx
289
        shl     eax, 12
295
        shl     eax, 12
290
        invlpg  [eax]
296
        invlpg  [eax]
291
        jmp     .loop
297
        jmp     .loop
292
.release_done:
298
.release_done:
-
 
299
 
-
 
300
        pop ecx
-
 
301
 
293
        sub     ebx, ecx
302
        sub     ebx, ecx
294
        cmp     ebx, 1
303
        cmp     ebx, 1
295
        jnz     .nofreeall
304
        jnz     .nofreeall
296
        mov     eax, [page_tabs+ecx*4]
305
        mov     eax, [page_tabs+ecx*4]
297
        and     eax, not 0xFFF
306
        and     eax, not 0xFFF