19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// sys_dosa.s
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// x86 assembly-language DOS-dependent routines.
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "asm_i386.h"
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "quakeasm.h"
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.data
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.align	4
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfpenv:
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.long	0, 0, 0, 0, 0, 0, 0, 0
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.text
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(MaskExceptions)
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(MaskExceptions):
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fnstenv	fpenv
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	orl		$0x3F,fpenv
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldenv	fpenv
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if 0
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(unmaskexceptions)
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(unmaskexceptions):
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fnstenv	fpenv
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	andl		$0xFFFFFFE0,fpenv
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldenv	fpenv
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.data
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.align	4
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl	ceil_cw, single_cw, full_cw, cw, pushed_cw
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamceil_cw:	.long	0
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamsingle_cw:	.long	0
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamfull_cw:	.long	0
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamcw:			.long	0
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreampushed_cw:	.long	0
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.text
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(Sys_LowFPPrecision)
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(Sys_LowFPPrecision):
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldcw	single_cw
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(Sys_HighFPPrecision)
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(Sys_HighFPPrecision):
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldcw	full_cw
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(Sys_PushFPCW_SetHigh)
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(Sys_PushFPCW_SetHigh):
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fnstcw	pushed_cw
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldcw	full_cw
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(Sys_PopFPCW)
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(Sys_PopFPCW):
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fldcw	pushed_cw
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(Sys_SetFPCW)
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(Sys_SetFPCW):
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fnstcw	cw
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	cw,%eax
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if	id386
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	andb	$0xF0,%ah
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	orb		$0x03,%ah	// round mode, 64-bit precision
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,full_cw
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if	id386
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	andb	$0xF0,%ah
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	orb		$0x0C,%ah	// chop mode, single precision
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,single_cw
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if	id386
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	andb	$0xF0,%ah
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	orb		$0x08,%ah	// ceil mode, single precision
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,ceil_cw
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
96