xref: /plan9-contrib/sys/src/ape/lib/ap/syscall/gencall (revision fbadb1c4d4463e58337ffb1ed396c9caee5d1889)
1*fbadb1c4SDavid du Colombier#!/bin/rc
2*fbadb1c4SDavid du Colombier		{switch($objtype){
3*fbadb1c4SDavid du Colombier		case mips
4*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
5*fbadb1c4SDavid du Colombier			echo MOVW R1, '0(FP)'
6*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R1
7*fbadb1c4SDavid du Colombier			echo SYSCALL
8*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {
9*fbadb1c4SDavid du Colombier				echo 'MOVW $-1,R5
10*fbadb1c4SDavid du Colombier				BNE R1,R5,4(PC)
11*fbadb1c4SDavid du Colombier				MOVW a+0(FP),R5
12*fbadb1c4SDavid du Colombier				MOVW R1,0(R5)
13*fbadb1c4SDavid du Colombier				MOVW R1,4(R5)'
14*fbadb1c4SDavid du Colombier			}
15*fbadb1c4SDavid du Colombier			echo RET
16*fbadb1c4SDavid du Colombier		case mips2
17*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
18*fbadb1c4SDavid du Colombier			echo MOVW R1, '0(FP)'
19*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R1
20*fbadb1c4SDavid du Colombier			echo ADD '$4',R29
21*fbadb1c4SDavid du Colombier			echo SYSCALL
22*fbadb1c4SDavid du Colombier			echo ADD '$-4',R29
23*fbadb1c4SDavid du Colombier			echo RET
24*fbadb1c4SDavid du Colombier		case spim
25*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
26*fbadb1c4SDavid du Colombier			echo MOVW R1, '0(FP)'
27*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R1
28*fbadb1c4SDavid du Colombier			echo ADD '$4',R29
29*fbadb1c4SDavid du Colombier			echo SYSCALL
30*fbadb1c4SDavid du Colombier			echo ADD '$-4',R29
31*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {	# untested so far - geoff
32*fbadb1c4SDavid du Colombier				echo 'MOVW $-1,R5
33*fbadb1c4SDavid du Colombier				BNE R1,R5,4(PC)
34*fbadb1c4SDavid du Colombier				MOVW a+0(FP),R5
35*fbadb1c4SDavid du Colombier				MOVW R1,0(R5)
36*fbadb1c4SDavid du Colombier				MOVW R1,4(R5)'
37*fbadb1c4SDavid du Colombier			}
38*fbadb1c4SDavid du Colombier			echo RET
39*fbadb1c4SDavid du Colombier		case 386
40*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
41*fbadb1c4SDavid du Colombier			echo MOVL '$'$n, AX
42*fbadb1c4SDavid du Colombier			echo INT '$'64
43*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {
44*fbadb1c4SDavid du Colombier				echo 'CMPL AX,$-1
45*fbadb1c4SDavid du Colombier				JNE 4(PC)
46*fbadb1c4SDavid du Colombier				MOVL a+0(FP),CX
47*fbadb1c4SDavid du Colombier				MOVL AX,0(CX)
48*fbadb1c4SDavid du Colombier				MOVL AX,4(CX)'
49*fbadb1c4SDavid du Colombier			}
50*fbadb1c4SDavid du Colombier			echo RET
51*fbadb1c4SDavid du Colombier		case amd64
52*fbadb1c4SDavid du Colombier			if(~ $i _SEEK)
53*fbadb1c4SDavid du Colombier				echo TEXT __SEEK'(SB)', 1, '$0'
54*fbadb1c4SDavid du Colombier			if not
55*fbadb1c4SDavid du Colombier				echo TEXT $i'(SB)', 1, '$0'
56*fbadb1c4SDavid du Colombier			#
57*fbadb1c4SDavid du Colombier			# For architectures which pass the first argument
58*fbadb1c4SDavid du Colombier			# in a register, if the system call takes no arguments
59*fbadb1c4SDavid du Colombier			# there will be no 'a0+0(FP)' reserved on the stack.
60*fbadb1c4SDavid du Colombier			#
61*fbadb1c4SDavid du Colombier			if(! ~ $i nsec)
62*fbadb1c4SDavid du Colombier				echo MOVQ RARG, 'a0+0(FP)'
63*fbadb1c4SDavid du Colombier			echo MOVQ '$'$n, RARG
64*fbadb1c4SDavid du Colombier			echo SYSCALL
65*fbadb1c4SDavid du Colombier			echo RET
66*fbadb1c4SDavid du Colombier		case sparc
67*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
68*fbadb1c4SDavid du Colombier			echo MOVW R7, '0(FP)'
69*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R7
70*fbadb1c4SDavid du Colombier			echo TA R0
71*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {
72*fbadb1c4SDavid du Colombier				echo 'CMP R7,$-1
73*fbadb1c4SDavid du Colombier				BNE 4(PC)
74*fbadb1c4SDavid du Colombier				MOVW a+0(FP),R8
75*fbadb1c4SDavid du Colombier				MOVW R7,0(R8)
76*fbadb1c4SDavid du Colombier				MOVW R7,4(R8)'
77*fbadb1c4SDavid du Colombier			}
78*fbadb1c4SDavid du Colombier			echo RETURN
79*fbadb1c4SDavid du Colombier		case arm
80*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
81*fbadb1c4SDavid du Colombier			echo MOVW R0, '0(FP)'
82*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R0
83*fbadb1c4SDavid du Colombier			echo SWI 0
84*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {
85*fbadb1c4SDavid du Colombier				echo 'CMP $-1,R0
86*fbadb1c4SDavid du Colombier				BNE 4(PC)
87*fbadb1c4SDavid du Colombier				MOVW a+0(FP),R1
88*fbadb1c4SDavid du Colombier				MOVW R0,0(R1)
89*fbadb1c4SDavid du Colombier				MOVW R0,4(R1)'
90*fbadb1c4SDavid du Colombier			}
91*fbadb1c4SDavid du Colombier			echo RET
92*fbadb1c4SDavid du Colombier		case power
93*fbadb1c4SDavid du Colombier			echo TEXT $i'(SB)', 1, '$0'
94*fbadb1c4SDavid du Colombier			echo MOVW R3, '0(FP)'
95*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R3
96*fbadb1c4SDavid du Colombier			echo SYSCALL
97*fbadb1c4SDavid du Colombier			if(~ $i _SEEK || ~ $i nsec) {
98*fbadb1c4SDavid du Colombier				echo 'CMP R3,$-1
99*fbadb1c4SDavid du Colombier				BNE 4(PC)
100*fbadb1c4SDavid du Colombier				MOVW a+0(FP),R8
101*fbadb1c4SDavid du Colombier				MOVW R3,0(R8)
102*fbadb1c4SDavid du Colombier				MOVW R3,4(R8)'
103*fbadb1c4SDavid du Colombier			}
104*fbadb1c4SDavid du Colombier			echo RETURN
105*fbadb1c4SDavid du Colombier		case power64
106*fbadb1c4SDavid du Colombier			if(~ $i _SEEK)
107*fbadb1c4SDavid du Colombier				echo TEXT __SEEK'(SB)', 1, '$0'
108*fbadb1c4SDavid du Colombier			if not
109*fbadb1c4SDavid du Colombier				echo TEXT $i'(SB)', 1, '$0'
110*fbadb1c4SDavid du Colombier			echo MOVD R3, '0(FP)'
111*fbadb1c4SDavid du Colombier			echo MOVW '$'$n, R3
112*fbadb1c4SDavid du Colombier			echo SYSCALL
113*fbadb1c4SDavid du Colombier			echo RETURN
114*fbadb1c4SDavid du Colombier		}} > $i.s
115*fbadb1c4SDavid du Colombier		$AS $i.s
116