| // Copyright 2011 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. | 
 |  | 
 | //go:build !faketime | 
 |  | 
 | #include "go_asm.h" | 
 | #include "textflag.h" | 
 | #include "time_windows.h" | 
 |  | 
 | TEXT time·now(SB),NOSPLIT,$0-24 | 
 | 	CMPB	runtime·useQPCTime(SB), $0 | 
 | 	JNE	useQPC | 
 |  | 
 | 	MOVQ	$_INTERRUPT_TIME, DI | 
 | 	MOVQ	time_lo(DI), AX | 
 | 	IMULQ	$100, AX | 
 | 	MOVQ	AX, mono+16(FP) | 
 |  | 
 | 	MOVQ	$_SYSTEM_TIME, DI | 
 | 	MOVQ	time_lo(DI), AX | 
 | 	MOVQ	$116444736000000000, DI | 
 | 	SUBQ	DI, AX | 
 | 	IMULQ	$100, AX | 
 |  | 
 | 	// generated code for | 
 | 	//	func f(x uint64) (uint64, uint64) { return x/1000000000, x%1000000000 } | 
 | 	// adapted to reduce duplication | 
 | 	MOVQ	AX, CX | 
 | 	MOVQ	$1360296554856532783, AX | 
 | 	MULQ	CX | 
 | 	ADDQ	CX, DX | 
 | 	RCRQ	$1, DX | 
 | 	SHRQ	$29, DX | 
 | 	MOVQ	DX, sec+0(FP) | 
 | 	IMULQ	$1000000000, DX | 
 | 	SUBQ	DX, CX | 
 | 	MOVL	CX, nsec+8(FP) | 
 | 	RET | 
 | useQPC: | 
 | 	JMP	runtime·nowQPC(SB) | 
 | 	RET |