From a587e907c3788cd8e33c99082d5cf11d25b9831a Mon Sep 17 00:00:00 2001 From: Caleb Jamison Date: Fri, 27 Sep 2024 16:15:58 -0400 Subject: [PATCH] Dont enable pio-parser rp2350 feature by default --- pio-parser/Cargo.toml | 1 - pio-parser/src/lib.rs | 25 +++++++++++++++++++++ pio-parser/src/rp2040.lalrpop | 42 +++++++++++++++++------------------ 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/pio-parser/Cargo.toml b/pio-parser/Cargo.toml index ef188c1..217d6d5 100644 --- a/pio-parser/Cargo.toml +++ b/pio-parser/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT" repository = "https://github.com/rp-rs/pio-rs" [features] -default = ["rp2350"] rp2350 = ["pio/rp2350"] [dependencies] diff --git a/pio-parser/src/lib.rs b/pio-parser/src/lib.rs index 00995e8..7557f90 100644 --- a/pio-parser/src/lib.rs +++ b/pio-parser/src/lib.rs @@ -103,16 +103,22 @@ pub(crate) enum ParsedMovDestination { PC, ISR, OSR, + #[cfg(feature = "rp2350")] RXFIFOY, + #[cfg(feature = "rp2350")] RXFIFO0, + #[cfg(feature = "rp2350")] RXFIFO1, + #[cfg(feature = "rp2350")] RXFIFO2, + #[cfg(feature = "rp2350")] RXFIFO3, } #[derive(Debug)] enum MovDestInternal { Mov(MovDestination), + #[cfg(feature = "rp2350")] Fifo(MovRxIndex), } @@ -128,10 +134,15 @@ impl From for MovDestInternal { ParsedMovDestination::PC => MovDestInternal::Mov(MovDestination::PC), ParsedMovDestination::ISR => MovDestInternal::Mov(MovDestination::ISR), ParsedMovDestination::OSR => MovDestInternal::Mov(MovDestination::OSR), + #[cfg(feature = "rp2350")] ParsedMovDestination::RXFIFOY => MovDestInternal::Fifo(MovRxIndex::RXFIFOY), + #[cfg(feature = "rp2350")] ParsedMovDestination::RXFIFO0 => MovDestInternal::Fifo(MovRxIndex::RXFIFO0), + #[cfg(feature = "rp2350")] ParsedMovDestination::RXFIFO1 => MovDestInternal::Fifo(MovRxIndex::RXFIFO1), + #[cfg(feature = "rp2350")] ParsedMovDestination::RXFIFO2 => MovDestInternal::Fifo(MovRxIndex::RXFIFO2), + #[cfg(feature = "rp2350")] ParsedMovDestination::RXFIFO3 => MovDestInternal::Fifo(MovRxIndex::RXFIFO3), } } @@ -146,16 +157,22 @@ pub(crate) enum ParsedMovSource { STATUS, ISR, OSR, + #[cfg(feature = "rp2350")] RXFIFOY, + #[cfg(feature = "rp2350")] RXFIFO0, + #[cfg(feature = "rp2350")] RXFIFO1, + #[cfg(feature = "rp2350")] RXFIFO2, + #[cfg(feature = "rp2350")] RXFIFO3, } #[derive(Debug)] enum MovSrcInternal { Mov(MovSource), + #[cfg(feature = "rp2350")] Fifo(MovRxIndex), } @@ -169,10 +186,15 @@ impl From for MovSrcInternal { ParsedMovSource::STATUS => MovSrcInternal::Mov(MovSource::STATUS), ParsedMovSource::ISR => MovSrcInternal::Mov(MovSource::ISR), ParsedMovSource::OSR => MovSrcInternal::Mov(MovSource::OSR), + #[cfg(feature = "rp2350")] ParsedMovSource::RXFIFOY => MovSrcInternal::Fifo(MovRxIndex::RXFIFOY), + #[cfg(feature = "rp2350")] ParsedMovSource::RXFIFO0 => MovSrcInternal::Fifo(MovRxIndex::RXFIFO0), + #[cfg(feature = "rp2350")] ParsedMovSource::RXFIFO1 => MovSrcInternal::Fifo(MovRxIndex::RXFIFO1), + #[cfg(feature = "rp2350")] ParsedMovSource::RXFIFO2 => MovSrcInternal::Fifo(MovRxIndex::RXFIFO2), + #[cfg(feature = "rp2350")] ParsedMovSource::RXFIFO3 => MovSrcInternal::Fifo(MovRxIndex::RXFIFO3), } } @@ -268,9 +290,11 @@ impl<'i> ParsedOperands<'i> { let source_internal = (*source).into(); let dest_internal = (*destination).into(); match (source_internal, dest_internal) { + #[cfg(feature = "rp2350")] (MovSrcInternal::Mov(MovSource::ISR), MovDestInternal::Fifo(index)) => { InstructionOperands::MOVTORX { index } } + #[cfg(feature = "rp2350")] (MovSrcInternal::Fifo(index), MovDestInternal::Mov(MovDestination::OSR)) => { InstructionOperands::MOVFROMRX { index } } @@ -279,6 +303,7 @@ impl<'i> ParsedOperands<'i> { op: *op, source: s, }, + #[cfg(feature = "rp2350")] (d, s) => panic!("Illegal Mov src/dest combination: {:?} {:?}", d, s), } } diff --git a/pio-parser/src/rp2040.lalrpop b/pio-parser/src/rp2040.lalrpop index ed099cc..368224a 100644 --- a/pio-parser/src/rp2040.lalrpop +++ b/pio-parser/src/rp2040.lalrpop @@ -6,9 +6,7 @@ use ::pio::{ WaitSource, InSource, OutDestination, - MovDestination, MovOperation, - MovSource, SetDestination, }; use crate::{ @@ -17,6 +15,8 @@ use crate::{ ParsedDirective, ParsedInstruction, ParsedOperands, + ParsedMovDestination, + ParsedMovSource, }; grammar(); @@ -139,9 +139,9 @@ Instruction: ParsedInstruction<'input> = { BaseInstruction: ParsedOperands<'input> = { "nop" => ParsedOperands::MOV { - destination: MovDestination::Y, + destination: ParsedMovDestination::Y, op: MovOperation::None, - source: MovSource::Y, + source: ParsedMovSource::Y, }, "jmp" ","? => ParsedOperands::JMP { condition: match c { @@ -178,7 +178,7 @@ BaseInstruction: ParsedOperands<'input> = { None => true, }, }, - "mov" ","? => ParsedOperands::MOV { + "mov" ","? => ParsedOperands::MOV { destination: d, op: match o { Some(o) => o, @@ -245,14 +245,14 @@ ShouldBlock: bool = { "noblock" => false, }; -MovDestination: MovDestination = { - "pins" => MovDestination::PINS, - "x" => MovDestination::X, - "y" => MovDestination::Y, - "exec" => MovDestination::EXEC, - "pc" => MovDestination::PC, - "isr" => MovDestination::ISR, - "osr" => MovDestination::OSR, +ParsedMovDestination: ParsedMovDestination = { + "pins" => ParsedMovDestination::PINS, + "x" => ParsedMovDestination::X, + "y" => ParsedMovDestination::Y, + "exec" => ParsedMovDestination::EXEC, + "pc" => ParsedMovDestination::PC, + "isr" => ParsedMovDestination::ISR, + "osr" => ParsedMovDestination::OSR, }; MovOperation: MovOperation = { @@ -261,14 +261,14 @@ MovOperation: MovOperation = { "::" => MovOperation::BitReverse, }; -MovSource: MovSource = { - "pins" => MovSource::PINS, - "x" => MovSource::X, - "y" => MovSource::Y, - "null" => MovSource::NULL, - "status" => MovSource::STATUS, - "isr" => MovSource::ISR, - "osr" => MovSource::OSR, +ParsedMovSource: ParsedMovSource = { + "pins" => ParsedMovSource::PINS, + "x" => ParsedMovSource::X, + "y" => ParsedMovSource::Y, + "null" => ParsedMovSource::NULL, + "status" => ParsedMovSource::STATUS, + "isr" => ParsedMovSource::ISR, + "osr" => ParsedMovSource::OSR, }; IrqModifier: (bool, bool) = {