riscv64: Add Zba extension instructions (#6087)
* riscv64: Use `add.uw` to zero extend * riscv64: Implement `add.uw` optimizations * riscv64: Add `Zba` `iadd+ishl` optimizations * riscv64: Add `shl+uextend` optimizations based on `Zba` * riscv64: Fix some issues with `Zba` instructions * riscv64: Restrict shnadd selection * riscv64: Fix `extend` priorities * riscv64: Remove redundant `addw` rule * riscv64: Specify type for `add` extend rules * riscv64: Use `u64_from_imm64` extractor instead of `uimm8` * riscv64: Restrict `uextend` in `shnadd.uw` rules * riscv64: Use concrete type in `slli.uw` rule * riscv64: Add extra arithmetic extends tests Co-authored-by: Jamey Sharp <jsharp@fastly.com> * riscv64: Make `Adduw` types concrete * riscv64: Add extra arithmetic extend tests * riscv64: Add `sextend`+Arithmetic rules * riscv64: Fix whitespace * cranelift: Move arithmetic extends tests with i128 to separate file --------- Co-authored-by: Jamey Sharp <jsharp@fastly.com>
This commit is contained in:
@@ -1220,10 +1220,17 @@ impl Inst {
|
||||
rs1,
|
||||
rs2,
|
||||
} => {
|
||||
let rs1 = format_reg(rs1, allocs);
|
||||
let rs2 = format_reg(rs2, allocs);
|
||||
let rd = format_reg(rd.to_reg(), allocs);
|
||||
format!("{} {},{},{}", alu_op.op_name(), rd, rs1, rs2,)
|
||||
let rs1_s = format_reg(rs1, allocs);
|
||||
let rs2_s = format_reg(rs2, allocs);
|
||||
let rd_s = format_reg(rd.to_reg(), allocs);
|
||||
match alu_op {
|
||||
AluOPRRR::Adduw if rs2 == zero_reg() => {
|
||||
format!("zext.w {},{}", rd_s, rs1_s)
|
||||
}
|
||||
_ => {
|
||||
format!("{} {},{},{}", alu_op.op_name(), rd_s, rs1_s, rs2_s)
|
||||
}
|
||||
}
|
||||
}
|
||||
&Inst::FpuRR {
|
||||
frm,
|
||||
|
||||
Reference in New Issue
Block a user