40 lines
753 B
PHP
40 lines
753 B
PHP
|
|
||
|
macro xbegin? dest*
|
||
|
x86.parse_jump_operand@dest dest
|
||
|
if @dest.type = 'imm' & ~ @dest.jump_type
|
||
|
if x86.mode shr 3 <> @dest.size
|
||
|
err 'invalid operand size'
|
||
|
end if
|
||
|
if x86.mode = 16
|
||
|
db 0C7h,0F8h
|
||
|
dw @dest.imm-($+2)
|
||
|
else
|
||
|
if ~ $ relativeto 0 & @dest.imm relativeto 0
|
||
|
@dest.imm = @dest.imm + $ - 0 scaleof $
|
||
|
err 'invalid address'
|
||
|
end if
|
||
|
if @dest.unresolved | ( @dest.imm relativeto $ & @dest.imm-($+5) < 8000h & @dest.imm-($+5) >= -8000h )
|
||
|
db 66h,0C7h,0F8h
|
||
|
dw @dest.imm-($+2)
|
||
|
else
|
||
|
db 0C7h,0F8h
|
||
|
dd @dest.imm-($+4)
|
||
|
end if
|
||
|
end if
|
||
|
else
|
||
|
err 'invalid operand'
|
||
|
end if
|
||
|
end macro
|
||
|
|
||
|
macro xabort? imm*
|
||
|
db 0C6h,0F8h,imm
|
||
|
end macro
|
||
|
|
||
|
macro xend?
|
||
|
db 0Fh,1,0D5h
|
||
|
end macro
|
||
|
|
||
|
macro xtest?
|
||
|
db 0Fh,1,0D6h
|
||
|
end macro
|