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.
bddisasm/isagenerator/instructions/modes.dat

79 lines
3.4 KiB

# Valid operating modes for instructions. Please use these templates and not inline definitions. If a template does
# not exist already, create a new one.
# Syntax: NAME : group1:mode11[+mode12[|group2:!mode21+!mode22]] etc.
#
# NAME cam be anything and can be used as a placeholder when defining the instruction.
# group - can be one of the 4 operating groups:
# ring - specify the needed privilege level for the instruction
# mode - specify the needed operating mode
# vmx - specify the VMX operation mode
# other- specify other misc operating modes/special cases
#
# ring - can be any of:
# r0 - instruction is valid in ring 0
# r1 - instruction is valid in ring 1
# r2 - instruction is valid in ring 2
# r3 - instruction is valid in ring 3
#
# mode - can be any of:
# real - instruction valid in real mode (16 bit)
# v8086 - instruction valid in virtual 8086 mode (16 bit inside 32 bit mode)
# prot - instruction valid in protected mode (32 bit)
# compat- instruction valid in compatibility mode (32 inside 64 bit mode)
# long - instruction valid in long mode (64 bit)
# smm - instruction valid in System Management Mode
#
# other - can be any of:
# sgx - instruction is valid inside a Software Guard Extensions enclave
# tsx - instruction is valid inside a Transactional Syncronization Extensions region
#
# vmx - can be any of:
# vmxr - instruction valid in VMX root mode
# vmxn - instruction valid in VMX non-root mode
# vmxo - instruction valid outside VMX operation
#
# If a group is not specified, all modes for that group will be considered valid.
# If only some modes are specified for a group, only they will be considered valid, and all the others invalid.
# If only some modes are specified negated (!), the instruction will be considered valid in all but the specified modes.
#
# For SGX and TSX, the most restrictive rule is applied: an instruction is listed as valid in any of these modes if
# it will always execute successfully; instructions that may be valid or invalid depending on microarchitectural
# design/conditions are listed as invalid in these modes.
#
# Instruction that are valid ONLY in VMX root operation; this also implies ring0, and only protected or long mode.
VMXROOT : ring=r0|vmx=vmxr|mode=prot+long|other=!sgx+!tsx
# Instructions valid only in VMX operation, be it VMX root or VMX non-root.
VMX : vmx=!vmxo
# Instructions valid only in r0. SGX enclaves exist only in r3, so a 0 instruction will not be valid in SGX mode.
KERNEL : ring=r0|other=!sgx
# Instructions valid only in r3.
USER : ring=r3
# Instructions invalid in real mode. If an instruction is invalid in real mode, it will be invalid in v8086 as well.
NOREAL : mode=!real+!v8086
# Instructions invalid in v8086 mode. They may be, however, valid in real mode.
NOV86 : mode=!v8086
# Instructions valid only in long mode (64 bit).
O64 : mode=long
# Instructions invalid in long mode.
NO64 : mode=!long
# Instructions invalid in transactional regions.
NOTSX : other=!tsx
# Instructions invalid in SGX mode.
NOSGX : other=!sgx
# Instructions valid only in SMM. Note that while in SMM, one can transition in protected/long mode.
SMM : mode=prot+compat+long+smm
# Instructions invalid inside SMM, real-mode or V8086.
NOSMM : mode=!real+!v8086+!smm