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

cranelift: Add Bswap instruction (#1092) #5147

Merged
merged 1 commit into from
Oct 31, 2022

Commits on Oct 31, 2022

  1. cranelift: Add Bswap instruction (bytecodealliance#1092)

    Adds Bswap to the Cranelift IR. Implements the Bswap instruction
    in the x64 and aarch64 codegen backends. Cranelift users can now:
    ```
    builder.ins().bswap(value)
    ```
    to get a native byteswap instruction.
    
    * x64: implements the 32- and 64-bit bswap instruction, following
    the pattern set by similar unary instrutions (Neg and Not) - it
    only operates on a dst register, but is parameterized with both
    a src and dst which are expected to be the same register.
    
    As x64 bswap instruction is only for 32- or 64-bit registers,
    the 16-bit swap is implemented as a rotate left by 8.
    
    Updated x64 RexFlags type to support emitting for single-operand
    instructions like bswap
    
    * aarch64: Bswap gets emitted as aarch64 rev16, rev32,
    or rev64 instruction as appropriate.
    
    * s390x: Bswap was already supported in backend, just had to add
    a bit of plumbing
    
    * For completeness, added bswap to the interpreter as well.
    
    * added filetests and runtests for each ISA
    
    * added bswap to fuzzgen, thanks to afonso360 for the code there
    
    * 128-bit swaps are not yet implemented, that can be done later
    11evan committed Oct 31, 2022
    Configuration menu
    Copy the full SHA
    a284a24 View commit details
    Browse the repository at this point in the history