1/* 2** Copyright 2001, Travis Geiselbrecht. All rights reserved. 3** Distributed under the terms of the NewOS License. 4*/ 5 6/* 7** arg layout: 8** r4-r7: arg 1 - 4 9** r0-r3: arg 5 - 8 10** r8-r13: arg 8 - 13 11*/ 12#define FUNC(name) .align 2 ; .globl _##name ; .type _##name,@function ; _##name: 13 14#define SYSCALL0(name, n) \ 15FUNC(name) \ 16 trapa #(n); \ 17 nop; \ 18 rts; \ 19 nop; 20 21#define SYSCALL1(name, n) \ 22FUNC(name) \ 23 trapa #(n); \ 24 rts; \ 25 nop; 26 27#define SYSCALL2(name, n) \ 28FUNC(name) \ 29 trapa #(n); \ 30 nop; \ 31 rts; \ 32 nop; 33 34#define SYSCALL3(name, n) \ 35FUNC(name) \ 36 trapa #(n); \ 37 nop; \ 38 rts; \ 39 nop; 40 41#define SYSCALL4(name, n) \ 42FUNC(name) \ 43 trapa #(n); \ 44 nop; \ 45 rts; \ 46 nop; \ 47 48#define SYSCALL5(name, n) \ 49FUNC(name) \ 50 mov.l @r15,r0; \ 51 trapa #(n); \ 52 nop; \ 53 rts; \ 54 nop; 55 56#define SYSCALL6(name, n) \ 57FUNC(name) \ 58 mov.l @(0,r15),r0; \ 59 mov.l @(4,r15),r1; \ 60 trapa #(n); \ 61 nop; \ 62 rts; \ 63 nop; 64#define SYSCALL7(name, n) \ 65FUNC(name) \ 66 mov.l @(0,r15),r0; \ 67 mov.l @(4,r15),r1; \ 68 mov.l @(8,r15),r2; \ 69 trapa #(n); \ 70 nop; \ 71 rts; \ 72 nop; 73 74#define SYSCALL8(name, n) \ 75FUNC(name) \ 76 mov.l @(0,r15),r0; \ 77 mov.l @(4,r15),r1; \ 78 mov.l @(8,r15),r2; \ 79 mov.l @(12,r15),r3; \ 80 trapa #(n); \ 81 nop; \ 82 rts; \ 83 nop; 84 85#define SYSCALL9(name, n) \ 86FUNC(name) \ 87 mov.l @(0,r15),r0; \ 88 mov.l @(4,r15),r1; \ 89 mov.l @(8,r15),r2; \ 90 mov.l @(12,r15),r3; \ 91 mov.l r8,@-r15; \ 92 mov.l @(20,r15),r8; \ 93 trapa #(n); \ 94 nop; \ 95 rts; \ 96 mov.l @r15+,r8 97 98