rendered paste body; void realloc_pile()
; teste si il y a besoin d'agrandir la pile, et l'agrandit le cas échéant
realloc_pile:
push ebp
mov ebp,esp
mov eax,dword [nb_elements_pile]
cmp eax,dword [taille_alloc_pile]
jl realloc_pile_exit
add dword [taille_alloc_pile],5
push dword newPile
push dword newPilePtr
push dword 16
mov ebx,dword [taille_alloc_pile]
shl ebx,4 ; taille_alloc_pile * 2^4 (= 16 = vecteur)
push ebx
call malloc_align
add esp,16
; on assigne à pile l'adresse du sommet
mov ebx,dword [taille_alloc_pile]
sub ebx,dword [nb_elements_pile]
shl ebx,4
add [newPile],ebx
mov esi,dword [pile]
mov edi,dword [newPile]
mov ecx,dword [nb_elements_pile]
realloc_pile_for:
cmp ecx,0
je realloc_pile_for_end
movdqa xmm0,[esi]
movdqa [edi],xmm0
add esi,16
add edi,16
dec ecx
jmp realloc_pile_for
realloc_pile_for_end:
push dword [pilePtr]
call free
add esp,4
mov eax,dword [newPilePtr]
mov dword [pilePtr],eax
mov eax,dword [newPile]
mov dword [pile],eax
add esp,8
realloc_pile_exit:
mov esp,ebp
pop ebp
ret