Skip to content

Latest commit

 

History

History
130 lines (105 loc) · 4.8 KB

File metadata and controls

130 lines (105 loc) · 4.8 KB

roadmap.md

alpha

  • MVP
  • Better variable support
  • Support for 64-bit ELF
  • Support for 32-bit (protected) and 16-bit (real) modes; cr, dr, eflags and segments (cs, fs, etc.)
  • Support for: SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, MMX x86(-64) extensions
  • Support for AVX and AVX2 extensions
  • moving into beta phase (release of beta0)...

beta

betaf (beta foundation)

  • Support for most of "normal" (to norm-part6) x86-64 instructions
  • Transforming Mem enum into struct
  • Parser support for closures () other than memory address
  • Support for "modifiers" that is: base:mod1:mod2
  • Support for comptime mathematical evaluations ($() closure)
  • Support for constant user defined mathematical values (that aren't symbols, but inline immediates)
  • Improved segmentation (allow prefixing with % and free up # prefix)
  • Support for includes
  • Support for label attributes (#() closure)
  • Migration (from legacy *gen_ins) to new codegen API (GenAPI struct)
  • Fix OSOP and ASOP prefixes (Operand/Address Size Override Prefix (for memory))
  • Optimize Instruction struct

betao (beta obj)

  • Variables overhaul (labels as variables)
  • Switch ! prefix for keywords for .
  • Relocation/Symbol overhaul (use of @() closure)
  • Tests for relocations and other things
  • Better target handling (ELF rewritten from zero)
  • Support for custom sections (with .section keyword)

beta

  • Create documentation (including better readme ;))
  • Overall polish:
    • Allow for type in labels attributes.
    • Make sections also symbols.
    • Allow for use of PREFIX_VAL in ExtSymbolRef.
    • Move some of logic in src/main.rs to separate file.
    • Mem support for (R)IP (addresing like ($10))
    • Allow for different size relocations (relXX and absXX)
    • Fix in, lea, wrf/gsbase, loopXX and out instructions.
    • Add missing lgdt and lidt instructions.
    • Allow using lock, repXX mnemonics as prefix
    • Allow for using symbols/relocations in more than one place (as address or value under address; .deref/.ref directives)
    • Remove .assemble() from match statement in src/core/comp.rs:compile_instruction and move inside compile_label
    • Create .debug_assemble() (--debug)
    • Limit lifetimes, where they are unnecessary (use owned values)
    • Replace Strings with Arc<str>/Rc<str>.
    • Allow for usage of multi threads to compile labels/sections
    • Revamp AType and src/pre/chk.rs in favor of CheckAPI (like is with GenAPI)
    • Revamp errors (better readability) with explainations
    • Create src/docs/errors.md and --explain=[ECD]
  • moving into beta-avx phase...

beta-avx

Goal: implement most of AVX based (E)VEX instructions

  • Prepare pasm's syntax for AVX-512
  • Prepare backend for AVX-512 (add IS_BCST flag to Mem, add support for masks, etc. in parser)
  • implement EVEX support
  • ISA implementation (divided in 15 parts):
    • avx-ext-0
    • avx-ext-1
    • avx-ext-2
    • avx-ext-3
    • avx-ext-4
    • avx-ext-5
    • avx-ext-6
    • avx-ext-7
    • avx-ext-8
    • avx-ext-9
    • avx-ext-a
    • avx-ext-b
    • avx-ext-c
    • avx-ext-d
    • avx-ext-e (vsib)
  • Move to beta-intel-apx

beta-intel-apx

Goal: implement support for Intel APX

  • cleanup Instruction in src/shr/ast.rs (it is barely readable) and prepare it for Intel APX
  • Patch {sae} and {er} modifiers in CheckAPI (actually check if it's correct).
  • implement support for APX in syntax
  • implement checking for APX (in pre::chkn::CheckAPI) - partial migration to CheckAPI :D
  • implement EEVEX (extended EVEX; all 3 variants without ones for ctestcc and ccmpcc) and REX2 prefixes support
  • ISA implementantation (divided in 8 parts; legacy instructions included):
    • intel-apx-0 (legacy instructions without setcc)
    • intel-apx-1 (ctestcc + ccmpcc + EEVEX support for cond. test and cmp)
    • intel-apx-2 (cfcmovcc)
    • intel-apx-3 (setcc)
    • intel-apx-4 (push2/pop2)
  • Move to beta-min

beta-min

Goal: support for smaller x86-64 ISA extensions (around 284 new mnemonics)

  • missing x86-64 instructions
  • move to rc

rc

Goal: extensive testing, polish and optimizations of assembler, less updates/commits

  • Support for 16-bit addressing
  • Add nobits directive for section's
  • Allow for protected public function label_name:
  • Allow for long jumps (jmp ptrXX:YY and jmp m16:XX)
  • Move revitalization

revitalization

  • move to stable

stable

  • release of stable version