58 lines
945 B
NASM
58 lines
945 B
NASM
global _start
|
|
|
|
section .data
|
|
align 16
|
|
controlword:
|
|
dw 0
|
|
dwordmxcsr:
|
|
dw 0
|
|
dword0:
|
|
dd 1000.0
|
|
dword1:
|
|
dd 5.0
|
|
dword2:
|
|
dd 3000.0
|
|
dwSNaN:
|
|
dd __SNaN__
|
|
dwQNaN:
|
|
dd __QNaN__
|
|
|
|
; Moves EFLAGS into specified register
|
|
%macro moveflags 1
|
|
pushf
|
|
and dword [esp], 0x45
|
|
pop eax
|
|
movd %1, eax
|
|
%endmacro
|
|
|
|
%include "header.inc"
|
|
|
|
movd xmm0, [dword0]
|
|
; Equal
|
|
ucomiss xmm0, [dword0]
|
|
moveflags mm0 ; [ZF] = 100000
|
|
; Less than
|
|
ucomiss xmm0, [dword1]
|
|
moveflags mm1 ; [CF] = 000001
|
|
; Greater than
|
|
ucomiss xmm0, [dword2]
|
|
moveflags mm2 ; [] = 000000
|
|
|
|
; Unordered: Quiet NaN
|
|
movd xmm1, [dwQNaN]
|
|
ucomiss xmm0, xmm1
|
|
moveflags mm3 ; [ZF][PF][CF] = 100101
|
|
; Check #I exception
|
|
stmxcsr [dwordmxcsr]
|
|
movd mm4, [dwordmxcsr]
|
|
|
|
; Unordered: Signaling NaN
|
|
movd xmm1, [dwSNaN]
|
|
ucomiss xmm0, xmm1
|
|
moveflags mm5 ; [ZF][PF][CF] = 100101
|
|
; Check #I exception
|
|
stmxcsr [dwordmxcsr]
|
|
movd mm6, [dwordmxcsr]
|
|
|
|
%include "footer.inc"
|