;/* ;* 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 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 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 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 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: 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 cmov&ex2 macro dst:req, src:req cmovop_ code, dst, src endm endif ifnb 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