vec get
This commit is contained in:
parent
8bc56220fc
commit
e9f634bca5
|
|
@ -15,7 +15,7 @@ global vec_pop
|
||||||
global vec_swap
|
global vec_swap
|
||||||
global vec_remove
|
global vec_remove
|
||||||
global vec_get
|
global vec_get
|
||||||
global vec_free
|
global vec_drop
|
||||||
|
|
||||||
|
|
||||||
;; Byte vector structure
|
;; Byte vector structure
|
||||||
|
|
@ -56,6 +56,25 @@ vec_init:
|
||||||
mov qword [r15 + 32], rdx ; drop
|
mov qword [r15 + 32], rdx ; drop
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;; rdi: pointer to Vec struct
|
||||||
|
;; rsi: index
|
||||||
|
;; fn vec_get(vec: *mut Vec, index: usize) -> *mut u8
|
||||||
|
vec_get:
|
||||||
|
; if (index >= vec.len) panic();
|
||||||
|
mov rax, [rdi + 8] ; len
|
||||||
|
cmp rsi, rax
|
||||||
|
jge .panic
|
||||||
|
; return &mut vec.data[index * vec.item_size];
|
||||||
|
mov rax, [rdi + 24] ; item_size
|
||||||
|
imul rax, rsi ; index * item_size
|
||||||
|
mov rsi, [rdi] ; data
|
||||||
|
add rax, rsi ; data + index * item_size
|
||||||
|
ret
|
||||||
|
.panic:
|
||||||
|
call panic
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
;; rdi: pointer to Vec struct
|
;; rdi: pointer to Vec struct
|
||||||
;; rsi: pointer to data to push
|
;; rsi: pointer to data to push
|
||||||
;; rdx: size of data to push
|
;; rdx: size of data to push
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue