Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 368 → Rev 369

/kernel/trunk/core/heap.inc
146,20 → 146,25
ret
endp
 
; param
; eax= required size
;
; retval
; edi= memory block descriptor
; ebx= descriptor index
 
align 4
proc get_block stdcall, index:dword
 
mov eax, 63
mov ecx, [index]
cmp ecx, eax
jna @f
;cmova ecx, eax
get_block:
mov ecx, eax
@@:
xor esi, esi
shr ecx, 12
dec ecx
cmp ecx, 63
jle .get_index
mov ecx, 63
.get_index:
lea esi, [mem_block_mask]
xor ebx, ebx
xor edx, edx
not edx
or edx, -1
 
cmp ecx, 32
jb .bit_test
167,35 → 172,34
sub ecx, 32
add ebx, 32
add esi, 4
 
.bit_test:
shl edx, cl
and edx, [mem_block_mask+esi]
and edx, [esi]
.find:
bsf edi, edx
jz .high_mask
bsf eax, edx
add ebx, eax
mov eax, [mem_block_list+ebx*4]
add ebx, edi
mov edi, [mem_block_list+ebx*4]
.check_size:
cmp eax, [edi+block_size]
ja .next
ret
 
.high_mask:
 
add esi, 4
cmp esi, mem_block_mask+8
jae .err
add ebx, 32
test esi, 0xFFFFFFF8
jnz .big_error
mov edx, [mem_block_mask+esi]
and edx, edx
jz .high_mask
bsf eax, edx
add ebx, eax
mov eax, [mem_block_list+ebx*4]
mov edx, [esi]
jmp .find
.next:
mov edi, [edi+list_fd]
test edi, edi
jnz .check_size
.err:
xor edi, edi
ret
 
.big_error:
xor eax, eax
ret
endp
 
align 4
proc alloc_mem_block
 
266,17 → 270,10
cmp eax, [heap_free]
ja .error
 
shr eax, 12
sub eax, 1
 
mov [block_ind], eax
 
stdcall get_block, eax
test eax, eax
call get_block ; eax
test edi, edi
jz .error
 
mov edi, eax ;edi - pBlock
 
cmp [edi+block_flags], FREE_BLOCK
jne .error