init stack vec, push rplogue

This commit is contained in:
janis 2025-10-31 16:11:33 +01:00
parent e3e0d6843f
commit d793a3251f
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8

View file

@ -5,6 +5,7 @@ default rel
extern panic
extern vec_extend
extern vec_get
extern vec_init_with
global codegen_function
@ -17,8 +18,37 @@ section .rdata
COLON_NL_LEN equ $ - COLON_NL
RET_NL db "ret", 10
RET_NL_LEN equ $ - RET_NL
PROLOGUE db "push rbp", 10, "mov rbp, rsp", 10
PROLOGUE_LEN equ $ - PROLOGUE
section .text
;; rdi: ctx
;; rsi: a: *const (index, offset)
;; rdx: b: *const (index, offset)
;; define-fn: fn stackvar_cmp(a: *const (u64, u64), b: *const (u64, u64)) -> i32
stackvar_cmp:
push rbp
mov rbp, rsp
mov rax, [rdi + 0] ; a.index
mov rcx, [rsi + 0] ; b.index
cmp rax, 0
jl .less
jg .greater
xor rax, rax
jmp .done
.less:
mov rax, -1
jmp .done
.greater:
mov rax, 1
.done:
pop rbp
ret
;; start-structs
;; struct CodegenCtx {
;; ast: *const Ast,
@ -45,9 +75,16 @@ codegen_function:
mov rax, [rdi]
mov [rsp + 8], rax ; ast
mov [rsp + 16], rsi ; func_idx
mov [rsp + 24], 0 ; current_stack_size = 0
bts qword [rsp + 72], 7 ; mark rbp as used
bts qword [rsp + 72], 6 ; mark rsp as used
lea rdi, [rsp + 32] ; stack-vars
mov rsi, 16 ; size_of::<(u64, u64)>
mov rdx, 0 ; drop = None
mov rcx, 16 ; initial capacity
call vec_init_with
bts qword [rsp + 72], 7 ; mark rbp as used
bts qword [rsp + 72], 6 ; mark rsp as used
; push "section .text\n"
mov rdi, [rsp] ; ctx
@ -95,6 +132,12 @@ codegen_function:
mov rdx, 2
call vec_extend
; push prologue
mov rdi, [rsp] ; ctx
lea rdi, [rdi + 8] ; &ctx.text
lea rsi, [rel PROLOGUE]
mov rdx, PROLOGUE_LEN
call vec_extend
; TODO: generate function body