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