You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
3.5 KiB
196 lines
3.5 KiB
;/*
|
|
;* INTEL CORPORATION PROPRIETARY INFORMATION
|
|
;*
|
|
;* This software is supplied under the terms of a license
|
|
;* agreement or nondisclosure agreement with Intel Corporation
|
|
;* and may not be copied or disclosed except in accordance with
|
|
;* the terms of that agreement.
|
|
;* Copyright (c) 1991,1992,1993,1994,1995,1996,1997 Intel Corporation.
|
|
;*
|
|
;*/
|
|
|
|
.486P
|
|
|
|
;RDPMC
|
|
rdpmc macro
|
|
db 0Fh
|
|
db 033h
|
|
endm
|
|
|
|
;UD2
|
|
ud2 macro
|
|
db 0Fh
|
|
db 0Bh
|
|
endm
|
|
|
|
;FCOMI Compare Real and Set EFLAGS
|
|
OPTION NOKEYWORD:<fcomi>
|
|
fcomi macro dst:req, src:req
|
|
local x, y
|
|
|
|
IF (OPATTR(src)) AND 00010000y ; register
|
|
freg = @SubStr(src,4,1)
|
|
ELSE
|
|
ERROR INVALID SOURCE REGISTER (src)
|
|
ENDIF
|
|
|
|
x:
|
|
FADD dst, src
|
|
org x
|
|
db 0DBh
|
|
db 0F0h + freg
|
|
y:
|
|
endm
|
|
|
|
;FCOMIP Compare Real and Set EFLAGS
|
|
OPTION NOKEYWORD:<fcomip>
|
|
fcomip macro dst:req, src:req
|
|
local x, y
|
|
|
|
IF (OPATTR(src)) AND 00010000y ; register
|
|
freg = @SubStr(src,4,1)
|
|
ELSE
|
|
ERROR INVALID SOURCE REGISTER (src)
|
|
ENDIF
|
|
|
|
x:
|
|
FADD dst, src
|
|
org x
|
|
db 0DFh
|
|
db 0F0h + freg
|
|
y:
|
|
endm
|
|
|
|
;FUCOMI Compare Real and Set EFLAGS
|
|
OPTION NOKEYWORD:<fucomi>
|
|
fucomi macro dst:req, src:req
|
|
local x, y
|
|
|
|
IF (OPATTR(src)) AND 00010000y ; register
|
|
freg = @SubStr(src,4,1)
|
|
ELSE
|
|
ERROR INVALID SOURCE REGISTER (src)
|
|
ENDIF
|
|
|
|
x:
|
|
FADD dst, src
|
|
org x
|
|
db 0DBh
|
|
db 0E8h + freg
|
|
y:
|
|
endm
|
|
|
|
;FUCOMIP Compare Real and Set EFLAGS
|
|
OPTION NOKEYWORD:<fucomip>
|
|
fucomip macro dst:req, src:req
|
|
local x, y
|
|
|
|
IF (OPATTR(src)) AND 00010000y ; register
|
|
freg = @SubStr(src,4,1)
|
|
ELSE
|
|
ERROR INVALID SOURCE REGISTER (src)
|
|
ENDIF
|
|
|
|
x:
|
|
FADD dst, src
|
|
org x
|
|
db 0DFh
|
|
db 0E8h + freg
|
|
y:
|
|
endm
|
|
|
|
|
|
;FCMOVB FCMOVE FCMOVBE FCMOVU FCMOVNB FCMOVNE FCMOVNBE FCMOVNU
|
|
;These instructions are reserved by the assembler but complains if
|
|
;you try use them. Undefine them before we build the macros
|
|
OPTION NOKEYWORD:<fcmovb fcmove fcmovbe fcmovu fcmovnb fcmovne fcmovnbe fcmovnu>
|
|
Mfcmov macro dst:req, src:req, op1, op2
|
|
local x, y
|
|
|
|
IF (OPATTR(src)) AND 00010000y ; register
|
|
freg = @SubStr(src,4,1)
|
|
ELSE
|
|
ERROR INVALID SOURCE REGISTER (src)
|
|
ENDIF
|
|
|
|
x:
|
|
FADD dst, src
|
|
org x
|
|
db op1
|
|
db op2 + freg
|
|
y:
|
|
endm
|
|
|
|
;Need to validate arguments
|
|
MDfcmovd macro op1:req, op2:req, ex1:req
|
|
fcmov&ex1 macro dst:req, src:req
|
|
Mfcmov dst, src, op1, op2
|
|
endm
|
|
endm
|
|
|
|
MDfcmovd 0DAh, 0C0h, b
|
|
MDfcmovd 0DAh, 0C8h, e
|
|
MDfcmovd 0DAh, 0D0h, be
|
|
MDfcmovd 0DAh, 0D8h, u
|
|
MDfcmovd 0DBh, 0C0h, nb
|
|
MDfcmovd 0DBh, 0C8h, ne
|
|
MDfcmovd 0DBh, 0D0h, nbe
|
|
MDfcmovd 0DBh, 0D8h, nu
|
|
|
|
|
|
;CMOVxxx
|
|
cmovop_ macro op:req, dst:req, src:req
|
|
local x, y
|
|
|
|
IF (OPATTR(dst)) AND 00010000y ; register
|
|
x:
|
|
bsf dst, src
|
|
y:
|
|
org x+1
|
|
db op
|
|
org y
|
|
ELSE
|
|
ERROR INVALID DESTINATION REGISTER (dst)
|
|
ENDIF
|
|
endm
|
|
|
|
cmovdf_ macro code:req, ex1:req, ex2, ex3
|
|
|
|
cmov&ex1 macro dst:req, src:req
|
|
cmovop_ code, dst, src
|
|
endm
|
|
|
|
ifnb <ex2>
|
|
|
|
cmov&ex2 macro dst:req, src:req
|
|
cmovop_ code, dst, src
|
|
endm
|
|
|
|
endif
|
|
|
|
ifnb <ex3>
|
|
|
|
cmov&ex3 macro dst:req, src:req
|
|
cmovop_ code, dst, src
|
|
endm
|
|
|
|
endif
|
|
|
|
endm
|
|
|
|
cmovdf_ 040h, o
|
|
cmovdf_ 041h, no
|
|
cmovdf_ 042h, b, nae, c
|
|
cmovdf_ 043h, ae, nb, nc
|
|
cmovdf_ 044h, e, z
|
|
cmovdf_ 045h, ne, nz
|
|
cmovdf_ 046h, be, na
|
|
cmovdf_ 047h, a, nbe
|
|
cmovdf_ 048h, s
|
|
cmovdf_ 049h, ns
|
|
cmovdf_ 04Ah, p, pe
|
|
cmovdf_ 04Bh, np, po
|
|
cmovdf_ 04Ch, l, nge
|
|
cmovdf_ 04Dh, ge, nl
|
|
cmovdf_ 04Eh, le, ng
|
|
cmovdf_ 04Fh, g, nle
|