Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5f183e7
[Intel] Start parser automation
sijung07 Feb 2, 2026
4f3dcfa
[Intel] Add Compat type and Fix checkSize
sijung07 Feb 24, 2026
3920f86
[Intel] Support additional operand types
sijung07 Mar 6, 2026
75865ae
[Intel] Handle special-case opcode
sijung07 Mar 12, 2026
120ccdc
[Intel] Clean up and fix checkPrefix
sijung07 Mar 16, 2026
9672c55
[Intel] Strip mandatory prefixes after parsing
sijung07 Mar 17, 2026
df0a548
[Intel] Fix instruction tables and parser
sijung07 Mar 23, 2026
4cf5a82
[Intel] Remove matchesEscapeOpcode
sijung07 Apr 2, 2026
b962ef2
[Intel] Update InstructionCore array
sijung07 Apr 6, 2026
2122c68
[Intel] Update Bit mode support
sijung07 Apr 6, 2026
3841897
[Intel] Add TupleType and update Op/En
sijung07 Apr 8, 2026
ccedc5c
[Intel] Update Far/Near ptr and fix misc issues
sijung07 Apr 8, 2026
ed2761b
[Intel] Update Instructions and fix minor issues
sijung07 Apr 23, 2026
938c73a
[Intel] Remove all unknown operands
sijung07 Apr 28, 2026
d083ff4
[Intel] Add register operand encoding type
sijung07 May 7, 2026
2470ac5
[Intel] Replace OprSize to RegType
sijung07 May 7, 2026
656c047
[Intel] Resolve encoding ambiguity for PAUSE
sijung07 May 8, 2026
58b08f8
[Intel] Handle mandatory prefixes in specials
sijung07 May 12, 2026
f32e44f
[Intel] Clarify sign-extended imm helpers
sijung07 May 14, 2026
8b2c880
[Intel] Fix JCXZ family decoding
sijung07 May 15, 2026
964fc14
[Intel] Fix operand handling issues
sijung07 May 15, 2026
d04baff
[Intel] Clean up
sijung07 May 19, 2026
b42af42
[Intel] Remove GETSEC leaf variants
sijung07 May 19, 2026
26fde97
[Intel] Refine opmask operand parsing
sijung07 Jun 4, 2026
975ca0d
[Intel] Add control/debug/EVEX operand parsing
sijung07 Jul 8, 2026
c7602ca
[Intel] Add RegAddr operand parsing
sijung07 Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions src/FrontEnd/Intel.Tests/ParserTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,18 @@ type ParserTests() =
++ TEST ** [ O.Mem(R.EAX, 8<rt>); O.Imm(10L, 8<rt>) ]
||> testX86NoPrefixNoSeg

[<TestMethod>]
member _.``5.1.6 Bit and Byte Instructions (2)``() =
"f30fbcf6"
++ TZCNT ** [ O.Reg R.ESI; O.Reg R.ESI ]
||> testX86NoPrefixNoSeg

[<TestMethod>]
member _.``5.1.6 Bit and Byte Instructions (3)``() =
"660fbcf6"
++ BSF ** [ O.Reg R.SI; O.Reg R.SI ]
||> testX86Prefix Prefix.OPSIZE

[<TestMethod>]
member _.``5.1.7 Control Transfer Instructions (1)``() =
"ffe4"
Expand Down Expand Up @@ -1842,6 +1854,102 @@ type ParserTests() =
++ VPMULLD ** [ O.Reg R.YMM0; O.Reg R.YMM3; O.Reg R.YMM3 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from control registers (1)``() =
"0f20c0"
++ MOV ** [ O.Reg R.EAX; O.Reg R.CR0 ]
||> testX86NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from control registers (2)``() =
"0f20c0"
++ MOV ** [ O.Reg R.RAX; O.Reg R.CR0 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from control registers (3)``() =
"440f20c0"
++ MOV ** [ O.Reg R.RAX; O.Reg R.CR8 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from control registers (4)``() =
"0f22d9"
++ MOV ** [ O.Reg R.CR3; O.Reg R.RCX ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from debug registers (1)``() =
"0f21c0"
++ MOV ** [ O.Reg R.RAX; O.Reg R.DR0 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from debug registers (2)``() =
"0f21fa"
++ MOV ** [ O.Reg R.RDX; O.Reg R.DR7 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``MOV to/from debug registers (3)``() =
"0f23f6"
++ MOV ** [ O.Reg R.DR6; O.Reg R.RSI ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``AVX512 embedded rounding (1)``() =
"62f17f082dc1"
++ VCVTSD2SI ** [ O.Reg R.EAX; O.Reg R.XMM1 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``AVX512 SAE on conversion (1)``() =
"62f17f082cc1"
++ VCVTTSD2SI ** [ O.Reg R.EAX; O.Reg R.XMM1 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``AVX512 broadcast with embedded rounding (1)``() =
"62f1f54858c2"
++ VADDPD ** [ O.Reg R.ZMM0; O.Reg R.ZMM1; O.Reg R.ZMM2 ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``AVX512 broadcast with SAE (1)``() =
"62f1f548c2d300"
++ VCMPPD ** [ O.Reg R.K2; O.Reg R.ZMM1; O.Reg R.ZMM3; O.Imm(0L, 8<rt>) ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``AVX512 register operand with SAE (1)``() =
"62f37d481dca00"
++ VCVTPS2PH ** [ O.Reg R.YMM2; O.Reg R.ZMM1; O.Imm(0L, 8<rt>) ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``Address-size-dependent register operand (1)``() =
"f30faef0"
++ UMONITOR ** [ O.Reg R.RAX ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``Address-size-dependent register operand (2)``() =
"f20f38f808"
++ ENQCMD ** [ O.Reg R.RCX; O.Mem(R.RAX, 512<rt>) ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``Address-size-dependent register operand (3)``() =
"f30f38f81a"
++ ENQCMDS ** [ O.Reg R.RBX; O.Mem(R.RDX, 512<rt>) ]
||> testX64NoPrefixNoSeg

[<TestMethod>]
member _.``Address-size-dependent register operand (4)``() =
"660f38f811"
++ MOVDIR64B ** [ O.Reg R.RDX; O.Mem(R.RCX, 512<rt>) ]
||> testX64NoPrefixNoSeg

#if !EMULATION
[<TestMethod>]
member _.``Size cond ParsingFailure Test (1)``() =
Expand Down
2 changes: 2 additions & 0 deletions src/FrontEnd/Intel/B2R2.FrontEnd.Intel.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
<Compile Include="Opcode.fs" />
<Compile Include="Operands.fs" />
<Compile Include="VEXInfo.fs" />
<Compile Include="IntelTypes.fs" />
<Compile Include="Intel.fs" />
<Compile Include="Instruction.fs" />
<Compile Include="ParsingHelper.fs" />
<Compile Include="InsSizeComputers.fs" />
Expand Down
2 changes: 1 addition & 1 deletion src/FrontEnd/Intel/Instruction.fs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ type Instruction
| Opcode.HLT
| Opcode.UD2
| Opcode.SYSEXIT | Opcode.SYSRET
| Opcode.IRET | Opcode.IRETW | Opcode.IRETD | Opcode.IRETQ -> true
| Opcode.IRET | Opcode.IRETD | Opcode.IRETQ -> true
| _ -> false

member _.IsNop =
Expand Down
Loading
Loading