From e9f634bca5d931bed8705e74d20596e9982a8654 Mon Sep 17 00:00:00 2001 From: janis Date: Mon, 20 Oct 2025 17:55:32 +0200 Subject: [PATCH] vec get --- lang/src/vec.asm | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lang/src/vec.asm b/lang/src/vec.asm index e9f6748..1714329 100644 --- a/lang/src/vec.asm +++ b/lang/src/vec.asm @@ -15,7 +15,7 @@ global vec_pop global vec_swap global vec_remove global vec_get -global vec_free +global vec_drop ;; Byte vector structure @@ -56,6 +56,25 @@ vec_init: mov qword [r15 + 32], rdx ; drop 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 ;; rsi: pointer to data to push ;; rdx: size of data to push