JIT Compiler Macros
The JIT compiler
uses a large system of interrelated macros. The following verifier macros can be found in clr/src/fjit/fjitverifier.h:
-
CHECK_STACK -
CHECK_STACK_SIZE When verification is turned on, these macros will verify that the evaluation stack is deep enough to be valid or that it matches an exact depth.
-
FJIT_FAIL This macro will cause the current JIT compilation to fail and return an error code.
-
VALIDITY_CHECK If verification is turned on, this macro will conditionally terminate a JIT compilation and return an error code that indicates that invalid code was provided.
-
VERIFICATION_CHECK If verification is turned on, this macro will conditionally emit code to throw a verification exception. It is used within the JIT compiler.
There is a large series of macros used to emit code, which is contained in clr/src/fjit/fjitdef.h and is augmented by platform-specific redefinition files that can be found in subdirectories named after their processor targets:
-
x86_* These are low-level, x86-specific macros used by
fjitdef.h.-
ppc_* These are low-level, PowerPC-specific macros used by
fjitdef.h.-
emit_* These are high-level, macros defined in
fjitdef.hthat can be redefined by platform-specific low-level macros.-
emit_<IL OPCODE NAME>_* These are portable macros that implement opcodes, and are frequently separated by the size of the stack and frame registers.
-
ARG_* These definitions represent argument registers.
-
RETURN_* These definitions represent return value registers. ...