vec drop
This commit is contained in:
parent
ac2f3a04b2
commit
8bc56220fc
|
|
@ -244,3 +244,36 @@ vec_try_grow:
|
||||||
xor rax, rax
|
xor rax, rax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;; rdi: pointer to Vec struct
|
||||||
|
vec_drop:
|
||||||
|
push r12
|
||||||
|
push r13
|
||||||
|
push r14
|
||||||
|
push rdi
|
||||||
|
; if let Some(drop) = vec.drop {
|
||||||
|
mov r12, [rdi + 32]
|
||||||
|
test r12, r12
|
||||||
|
je .ret
|
||||||
|
; for i in 0..vec.len {
|
||||||
|
xor r13, r13
|
||||||
|
mov r14, [rdi + 8] ; len
|
||||||
|
.loop:
|
||||||
|
cmp r13, r14
|
||||||
|
jge .ret
|
||||||
|
mov rdi, [rsp]
|
||||||
|
; drop(&mut vec.data[i * vec.item_size..(i + 1) * vec.item_size]);
|
||||||
|
imul r13, [rdi + 24] ; i * item_size
|
||||||
|
mov rdi, [rdi] ; data
|
||||||
|
add rdi, rax
|
||||||
|
call r12
|
||||||
|
inc r13
|
||||||
|
jmp .loop
|
||||||
|
; }
|
||||||
|
; }
|
||||||
|
; free(vec.data);
|
||||||
|
.ret:
|
||||||
|
pop rdi
|
||||||
|
pop r14
|
||||||
|
pop r13
|
||||||
|
pop r12
|
||||||
|
ret
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue