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