mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
This change adds a new interface DSL for specifying objects (with methods) and interfaces (that expose objects, and optionally have their own methods). Significant changes: - Add the new scripts/definitions Python module to parse the DSL - Add the new definitions directory containing DSL definition files - Use cog to generate syscall-related code in kernel and libj6 - Unify ordering of pointer + length pairs in interfaces
24 lines
517 B
ArmAsm
24 lines
517 B
ArmAsm
%macro SYSCALL 2
|
|
global __syscall_%1
|
|
__syscall_%1:
|
|
push rbp
|
|
mov rbp, rsp
|
|
|
|
; args should already be in rdi, etc, but rcx will
|
|
; get stomped, so stash it in r10, which isn't a
|
|
; callee-saved register, but also isn't used in the
|
|
; function call ABI.
|
|
mov r10, rcx
|
|
|
|
mov rax, %2
|
|
syscall
|
|
; result is now already in rax, so just return
|
|
|
|
pop rbp
|
|
ret
|
|
%endmacro
|
|
|
|
{% for id, scope, method in interface.methods %}
|
|
SYSCALL {% if scope %}{{ scope.name }}_{% endif %}{{ method.name }} {{ id }}
|
|
{% endfor %}
|