mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 07:58:04 +02:00
50 lines
1.5 KiB
ActionScript
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
|