fpc/rtl/go32v2/fpu.as
peter 4ace790492 * remove $Log
git-svn-id: trunk@231 -
2005-06-07 09:47:55 +00:00

50 lines
1.5 KiB
ActionScript

/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
/* Translated from tasm to GAS by C. Sandmann */
/* One comment displaced to get it compiled by as.exe directly !!! */
/* by Pierre Muller */
/* This routine assumes DS == SS since [ESI] coding shorter than [EBP] coding */
.global __detect_80387 /* direct from the Intel manual */
__detect_80387: /* returns 1 if 387 (or more), else 0 */
pushl %esi
pushl %eax /* Dummy work area on stack */
movl %esp,%esi
fninit
movw $0x5a5a,(%esi)
fnstsw (%esi)
cmpb $0,(%esi)
jne Lno_387
fnstcw (%esi)
movl (%esi),%eax /* Only ax significant */
andl $0x103f,%eax
cmpl $0x3f,%eax
jne Lno_387
fld1
fldz
/* fdiv GAS encodes this as 0xdcf1 !! BUG */
.byte 0xde,0xf9
fld %st
fchs
fcompp
fstsw (%esi)
movzwl (%esi),%eax /* Clears upper %eax */
sahf
je Lno_387
fninit /* 387 present, initialize. */
fnstcw (%esi)
wait
andw $0x0fffa,(%esi)
/* enable invalid operation exception */
fldcw (%esi)
movw $1,%ax
jmp Lexit
Lno_387:
xorl %eax,%eax
Lexit:
popl %esi /* Fix stack first */
popl %esi
ret