update(generator): use Mmapped instead of AxiC2c1Spec

This commit is contained in:
Wataru Otsubo 2025-07-29 19:11:50 +09:00
parent 44880c7531
commit 687d938689
2 changed files with 18 additions and 18 deletions

View file

@ -313,7 +313,7 @@ impl CodeGen for Block {
ModuleBlockElements::Block(_) => { ModuleBlockElements::Block(_) => {
let child_upper_camel_name = util::parse_to_ident(&child_name.to_upper_camel_case())?; let child_upper_camel_name = util::parse_to_ident(&child_name.to_upper_camel_case())?;
Ok(quote! { Ok(quote! {
pub fn #snake_case_name(&self) -> #snake_case_name::#child_upper_camel_name<T> { pub fn #snake_case_name(&self) -> #snake_case_name::#child_upper_camel_name<M> {
#snake_case_name::#child_upper_camel_name::new(self.mem_ptr) #snake_case_name::#child_upper_camel_name::new(self.mem_ptr)
} }
}) })
@ -323,7 +323,7 @@ impl CodeGen for Block {
match &register.multiple { match &register.multiple {
None => { None => {
Ok(quote! { Ok(quote! {
pub fn #snake_case_name(&self) -> #snake_case_name::#child_upper_camel_name<T> { pub fn #snake_case_name(&self) -> #snake_case_name::#child_upper_camel_name<M> {
#snake_case_name::#child_upper_camel_name::new(self.mem_ptr) #snake_case_name::#child_upper_camel_name::new(self.mem_ptr)
} }
}) })
@ -337,7 +337,7 @@ impl CodeGen for Block {
} }
}); });
Ok(quote! { Ok(quote! {
pub fn #snake_case_name(&self) -> [#snake_case_name::#child_upper_camel_name<T>; #num_multiple] { pub fn #snake_case_name(&self) -> [#snake_case_name::#child_upper_camel_name<M>; #num_multiple] {
[ #(#elements),* ] [ #(#elements),* ]
} }
}) })
@ -350,9 +350,9 @@ impl CodeGen for Block {
}).collect::<Result<Vec<proc_macro2::TokenStream>, CodeGenError>>()?; }).collect::<Result<Vec<proc_macro2::TokenStream>, CodeGenError>>()?;
let parent_struct = if parent_name == util::parse_to_ident("RegisterInterface").unwrap() { let parent_struct = if parent_name == util::parse_to_ident("RegisterInterface").unwrap() {
quote! {#parent_name<T>} quote! {#parent_name<M>}
} else { } else {
quote! {#parent_name<'a, T>} quote! {#parent_name<'a, M>}
}; };
let child_mods = self let child_mods = self
@ -372,7 +372,7 @@ impl CodeGen for Block {
use std::marker::PhantomData; use std::marker::PhantomData;
use crate::axic2c1::spec::AxiC2c1Spec; use mmapped_reg::mmapped::Mmapped;
use super::#parent_name; use super::#parent_name;
@ -380,12 +380,12 @@ impl CodeGen for Block {
const OFFSET: usize = #addr; const OFFSET: usize = #addr;
pub struct #upper_camel_name<'a, T: AxiC2c1Spec> { pub struct #upper_camel_name<'a, M: Mmapped<U = u32>> {
mem_ptr: *mut u32, mem_ptr: *mut u32,
_marker: PhantomData<&'a mut #parent_struct>, _marker: PhantomData<&'a mut #parent_struct>,
} }
impl<T: AxiC2c1Spec> #upper_camel_name<'_, T> { impl<M: Mmapped<U = u32>> #upper_camel_name<'_, M> {
pub(crate) fn new(parent_ptr: *mut u32) -> Self { pub(crate) fn new(parent_ptr: *mut u32) -> Self {
#upper_camel_name { #upper_camel_name {
mem_ptr: unsafe { parent_ptr.add(OFFSET) }, mem_ptr: unsafe { parent_ptr.add(OFFSET) },
@ -469,16 +469,16 @@ impl CodeGen for Register {
use std::marker::PhantomData; use std::marker::PhantomData;
use crate::axic2c1::spec::AxiC2c1Spec; use mmapped_reg::mmapped::Mmapped;
const OFFSET: usize = #addr; const OFFSET: usize = #addr;
pub struct #reg_name<'a, T: AxiC2c1Spec> { pub struct #reg_name<'a, M: Mmapped<U = u32>> {
mem_ptr: *mut u32, mem_ptr: *mut u32,
_marker: PhantomData<&'a mut super::#parent_name<'a, T>>, _marker: PhantomData<&'a mut super::#parent_name<'a, M>>,
} }
impl<T: AxiC2c1Spec> #reg_name<'_, T> { impl<M: Mmapped<U = u32>> #reg_name<'_, M> {
pub(crate) fn new(parent_ptr: *mut u32) -> Self { pub(crate) fn new(parent_ptr: *mut u32) -> Self {
#reg_name { #reg_name {
mem_ptr: unsafe { parent_ptr.add(OFFSET) }, mem_ptr: unsafe { parent_ptr.add(OFFSET) },

View file

@ -11,19 +11,19 @@ pub(super) fn gen_registerspec_impl(
) -> TokenStream { ) -> TokenStream {
let impl_rw = match modf { let impl_rw = match modf {
RwSpecifier::R => quote! { RwSpecifier::R => quote! {
impl<T: AxiC2c1Spec> crate::register_spec::Readable for #reg_name<'_, T> {} impl<M: Mmapped<U = u32>> crate::register_spec::Readable for #reg_name<'_, M> {}
}, },
RwSpecifier::W => quote! { RwSpecifier::W => quote! {
impl<T: AxiC2c1Spec> crate::register_spec::Writable for #reg_name<'_, T> {} impl<M: Mmapped<U = u32>> crate::register_spec::Writable for #reg_name<'_, M> {}
}, },
RwSpecifier::RW => quote! { RwSpecifier::RW => quote! {
impl<T: AxiC2c1Spec> crate::register_spec::Readable for #reg_name<'_, T> {} impl<M: Mmapped<U = u32>> crate::register_spec::Readable for #reg_name<'_, M> {}
impl<T: AxiC2c1Spec> crate::register_spec::Writable for #reg_name<'_, T> {} impl<M: Mmapped<U = u32>> crate::register_spec::Writable for #reg_name<'_, M> {}
impl<T: AxiC2c1Spec> crate::register_spec::Modifiable for #reg_name<'_, T> {} impl<M: Mmapped<U = u32>> crate::register_spec::Modifiable for #reg_name<'_, M> {}
}, },
}; };
quote! { quote! {
impl<T: AxiC2c1Spec> crate::register_spec::RegisterSpec for #reg_name<'_, T> { impl<M: Mmapped<U = u32>> crate::register_spec::RegisterSpec for #reg_name<'_, M> {
type Ux = #type_ux; type Ux = #type_ux;
type T = #type_t; type T = #type_t;