Handle more `llvm_asm` usages in GCC Rust
GCC Rust compiler improves handling of LLVM inline assembly constraints and syntax.
GCC Rust (gccrs) has been enhanced to better support llvm_asm (inline assembly). This update refines how GCC Rust handles various LLVM-specific constraints, such as =*m, and adapts to changes in template string usage, moving from multiple strings to a single one. The changes aim to safely handle or reject most usages of LLVM inline assembly, minimizing future compatibility issues.
In Details
The gccrs compiler now better supports LLVM-specific inline assembly constructs. Changes in rust-compile-asm.cc include handling the =*m constraint and adapting tree_codegen_asm to a single template string input. rust-ast-lower-expr.cc introduces convert_template_str and refines check_llvm_asm_support for broader LLVM asm usage. These modifications improve compatibility with LLVM's inline assembly syntax and constraints, ensuring more robust code generation for assembly blocks.
- gccrs
- The GCC implementation of the Rust programming language compiler. It aims to compile Rust code using the GCC backend infrastructure.
- llvm_asm
- A macro or keyword used in LLVM-based compilers to embed inline assembly code. It allows developers to write low-level assembly instructions directly within their high-level code.
- inline assembly
- Assembly language code embedded directly within a high-level language program. It's typically used for performance-critical sections or to access hardware-specific features not available through standard language constructs.
- constraint
- In inline assembly, a constraint specifies how an operand (register, memory location, etc.) should be used or what type it should be (e.g., 'm' for memory operand).
- template string
- A string used in inline assembly to define the assembly instruction template and its operands. LLVM's
asmmacro uses a template string for this purpose.