xref: /plan9/sys/src/libc/9syscall/mkfile (revision c9e00483fb8d8427d96c68a6dde1d66afc3d135c)
1NPROC=1
2</$objtype/mkfile
3
4install:V:
5	SYS=`{sed '/^#define._X[123]/d; s/#define.([A-Z0-9_]*).*/\1/' sys.h}
6	for(I in $SYS) {
7		i=`{echo $I|tr A-Z a-z}
8		n=`{sed -n '/[ 	]'$I'[ 	]/s/.*	//p' sys.h}
9		if(~ $i exits) i=_exits
10		{switch($objtype){
11		case mips
12			echo TEXT $i'(SB)', 1, '$0'
13			echo MOVW R1, '0(FP)'
14			echo MOVW '$'$n, R1
15			echo SYSCALL
16			if(~ $i seek || ~ $i nsec) {
17				echo 'MOVW $-1,R5
18				BNE R1,R5,4(PC)
19				MOVW a+0(FP),R5
20				MOVW R1,0(R5)
21				MOVW R1,4(R5)'
22			}
23			echo RET
24		case mips2
25			echo TEXT $i'(SB)', 1, '$0'
26			echo MOVW R1, '0(FP)'
27			echo MOVW '$'$n, R1
28			echo ADD '$4',R29
29			echo SYSCALL
30			echo ADD '$-4',R29
31			echo RET
32		case spim
33			echo TEXT $i'(SB)', 1, '$0'
34			echo MOVW R1, '0(FP)'
35			echo MOVW '$'$n, R1
36			echo ADD '$4',R29
37			echo SYSCALL
38			echo ADD '$-4',R29
39			if(~ $i seek || ~ $i nsec) {	# untested so far - geoff
40				echo 'MOVW $-1,R5
41				BNE R1,R5,4(PC)
42				MOVW a+0(FP),R5
43				MOVW R1,0(R5)
44				MOVW R1,4(R5)'
45			}
46			echo RET
47		case 386
48			echo TEXT $i'(SB)', 1, '$0'
49			echo MOVL '$'$n, AX
50			echo INT '$'64
51			if(~ $i seek || ~ $i nsec) {
52				echo 'CMPL AX,$-1
53				JNE 4(PC)
54				MOVL a+0(FP),CX
55				MOVL AX,0(CX)
56				MOVL AX,4(CX)'
57			}
58			echo RET
59		case amd64
60			if(~ $i seek)
61				echo TEXT _seek'(SB)', 1, '$0'
62			if not
63				echo TEXT $i'(SB)', 1, '$0'
64			#
65			# For architectures which pass the first argument
66			# in a register, if the system call takes no arguments
67			# there will be no 'a0+0(FP)' reserved on the stack.
68			#
69			if(! ~ $i nsec)
70				echo MOVQ RARG, 'a0+0(FP)'
71			echo MOVQ '$'$n, RARG
72			echo SYSCALL
73			echo RET
74		case sparc
75			echo TEXT $i'(SB)', 1, '$0'
76			echo MOVW R7, '0(FP)'
77			echo MOVW '$'$n, R7
78			echo TA R0
79			if(~ $i seek || ~ $i nsec) {
80				echo 'CMP R7,$-1
81				BNE 4(PC)
82				MOVW a+0(FP),R8
83				MOVW R7,0(R8)
84				MOVW R7,4(R8)'
85			}
86			echo RETURN
87		case arm
88			echo TEXT $i'(SB)', 1, '$0'
89			echo MOVW R0, '0(FP)'
90			echo MOVW '$'$n, R0
91			echo SWI 0
92			if(~ $i seek || ~ $i nsec) {
93				echo 'CMP $-1,R0
94				BNE 4(PC)
95				MOVW a+0(FP),R1
96				MOVW R0,0(R1)
97				MOVW R0,4(R1)'
98			}
99			echo RET
100		case power
101			echo TEXT $i'(SB)', 1, '$0'
102			echo MOVW R3, '0(FP)'
103			echo MOVW '$'$n, R3
104			echo SYSCALL
105			if(~ $i seek || ~ $i nsec) {
106				echo 'CMP R3,$-1
107				BNE 4(PC)
108				MOVW a+0(FP),R8
109				MOVW R3,0(R8)
110				MOVW R3,4(R8)'
111			}
112			echo RETURN
113		}} > $i.s
114		$AS $i.s
115	}
116	ar vu /$objtype/lib/libc.a *.$O
117	rm -f *.$O *.s
118
119nuke clean:V:
120	rm -f *.[$OS]
121
122installall:V:
123	for(objtype in $CPUS) mk install
124
125update:V:
126	update $UPDATEFLAGS mkfile sys.h
127