60 lines
1.1 KiB
NASM
60 lines
1.1 KiB
NASM
; entry.asm -- M2 TI ABI smoke-test entry, linked at bit 018A0000.
|
|
;
|
|
; Markers (0x20 bits apart):
|
|
; 018A8000 check() strlen("0::0") == 4
|
|
; 018A8020 first(20,22) == 20
|
|
; 018A8040 second(20,22) == 22
|
|
; 018A8060 caller() add2(20,22) == 42
|
|
; 018A8080 locals() == 7
|
|
; 018A80A0 keep(10) == 16 (g == 5 before the call, + 11)
|
|
.text
|
|
.globl _start
|
|
_start:
|
|
setf 32, 0, 1
|
|
setf 16, 0, 0
|
|
movi _cstack, a14
|
|
move a14, a13
|
|
|
|
calla _check
|
|
movi 018A8000h, a2
|
|
move a8, *a2, 1
|
|
|
|
; first(20, 22): last argument first, on the program stack
|
|
move a14, -*sp, 1
|
|
movi 22, a0
|
|
move a0, *a14+, 1
|
|
movi 20, a0
|
|
move a0, *a14+, 1
|
|
calla _first
|
|
movi 018A8020h, a2
|
|
move a8, *a2, 1
|
|
|
|
; second(20, 22)
|
|
move a14, -*sp, 1
|
|
movi 22, a0
|
|
move a0, *a14+, 1
|
|
movi 20, a0
|
|
move a0, *a14+, 1
|
|
calla _second
|
|
movi 018A8040h, a2
|
|
move a8, *a2, 1
|
|
|
|
calla _caller
|
|
movi 018A8060h, a2
|
|
move a8, *a2, 1
|
|
|
|
calla _locals
|
|
movi 018A8080h, a2
|
|
move a8, *a2, 1
|
|
|
|
move a14, -*sp, 1
|
|
movi 10, a0
|
|
move a0, *a14+, 1
|
|
calla _keep
|
|
movi 018A80A0h, a2
|
|
move a8, *a2, 1
|
|
|
|
rets
|
|
|
|
.bss _cstack, 32768, 16 ; 32768 bits = 4096 bytes
|