blob: 47dcb8db04e95b5487704dc49663bfa047741807 [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 Cox15ced2d2014-11-11 17:06:22 -05005#include "go_asm.h"
6#include "go_tls.h"
Russ Coxcb040d52014-09-04 23:05:18 -04007#include "textflag.h"
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -04008
9// setldt(int entry, int address, int limit)
Keith Randall0273dc12013-08-07 12:20:05 -070010TEXT runtime·setldt(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040011 RET
12
Keith Randall0273dc12013-08-07 12:20:05 -070013TEXT runtime·open(SB),NOSPLIT,$0
Yuval Pavel Zholkover09241852011-06-10 17:23:54 +100014 MOVL $14, AX
15 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040016 MOVL AX, ret+12(FP)
Yuval Pavel Zholkover09241852011-06-10 17:23:54 +100017 RET
18
Keith Randall0273dc12013-08-07 12:20:05 -070019TEXT runtime·pread(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050020 MOVL $50, AX
21 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040022 MOVL AX, ret+20(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040023 RET
24
Keith Randall0273dc12013-08-07 12:20:05 -070025TEXT runtime·pwrite(SB),NOSPLIT,$0
Anthony Martin4a2d30e2011-11-17 22:09:28 -050026 MOVL $51, AX
27 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040028 MOVL AX, ret+20(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040029 RET
30
Russ Cox25f6b022014-08-27 11:32:17 -040031// int32 _seek(int64*, int32, int64, int32)
32TEXT _seek<>(SB),NOSPLIT,$0
Anthony Martin432f1822012-12-17 11:07:40 -050033 MOVL $39, AX
34 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040035 RET
36
37TEXT runtime·seek(SB),NOSPLIT,$24
38 LEAL ret+16(FP), AX
39 MOVL fd+0(FP), BX
40 MOVL offset_lo+4(FP), CX
41 MOVL offset_hi+8(FP), DX
42 MOVL whence+12(FP), SI
43 MOVL AX, 0(SP)
44 MOVL BX, 4(SP)
45 MOVL CX, 8(SP)
46 MOVL DX, 12(SP)
47 MOVL SI, 16(SP)
48 CALL _seek<>(SB)
49 CMPL AX, $0
50 JGE 3(PC)
51 MOVL $-1, ret_lo+16(FP)
52 MOVL $-1, ret_hi+20(FP)
Anthony Martin432f1822012-12-17 11:07:40 -050053 RET
54
David Crawshawcea272d2015-04-13 19:37:04 -040055TEXT runtime·closefd(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040056 MOVL $4, AX
Anthony Martin432f1822012-12-17 11:07:40 -050057 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040058 MOVL AX, ret+4(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040059 RET
60
Keith Randall0273dc12013-08-07 12:20:05 -070061TEXT runtime·exits(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040062 MOVL $8, AX
63 INT $64
64 RET
65
Keith Randall0273dc12013-08-07 12:20:05 -070066TEXT runtime·brk_(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040067 MOVL $24, AX
68 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040069 MOVL AX, ret+4(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040070 RET
71
Keith Randall0273dc12013-08-07 12:20:05 -070072TEXT runtime·sleep(SB),NOSPLIT,$0
Anthony Martin528ccdc2011-10-05 12:07:44 -040073 MOVL $17, AX
74 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040075 MOVL AX, ret+4(FP)
Anthony Martin528ccdc2011-10-05 12:07:44 -040076 RET
77
Keith Randall0273dc12013-08-07 12:20:05 -070078TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040079 MOVL $37, AX
80 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040081 MOVL AX, ret+8(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -040082 RET
Akshat Kumarccdca2c2012-05-04 03:48:34 -070083
Keith Randall0273dc12013-08-07 12:20:05 -070084TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
Akshat Kumarf5752842012-05-16 15:09:28 -070085 MOVL $52, AX
86 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040087 MOVL AX, ret+8(FP)
Akshat Kumarf5752842012-05-16 15:09:28 -070088 RET
89
Russ Cox25f6b022014-08-27 11:32:17 -040090TEXT nsec<>(SB),NOSPLIT,$0
Aram Hăvărneanua84e3ad2014-07-09 12:33:42 +020091 MOVL $53, AX
92 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -040093 RET
94
95TEXT runtime·nsec(SB),NOSPLIT,$8
96 LEAL ret+4(FP), AX
97 MOVL AX, 0(SP)
98 CALL nsec<>(SB)
99 CMPL AX, $0
100 JGE 3(PC)
101 MOVL $-1, ret_lo+4(FP)
102 MOVL $-1, ret_hi+8(FP)
Aram Hăvărneanua84e3ad2014-07-09 12:33:42 +0200103 RET
104
Russ Cox0e335592017-02-02 16:20:58 -0500105// func walltime() (sec int64, nsec int32)
106TEXT runtime·walltime(SB),NOSPLIT,$8-12
Russ Cox13d0b822014-09-07 23:40:59 -0400107 CALL runtime·nanotime(SB)
108 MOVL 0(SP), AX
109 MOVL 4(SP), DX
110
111 MOVL $1000000000, CX
112 DIVL CX
Josh Bleecher Snyderef30a1c2017-02-13 09:06:08 -0800113 MOVL AX, sec_lo+0(FP)
114 MOVL $0, sec_hi+4(FP)
Russ Cox13d0b822014-09-07 23:40:59 -0400115 MOVL DX, nsec+8(FP)
116 RET
117
Keith Randall0273dc12013-08-07 12:20:05 -0700118TEXT runtime·notify(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700119 MOVL $28, AX
120 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400121 MOVL AX, ret+4(FP)
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700122 RET
123
Keith Randall0273dc12013-08-07 12:20:05 -0700124TEXT runtime·noted(SB),NOSPLIT,$0
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700125 MOVL $29, AX
126 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400127 MOVL AX, ret+4(FP)
Akshat Kumarccdca2c2012-05-04 03:48:34 -0700128 RET
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400129
Keith Randall0273dc12013-08-07 12:20:05 -0700130TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400131 MOVL $38, AX
132 INT $64
Russ Cox25f6b022014-08-27 11:32:17 -0400133 MOVL AX, ret+8(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400134 RET
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400135
Anthony Martin9f012e12014-09-09 17:19:01 -0700136TEXT runtime·rfork(SB),NOSPLIT,$0
137 MOVL $19, AX
138 INT $64
139 MOVL AX, ret+4(FP)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400140 RET
141
Austin Clementseff2b262017-06-16 15:54:21 -0400142TEXT runtime·tstart_plan9(SB),NOSPLIT,$4
Anthony Martin9f012e12014-09-09 17:19:01 -0700143 MOVL newm+0(FP), CX
144 MOVL m_g0(CX), DX
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400145
Anthony Martin9f012e12014-09-09 17:19:01 -0700146 // Layout new m scheduler stack on os stack.
147 MOVL SP, AX
148 MOVL AX, (g_stack+stack_hi)(DX)
149 SUBL $(64*1024), AX // stack size
150 MOVL AX, (g_stack+stack_lo)(DX)
Russ Coxe6d35112015-01-05 16:29:21 +0000151 MOVL AX, g_stackguard0(DX)
152 MOVL AX, g_stackguard1(DX)
Yuval Pavel Zholkover99a10ef2010-10-18 12:32:55 -0400153
Russ Cox90093f02014-04-15 13:45:39 -0400154 // Initialize procid from TOS struct.
Aram Hăvărneanudecd8102014-07-02 21:04:10 +1000155 MOVL _tos(SB), AX
Anthony Martin9f012e12014-09-09 17:19:01 -0700156 MOVL 48(AX), AX
157 MOVL AX, m_procid(CX) // save pid as m->procid
158
159 // Finally, initialize g.
160 get_tls(BX)
161 MOVL DX, g(BX)
162
Russ Cox68b42552010-11-04 14:00:19 -0400163 CALL runtime·stackcheck(SB) // smashes AX, CX
Anthony Martin9f012e12014-09-09 17:19:01 -0700164 CALL runtime·mstart(SB)
165
Austin Clementseff2b262017-06-16 15:54:21 -0400166 // Exit the thread.
167 MOVL $0, 0(SP)
168 CALL runtime·exits(SB)
169 JMP 0(PC)
Akshat Kumar23599ca2012-10-05 16:23:30 -0400170
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800171// void sigtramp(void *ureg, int8 *note)
Keith Randall0273dc12013-08-07 12:20:05 -0700172TEXT runtime·sigtramp(SB),NOSPLIT,$0
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800173 get_tls(AX)
174
Russ Cox89f185f2014-06-26 11:54:39 -0400175 // check that g exists
176 MOVL g(AX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800177 CMPL BX, $0
178 JNE 3(PC)
Shenghou Ma2f1ead72013-07-12 04:39:39 +0800179 CALL runtime·badsignal2(SB) // will exit
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800180 RET
181
182 // save args
Matthew Dempsky9828b7c2016-09-29 21:34:44 -0700183 MOVL ureg+0(FP), CX
184 MOVL note+4(FP), DX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800185
186 // change stack
Russ Cox89f185f2014-06-26 11:54:39 -0400187 MOVL g_m(BX), BX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800188 MOVL m_gsignal(BX), BP
Russ Cox8ac35be2014-09-09 14:02:37 -0400189 MOVL (g_stack+stack_hi)(BP), BP
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800190 MOVL BP, SP
191
192 // make room for args and g
Russ Cox9e360922014-08-27 17:38:01 -0400193 SUBL $24, SP
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800194
195 // save g
196 MOVL g(AX), BP
Russ Cox9e360922014-08-27 17:38:01 -0400197 MOVL BP, 20(SP)
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800198
199 // g = m->gsignal
200 MOVL m_gsignal(BX), DI
201 MOVL DI, g(AX)
202
203 // load args and call sighandler
204 MOVL CX, 0(SP)
205 MOVL DX, 4(SP)
206 MOVL BP, 8(SP)
207
208 CALL runtime·sighandler(SB)
Russ Cox9e360922014-08-27 17:38:01 -0400209 MOVL 12(SP), AX
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800210
211 // restore g
212 get_tls(BX)
Russ Cox9e360922014-08-27 17:38:01 -0400213 MOVL 20(SP), BP
Akshat Kumarc74f3c42013-01-30 02:53:56 -0800214 MOVL BP, g(BX)
215
216 // call noted(AX)
217 MOVL AX, 0(SP)
218 CALL runtime·noted(SB)
219 RET
220
Akshat Kumar23599ca2012-10-05 16:23:30 -0400221// Only used by the 64-bit runtime.
Keith Randall0273dc12013-08-07 12:20:05 -0700222TEXT runtime·setfpmasks(SB),NOSPLIT,$0
Akshat Kumar23599ca2012-10-05 16:23:30 -0400223 RET
Akshat Kumara566dea2013-03-08 00:54:44 +0100224
225#define ERRMAX 128 /* from os_plan9.h */
226
Anthony Martinb3de7f22014-08-28 16:02:15 -0700227// void errstr(int8 *buf, int32 len)
228TEXT errstr<>(SB),NOSPLIT,$0
229 MOVL $41, AX
230 INT $64
231 RET
232
233// func errstr() string
Akshat Kumara566dea2013-03-08 00:54:44 +0100234// Only used by package syscall.
235// Grab error string due to a syscall made
236// in entersyscall mode, without going
237// through the allocator (issue 4994).
238// See ../syscall/asm_plan9_386.s:/·Syscall/
Anthony Martinb3de7f22014-08-28 16:02:15 -0700239TEXT runtime·errstr(SB),NOSPLIT,$8-8
Akshat Kumara566dea2013-03-08 00:54:44 +0100240 get_tls(AX)
Russ Cox89f185f2014-06-26 11:54:39 -0400241 MOVL g(AX), BX
242 MOVL g_m(BX), BX
Matthew Dempsky58e3ae22015-10-21 12:48:53 -0700243 MOVL (m_mOS+mOS_errstr)(BX), CX
Anthony Martinb3de7f22014-08-28 16:02:15 -0700244 MOVL CX, 0(SP)
245 MOVL $ERRMAX, 4(SP)
246 CALL errstr<>(SB)
Akshat Kumara566dea2013-03-08 00:54:44 +0100247 CALL runtime·findnull(SB)
Anthony Martinb3de7f22014-08-28 16:02:15 -0700248 MOVL 4(SP), AX
Russ Cox25f6b022014-08-27 11:32:17 -0400249 MOVL AX, ret_len+4(FP)
Anthony Martinb3de7f22014-08-28 16:02:15 -0700250 MOVL 0(SP), AX
251 MOVL AX, ret_base+0(FP)
Akshat Kumara566dea2013-03-08 00:54:44 +0100252 RET