diff --git a/cranelift/codegen/meta/src/isa/riscv/recipes.rs b/cranelift/codegen/meta/src/isa/riscv/recipes.rs index 1036d15566..47acdbb042 100644 --- a/cranelift/codegen/meta/src/isa/riscv/recipes.rs +++ b/cranelift/codegen/meta/src/isa/riscv/recipes.rs @@ -64,7 +64,7 @@ pub(crate) fn define(shared_defs: &SharedDefinitions, regs: &IsaRegs) -> RecipeG // R-type with an immediate shift amount instead of rs2. recipes.push( - EncodingRecipeBuilder::new("Rshamt", &formats.binary_imm, 4) + EncodingRecipeBuilder::new("Rshamt", &formats.binary_imm64, 4) .operands_in(vec![gpr]) .operands_out(vec![gpr]) .emit("put_rshamt(bits, in_reg0, imm.into(), out_reg0, sink);"), @@ -79,11 +79,11 @@ pub(crate) fn define(shared_defs: &SharedDefinitions, regs: &IsaRegs) -> RecipeG ); recipes.push( - EncodingRecipeBuilder::new("Ii", &formats.binary_imm, 4) + EncodingRecipeBuilder::new("Ii", &formats.binary_imm64, 4) .operands_in(vec![gpr]) .operands_out(vec![gpr]) .inst_predicate(InstructionPredicate::new_is_signed_int( - &*formats.binary_imm, + &*formats.binary_imm64, "imm", 12, 0, diff --git a/cranelift/codegen/meta/src/isa/x86/recipes.rs b/cranelift/codegen/meta/src/isa/x86/recipes.rs index 690cdf84d0..0cfd83d373 100644 --- a/cranelift/codegen/meta/src/isa/x86/recipes.rs +++ b/cranelift/codegen/meta/src/isa/x86/recipes.rs @@ -926,11 +926,11 @@ pub(crate) fn define<'shared>( // XX /n ib with 8-bit immediate sign-extended. { recipes.add_template_inferred( - EncodingRecipeBuilder::new("r_ib", &formats.binary_imm, 2) + EncodingRecipeBuilder::new("r_ib", &formats.binary_imm64, 2) .operands_in(vec![gpr]) .operands_out(vec![0]) .inst_predicate(InstructionPredicate::new_is_signed_int( - &*formats.binary_imm, + &*formats.binary_imm64, "imm", 8, 0, @@ -947,11 +947,11 @@ pub(crate) fn define<'shared>( ); recipes.add_template_inferred( - EncodingRecipeBuilder::new("f_ib", &formats.binary_imm, 2) + EncodingRecipeBuilder::new("f_ib", &formats.binary_imm64, 2) .operands_in(vec![fpr]) .operands_out(vec![0]) .inst_predicate(InstructionPredicate::new_is_signed_int( - &*formats.binary_imm, + &*formats.binary_imm64, "imm", 8, 0, @@ -970,11 +970,11 @@ pub(crate) fn define<'shared>( // XX /n id with 32-bit immediate sign-extended. recipes.add_template( Template::new( - EncodingRecipeBuilder::new("r_id", &formats.binary_imm, 5) + EncodingRecipeBuilder::new("r_id", &formats.binary_imm64, 5) .operands_in(vec![gpr]) .operands_out(vec![0]) .inst_predicate(InstructionPredicate::new_is_signed_int( - &*formats.binary_imm, + &*formats.binary_imm64, "imm", 32, 0, @@ -2874,12 +2874,12 @@ pub(crate) fn define<'shared>( { let has_small_offset = - InstructionPredicate::new_is_signed_int(&*formats.binary_imm, "imm", 8, 0); + InstructionPredicate::new_is_signed_int(&*formats.binary_imm64, "imm", 8, 0); // XX /n, MI form with imm8. recipes.add_template( Template::new( - EncodingRecipeBuilder::new("rcmp_ib", &formats.binary_imm, 2) + EncodingRecipeBuilder::new("rcmp_ib", &formats.binary_imm64, 2) .operands_in(vec![gpr]) .operands_out(vec![reg_rflags]) .inst_predicate(has_small_offset) @@ -2897,12 +2897,12 @@ pub(crate) fn define<'shared>( ); let has_big_offset = - InstructionPredicate::new_is_signed_int(&*formats.binary_imm, "imm", 32, 0); + InstructionPredicate::new_is_signed_int(&*formats.binary_imm64, "imm", 32, 0); // XX /n, MI form with imm32. recipes.add_template( Template::new( - EncodingRecipeBuilder::new("rcmp_id", &formats.binary_imm, 5) + EncodingRecipeBuilder::new("rcmp_id", &formats.binary_imm64, 5) .operands_in(vec![gpr]) .operands_out(vec![reg_rflags]) .inst_predicate(has_big_offset) diff --git a/cranelift/codegen/meta/src/shared/formats.rs b/cranelift/codegen/meta/src/shared/formats.rs index 10d4937524..204f3fccb1 100644 --- a/cranelift/codegen/meta/src/shared/formats.rs +++ b/cranelift/codegen/meta/src/shared/formats.rs @@ -4,7 +4,7 @@ use std::rc::Rc; pub(crate) struct Formats { pub(crate) binary: Rc, - pub(crate) binary_imm: Rc, + pub(crate) binary_imm64: Rc, pub(crate) branch: Rc, pub(crate) branch_float: Rc, pub(crate) branch_icmp: Rc, @@ -78,7 +78,7 @@ impl Formats { binary_imm8: Builder::new("BinaryImm8").value().imm(&imm.uimm8).build(), - binary_imm: Builder::new("BinaryImm").value().imm(&imm.imm64).build(), + binary_imm64: Builder::new("BinaryImm64").value().imm(&imm.imm64).build(), // The select instructions are controlled by the second VALUE operand. // The first VALUE operand is the controlling flag which has a derived type. diff --git a/cranelift/codegen/meta/src/shared/instructions.rs b/cranelift/codegen/meta/src/shared/instructions.rs index 7ba624fa46..62cd1ebeb1 100644 --- a/cranelift/codegen/meta/src/shared/instructions.rs +++ b/cranelift/codegen/meta/src/shared/instructions.rs @@ -2215,7 +2215,7 @@ pub(crate) fn define( Like `icmp_imm`, but returns integer CPU flags instead of testing a specific condition code. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![f]), @@ -2460,7 +2460,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2475,7 +2475,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2489,7 +2489,7 @@ pub(crate) fn define( This operation traps if the divisor is zero. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2505,7 +2505,7 @@ pub(crate) fn define( representable in `B` bits two's complement. This only happens when `x = -2^{B-1}, Y = -1`. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2519,7 +2519,7 @@ pub(crate) fn define( This operation traps if the divisor is zero. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2533,7 +2533,7 @@ pub(crate) fn define( This operation traps if the divisor is zero. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2552,7 +2552,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2952,7 +2952,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2969,7 +2969,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -2986,7 +2986,7 @@ pub(crate) fn define( Polymorphic over all scalar integer types, but does not support vector types. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -3031,7 +3031,7 @@ pub(crate) fn define( r#" Rotate left by immediate. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -3043,7 +3043,7 @@ pub(crate) fn define( r#" Rotate right by immediate. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -3118,7 +3118,7 @@ pub(crate) fn define( The shift amount is masked to the size of ``x``. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -3132,7 +3132,7 @@ pub(crate) fn define( The shift amount is masked to the size of the register. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), @@ -3146,7 +3146,7 @@ pub(crate) fn define( The shift amount is masked to the size of the register. "#, - &formats.binary_imm, + &formats.binary_imm64, ) .operands_in(vec![x, Y]) .operands_out(vec![a]), diff --git a/cranelift/codegen/src/ir/instructions.rs b/cranelift/codegen/src/ir/instructions.rs index ccc47081a1..653926a242 100644 --- a/cranelift/codegen/src/ir/instructions.rs +++ b/cranelift/codegen/src/ir/instructions.rs @@ -306,7 +306,7 @@ impl InstructionData { let bit_width = ctrl_typevar.bits(); match self { - Self::BinaryImm { + Self::BinaryImm64 { opcode, arg: _, imm, diff --git a/cranelift/codegen/src/isa/riscv/mod.rs b/cranelift/codegen/src/isa/riscv/mod.rs index 8aa264f34f..e957367bbb 100644 --- a/cranelift/codegen/src/isa/riscv/mod.rs +++ b/cranelift/codegen/src/isa/riscv/mod.rs @@ -163,7 +163,7 @@ mod tests { let arg32 = func.dfg.append_block_param(block, types::I32); // Try to encode iadd_imm.i64 v1, -10. - let inst64 = InstructionData::BinaryImm { + let inst64 = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg64, imm: immediates::Imm64::new(-10), @@ -176,7 +176,7 @@ mod tests { ); // Try to encode iadd_imm.i64 v1, -10000. - let inst64_large = InstructionData::BinaryImm { + let inst64_large = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg64, imm: immediates::Imm64::new(-10000), @@ -186,7 +186,7 @@ mod tests { assert!(isa.encode(&func, &inst64_large, types::I64).is_err()); // Create an iadd_imm.i32 which is encodable in RV64. - let inst32 = InstructionData::BinaryImm { + let inst32 = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg32, imm: immediates::Imm64::new(10), @@ -214,7 +214,7 @@ mod tests { let arg32 = func.dfg.append_block_param(block, types::I32); // Try to encode iadd_imm.i64 v1, -10. - let inst64 = InstructionData::BinaryImm { + let inst64 = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg64, imm: immediates::Imm64::new(-10), @@ -224,7 +224,7 @@ mod tests { assert!(isa.encode(&func, &inst64, types::I64).is_err()); // Try to encode iadd_imm.i64 v1, -10000. - let inst64_large = InstructionData::BinaryImm { + let inst64_large = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg64, imm: immediates::Imm64::new(-10000), @@ -234,7 +234,7 @@ mod tests { assert!(isa.encode(&func, &inst64_large, types::I64).is_err()); // Create an iadd_imm.i32 which is encodable in RV32. - let inst32 = InstructionData::BinaryImm { + let inst32 = InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg: arg32, imm: immediates::Imm64::new(10), diff --git a/cranelift/codegen/src/peepmatic.rs b/cranelift/codegen/src/peepmatic.rs index 1ea2031bfa..1e22019407 100644 --- a/cranelift/codegen/src/peepmatic.rs +++ b/cranelift/codegen/src/peepmatic.rs @@ -378,7 +378,7 @@ fn intcc_to_peepmatic(cc: IntCC) -> ConditionCode { fn get_immediate(dfg: &DataFlowGraph, inst: Inst, i: usize) -> Part { return match dfg[inst] { - InstructionData::BinaryImm { imm, .. } if i == 0 => imm.into(), + InstructionData::BinaryImm64 { imm, .. } if i == 0 => imm.into(), InstructionData::BranchIcmp { cond, .. } if i == 0 => intcc_to_peepmatic(cond).into(), InstructionData::BranchInt { cond, .. } if i == 0 => intcc_to_peepmatic(cond).into(), InstructionData::IntCompare { cond, .. } if i == 0 => intcc_to_peepmatic(cond).into(), diff --git a/cranelift/codegen/src/postopt.rs b/cranelift/codegen/src/postopt.rs index 3e27c90a39..426aab00b8 100644 --- a/cranelift/codegen/src/postopt.rs +++ b/cranelift/codegen/src/postopt.rs @@ -341,7 +341,7 @@ fn optimize_complex_addresses(pos: &mut EncCursor, inst: Inst, isa: &dyn TargetI } _ => panic!("Unsupported load or store opcode"), }, - InstructionData::BinaryImm { + InstructionData::BinaryImm64 { opcode: Opcode::IaddImm, arg, imm, diff --git a/cranelift/codegen/src/simple_preopt.rs b/cranelift/codegen/src/simple_preopt.rs index 98ff7c3992..6903d18f6c 100644 --- a/cranelift/codegen/src/simple_preopt.rs +++ b/cranelift/codegen/src/simple_preopt.rs @@ -142,7 +142,7 @@ fn package_up_divrem_info( /// Examine `inst` to see if it is a div or rem by a constant, and if so return the operands, /// signedness, operation size and div-vs-rem-ness in a handy bundle. fn get_div_info(inst: Inst, dfg: &DataFlowGraph) -> Option { - if let InstructionData::BinaryImm { opcode, arg, imm } = dfg[inst] { + if let InstructionData::BinaryImm64 { opcode, arg, imm } = dfg[inst] { let (is_signed, is_rem) = match opcode { Opcode::UdivImm => (false, false), Opcode::UremImm => (false, true), @@ -704,7 +704,7 @@ mod simplify { imm: immediates::Imm64, ) -> bool { if let ValueDef::Result(arg_inst, _) = pos.func.dfg.value_def(arg) { - if let InstructionData::BinaryImm { + if let InstructionData::BinaryImm64 { opcode: Opcode::IshlImm, arg: prev_arg, imm: prev_imm, @@ -784,7 +784,7 @@ mod simplify { pos.func .dfg .replace(inst) - .BinaryImm(new_opcode, ty, imm, args[0]); + .BinaryImm64(new_opcode, ty, imm, args[0]); // Repeat for BinaryImm simplification. simplify(pos, inst, native_word_width); @@ -804,7 +804,7 @@ mod simplify { pos.func .dfg .replace(inst) - .BinaryImm(new_opcode, ty, imm, args[1]); + .BinaryImm64(new_opcode, ty, imm, args[1]); } } } @@ -818,7 +818,7 @@ mod simplify { } } - InstructionData::BinaryImm { opcode, arg, imm } => { + InstructionData::BinaryImm64 { opcode, arg, imm } => { let ty = pos.func.dfg.ctrl_typevar(inst); let mut arg = arg; @@ -831,7 +831,7 @@ mod simplify { | Opcode::BxorImm => { // Fold binary_op(C2, binary_op(C1, x)) into binary_op(binary_op(C1, C2), x) if let ValueDef::Result(arg_inst, _) = pos.func.dfg.value_def(arg) { - if let InstructionData::BinaryImm { + if let InstructionData::BinaryImm64 { opcode: prev_opcode, arg: prev_arg, imm: prev_imm, @@ -855,7 +855,7 @@ mod simplify { pos.func .dfg .replace(inst) - .BinaryImm(opcode, ty, new_imm, new_arg); + .BinaryImm64(opcode, ty, new_imm, new_arg); imm = new_imm; arg = new_arg; } diff --git a/cranelift/codegen/src/verifier/mod.rs b/cranelift/codegen/src/verifier/mod.rs index 029a437b4f..00fc31e212 100644 --- a/cranelift/codegen/src/verifier/mod.rs +++ b/cranelift/codegen/src/verifier/mod.rs @@ -757,7 +757,7 @@ impl<'a> Verifier<'a> { | UnaryBool { .. } | Binary { .. } | BinaryImm8 { .. } - | BinaryImm { .. } + | BinaryImm64 { .. } | Ternary { .. } | TernaryImm8 { .. } | Shuffle { .. } diff --git a/cranelift/codegen/src/write.rs b/cranelift/codegen/src/write.rs index 19287855ce..ba4543d39f 100644 --- a/cranelift/codegen/src/write.rs +++ b/cranelift/codegen/src/write.rs @@ -509,7 +509,7 @@ pub fn write_operands( } => write!(w, " {}", constant_handle), Binary { args, .. } => write!(w, " {}, {}", args[0], args[1]), BinaryImm8 { arg, imm, .. } => write!(w, " {}, {}", arg, imm), - BinaryImm { arg, imm, .. } => write!(w, " {}, {}", arg, imm), + BinaryImm64 { arg, imm, .. } => write!(w, " {}, {}", arg, imm), Ternary { args, .. } => write!(w, " {}, {}, {}", args[0], args[1], args[2]), MultiAry { ref args, .. } => { if args.is_empty() { diff --git a/cranelift/interpreter/src/interpreter.rs b/cranelift/interpreter/src/interpreter.rs index 3d4988096e..5485713d7e 100644 --- a/cranelift/interpreter/src/interpreter.rs +++ b/cranelift/interpreter/src/interpreter.rs @@ -163,7 +163,7 @@ impl Interpreter { Ok(Continue) } - BinaryImm { opcode, arg, imm } => { + BinaryImm64 { opcode, arg, imm } => { let imm = DataValue::from_integer(*imm, type_of(*arg, frame.function))?; let arg = frame.get(&arg); let result = match opcode { diff --git a/cranelift/reader/src/parser.rs b/cranelift/reader/src/parser.rs index 5bb83d5006..55e44f41f8 100644 --- a/cranelift/reader/src/parser.rs +++ b/cranelift/reader/src/parser.rs @@ -2758,11 +2758,11 @@ impl<'a> Parser<'a> { let imm = self.match_uimm8("expected unsigned 8-bit immediate")?; InstructionData::BinaryImm8 { opcode, arg, imm } } - InstructionFormat::BinaryImm => { + InstructionFormat::BinaryImm64 => { let lhs = self.match_value("expected SSA value first operand")?; self.match_token(Token::Comma, "expected ',' between operands")?; let rhs = self.match_imm64("expected immediate integer second operand")?; - InstructionData::BinaryImm { + InstructionData::BinaryImm64 { opcode, arg: lhs, imm: rhs, diff --git a/cranelift/serde/src/serde_clif_json.rs b/cranelift/serde/src/serde_clif_json.rs index b143a6fad0..80ee84633a 100644 --- a/cranelift/serde/src/serde_clif_json.rs +++ b/cranelift/serde/src/serde_clif_json.rs @@ -37,7 +37,7 @@ pub enum SerInstData { arg: String, imm: String, }, - BinaryImm { + BinaryImm64 { opcode: String, arg: String, imm: String, @@ -297,7 +297,7 @@ pub fn get_inst_data(inst_index: Inst, func: &Function) -> SerInstData { arg: arg.to_string(), imm: imm.to_string(), }, - InstructionData::BinaryImm { opcode, arg, imm } => SerInstData::BinaryImm { + InstructionData::BinaryImm64 { opcode, arg, imm } => SerInstData::BinaryImm64 { opcode: opcode.to_string(), arg: arg.to_string(), imm: imm.to_string(),