/*
Copyright (C) 1996-1997  Id Software, Inc.
Copyright (C) 1999,2000  contributors of the QuakeForge project
Please see the file "AUTHORS" for a list of contributors

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
        
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
	        
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/      
#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

