;*****************************************************************************
;*
;*                            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!
;*
;*****************************************************************************


; static char sccs_id[] = "@(#)wrap32.asm       1.1  12/15/94  15:56:32";
;
; This code is being published by Intel to users of the Pentium(tm)
; processor.  Recipients are authorized to copy, modify, compile, use and
; distribute the code.
;
; Intel makes no warranty of any kind with regard to this code, including
; but not limited to, implied warranties or merchantability and fitness for
; a particular purpose. Intel assumes no responsibility for any errors that
; may appear in this code.
;
; No patent licenses are granted, express or implied.
;
;
;  The following code is a PRELIMINARY IMPLEMENTATION of a
;  software patch for the FPATAN instruction replacement.
;
;
include mdef.inc

.386
.387

DATA32  SEGMENT DWORD USE32 PUBLIC 'DATA'


FPU_STATE       STRUC
        CONTROL_WORD    DW      ?
        reserved_1      DW      ?
        STATUS_WORD     DW      ?
        reserved_2      DW      ?
        TAG_WORD        DW      ?
        reserved_3      DW      ?
        IP_OFFSET       DD      ?
        CS_SLCT         DW      ?
        OPCODE          DW      ?
        DATA_OFFSET     DD      ?
        OPERAND_SLCT    DW      ?
        reserved_4      DW      ?
        REGISTER_0      DT      ?
        REGISTER_1      DT      ?
        REGISTER_2      DT      ?
        REGISTER_3      DT      ?
        REGISTER_4      DT      ?
        REGISTER_5      DT      ?
        REGISTER_6      DT      ?
        REGISTER_7      DT      ?
        SAVE_REG_0      DT      ?
FPU_STATE       ENDS

ENV_SIZE        EQU     118

DATA32  ENDS

DGROUP GROUP DATA32


_TEXT  SEGMENT   DWORD USE32 PUBLIC 'CODE'


        assume cs:_TEXT, ds:DGROUP, es:DGROUP, ss:nothing
        public  __fpatan_wrap

;
;  PRELIMINARY VERSION for FPATAN instruction replacement
;

        EXTRN   __fpatan_chk:NEAR

        defpe   __fpatan_wrap
        push    eax
        sub     esp, ENV_SIZE
        fstp    tbyte ptr [esp].SAVE_REG_0
        fnsave  [esp]
        fld     tbyte ptr [esp].REGISTER_0
        fld     tbyte ptr [esp].SAVE_REG_0
        call    __fpatan_chk
        fstsw   ax
        fstp    tbyte ptr [esp].REGISTER_0
        and     ax, 0ffh
        or      ax, [esp].STATUS_WORD
        mov     [esp].STATUS_WORD, ax
        frstor  [esp]
        add     esp, ENV_SIZE
        pop     eax
        ret
__fpatan_wrap     ENDP

_TEXT  ENDS
        end
