...

Text file src/runtime/sys_plan9_amd64.s

Documentation: runtime

     1// 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
     5#include "go_asm.h"
     6#include "go_tls.h"
     7#include "textflag.h"
     8
     9TEXT runtime·open(SB),NOSPLIT,$0
    10	MOVQ	$14, BP
    11	SYSCALL
    12	MOVL	AX, ret+16(FP)
    13	RET
    14
    15TEXT runtime·pread(SB),NOSPLIT,$0
    16	MOVQ	$50, BP
    17	SYSCALL
    18	MOVL	AX, ret+32(FP)
    19	RET
    20
    21TEXT runtime·pwrite(SB),NOSPLIT,$0
    22	MOVQ	$51, BP
    23	SYSCALL
    24	MOVL	AX, ret+32(FP)
    25	RET
    26
    27// int32 _seek(int64*, int32, int64, int32)
    28TEXT _seek<>(SB),NOSPLIT,$0
    29	MOVQ	$39, BP
    30	SYSCALL
    31	RET
    32
    33// int64 seek(int32, int64, int32)
    34// Convenience wrapper around _seek, the actual system call.
    35TEXT runtime·seek(SB),NOSPLIT,$32
    36	LEAQ	ret+24(FP), AX
    37	MOVL	fd+0(FP), BX
    38	MOVQ	offset+8(FP), CX
    39	MOVL	whence+16(FP), DX
    40	MOVQ	AX, 0(SP)
    41	MOVL	BX, 8(SP)
    42	MOVQ	CX, 16(SP)
    43	MOVL	DX, 24(SP)
    44	CALL	_seek<>(SB)
    45	CMPL	AX, $0
    46	JGE	2(PC)
    47	MOVQ	$-1, ret+24(FP)
    48	RET
    49
    50TEXT runtime·closefd(SB),NOSPLIT,$0
    51	MOVQ	$4, BP
    52	SYSCALL
    53	MOVL	AX, ret+8(FP)
    54	RET
    55
    56TEXT runtime·exits(SB),NOSPLIT,$0
    57	MOVQ	$8, BP
    58	SYSCALL
    59	RET
    60
    61TEXT runtime·brk_(SB),NOSPLIT,$0
    62	MOVQ	$24, BP
    63	SYSCALL
    64	MOVL	AX, ret+8(FP)
    65	RET
    66
    67TEXT runtime·sleep(SB),NOSPLIT,$0
    68	MOVQ	$17, BP
    69	SYSCALL
    70	MOVL	AX, ret+8(FP)
    71	RET
    72
    73TEXT runtime·plan9_semacquire(SB),NOSPLIT,$0
    74	MOVQ	$37, BP
    75	SYSCALL
    76	MOVL	AX, ret+16(FP)
    77	RET
    78
    79TEXT runtime·plan9_tsemacquire(SB),NOSPLIT,$0
    80	MOVQ	$52, BP
    81	SYSCALL
    82	MOVL	AX, ret+16(FP)
    83	RET
    84
    85TEXT runtime·nsec(SB),NOSPLIT,$0
    86	MOVQ	$53, BP
    87	SYSCALL
    88	MOVQ	AX, ret+8(FP)
    89	RET
    90
    91// func walltime() (sec int64, nsec int32)
    92TEXT runtime·walltime(SB),NOSPLIT,$8-12
    93	CALL	runtime·nanotime1(SB)
    94	MOVQ	0(SP), AX
    95
    96	// generated code for
    97	//	func f(x uint64) (uint64, uint64) { return x/1000000000, x%1000000000 }
    98	// adapted to reduce duplication
    99	MOVQ	AX, CX
   100	MOVQ	$1360296554856532783, AX
   101	MULQ	CX
   102	ADDQ	CX, DX
   103	RCRQ	$1, DX
   104	SHRQ	$29, DX
   105	MOVQ	DX, sec+0(FP)
   106	IMULQ	$1000000000, DX
   107	SUBQ	DX, CX
   108	MOVL	CX, nsec+8(FP)
   109	RET
   110
   111TEXT runtime·notify(SB),NOSPLIT,$0
   112	MOVQ	$28, BP
   113	SYSCALL
   114	MOVL	AX, ret+8(FP)
   115	RET
   116
   117TEXT runtime·noted(SB),NOSPLIT,$0
   118	MOVQ	$29, BP
   119	SYSCALL
   120	MOVL	AX, ret+8(FP)
   121	RET
   122
   123TEXT runtime·plan9_semrelease(SB),NOSPLIT,$0
   124	MOVQ	$38, BP
   125	SYSCALL
   126	MOVL	AX, ret+16(FP)
   127	RET
   128
   129TEXT runtime·rfork(SB),NOSPLIT,$0
   130	MOVQ	$19, BP
   131	SYSCALL
   132	MOVL	AX, ret+8(FP)
   133	RET
   134
   135TEXT runtime·tstart_plan9(SB),NOSPLIT,$8
   136	MOVQ	newm+0(FP), CX
   137	MOVQ	m_g0(CX), DX
   138
   139	// Layout new m scheduler stack on os stack.
   140	MOVQ	SP, AX
   141	MOVQ	AX, (g_stack+stack_hi)(DX)
   142	SUBQ	$(64*1024), AX		// stack size
   143	MOVQ	AX, (g_stack+stack_lo)(DX)
   144	MOVQ	AX, g_stackguard0(DX)
   145	MOVQ	AX, g_stackguard1(DX)
   146
   147	// Initialize procid from TOS struct.
   148	MOVQ	_tos(SB), AX
   149	MOVL	64(AX), AX
   150	MOVQ	AX, m_procid(CX)	// save pid as m->procid
   151
   152	// Finally, initialize g.
   153	get_tls(BX)
   154	MOVQ	DX, g(BX)
   155
   156	CALL	runtime·stackcheck(SB)	// smashes AX, CX
   157	CALL	runtime·mstart(SB)
   158
   159	// Exit the thread.
   160	MOVQ	$0, 0(SP)
   161	CALL	runtime·exits(SB)
   162	JMP	0(PC)
   163
   164// This is needed by asm_amd64.s
   165TEXT runtime·settls(SB),NOSPLIT,$0
   166	RET
   167
   168// void sigtramp(void *ureg, int8 *note)
   169TEXT runtime·sigtramp(SB),NOSPLIT|NOFRAME,$0
   170	get_tls(AX)
   171
   172	// check that g exists
   173	MOVQ	g(AX), BX
   174	CMPQ	BX, $0
   175	JNE	3(PC)
   176	CALL	runtime·badsignal2(SB) // will exit
   177	RET
   178
   179	// save args
   180	MOVQ	ureg+0(FP), CX
   181	MOVQ	note+8(FP), DX
   182
   183	// change stack
   184	MOVQ	g_m(BX), BX
   185	MOVQ	m_gsignal(BX), R10
   186	MOVQ	(g_stack+stack_hi)(R10), BP
   187	MOVQ	BP, SP
   188
   189	// make room for args and g
   190	SUBQ	$128, SP
   191
   192	// save g
   193	MOVQ	g(AX), BP
   194	MOVQ	BP, 32(SP)
   195
   196	// g = m->gsignal
   197	MOVQ	R10, g(AX)
   198
   199	// load args and call sighandler
   200	MOVQ	CX, 0(SP)
   201	MOVQ	DX, 8(SP)
   202	MOVQ	BP, 16(SP)
   203
   204	CALL	runtime·sighandler(SB)
   205	MOVL	24(SP), AX
   206
   207	// restore g
   208	get_tls(BX)
   209	MOVQ	32(SP), R10
   210	MOVQ	R10, g(BX)
   211
   212	// call noted(AX)
   213	MOVQ	AX, 0(SP)
   214	CALL	runtime·noted(SB)
   215	RET
   216
   217TEXT runtime·setfpmasks(SB),NOSPLIT,$8
   218	STMXCSR	0(SP)
   219	MOVL	0(SP), AX
   220	ANDL	$~0x3F, AX
   221	ORL	$(0x3F<<7), AX
   222	MOVL	AX, 0(SP)
   223	LDMXCSR	0(SP)
   224	RET
   225
   226#define ERRMAX 128	/* from os_plan9.h */
   227
   228// void errstr(int8 *buf, int32 len)
   229TEXT errstr<>(SB),NOSPLIT,$0
   230	MOVQ    $41, BP
   231	SYSCALL
   232	RET
   233
   234// func errstr() string
   235// Only used by package syscall.
   236// Grab error string due to a syscall made
   237// in entersyscall mode, without going
   238// through the allocator (issue 4994).
   239// See ../syscall/asm_plan9_amd64.s:/·Syscall/
   240TEXT runtime·errstr(SB),NOSPLIT,$16-16
   241	get_tls(AX)
   242	MOVQ	g(AX), BX
   243	MOVQ	g_m(BX), BX
   244	MOVQ	(m_mOS+mOS_errstr)(BX), CX
   245	MOVQ	CX, 0(SP)
   246	MOVQ	$ERRMAX, 8(SP)
   247	CALL	errstr<>(SB)
   248	CALL	runtime·findnull(SB)
   249	MOVQ	8(SP), AX
   250	MOVQ	AX, ret_len+8(FP)
   251	MOVQ	0(SP), AX
   252	MOVQ	AX, ret_base+0(FP)
   253	RET
   254
   255// never called on this platform
   256TEXT ·sigpanictramp(SB),NOSPLIT,$0-0
   257	UNDEF

View as plain text