Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5131 clevermous 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
#if id386
10
 
11
	.data
12
 
13
	.align	4
14
fpenv:
15
	.long	0, 0, 0, 0, 0, 0, 0, 0
16
 
17
	.text
18
 
19
.globl C(MaskExceptions)
20
C(MaskExceptions):
21
	fnstenv	fpenv
22
	orl		$0x3F,fpenv
23
	fldenv	fpenv
24
 
25
	ret
26
 
27
#if 0
28
.globl C(unmaskexceptions)
29
C(unmaskexceptions):
30
	fnstenv	fpenv
31
	andl		$0xFFFFFFE0,fpenv
32
	fldenv	fpenv
33
 
34
	ret
35
#endif
36
 
37
	.data
38
 
39
	.align	4
40
.globl	ceil_cw, single_cw, full_cw, cw, pushed_cw
41
ceil_cw:	.long	0
42
single_cw:	.long	0
43
full_cw:	.long	0
44
cw:			.long	0
45
pushed_cw:	.long	0
46
 
47
	.text
48
 
49
.globl C(Sys_LowFPPrecision)
50
C(Sys_LowFPPrecision):
51
	fldcw	single_cw
52
 
53
	ret
54
 
55
.globl C(Sys_HighFPPrecision)
56
C(Sys_HighFPPrecision):
57
	fldcw	full_cw
58
 
59
	ret
60
 
61
.globl C(Sys_PushFPCW_SetHigh)
62
C(Sys_PushFPCW_SetHigh):
63
	fnstcw	pushed_cw
64
	fldcw	full_cw
65
 
66
	ret
67
 
68
.globl C(Sys_PopFPCW)
69
C(Sys_PopFPCW):
70
	fldcw	pushed_cw
71
 
72
	ret
73
 
74
.globl C(Sys_SetFPCW)
75
C(Sys_SetFPCW):
76
	fnstcw	cw
77
	movl	cw,%eax
78
#if	id386
79
	andb	$0xF0,%ah
80
	orb		$0x03,%ah	// round mode, 64-bit precision
81
#endif
82
	movl	%eax,full_cw
83
 
84
#if	id386
85
	andb	$0xF0,%ah
86
	orb		$0x0C,%ah	// chop mode, single precision
87
#endif
88
	movl	%eax,single_cw
89
 
90
#if	id386
91
	andb	$0xF0,%ah
92
	orb		$0x08,%ah	// ceil mode, single precision
93
#endif
94
	movl	%eax,ceil_cw
95
 
96
	ret
97
 
98
#endif