- mov rdx, [r13] ; offset
- jnz .exist2
- call alloc
-.exist2:
- and rdx, rax ; offset mask
- add r12, rdx ; add offset
+ mov rax, [r8+16]
+
+ cmp rax, -1
+ je .nextbuf ; region is reserved
+
+ cmp rax, 0
+ jne .oom ; region has not been paged yet
+
+ mov [pagebuf], r8
+ jmp alloc
+
+.oom:
+ push rdi
+
+ mov rdi, .oom_msg
+ call print_str
+
+ pop rdi
+
+ call print_hex
+ call newline
+
+ jmp $
+
+.oom_msg: db "out of memory for page table", 10, "next_page = ", 0
+
+; get/create page tables
+get_tables:
+; level 4
+
+ ; rdi = address (arg, persist)
+ ; rax = tmp
+ ; rbx = mask
+ ; rcx = bits (persist)
+ ; rdx = level (persist)
+ ; r8 = table address
+ ; rsi = next offset (persist)
+
+ mov cl, 12+9*4
+ mov dl, 4