blob: 7432981813885437ff3de88e257010ed9e8cb384 [file] [log] [blame]
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -04001// Copyright 2010 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Russ Cox55889402011-12-19 15:51:13 -05005#include "zasm_GOOS_GOARCH.h"
Russ Coxcb040d52014-09-04 23:05:18 -04006#include "textflag.h"
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -04007
8// setldt(int entry, int address, int limit)
Keith Randall0273dc12013-08-07 12:20:05 -07009TEXT runtime·setldt(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040010 RET
11
Keith Randall0273dc12013-08-07 12:20:05 -070012TEXT runtime·open(SB),NOSPLIT,$0
Yuval Pavel Zholkover09241852011-06-10 17:23:54 +100013 MOVL $14, AX
14 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040015 MOVL AX, ret+12(FP)
Yuval Pavel Zholkover09241852011-06-10 17:23:54 +100016 RET
17
Keith Randall0273dc12013-08-07 12:20:05 -070018TEXT runtime·pread(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050019 MOVL $50, AX
20 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040021 MOVL AX, ret+20(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040022 RET
23
Keith Randall0273dc12013-08-07 12:20:05 -070024TEXT runtime·pwrite(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050025 MOVL $51, AX
26 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040027 MOVL AX, ret+20(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040028 RET
29
Russ Cox25f6b022014-08-27 11:32:17 -040030// int32 _seek(int64*, int32, int64, int32)
31TEXT _seek<>(SB),NOSPLIT,$0
Anthony Martin432f1822012-12-17 11:07:40 -050032 MOVL $39, AX
33 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040034 RET
35
36TEXT runtime·seek(SB),NOSPLIT,$24
37 LEAL ret+16(FP), AX
38 MOVL fd+0(FP), BX
39 MOVL offset_lo+4(FP), CX
40 MOVL offset_hi+8(FP), DX
41 MOVL whence+12(FP), SI
42 MOVL AX, 0(SP)
43 MOVL BX, 4(SP)
44 MOVL CX, 8(SP)
45 MOVL DX, 12(SP)
46 MOVL SI, 16(SP)
47 CALL _seek<>(SB)
48 CMPL AX, $0
49 JGE 3(PC)
50 MOVL $-1, ret_lo+16(FP)
51 MOVL $-1, ret_hi+20(FP)
Anthony Martin432f1822012-12-17 11:07:40 -050052 RET
53
Keith Randall0273dc12013-08-07 12:20:05 -070054TEXT runtime·close(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040055 MOVL $4, AX
Anthony Martin432f1822012-12-17 11:07:40 -050056 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040057 MOVL AX, ret+4(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040058 RET
59
Keith Randall0273dc12013-08-07 12:20:05 -070060TEXT runtime·exits(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040061 MOVL $8, AX
62 INT $64
63 RET
64
Keith Randall0273dc12013-08-07 12:20:05 -070065TEXT runtime·brk_(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040066 MOVL $24, AX
67 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040068 MOVL AX, ret+4(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040069 RET
70
Keith Randall0273dc12013-08-07 12:20:05 -070071TEXT runtime·sleep(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040072 MOVL $17, AX
73 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040074 MOVL AX, ret+4(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040075 RET
76
Keith Randall0273dc12013-08-07 12:20:05 -070077TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040078 MOVL $37, AX
79 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040080 MOVL AX, ret+8(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040081 RET
Akshat Kumarccdca2c2012-05-04 03:48:34 -070082
Keith Randall0273dc12013-08-07 12:20:05 -070083TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
Akshat Kumarf5752842012-05-16 15:09:28 -070084 MOVL $52, AX
85 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040086 MOVL AX, ret+8(FP)
Akshat Kumarf5752842012-05-16 15:09:28 -070087 RET
88
Russ Cox25f6b022014-08-27 11:32:17 -040089TEXT nsec<>(SB),NOSPLIT,$0
Aram Hăvărneanua84e3ad2014-07-09 12:33:42 +020090 MOVL $53, AX
91 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040092 RET
93
94TEXT runtime·nsec(SB),NOSPLIT,$8
95 LEAL ret+4(FP), AX
96 MOVL AX, 0(SP)
97 CALL nsec<>(SB)
98 CMPL AX, $0
99 JGE 3(PC)
100 MOVL $-1, ret_lo+4(FP)
101 MOVL $-1, ret_hi+8(FP)
Aram Hăvărneanua84e3ad2014-07-09 12:33:42 +0200102 RET
103
Russ Cox13d0b822014-09-07 23:40:59 -0400104// func now() (sec int64, nsec int32)
105TEXT time·now(SB),NOSPLIT,$8-12
106 CALL runtime·nanotime(SB)
107 MOVL 0(SP), AX
108 MOVL 4(SP), DX
109
110 MOVL $1000000000, CX
111 DIVL CX
112 MOVL AX, sec+0(FP)
113 MOVL $0, sec+4(FP)
114 MOVL DX, nsec+8(FP)
115 RET
116
Keith Randall0273dc12013-08-07 12:20:05 -0700117TEXT runtime·notify(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700118 MOVL $28, AX
119 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400120 MOVL AX, ret+4(FP)
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700121 RET
122
Keith Randall0273dc12013-08-07 12:20:05 -0700123TEXT runtime·noted(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700124 MOVL $29, AX
125 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400126 MOVL AX, ret+4(FP)
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700127 RET
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400128
Keith Randall0273dc12013-08-07 12:20:05 -0700129TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400130 MOVL $38, AX
131 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400132 MOVL AX, ret+8(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400133 RET
134
Keith Randall0273dc12013-08-07 12:20:05 -0700135TEXT runtime·rfork(SB),NOSPLIT,$0
Russ Cox25f6b022014-08-27 11:32:17 -0400136 MOVL $19, AX // rfork
David du Colombier56872f02014-02-14 22:27:47 +0100137 MOVL stack+8(SP), CX
138 MOVL mm+12(SP), BX // m
139 MOVL gg+16(SP), DX // g
140 MOVL fn+20(SP), SI // fn
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400141 INT $64
142
143 // In parent, return.
144 CMPL AX, $0
Russ Cox25f6b022014-08-27 11:32:17 -0400145 JEQ 3(PC)
146 MOVL AX, ret+20(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400147 RET
148
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400149 // set SP to be on the new child stack
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400150 MOVL CX, SP
151
152 // Initialize m, g.
153 get_tls(AX)
154 MOVL DX, g(AX)
Russ Cox89f185f2014-06-26 11:54:39 -0400155 MOVL BX, g_m(DX)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400156
Russ Cox90093f02014-04-15 13:45:39 -0400157 // Initialize procid from TOS struct.
Aram Hăvărneanudecd8102014-07-02 21:04:10 +1000158 MOVL _tos(SB), AX
Russ Cox90093f02014-04-15 13:45:39 -0400159 MOVL 48(AX), AX // procid
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400160 MOVL AX, m_procid(BX) // save pid as m->procid
Yuval Pavel Zholkover7e776232011-02-11 13:39:05 -0500161
Russ Cox68b42552010-11-04 14:00:19 -0400162 CALL runtime·stackcheck(SB) // smashes AX, CX
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400163
164 MOVL 0(DX), DX // paranoia; check they are not nil
165 MOVL 0(BX), BX
166
167 // more paranoia; check that stack splitting code works
Anthony Martin4a2d30e2011-11-17 22:09:28 -0500168 PUSHL SI
Russ Cox68b42552010-11-04 14:00:19 -0400169 CALL runtime·emptyfunc(SB)
Anthony Martin4a2d30e2011-11-17 22:09:28 -0500170 POPL SI
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400171
172 CALL SI // fn()
Russ Cox68b42552010-11-04 14:00:19 -0400173 CALL runtime·exit(SB)
Russ Cox25f6b022014-08-27 11:32:17 -0400174 MOVL AX, ret+20(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400175 RET
Akshat Kumar23599ca2012-10-05 16:23:30 -0400176
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800177// void sigtramp(void *ureg, int8 *note)
Keith Randall0273dc12013-08-07 12:20:05 -0700178TEXT runtime·sigtramp(SB),NOSPLIT,$0
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800179 get_tls(AX)
180
Russ Cox89f185f2014-06-26 11:54:39 -0400181 // check that g exists
182 MOVL g(AX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800183 CMPL BX, $0
184 JNE 3(PC)
Shenghou Ma2f1ead72013-07-12 04:39:39 +0800185 CALL runtime·badsignal2(SB) // will exit
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800186 RET
187
188 // save args
189 MOVL ureg+4(SP), CX
190 MOVL note+8(SP), DX
191
192 // change stack
Russ Cox89f185f2014-06-26 11:54:39 -0400193 MOVL g_m(BX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800194 MOVL m_gsignal(BX), BP
195 MOVL g_stackbase(BP), BP
196 MOVL BP, SP
197
198 // make room for args and g
Russ Cox9e360922014-08-27 17:38:01 -0400199 SUBL $24, SP
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800200
201 // save g
202 MOVL g(AX), BP
Russ Cox9e360922014-08-27 17:38:01 -0400203 MOVL BP, 20(SP)
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800204
205 // g = m->gsignal
206 MOVL m_gsignal(BX), DI
207 MOVL DI, g(AX)
208
209 // load args and call sighandler
210 MOVL CX, 0(SP)
211 MOVL DX, 4(SP)
212 MOVL BP, 8(SP)
213
214 CALL runtime·sighandler(SB)
Russ Cox9e360922014-08-27 17:38:01 -0400215 MOVL 12(SP), AX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800216
217 // restore g
218 get_tls(BX)
Russ Cox9e360922014-08-27 17:38:01 -0400219 MOVL 20(SP), BP
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800220 MOVL BP, g(BX)
221
222 // call noted(AX)
223 MOVL AX, 0(SP)
224 CALL runtime·noted(SB)
225 RET
226
Akshat Kumar23599ca2012-10-05 16:23:30 -0400227// Only used by the 64-bit runtime.
Keith Randall0273dc12013-08-07 12:20:05 -0700228TEXT runtime·setfpmasks(SB),NOSPLIT,$0
Akshat Kumar23599ca2012-10-05 16:23:30 -0400229 RET
Akshat Kumara566dea2013-03-08 00:54:44 +0100230
231#define ERRMAX 128 /* from os_plan9.h */
232
Anthony Martinb3de7f22014-08-28 16:02:15 -0700233// void errstr(int8 *buf, int32 len)
234TEXT errstr<>(SB),NOSPLIT,$0
235 MOVL $41, AX
236 INT $64
237 RET
238
239// func errstr() string
Akshat Kumara566dea2013-03-08 00:54:44 +0100240// Only used by package syscall.
241// Grab error string due to a syscall made
242// in entersyscall mode, without going
243// through the allocator (issue 4994).
244// See ../syscall/asm_plan9_386.s:/·Syscall/
Anthony Martinb3de7f22014-08-28 16:02:15 -0700245TEXT runtime·errstr(SB),NOSPLIT,$8-8
Akshat Kumara566dea2013-03-08 00:54:44 +0100246 get_tls(AX)
Russ Cox89f185f2014-06-26 11:54:39 -0400247 MOVL g(AX), BX
248 MOVL g_m(BX), BX
Akshat Kumara566dea2013-03-08 00:54:44 +0100249 MOVL m_errstr(BX), CX
Anthony Martinb3de7f22014-08-28 16:02:15 -0700250 MOVL CX, 0(SP)
251 MOVL $ERRMAX, 4(SP)
252 CALL errstr<>(SB)
Akshat Kumara566dea2013-03-08 00:54:44 +0100253 CALL runtime·findnull(SB)
Anthony Martinb3de7f22014-08-28 16:02:15 -0700254 MOVL 4(SP), AX
Russ Cox25f6b022014-08-27 11:32:17 -0400255 MOVL AX, ret_len+4(FP)
Anthony Martinb3de7f22014-08-28 16:02:15 -0700256 MOVL 0(SP), AX
257 MOVL AX, ret_base+0(FP)
Akshat Kumara566dea2013-03-08 00:54:44 +0100258 RET