Home | History | Annotate | Download | only in client
      1 //
      2 // sys_dosa.s
      3 // x86 assembly-language DOS-dependent routines.
      4 
      5 #include "asm_i386.h"
      6 #include "quakeasm.h"
      7 
      8 
      9 	.data
     10 
     11 	.align	4
     12 fpenv:
     13 	.long	0, 0, 0, 0, 0, 0, 0, 0
     14 
     15 	.text
     16 
     17 .globl C(MaskExceptions)
     18 C(MaskExceptions):
     19 	fnstenv	fpenv
     20 	orl		$0x3F,fpenv
     21 	fldenv	fpenv
     22 
     23 	ret
     24 
     25 #if 0
     26 .globl C(unmaskexceptions)
     27 C(unmaskexceptions):
     28 	fnstenv	fpenv
     29 	andl		$0xFFFFFFE0,fpenv
     30 	fldenv	fpenv
     31 
     32 	ret
     33 #endif
     34 
     35 	.data
     36 
     37 	.align	4
     38 .globl	ceil_cw, single_cw, full_cw, cw, pushed_cw
     39 ceil_cw:	.long	0
     40 single_cw:	.long	0
     41 full_cw:	.long	0
     42 cw:			.long	0
     43 pushed_cw:	.long	0
     44 
     45 	.text
     46 
     47 .globl C(Sys_LowFPPrecision)
     48 C(Sys_LowFPPrecision):
     49 	fldcw	single_cw
     50 
     51 	ret
     52 
     53 .globl C(Sys_HighFPPrecision)
     54 C(Sys_HighFPPrecision):
     55 	fldcw	full_cw
     56 
     57 	ret
     58 
     59 .globl C(Sys_PushFPCW_SetHigh)
     60 C(Sys_PushFPCW_SetHigh):
     61 	fnstcw	pushed_cw
     62 	fldcw	full_cw
     63 
     64 	ret
     65 
     66 .globl C(Sys_PopFPCW)
     67 C(Sys_PopFPCW):
     68 	fldcw	pushed_cw
     69 
     70 	ret
     71 
     72 .globl C(Sys_SetFPCW)
     73 C(Sys_SetFPCW):
     74 	fnstcw	cw
     75 	movl	cw,%eax
     76 #if	id386
     77 	andb	$0xF0,%ah
     78 	orb		$0x03,%ah	// round mode, 64-bit precision
     79 #endif
     80 	movl	%eax,full_cw
     81 
     82 #if	id386
     83 	andb	$0xF0,%ah
     84 	orb		$0x0C,%ah	// chop mode, single precision
     85 #endif
     86 	movl	%eax,single_cw
     87 
     88 #if	id386
     89 	andb	$0xF0,%ah
     90 	orb		$0x08,%ah	// ceil mode, single precision
     91 #endif
     92 	movl	%eax,ceil_cw
     93 
     94 	ret
     95 
     96