From 2ad469e331357703fa6c72de5110661b011671ed Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Sun, 25 Jan 2026 20:25:25 -0800 Subject: [PATCH] simplify getting IMM_WIDTH for LogicalFlagsMOpImm --- crates/cpu/src/instruction.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/crates/cpu/src/instruction.rs b/crates/cpu/src/instruction.rs index c889610..4c02271 100644 --- a/crates/cpu/src/instruction.rs +++ b/crates/cpu/src/instruction.rs @@ -156,6 +156,13 @@ pub trait CommonMOpTrait: MOpTrait { ) -> Expr>; } +pub type CommonMOpFor = CommonMOp< + ::PrefixPad, + ::CommonMOpTraitDestReg, + ::CommonMOpTraitSrcRegWidth, + ::SrcCount, +>; + impl MOpTrait for T { type Mapped = T::CommonMOpTraitMapped; @@ -984,8 +991,8 @@ pub struct LogicalFlagsMOpImm { #[test] fn test_logical_flags_mop_imm_fits() { let needed_width = LogicalFlagsMOpImm.canonical().bit_width(); - type TheMOpCommon = LogicalFlagsMOpCommon>; - let imm_width = TheMOpCommon::IMM_WIDTH; + let imm_width = + CommonMOpFor::>>::IMM_WIDTH; assert!( needed_width <= imm_width, "needed_width={needed_width} imm_width={imm_width}", @@ -1083,7 +1090,7 @@ impl LogicalFlagsMOpImm { #[track_caller] pub fn from_imm(imm: impl ToExpr) -> Expr { let imm_ty = - LogicalFlagsMOpCommon::>::imm_ty(); + CommonMOpFor::>>::imm_ty(); let imm = imm.to_expr(); assert_eq!(imm_ty, imm.ty(), "imm must have the correct width"); imm.cast_to(UInt[LogicalFlagsMOpImm.canonical().bit_width()]) @@ -1091,7 +1098,7 @@ impl LogicalFlagsMOpImm { } pub fn to_imm(this: impl ToExpr) -> Expr { let imm_ty = - LogicalFlagsMOpCommon::>::imm_ty(); + CommonMOpFor::>>::imm_ty(); this.to_expr().cast_to_bits().cast_to(imm_ty) } fn flags_operation_impl( @@ -1384,10 +1391,6 @@ impl LogicalFlagsMOpImm { } } -#[hdl] -type LogicalFlagsMOpCommon = - CommonMOp, DestReg, SrcRegWidth, ConstUsize<3>>; - common_mop_struct! { #[mapped( LogicalFlagsMOp)] #[hdl(cmp_eq)] @@ -1461,7 +1464,7 @@ common_mop_struct! { /// ``` pub struct LogicalFlagsMOp { #[common] - pub common: LogicalFlagsMOpCommon, + pub common: CommonMOp, DestReg, SrcRegWidth, ConstUsize<3>>, pub lut: Lut4, } } @@ -1511,9 +1514,7 @@ impl LogicalFlagsMOp { } #[hdl] pub fn imm(this: impl ToExpr) -> Expr { - LogicalFlagsMOpImm::from_imm(LogicalFlagsMOpCommon::::imm( - this.to_expr().common, - )) + LogicalFlagsMOpImm::from_imm(CommonMOpFor::::imm(this.to_expr().common)) } #[hdl] pub fn logical_flags(