|  | // Copyright 2018 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "textflag.h" | 
|  |  | 
|  | // func servicemain(argc uint32, argv **uint16) | 
|  | TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0 | 
|  | MOVM.DB.W [R4, R14], (R13)	// push {r4, lr} | 
|  | MOVW	R13, R4 | 
|  | BIC	$0x7, R13		// alignment for ABI | 
|  |  | 
|  | MOVW	R0, ·sArgc(SB) | 
|  | MOVW	R1, ·sArgv(SB) | 
|  |  | 
|  | MOVW	·sName(SB), R0 | 
|  | MOVW	·ctlHandlerExProc(SB), R1 | 
|  | MOVW	$0, R2 | 
|  | MOVW	·cRegisterServiceCtrlHandlerExW(SB), R3 | 
|  | BL	(R3) | 
|  | CMP	$0, R0 | 
|  | BEQ	exit | 
|  | MOVW	R0, ·ssHandle(SB) | 
|  |  | 
|  | MOVW	·goWaitsH(SB), R0 | 
|  | MOVW	·cSetEvent(SB), R1 | 
|  | BL	(R1) | 
|  |  | 
|  | MOVW	·cWaitsH(SB), R0 | 
|  | MOVW	$-1, R1 | 
|  | MOVW	·cWaitForSingleObject(SB), R2 | 
|  | BL	(R2) | 
|  |  | 
|  | exit: | 
|  | MOVW	R4, R13			// free extra stack space | 
|  | MOVM.IA.W (R13), [R4, R15]	// pop {r4, pc} |