libk  Diff

Differences From Artifact [3fa83c18de]:

To Artifact [a731f1dad0]:


32
33
34
35
36
37
38
39
40
41
42
43
44

45
46
47
48
49
50
51
..
99
100
101
102
103
104
105
106

107
108
	;         r12 = u64* errno
	; arg 0 = s64* result
	; arg 1 = errno ptr
	; arg 2 = syscall num
	; arg 3 = valency
	; arg 4 = args ptr

	; we use two registers that are supposed
	; to be callee-saved, so we need to
	; push them to the stack and then pop
	; them back off just before the fn rets.
	push rbx
	push r12


	; store the locals in registers that
	; are guaranteed not to be clobbered,
	; saving us some cycles pushing to
	; and popping back from the stack
	mov rbx, ccall.reg.0
	mov r12, ccall.reg.1
................................................................................
	; the errno to its positive equivalent,
	; and store -1 in the return variable
	.error: neg sys.reg.ret
	        mov qword [rbx], -1
			mov       [r12], sys.reg.ret
			jmp .return

	.return: pop r12

	         pop rbx
			 ret







|





>







 







|
>


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
...
100
101
102
103
104
105
106
107
108
109
110
	;         r12 = u64* errno
	; arg 0 = s64* result
	; arg 1 = errno ptr
	; arg 2 = syscall num
	; arg 3 = valency
	; arg 4 = args ptr

	; we use three registers that are supposed
	; to be callee-saved, so we need to
	; push them to the stack and then pop
	; them back off just before the fn rets.
	push rbx
	push r12
	push r15

	; store the locals in registers that
	; are guaranteed not to be clobbered,
	; saving us some cycles pushing to
	; and popping back from the stack
	mov rbx, ccall.reg.0
	mov r12, ccall.reg.1
................................................................................
	; the errno to its positive equivalent,
	; and store -1 in the return variable
	.error: neg sys.reg.ret
	        mov qword [rbx], -1
			mov       [r12], sys.reg.ret
			jmp .return

	.return: pop r15 
		 pop r12
	         pop rbx
			 ret