Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Long-term planning metabug #12

Open
12 of 16 tasks
CensoredUsername opened this issue Nov 1, 2016 · 0 comments
Open
12 of 16 tasks

Long-term planning metabug #12

CensoredUsername opened this issue Nov 1, 2016 · 0 comments

Comments

@CensoredUsername
Copy link
Owner

CensoredUsername commented Nov 1, 2016

This bug contains a listing of improvements to be made to the library, sorted by priority.

General

  • High

    • Modularizing different assembly dialects. Currently the only supported assembly language is x64, both in the plugin and the runtime. For the plugin the assembly language to use should be a setting determined by directives or crate attributes preferably, while for the runtime having each dialect in a separate submodule implementing the same traits would be the way to go. As for internal plugin infrastructure, it seems best to me that different assembly languages have completely separate parsing and compiling implementations (dialects like x86/x64 could share them), but all of them end up producing something that a common serialization module can understand.
    • x86 support
    • x64 support needs to be tested thoroughly.
    • a comprehensive testing framework that not only allows to test the current implementation, but also future extensions with reference tools.
  • Medium

    • Toolchain improvement: as the project consists out of several different crates in subfolders, building and testing everything is less than ergonomic currently.
    • Improving the quality of error messages. Mainly the error messages when an instruction isn't found or when an instruction variant doesn't exist are a little bare-bones
    • Currently, no checking is done on redundant prefixes or impossible prefixes.
    • For several ops (like x64 movsx) default to a certain argument size if the size of an argument isn't correctly specified. This should result in an error.
    • ARM support
    • Assembler::align is hardcoded to align as to what is required by x64.
    • Support in the runtime to keep track of all relocations caused by labels. This is important on the roadmap for x86 support, or x64 code only using a 32-bit address space.
    • Review the x64 operand size determination code and how it deals with immediate sizes.
  • Low

    • x64/x86 address displacement size hint
    • automatic size optimization for constant immediate / displacement arguments
    • AVX-512 support
  • Assembly dialect specific

    • x64

      • Jumps with 16-bit relative offsets are illegal in long mode on intel CPUs (they work fine on AMD though.).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant