quake / WinQuake / dosasm.s

#include "asm_i386.h"

.data
fpenv:	.long	0, 0, 0, 0, 0, 0, 0, 0

.text
.globl	C(StartMSRInterval)
C(StartMSRInterval):
	movl	$0x11,%ecx	// read the CESR
	.byte	0x0F
	.byte	0x32		// RDMSR

	andl	$0xFE3FFE3F,%eax	// stop both counters
	.byte	0x0F
	.byte	0x30		// WRMSR

	movl	4(%esp),%eax	// point counter 0 to desired event, with counters
	andl	$0x3F,%eax		//  still stopped
	movl	$0x11,%ecx
	.byte	0x0F
	.byte	0x30		// WRMSR

	movl	$0x12,%ecx	// set counter 0 to the value 0
	subl	%eax,%eax
	subl	%edx,%edx
	.byte	0x0F
	.byte	0x30		// WRMSR
	
	movl	4(%esp),%eax // restart counter 0 with selected event
	andl	$0x3F,%eax
	subl	%edx,%edx
	orl		$0xC0,%eax
	movl	$0x11,%ecx	// control and event select
	.byte	0x0F
	.byte	0x30		// WRMSR

	ret

.globl	C(EndMSRInterval)
C(EndMSRInterval):
	movl	$0x12,%ecx	// counter 0
	.byte	0x0F
	.byte	0x32		// RDMSR

	ret					// lower 32 bits of count in %eax

#if 0
	.data
Lxxx:	.long	0

	.text

.globl C(setstackcheck)
C(setstackcheck):

	movl	%esp,%eax
	subl	$0x38000,%eax
	movl	$0x5A5A5A5A,(%eax)
	movl	%eax,Lxxx

	ret


.globl C(dostackcheck)
C(dostackcheck):

	movl	Lxxx,%edx
	movl	$0,%eax

	cmpl	$0x5A5A5A5A,(%edx)
	jz		qqq
	incl	%eax
qqq:

	ret
#endif
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.