forked from KolibriOS/kolibrios
Clib char & math functions
git-svn-id: svn://kolibrios.org@554 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
58
programs/develop/open watcom/trunk/clib/intel/chipbug.c
Normal file
58
programs/develop/open watcom/trunk/clib/intel/chipbug.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Open Watcom Project
|
||||
*
|
||||
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original
|
||||
* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
* Public License version 1.0 (the 'License'). You may not use this file
|
||||
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
* provided with the Original Code and Modifications, and is also
|
||||
* available at www.sybase.com/developer/opensource.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
* governing rights and limitations under the License.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* Description: verify Pentium processor divide bug
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "variety.h"
|
||||
#include <rtinit.h>
|
||||
#include "rtdata.h"
|
||||
|
||||
extern unsigned _WCNEAR __chipbug;
|
||||
|
||||
enum {
|
||||
PROB_P5_DIV = 0x0001
|
||||
};
|
||||
|
||||
_WCRTLINK void __verify_pentium_fdiv_bug()
|
||||
{
|
||||
/*
|
||||
Verify we have got the Pentium FDIV problem.
|
||||
The volatiles are to scare the optimizer away.
|
||||
*/
|
||||
volatile double num = 4195835;
|
||||
volatile double denom = 3145727;
|
||||
|
||||
if( _RWD_real87 >= 3 ) {
|
||||
if( (num - (num/denom)*denom) > 1.0e-8 ) {
|
||||
__chipbug |= PROB_P5_DIV;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AXI( __verify_pentium_fdiv_bug, INIT_PRIORITY_FPU + 4 );
|
47
programs/develop/open watcom/trunk/clib/intel/chipvar.asm
Normal file
47
programs/develop/open watcom/trunk/clib/intel/chipvar.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
;*****************************************************************************
|
||||
;*
|
||||
;* Open Watcom Project
|
||||
;*
|
||||
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
;*
|
||||
;* ========================================================================
|
||||
;*
|
||||
;* This file contains Original Code and/or Modifications of Original
|
||||
;* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
;* Public License version 1.0 (the 'License'). You may not use this file
|
||||
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
;* provided with the Original Code and Modifications, and is also
|
||||
;* available at www.sybase.com/developer/opensource.
|
||||
;*
|
||||
;* The Original Code and all software distributed under the License are
|
||||
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
;* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
;* governing rights and limitations under the License.
|
||||
;*
|
||||
;* ========================================================================
|
||||
;*
|
||||
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||
;* DESCRIBE IT HERE!
|
||||
;*
|
||||
;*****************************************************************************
|
||||
|
||||
|
||||
include mdef.inc
|
||||
|
||||
xref "C",__verify_pentium_fdiv_bug
|
||||
|
||||
name chipvar
|
||||
|
||||
datasegment
|
||||
xdefp ___chipbug
|
||||
xdefp __chipbug
|
||||
___chipbug label byte
|
||||
__chipbug label byte
|
||||
dd 0
|
||||
enddata
|
||||
|
||||
end
|
59
programs/develop/open watcom/trunk/clib/intel/grabfp87.c
Normal file
59
programs/develop/open watcom/trunk/clib/intel/grabfp87.c
Normal file
@@ -0,0 +1,59 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Open Watcom Project
|
||||
*
|
||||
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original
|
||||
* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
* Public License version 1.0 (the 'License'). You may not use this file
|
||||
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
* provided with the Original Code and Modifications, and is also
|
||||
* available at www.sybase.com/developer/opensource.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
* governing rights and limitations under the License.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||
* DESCRIBE IT HERE!
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "variety.h"
|
||||
//#include <signal.h>
|
||||
#include "rtdata.h"
|
||||
|
||||
extern void __Init_FPE_handler();
|
||||
extern void __Fini_FPE_handler();
|
||||
#ifdef __DOS_386__
|
||||
extern int __FPEHandlerStart_;
|
||||
extern int __FPEHandlerEnd_;
|
||||
extern int __DPMI_hosted(void);
|
||||
#endif
|
||||
|
||||
void __GrabFP87( void )
|
||||
{
|
||||
#ifndef __WINDOWS__
|
||||
if( _RWD_FPE_handler_exit != __Fini_FPE_handler ) {
|
||||
#ifdef __DOS_386__
|
||||
if( !_IsPharLap() && ( __DPMI_hosted() == 1 )) {
|
||||
DPMILockLinearRegion((long)&__FPEHandlerStart_,
|
||||
((long)&__FPEHandlerEnd_ - (long)&__FPEHandlerStart_));
|
||||
}
|
||||
#endif
|
||||
__Init_FPE_handler();
|
||||
_RWD_FPE_handler_exit = __Fini_FPE_handler;
|
||||
}
|
||||
#endif
|
||||
}
|
265
programs/develop/open watcom/trunk/clib/intel/i64ts386.asm
Normal file
265
programs/develop/open watcom/trunk/clib/intel/i64ts386.asm
Normal file
@@ -0,0 +1,265 @@
|
||||
;*****************************************************************************
|
||||
;*
|
||||
;* Open Watcom Project
|
||||
;*
|
||||
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
;*
|
||||
;* ========================================================================
|
||||
;*
|
||||
;* This file contains Original Code and/or Modifications of Original
|
||||
;* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
;* Public License version 1.0 (the 'License'). You may not use this file
|
||||
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
;* provided with the Original Code and Modifications, and is also
|
||||
;* available at www.sybase.com/developer/opensource.
|
||||
;*
|
||||
;* The Original Code and all software distributed under the License are
|
||||
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
;* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
;* governing rights and limitations under the License.
|
||||
;*
|
||||
;* ========================================================================
|
||||
;*
|
||||
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||
;* DESCRIBE IT HERE!
|
||||
;*
|
||||
;*****************************************************************************
|
||||
|
||||
|
||||
include mdef.inc
|
||||
include struct.inc
|
||||
|
||||
modstart i64tos
|
||||
|
||||
;
|
||||
;
|
||||
; int _CmpBigInt( int sigdigits, int near *bigint )
|
||||
; EAX EDX
|
||||
;
|
||||
xdefp __CmpBigInt
|
||||
xdefp __Rnd2Int
|
||||
xdefp __Bin2String
|
||||
|
||||
defpe __CmpBigInt
|
||||
push EDI ; save EDI
|
||||
push ECX ; save ECX
|
||||
call getpow10 ; get address of Power of 10 table
|
||||
inc EAX ; ++sigdigits
|
||||
lea EDI,[EDI+EAX*8] ; point to Pow10Table[sigdigits+1]
|
||||
mov ECX,[EDX] ; get 64-bit integer
|
||||
mov EDX,4[EDX] ; ...(high part)
|
||||
sub EAX,EAX ; set adjustment to 0
|
||||
_loop ; loop
|
||||
cmp EDX,cs:[EDI] ; - check against 10**k
|
||||
_if e ; - if high parts equal
|
||||
cmp ECX,cs:4[EDI] ; - - compare low part
|
||||
_endif ; - endif
|
||||
_quif b ; - quit if num < 10**k
|
||||
add EDI,8 ; - set pointer to 10**(k+1)
|
||||
inc EAX ; - increment adjustment word
|
||||
_endloop ; endloop
|
||||
sub EDI,8 ; point at 10**(k-1)
|
||||
_loop ; loop
|
||||
cmp EDX,cs:[EDI] ; - check against 10**k
|
||||
_if e ; - if high parts equal
|
||||
cmp ECX,cs:4[EDI] ; - - compare low part
|
||||
_endif ; - endif
|
||||
_quif nb ; - quit if num >= 10**(k-1)
|
||||
sub EDI,8 ; - set pointer to 10**(k-2)
|
||||
dec EAX ; - increment adjustment word
|
||||
_endloop ; endloop
|
||||
pop ECX ; restore ECX
|
||||
pop EDI ; restore EDI
|
||||
ret ; return to caller
|
||||
endproc __CmpBigInt
|
||||
|
||||
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
||||
;[]
|
||||
;[] Rnd2int rounds the real pointed to by EAX to a 64 bit integer.
|
||||
;[]
|
||||
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
||||
; void _Rnd2Int( double near *realnum, int near *bigint )
|
||||
; EAX EDX
|
||||
;
|
||||
defpe __Rnd2Int
|
||||
push EBX ; save registers
|
||||
push ECX ; save ECX
|
||||
push EDX ; save EDX
|
||||
push EBP ; save EBP
|
||||
push ESI ; save ESI
|
||||
push EDX ; save address of bigint array
|
||||
mov EBP,EAX ; get address of realnum
|
||||
mov ECX,[EBP] ; load the number
|
||||
mov EBX,4[EBP] ; . . .
|
||||
mov EBP,EBX ; save high word
|
||||
and EBP,0FFF00000h ; isolate exponent in EBP
|
||||
xor EBX,EBP ; isolate mantissa in EDX
|
||||
xor EBX,00100000h ; turn on implied '1' bit in mantissa
|
||||
shr EBP,20 ; move exponent to bottom part of word
|
||||
sub EBP,0433h ; calculate difference from 2**53
|
||||
_if ne ; if not already the right size
|
||||
_if a ; - if too big
|
||||
_loop ; - - loop
|
||||
shl ECX,1 ; - - - shift real left by one
|
||||
rcl EBX,1 ; - - - . . .
|
||||
dec EBP ; - - - decrement count
|
||||
_until e ; - - until count = 0
|
||||
_else ; - else
|
||||
sub EAX,EAX ; - - clear remainder
|
||||
sub ESI,ESI ; - - clear remainder bit bucket
|
||||
_loop ; - - loop
|
||||
shr EBX,1 ; - - - shift real right by one
|
||||
rcr ECX,1 ; - - - . . .
|
||||
rcr EAX,1 ; - - - save remainder
|
||||
adc ESI,ESI ; - - - remember if any bits fell off end
|
||||
inc EBP ; - - - increment count
|
||||
_until e ; - - until e
|
||||
_guess rup ; - - do we have to round up?
|
||||
cmp EAX,80000000h;- - - compare remainder with .5000000
|
||||
_quif b,rup ; - - - kick out if less than .5
|
||||
_if e ; - - - magical stuff if looks like a .5
|
||||
or ESI,ESI ; - - - any bits dropped off the bottom
|
||||
_if e ; - - - if not
|
||||
test ECX,1 ; - - - - - is bottom digit even?
|
||||
_quif e,rup ; - - - - - kick out if it is
|
||||
_endif ; - - - - endif
|
||||
_endif ; - - - endif
|
||||
add ECX,01 ; - - - round up the number
|
||||
adc EBX,00 ; - - - . . .
|
||||
_endguess ; - - endguess
|
||||
_endif ; - endif
|
||||
_endif ; endif
|
||||
pop EBP ; get address of bigint array
|
||||
mov [EBP],ECX ; store 64-bit integer
|
||||
mov 4[EBP],EBX ; . . .
|
||||
pop ESI ; restore ESI
|
||||
pop EBP ; restore EBP
|
||||
pop EDX ; restore EDX
|
||||
pop ECX ; restore ECX
|
||||
pop EBX ; restore EBX
|
||||
ret ; return
|
||||
endproc __Rnd2Int
|
||||
|
||||
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
||||
;[]
|
||||
;[] Bin2string converts a binary integer into a string
|
||||
;[]
|
||||
;[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
|
||||
; void _Bin2String(
|
||||
; int near *bigint, /* EAX */
|
||||
; char near *bufptr, /* EDX */
|
||||
; int sigdigits ) /* EBX */
|
||||
;
|
||||
defpe __Bin2String
|
||||
push EBP ; save EBP
|
||||
push EDI ; save EDI
|
||||
push ECX ; save ECX
|
||||
push EBX ; save EBX
|
||||
mov EBP,EAX ; get address of bigint array
|
||||
mov ECX,[EBP] ; get 64-bit integer
|
||||
mov EAX,4[EBP] ; . . .
|
||||
mov EBP,EDX ; get buffer pointer
|
||||
add EBP,EBX ; point to end of buffer
|
||||
mov byte ptr [EBP],0; put in null character
|
||||
;
|
||||
; input:
|
||||
; EAX:ECX - 64-bit integer
|
||||
; EBP - pointer to buffer for digits
|
||||
; EBX - digit count
|
||||
|
||||
push EAX ; save high word of quotient
|
||||
_loop ; loop
|
||||
pop EAX ; - restore high word of quotient
|
||||
mov EDI,10000 ; - divisor is 10000
|
||||
sub EDX,EDX ; - zero high word
|
||||
or EAX,EAX ; - check high word
|
||||
jne div1 ; - do all divides
|
||||
or ECX,ECX ; - check low order word
|
||||
jne div2 ; - skip first divide
|
||||
push EAX ; - save high word of quotient
|
||||
jmp short div5 ; - result is 0
|
||||
div1: div EDI ; - divide EAX:ECX by 10000
|
||||
div2: xchg ECX,EAX ; - ...
|
||||
div EDI ; - ...
|
||||
|
||||
; quotient is in ECX:EAX
|
||||
; remainder is in EDX
|
||||
|
||||
xchg ECX,EAX ; - move quotient to EAX:ECX
|
||||
push EAX ; - save high word of quotient
|
||||
mov EAX,EDX ; - get remainder
|
||||
mov DL,100 ; - get divisor
|
||||
div DL ; - split remainder into 2 parts
|
||||
mov DL,AH ; - save low order part
|
||||
mov AH,0 ; - zero
|
||||
aam ; - split top part into 2 digits
|
||||
xchg EDX,EAX ; - DH, DL gets top 2 digits, AX gets low part
|
||||
mov AH,0 ; - zero
|
||||
aam ; - split low part into 2 digits
|
||||
div5: add AX,3030h ; - make ASCII digits
|
||||
add DX,3030h ; - ...
|
||||
sub EBP,4 ; - move back 4
|
||||
mov 3[EBP],AL ; - put low order digit in buffer
|
||||
dec EBX ; - decrement digit count
|
||||
_quif e ; - quit if done
|
||||
mov 2[EBP],AH ; - ...
|
||||
dec EBX ; - decrement digit count
|
||||
_quif e ; - quit if done
|
||||
mov 1[EBP],DL ; - ...
|
||||
dec EBX ; - decrement digit count
|
||||
_quif e ; - quit if done
|
||||
mov [EBP],DH ; - put high order digit in buffer
|
||||
dec EBX ; - decrement digit count
|
||||
_until e ; until done
|
||||
|
||||
pop EAX ; remove high word of quotient
|
||||
pop EBX ; restore EBX
|
||||
pop ECX ; restore ECX
|
||||
pop EDI ; restore EDI
|
||||
pop EBP ; restore EBP
|
||||
ret ; return
|
||||
endproc __Bin2String
|
||||
|
||||
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
|
||||
;<> <>
|
||||
;<> 64-bit integer powers of 10 table <>
|
||||
;<> <>
|
||||
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
|
||||
getpow10 proc near ; get address of powers of 10 table
|
||||
call pow10end ; call around the table
|
||||
pow10table: ; powers of 10 table
|
||||
dd 000000000h,000000000h ; 0
|
||||
dd 000000000h,000000001h ; 10**00
|
||||
dd 000000000h,00000000ah ; 10**01
|
||||
dd 000000000h,000000064h ; 10**02
|
||||
dd 000000000h,0000003e8h ; 10**03
|
||||
dd 000000000h,000002710h ; 10**04
|
||||
dd 000000000h,0000186a0h ; 10**05
|
||||
dd 000000000h,0000f4240h ; 10**06
|
||||
dd 000000000h,000989680h ; 10**07
|
||||
dd 000000000h,005f5e100h ; 10**08
|
||||
dd 000000000h,03b9aca00h ; 10**09
|
||||
dd 000000002h,0540be400h ; 10**10
|
||||
dd 000000017h,04876e800h ; 10**11
|
||||
dd 0000000e8h,0d4a51000h ; 10**12
|
||||
dd 000000918h,04e72a000h ; 10**13
|
||||
dd 000005af3h,0107a4000h ; 10**14
|
||||
dd 000038d7eh,0a4c68000h ; 10**15
|
||||
dd 0002386f2h,06fc10000h ; 10**16
|
||||
dd 001634578h,05d8a0000h ; 10**17
|
||||
dd 00de0b6b3h,0a7640000h ; 10**18
|
||||
dd 08ac72304h,089e80000h ; 10**19
|
||||
dd 0ffffffffh,0ffffffffh ; MAX
|
||||
|
||||
pow10end proc near
|
||||
pop EDI ; get address of table
|
||||
ret ; return
|
||||
endproc pow10end
|
||||
endproc getpow10
|
||||
|
||||
endmod
|
||||
end
|
40
programs/develop/open watcom/trunk/clib/intel/save8087.c
Normal file
40
programs/develop/open watcom/trunk/clib/intel/save8087.c
Normal file
@@ -0,0 +1,40 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Open Watcom Project
|
||||
*
|
||||
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original
|
||||
* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
* Public License version 1.0 (the 'License'). You may not use this file
|
||||
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
* provided with the Original Code and Modifications, and is also
|
||||
* available at www.sybase.com/developer/opensource.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
* governing rights and limitations under the License.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||
* DESCRIBE IT HERE!
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "variety.h"
|
||||
#include "87state.h"
|
||||
#include "rtdata.h"
|
||||
|
||||
static void _do_nothing( _87state *st ) {}
|
||||
|
||||
void (*_RWD_Save8087)(_87state *) = _do_nothing;
|
||||
void (*_RWD_Rest8087)(_87state *) = _do_nothing;
|
60
programs/develop/open watcom/trunk/clib/intel/segread.c
Normal file
60
programs/develop/open watcom/trunk/clib/intel/segread.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/****************************************************************************
|
||||
*
|
||||
* Open Watcom Project
|
||||
*
|
||||
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original
|
||||
* Code as defined in and that are subject to the Sybase Open Watcom
|
||||
* Public License version 1.0 (the 'License'). You may not use this file
|
||||
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
|
||||
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
|
||||
* provided with the Original Code and Modifications, and is also
|
||||
* available at www.sybase.com/developer/opensource.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
|
||||
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
* NON-INFRINGEMENT. Please see the License for the specific language
|
||||
* governing rights and limitations under the License.
|
||||
*
|
||||
* ========================================================================
|
||||
*
|
||||
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||
* DESCRIBE IT HERE!
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "variety.h"
|
||||
#include <i86.h>
|
||||
|
||||
extern unsigned short _CS(), _DS(), _ES(), _SS();
|
||||
|
||||
#pragma aux _CS = 0x8C 0xC8 /* mov ax,cs */ value [ax];
|
||||
#pragma aux _DS = 0x8C 0xD8 /* mov ax,ds */ value [ax];
|
||||
#pragma aux _ES = 0x8C 0xC0 /* mov ax,es */ value [ax];
|
||||
#pragma aux _SS = 0x8C 0xD0 /* mov ax,ss */ value [ax];
|
||||
#if defined(__386__)
|
||||
extern unsigned short _FS(), _GS();
|
||||
#pragma aux _FS = 0x8C 0xE0 /* mov ax,fs */ value [ax];
|
||||
#pragma aux _GS = 0x8C 0xE8 /* mov ax,gs */ value [ax];
|
||||
#endif
|
||||
|
||||
|
||||
_WCRTLINK void segread( struct SREGS *segregs )
|
||||
{
|
||||
__ptr_check( segregs, 0 );
|
||||
segregs->cs = _CS();
|
||||
segregs->ds = _DS();
|
||||
segregs->es = _ES();
|
||||
segregs->ss = _SS();
|
||||
#if defined(__386__)
|
||||
segregs->fs = _FS();
|
||||
segregs->gs = _GS();
|
||||
#endif
|
||||
}
|
Reference in New Issue
Block a user