Commit 24f372f9 authored by Julian Kranz's avatar Julian Kranz

X86 Pretty Printer

X86 RREIL Translator
parent 90acd5e9
......@@ -238,7 +238,7 @@ val show/instruction insn =
| BTS x: "BTS" -++ show/arity2 x
| CALL x: "CALL" -++ show/flow1 x
| CBW: "CBW"
| CDQ
| CDQ: "CDQ"
| CDQE: "CDQE"
| CLC: "CLC"
| CLD: "CLD"
......@@ -329,7 +329,7 @@ val show/instruction insn =
| EMMS: "EMMS"
| ENTER x: "ENTER" -++ show/arity2 x
| EXTRACTPS x: "EXTRACTPS" -++ show/arity3 x
| F2XM1
| F2XM1: "F2XM1"
| FABS: "FABS"
| FADD x: "FADD" -++ show/arity2 x
| FADDP x: "FADDP" -++ show/arity2 x
......@@ -372,13 +372,13 @@ val show/instruction insn =
| FISUB x: "FISUB" -++ show/arity1 x
| FISUBR x: "FISUBR" -++ show/arity1 x
| FLD x: "FLD" -++ show/arity1 x
| FLD1
| FLD1: "FLD1"
| FLDCW x: "FLDCW" -++ show/arity1 x
| FLDENV x: "FLDENV" -++ show/arity1 x
| FLDL2E
| FLDL2T
| FLDLG2
| FLDLN2
| FLDL2E: "FLDL2E"
| FLDL2T: "FLDL2T"
| FLDLG2: "FLDLG2"
| FLDLN2: "FLDLN2"
| FLDPI: "FLDPI"
| FLDZ: "FLDZ"
| FMUL x: "FMUL" -++ show/arity2 x
......@@ -392,7 +392,7 @@ val show/instruction insn =
| FNSTSW x: "FNSTSW" -++ show/arity1 x
| FPATAN: "FPATAN"
| FPREM: "FPREM"
| FPREM1
| FPREM1: "FPREM1"
| FPTAN: "FPTAN"
| FRNDINT: "FRNDINT"
| FRSTOR x: "FRSTOR" -++ show/arity1 x
......@@ -423,8 +423,8 @@ val show/instruction insn =
| FXSAVE64 x: "FXSAVE64" -++ show/arity1 x
| FXSAVE x: "FXSAVE" -++ show/arity1 x
| FXTRACT: "FXTRACT"
| FYL2X
| FYL2XP1
| FYL2X: "FYL2X"
| FYL2XP1: "FYL2XP1"
| HADDPD x: "HADDPD" -++ show/arity2 x
| HADDPS x: "HADDPS" -++ show/arity2 x
| HLT: "HLT"
......@@ -436,8 +436,8 @@ val show/instruction insn =
| INC x: "INC" -++ show/arity1 x
| INSERTPS x: "INSERTPS" -++ show/arity3 x
| INT x: "INT" -++ show/arity1 x
| INT0
| INT3
| INT0: "INT0"
| INT3: "INT3"
| INVD: "INVD"
| INVLPG x: "INVLPG" -++ show/arity1 x
| INVPCID x: "INVPCID" -++ show/arity2 x
......@@ -699,7 +699,7 @@ val show/instruction insn =
| PSUBW x: "PSUBW" -++ show/arity2 x
| PTEST x: "PTEST" -++ show/arity2 x
| PUNPCKHBW x: "PUNPCKHBW" -++ show/arity2 x
| PUNPCKHDQ x: "PUNPCKHDQ" -++ show/arity3 x
| PUNPCKHDQ x: "PUNPCKHDQ" -++ show/arity2 x
| PUNPCKHQDQ x: "PUNPCKHQDQ" -++ show/arity2 x
| PUNPCKHWD x: "PUNPCKHWD" -++ show/arity2 x
| PUNPCKLBW x: "PUNPCKLBW" -++ show/arity2 x
......@@ -810,11 +810,11 @@ val show/instruction insn =
| TEST x: "TEST" -++ show/arity2 x
| UCOMISD x: "UCOMISD" -++ show/arity2 x
| UCOMISS x: "UCOMISS" -++ show/arity2 x
| UD2
| UD2: "UD2"
| UNPCKHPD x: "UNPCKHPD" -++ show/arity2 x
| UNPCKHPS x: "UNPCKHPS" -++ show/arity2 x
| UNPCKLPD x: "UNPCKLPD" -++ show/arity2 x
| UNPCKLPS x: "UNPCKLPS" -++ show/arity2 x
| UNPCKLPS x: "UNPCKLPS" -++ show/arity2 x
| VADDPD x: "VADDPD" -++ show/varity x
| VADDPS x: "VADDPS" -++ show/varity x
| VADDSD x: "VADDSD" -++ show/varity x
......@@ -1103,5 +1103,5 @@ val show/instruction insn =
#| PSLRDQ x: "PSLRDQ" -++ show/arity2 x
#| VPSLRDQ x: "VPSLRDQ" -++ show/varity x
end
#%s/^\(...\)\([^\s]*\)$/\1\2: "\2"/
#%s/^\(...\)\([^\s]*\) of \(.*\)/\1\2 x: "\2" -++ show\/\3 x/
#s/^\(...\)\(\S*\)\s*$/\1\2: "\2"/
#s/^\(...\)\(\S*\) of \(\S*\)\s*$/\1\2 x: "\2" -++ show\/\3 x/
......@@ -139,6 +139,24 @@ val fAF = return (var//0 (ARCH_R ~3)) # AF
val zero = return (SEM_LIN_IMM{imm=0})
val sem-undef-arity0 x = do
end
val sem-undef-arity1 x = do
end
val sem-undef-arity2 x = do
end
val sem-undef-arity3 x = do
end
val sem-undef-varity x = do
end
val sem-undef-flow1 x = do
end
val emit-add-flags sz a b c =
do eq <- fEQ;
les <- fLES;
......@@ -186,142 +204,1045 @@ val emit-sub-flags sz a b c =
xorb 1 ov (var lts) (var sf)
end
val semantics insn =
case insn of
ADD x:
do sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
add sz t b c;
emit-add-flags sz (var t) b c;
commit sz a (var t)
end
val sem-add x = do
sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
add sz t b c;
emit-add-flags sz (var t) b c;
commit sz a (var t)
end
| CMP x:
do sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
sub sz t b c;
emit-sub-flags sz (var t) b c
end
val sem-cmp x = do
sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
sub sz t b c;
emit-sub-flags sz (var t) b c
end
| MOV x:
do sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
commit sz a b
end
val sem-mov x = do
sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
commit sz a b
end
| SHL x:
do sz <- guess-sizeof1 x.opnd1;
szOp2 <- guess-sizeof1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read szOp2 x.opnd2;
## Temporary variables:
t1 <- mktemp;
t2 <- mktemp;
cnt <- mktemp;
cntIsZero <- mktemp;
cntIsOne <- mktemp;
af <- fAF;
ov <- fOF;
cf <- fCF;
eq <- fEQ;
mask <- const
(case sz of
8: 31
| 16: 31
| 32: 31
| 64: 63
end);
zer0 <- const 0;
one <- const 1;
## Instruction semantics:
setflag <- mklabel;
exit <- mklabel;
nop <- mklabel;
convert sz cnt szOp2 c;
andb sz cnt (var cnt) mask;
cmpeq sz cntIsZero (var cnt) zer0;
ifgotolabel (var cntIsZero) nop;
shl sz t1 b (/SUB (var cnt) one);
mov 1 cf (var (t1 /+ (sz - 1)));
shl sz t2 b (var cnt);
cmpeq sz cntIsOne (var cnt) one;
ifgotolabel (var cntIsOne) setflag;
undef 1 ov;
gotolabel exit;
label setflag;
xorb 1 ov (var cf) (var (t2 /+ (sz - 1)));
label exit;
undef 1 af;
commit sz a (var t2);
label nop;
cmpeq sz eq b zer0
end
val sem-shl x = do
sz <- guess-sizeof1 x.opnd1;
szOp2 <- guess-sizeof1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read szOp2 x.opnd2;
| SUB x:
do sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
sub sz t b c;
emit-sub-flags sz (var t) b c;
commit sz a (var t)
end
## Temporary variables:
t1 <- mktemp;
t2 <- mktemp;
cnt <- mktemp;
cntIsZero <- mktemp;
cntIsOne <- mktemp;
af <- fAF;
ov <- fOF;
cf <- fCF;
eq <- fEQ;
mask <- const
(case sz of
8: 31
| 16: 31
| 32: 31
| 64: 63
end);
zer0 <- const 0;
one <- const 1;
| JE x:
do sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
eq <- fEQ;
ifgoto (var eq) sz target
end
## Instruction semantics:
setflag <- mklabel;
exit <- mklabel;
nop <- mklabel;
convert sz cnt szOp2 c;
andb sz cnt (var cnt) mask;
cmpeq sz cntIsZero (var cnt) zer0;
ifgotolabel (var cntIsZero) nop;
shl sz t1 b (/SUB (var cnt) one);
mov 1 cf (var (t1 /+ (sz - 1)));
shl sz t2 b (var cnt);
cmpeq sz cntIsOne (var cnt) one;
ifgotolabel (var cntIsOne) setflag;
undef 1 ov;
gotolabel exit;
label setflag;
xorb 1 ov (var cf) (var (t2 /+ (sz - 1)));
label exit;
undef 1 af;
commit sz a (var t2);
label nop;
cmpeq sz eq b zer0
end
| JB x:
do sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
cf <- fCF;
ifgoto (var cf) sz target
end
val sem-sub x = do
sz <- guess-sizeof x.opnd1 x.opnd2;
a <- write sz x.opnd1;
b <- read sz x.opnd1;
c <- read sz x.opnd2;
t <- mktemp;
sub sz t b c;
emit-sub-flags sz (var t) b c;
commit sz a (var t)
end
| JC x:
do sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
cf <- fCF;
ifgoto (var cf) sz target
end
val sem-je x = do
sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
eq <- fEQ;
ifgoto (var eq) sz target
end
| JMP x:
do sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
on3 <- const 1;
ifgoto on3 sz target
end
val sem-jb x = do
sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
cf <- fCF;
ifgoto (var cf) sz target
end
| CDQE x:
do a <- return (semantic-register-of RAX);
movsx 64 a 32 (var a)
end
| PUSH x:
#FIXME: This ignores many details of {PUSH}
do sz <- guess-sizeof1 x.opnd1;
a <- read sz x.opnd1;
sp <- return (semantic-register-of RSP);
eight <- const 8;
sub 64 sp (var sp) eight;
store {size=64,address=var sp} a
end
val sem-jc x = do
sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
cf <- fCF;
ifgoto (var cf) sz target
end
end
val sem-jmp x = do
sz <- guess-sizeof-flow x.opnd1;
target <- read-flow sz x.opnd1;
on3 <- const 1;
ifgoto on3 sz target
end
val sem-cdqe x = do
a <- return (semantic-register-of RAX);
movsx 64 a 32 (var a)
end
val sem-push x = do
#FIXME: This ignores many details of {PUSH}
sz <- guess-sizeof1 x.opnd1;
a <- read sz x.opnd1;
sp <- return (semantic-register-of RSP);
eight <- const 8;
sub 64 sp (var sp) eight;
store {size=64,address=var sp} a
end
val semantics insn =
case insn of
AAA: sem-undef-arity0
| AAD x: sem-undef-arity1 x
| AAM x: sem-undef-arity1 x
| AAS: sem-undef-arity0
| ADC x: sem-undef-arity2 x
| ADD x: sem-add x
| ADDPD x: sem-undef-arity2 x
| ADDPS x: sem-undef-arity2 x
| ADDSD x: sem-undef-arity2 x
| ADDSS x: sem-undef-arity2 x
| ADDSUBPD x: sem-undef-arity2 x
| ADDSUBPS x: sem-undef-arity2 x
| AESDEC x: sem-undef-arity2 x
| AESDECLAST x: sem-undef-arity2 x
| AESENC x: sem-undef-arity2 x
| AESENCLAST x: sem-undef-arity2 x
| AESIMC x: sem-undef-arity2 x
| AESKEYGENASSIST x: sem-undef-arity3 x
| AND x: sem-undef-arity2 x
| ANDNPD x: sem-undef-arity2 x
| ANDNPS x: sem-undef-arity2 x
| ANDPD x: sem-undef-arity2 x
| ANDPS x: sem-undef-arity2 x
| ARPL x: sem-undef-arity2 x
| BLENDPD x: sem-undef-arity3 x
| BLENDPS x: sem-undef-arity3 x
| BLENDVPD x: sem-undef-arity3 x
| BLENDVPS x: sem-undef-arity3 x
| BOUND x: sem-undef-arity2 x
| BSF x: sem-undef-arity2 x
| BSR x: sem-undef-arity2 x
| BSWAP x: sem-undef-arity1 x
| BT x: sem-undef-arity2 x
| BTC x: sem-undef-arity2 x
| BTR x: sem-undef-arity2 x
| BTS x: sem-undef-arity2 x
| CALL x: sem-undef-flow1 x
| CBW: sem-undef-arity0
| CDQ: sem-undef-arity0
| CDQE x: sem-cdqe x
| CLC: sem-undef-arity0
| CLD: sem-undef-arity0
| CLFLUSH x: sem-undef-arity1 x
| CLI: sem-undef-arity0
| CLTS: sem-undef-arity0
| CMC: sem-undef-arity0
| CMOVA x: sem-undef-arity2 x
| CMOVAE x: sem-undef-arity2 x
| CMOVB x: sem-undef-arity2 x
| CMOVBE x: sem-undef-arity2 x
| CMOVC x: sem-undef-arity2 x
| CMOVE x: sem-undef-arity2 x
| CMOVG x: sem-undef-arity2 x
| CMOVGE x: sem-undef-arity2 x
| CMOVL x: sem-undef-arity2 x
| CMOVLE x: sem-undef-arity2 x
| CMOVNA x: sem-undef-arity2 x
| CMOVNAE x: sem-undef-arity2 x
| CMOVNB x: sem-undef-arity2 x
| CMOVNBE x: sem-undef-arity2 x
| CMOVNC x: sem-undef-arity2 x
| CMOVNE x: sem-undef-arity2 x
| CMOVNG x: sem-undef-arity2 x
| CMOVNGE x: sem-undef-arity2 x
| CMOVNL x: sem-undef-arity2 x
| CMOVNLE x: sem-undef-arity2 x
| CMOVNO x: sem-undef-arity2 x
| CMOVNP x: sem-undef-arity2 x
| CMOVNS x: sem-undef-arity2 x
| CMOVNZ x: sem-undef-arity2 x
| CMOVO x: sem-undef-arity2 x
| CMOVP x: sem-undef-arity2 x
| CMOVPE x: sem-undef-arity2 x
| CMOVPO x: sem-undef-arity2 x
| CMOVS x: sem-undef-arity2 x
| CMOVZ x: sem-undef-arity2 x
| CMP x: sem-cmp x
| CMPPD x: sem-undef-arity3 x
| CMPPS x: sem-undef-arity3 x
| CMPSB: sem-undef-arity0
| CMPSD x: sem-undef-varity x
| CMPSQ: sem-undef-arity0
| CMPSS x: sem-undef-arity3 x
| CMPSW: sem-undef-arity0
| CMPXCHG x: sem-undef-arity2 x
| CMPXCHG16B x: sem-undef-arity1 x
| CMPXCHG8B x: sem-undef-arity1 x
| COMISD x: sem-undef-arity2 x
| COMISS x: sem-undef-arity2 x
| CPUID: sem-undef-arity0
| CQO: sem-undef-arity0
| CRC32 x: sem-undef-arity2 x
| CVTDQ2PD x: sem-undef-arity2 x
| CVTDQ2PS x: sem-undef-arity2 x
| CVTPD2DQ x: sem-undef-arity2 x
| CVTPD2PI x: sem-undef-arity2 x
| CVTPD2PS x: sem-undef-arity2 x
| CVTPI2PD x: sem-undef-arity2 x
| CVTPI2PS x: sem-undef-arity2 x
| CVTPS2DQ x: sem-undef-arity2 x
| CVTPS2PD x: sem-undef-arity2 x
| CVTPS2PI x: sem-undef-arity2 x
| CVTSD2SI x: sem-undef-arity2 x
| CVTSD2SS x: sem-undef-arity2 x
| CVTSI2SD x: sem-undef-arity2 x
| CVTSI2SS x: sem-undef-arity2 x
| CVTSS2SD x: sem-undef-arity2 x
| CVTSS2SI x: sem-undef-arity2 x
| CVTTPD2DQ x: sem-undef-arity2 x
| CVTTPD2PI x: sem-undef-arity2 x
| CVTTPS2DQ x: sem-undef-arity2 x
| CVTTPS2PI x: sem-undef-arity2 x
| CVTTSD2SI x: sem-undef-arity2 x
| CVTTSS2SI x: sem-undef-arity2 x
| CWD: sem-undef-arity0
| CWDE: sem-undef-arity0
| DAA: sem-undef-arity0
| DAS: sem-undef-arity0
| DEC x: sem-undef-arity1 x
| DIV x: sem-undef-arity1 x
| DIVPD x: sem-undef-arity2 x
| DIVPS x: sem-undef-arity2 x
| DIVSD x: sem-undef-arity2 x
| DIVSS x: sem-undef-arity2 x
| DPPD x: sem-undef-arity3 x
| DPPS x: sem-undef-arity3 x
| EMMS: sem-undef-arity0
| ENTER x: sem-undef-arity2 x
| EXTRACTPS x: sem-undef-arity3 x
| F2XM1: sem-undef-arity0
| FABS: sem-undef-arity0
| FADD x: sem-undef-arity2 x
| FADDP x: sem-undef-arity2 x
| FBLD x: sem-undef-arity1 x
| FBSTP x: sem-undef-arity1 x
| FCHS: sem-undef-arity0
| FCLEX: sem-undef-arity0
| FCMOVB x: sem-undef-arity2 x
| FCMOVBE x: sem-undef-arity2 x
| FCMOVE x: sem-undef-arity2 x
| FCMOVNB x: sem-undef-arity2 x
| FCMOVNBE x: sem-undef-arity2 x
| FCMOVNE x: sem-undef-arity2 x
| FCMOVNU x: sem-undef-arity2 x
| FCMOVU x: sem-undef-arity2 x
| FCOM x: sem-undef-arity1 x
| FCOMI x: sem-undef-arity2 x
| FCOMIP x: sem-undef-arity2 x
| FCOMP x: sem-undef-arity1 x
| FCOMPP: sem-undef-arity0
| FCOS: sem-undef-arity0
| FDECSTP: sem-undef-arity0
| FDIV x: sem-undef-arity2 x
| FDIVP x: sem-undef-arity2 x
| FDIVR x: sem-undef-arity2 x
| FDIVRP x: sem-undef-arity2 x
| FFREE x: sem-undef-arity1 x
| FIADD x: sem-undef-arity1 x
| FICOM x: sem-undef-arity1 x
| FICOMP x: sem-undef-arity1 x
| FIDIV x: sem-undef-arity2 x
| FIDIVR x: sem-undef-arity1 x
| FILD x: sem-undef-arity1 x
| FIMUL x: sem-undef-arity1 x
| FINCSTP: sem-undef-arity0
| FINIT: sem-undef-arity0
| FIST x: sem-undef-arity1 x
| FISTP x: sem-undef-arity1 x
| FISTTP x: sem-undef-arity1 x
| FISUB x: sem-undef-arity1 x
| FISUBR x: sem-undef-arity1 x
| FLD x: sem-undef-arity1 x
| FLD1: sem-undef-arity0
| FLDCW x: sem-undef-arity1 x
| FLDENV x: sem-undef-arity1 x
| FLDL2E: sem-undef-arity0
| FLDL2T: sem-undef-arity0
| FLDLG2: sem-undef-arity0
| FLDLN2: sem-undef-arity0
| FLDPI: sem-undef-arity0
| FLDZ: sem-undef-arity0
| FMUL x: sem-undef-arity2 x
| FMULP x: sem-undef-arity2 x
| FNCLEX: sem-undef-arity0
| FNINIT: sem-undef-arity0
| FNOP: sem-undef-arity0
| FNSAVE x: sem-undef-arity1 x
| FNSTCW x: sem-undef-arity1 x
| FNSTENV x: sem-undef-arity1 x
| FNSTSW x: sem-undef-arity1 x
| FPATAN: sem-undef-arity0
| FPREM: sem-undef-arity0
| FPREM1: sem-undef-arity0
| FPTAN: sem-undef-arity0
| FRNDINT: sem-undef-arity0
| FRSTOR x: sem-undef-arity1 x
| FSAVE x: sem-undef-arity1 x
| FSCALE: sem-undef-arity0
| FSIN: sem-undef-arity0
| FSINCOS: sem-undef-arity0
| FSQRT: sem-undef-arity0
| FST x: sem-undef-arity1 x
| FSTCW x: sem-undef-arity1 x
| FSTENV x: sem-undef-arity1 x
| FSTP x: sem-undef-arity1 x
| FSTSW x: sem-undef-arity1 x
| FSUB x: sem-undef-arity2 x
| FSUBP x: sem-undef-arity2 x
| FSUBR x: sem-undef-arity2 x
| FSUBRP x: sem-undef-arity2 x
| FTST: sem-undef-arity0
| FUCOM x: sem-undef-arity1 x
| FUCOMI x: sem-undef-arity1 x
| FUCOMIP x: sem-undef-arity1 x
| FUCOMP x: sem-undef-arity1 x
| FUCOMPP: sem-undef-arity0
| FXAM: sem-undef-arity0
| FXCH x: sem-undef-arity1 x
| FXRSTOR64 x: sem-undef-arity1 x
| FXRSTOR x: sem-undef-arity1 x
| FXSAVE64 x: sem-undef-arity1 x
| FXSAVE x: sem-undef-arity1 x
| FXTRACT: sem-undef-arity0
| FYL2X: sem-undef-arity0
| FYL2XP1: sem-undef-arity0
| HADDPD x: sem-undef-arity2 x
| HADDPS x: sem-undef-arity2 x
| HLT: sem-undef-arity0
| HSUBPD x: sem-undef-arity2 x
| HSUBPS x: sem-undef-arity2 x
| IDIV x: sem-undef-arity1 x
| IMUL x: sem-undef-varity x
| IN x: sem-undef-arity2 x
| INC x: sem-undef-arity1 x
| INSERTPS x: sem-undef-arity3 x
| INT x: sem-undef-arity1 x
| INT0: sem-undef-arity0
| INT3: sem-undef-arity0
| INVD: sem-undef-arity0
| INVLPG x: sem-undef-arity1 x
| INVPCID x: sem-undef-arity2 x
| IRET: sem-undef-arity0
| IRETD: sem-undef-arity0
| IRETQ: sem-undef-arity0
| JA x: sem-undef-flow1 x
| JAE x: sem-undef-flow1 x
| JB x: sem-jb x
| JBE x: sem-undef-flow1 x
| JC x: sem-jc x
| JCXZ x: sem-undef-flow1 x
| JE x: sem-je x
| JECXZ x: sem-undef-flow1 x
| JG x: sem-undef-flow1 x
| JGE x: sem-undef-flow1 x
| JL x: sem-undef-flow1 x
| JLE x: sem-undef-flow1 x
| JMP x: sem-jmp x
| JNA x: sem-undef-flow1 x
| JNAE x: sem-undef-flow1 x
| JNB x: sem-undef-flow1 x
| JNBE x: sem-undef-flow1 x
| JNC x: sem-undef-flow1 x
| JNE x: sem-undef-flow1 x
| JNG x: sem-undef-flow1 x
| JNGE x: sem-undef-flow1 x
| JNL x: sem-undef-flow1 x
| JNLE x: sem-undef-flow1 x
| JNO x: sem-undef-flow1 x
| JNP x: sem-undef-flow1 x
| JNS x: sem-undef-flow1 x
| JNZ x: sem-undef-flow1 x
| JO x: sem-undef-flow1 x
| JP x: sem-undef-flow1 x
| JPE x: sem-undef-flow1 x
| JPO x: sem-undef-flow1 x
| JRCXZ x: sem-undef-flow1 x
| JS x: sem-undef-flow1 x
| JZ x: sem-undef-flow1 x
| LAHF: sem-undef-arity0
| LAR x: sem-undef-arity2 x
| LDDQU x: sem-undef-arity2 x
| LDMXCSR x: sem-undef-arity1 x
| LDS x: sem-undef-arity2 x
| LEA x: sem-undef-arity2 x
| LEAVE: sem-undef-arity0
| LES x: sem-undef-arity2 x
| LFENCE: sem-undef-arity0
| LFS x: sem-undef-arity2 x
| LGDT x: sem-undef-arity1 x
| LGS x: sem-undef-arity2