vec drop
This commit is contained in:
parent
ac2f3a04b2
commit
8bc56220fc
|
|
@ -244,3 +244,36 @@ vec_try_grow:
|
|||
xor rax, rax
|
||||
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