From 6c3e8f0338a542ad86ccd51e1e0b3ef2859f2a3e Mon Sep 17 00:00:00 2001 From: Tadej Date: Mon, 15 Jun 2026 14:39:00 +0200 Subject: [PATCH 1/2] abstime flag --- openvaf/osdi/header/osdi_0_4.h | 2 ++ openvaf/osdi/src/metadata.rs | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/openvaf/osdi/header/osdi_0_4.h b/openvaf/osdi/header/osdi_0_4.h index b927f2a7..9dee3728 100644 --- a/openvaf/osdi/header/osdi_0_4.h +++ b/openvaf/osdi/header/osdi_0_4.h @@ -226,6 +226,8 @@ typedef struct OsdiDescriptor { OsdiNatureRef* residual_nature; uint32_t *noise_source_type; void (*load_noise_params)(void *inst, void *model, double *power, double *exponent); + + uint32_t device_flags; }OsdiDescriptor; typedef struct OsdiNature { diff --git a/openvaf/osdi/src/metadata.rs b/openvaf/osdi/src/metadata.rs index c74067e7..3bfff723 100644 --- a/openvaf/osdi/src/metadata.rs +++ b/openvaf/osdi/src/metadata.rs @@ -4,7 +4,7 @@ use std::iter::once; use hir::{CompilationDB, ParamSysFun, Type}; use hir_def::db::HirDefDB; use hir_def::ndatable::NDATable; -use hir_lower::CurrentKind; +use hir_lower::{CurrentKind, ParamKind}; use lasso::{Rodeo, Spur}; use llvm_sys::core::{ LLVMConstArray2, LLVMConstInt, LLVMConstPtrToInt, LLVMGetArrayLength2, LLVMGetDataLayoutStr, @@ -401,6 +401,15 @@ impl<'ll> OsdiCompilationUnit<'_, '_, 'll> { .collect(); let (uvec, rvec) = self.unknown_residual_natures(db); + + let mut device_flags = 0u32; + const FLAG_HAS_ABSTIME: u32 = 1 << 0; + module.intern.params.iter().for_each(|(p, _)| { + if let ParamKind::Abstime = p { + device_flags |= FLAG_HAS_ABSTIME; + } + }); + OsdiDescriptor { name: module.info.module.name(db), num_nodes: module.dae_system.unknowns.len() as u32, @@ -457,6 +466,7 @@ impl<'ll> OsdiCompilationUnit<'_, '_, 'll> { residual_nature: rvec, noise_source_type, load_noise_params: self.load_noise_params(), + device_flags: device_flags, } } } From 305e30a47e234dbcbb7876f58fc3dd49ae22ee47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20B=C5=B1rmen?= Date: Wed, 17 Jun 2026 10:46:51 +0200 Subject: [PATCH 2/2] module_flags support cleanup. --- melange/core/src/veriloga/osdi_0_4.rs | 2 ++ openvaf/openvaf/tests/load/osdi_0_4.rs | 2 ++ openvaf/osdi/header/osdi_0_4.h | 5 +++-- openvaf/osdi/src/metadata.rs | 9 ++++----- openvaf/osdi/src/metadata/osdi_0_4.rs | 4 ++++ 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/melange/core/src/veriloga/osdi_0_4.rs b/melange/core/src/veriloga/osdi_0_4.rs index 2e7a6143..382d448e 100644 --- a/melange/core/src/veriloga/osdi_0_4.rs +++ b/melange/core/src/veriloga/osdi_0_4.rs @@ -62,6 +62,7 @@ pub const DOMAIN_CONTINUOUS: u32 = 2; pub const NOISE_TYPE_WHITE: u32 = 0; pub const NOISE_TYPE_FLICKER: u32 = 1; pub const NOISE_TYPE_TABLE: u32 = 2; +pub const MODULEFLAG_ABSTIME: u32 = 1; #[repr(C)] pub struct OsdiLimFunction { @@ -195,6 +196,7 @@ pub struct OsdiDescriptor { pub residual_nature: *mut OsdiNatureRef, pub noise_source_type: *mut u32, pub load_noise_params: fn(*mut c_void, *mut c_void, *mut f64, *mut f64), + pub module_flags: u32, } impl OsdiDescriptor { pub fn access( diff --git a/openvaf/openvaf/tests/load/osdi_0_4.rs b/openvaf/openvaf/tests/load/osdi_0_4.rs index 2e7a6143..382d448e 100644 --- a/openvaf/openvaf/tests/load/osdi_0_4.rs +++ b/openvaf/openvaf/tests/load/osdi_0_4.rs @@ -62,6 +62,7 @@ pub const DOMAIN_CONTINUOUS: u32 = 2; pub const NOISE_TYPE_WHITE: u32 = 0; pub const NOISE_TYPE_FLICKER: u32 = 1; pub const NOISE_TYPE_TABLE: u32 = 2; +pub const MODULEFLAG_ABSTIME: u32 = 1; #[repr(C)] pub struct OsdiLimFunction { @@ -195,6 +196,7 @@ pub struct OsdiDescriptor { pub residual_nature: *mut OsdiNatureRef, pub noise_source_type: *mut u32, pub load_noise_params: fn(*mut c_void, *mut c_void, *mut f64, *mut f64), + pub module_flags: u32, } impl OsdiDescriptor { pub fn access( diff --git a/openvaf/osdi/header/osdi_0_4.h b/openvaf/osdi/header/osdi_0_4.h index 9dee3728..544c7a20 100644 --- a/openvaf/osdi/header/osdi_0_4.h +++ b/openvaf/osdi/header/osdi_0_4.h @@ -80,6 +80,8 @@ #define NOISE_TYPE_FLICKER 1 #define NOISE_TYPE_TABLE 2 +#define MODULEFLAG_ABSTIME 1 + typedef struct OsdiLimFunction { char *name; uint32_t num_args; @@ -226,8 +228,7 @@ typedef struct OsdiDescriptor { OsdiNatureRef* residual_nature; uint32_t *noise_source_type; void (*load_noise_params)(void *inst, void *model, double *power, double *exponent); - - uint32_t device_flags; + uint32_t module_flags; }OsdiDescriptor; typedef struct OsdiNature { diff --git a/openvaf/osdi/src/metadata.rs b/openvaf/osdi/src/metadata.rs index 3bfff723..2313c134 100644 --- a/openvaf/osdi/src/metadata.rs +++ b/openvaf/osdi/src/metadata.rs @@ -34,7 +34,7 @@ use crate::metadata::osdi_0_4::{ JACOBIAN_ENTRY_RESIST, JACOBIAN_ENTRY_RESIST_CONST, NATREF_DISCIPLINE_FLOW, NATREF_DISCIPLINE_POTENTIAL, NATREF_NONE, NOISE_TYPE_FLICKER, NOISE_TYPE_TABLE, NOISE_TYPE_WHITE, PARA_KIND_INST, PARA_KIND_MODEL, PARA_KIND_OPVAR, PARA_TY_INT, PARA_TY_REAL, - PARA_TY_STR, + PARA_TY_STR,MODULEFLAG_ABSTIME, }; use crate::ty_len; @@ -402,11 +402,10 @@ impl<'ll> OsdiCompilationUnit<'_, '_, 'll> { let (uvec, rvec) = self.unknown_residual_natures(db); - let mut device_flags = 0u32; - const FLAG_HAS_ABSTIME: u32 = 1 << 0; + let mut module_flags = 0u32; module.intern.params.iter().for_each(|(p, _)| { if let ParamKind::Abstime = p { - device_flags |= FLAG_HAS_ABSTIME; + module_flags |= MODULEFLAG_ABSTIME; } }); @@ -466,7 +465,7 @@ impl<'ll> OsdiCompilationUnit<'_, '_, 'll> { residual_nature: rvec, noise_source_type, load_noise_params: self.load_noise_params(), - device_flags: device_flags, + module_flags: module_flags, } } } diff --git a/openvaf/osdi/src/metadata/osdi_0_4.rs b/openvaf/osdi/src/metadata/osdi_0_4.rs index 2b813b67..8b2d5b50 100644 --- a/openvaf/osdi/src/metadata/osdi_0_4.rs +++ b/openvaf/osdi/src/metadata/osdi_0_4.rs @@ -91,6 +91,7 @@ pub const DOMAIN_CONTINUOUS: u32 = 2; pub const NOISE_TYPE_WHITE: u32 = 0; pub const NOISE_TYPE_FLICKER: u32 = 1; pub const NOISE_TYPE_TABLE: u32 = 2; +pub const MODULEFLAG_ABSTIME: u32 = 1; pub struct OsdiLimFunction<'ll> { pub name: String, @@ -415,6 +416,7 @@ pub struct OsdiDescriptor<'ll> { pub residual_nature: Vec, pub noise_source_type: Vec, pub load_noise_params: &'ll llvm_sys::LLVMValue, + pub module_flags: u32, } impl<'ll> OsdiDescriptor<'ll> { pub fn to_ll_val( @@ -483,6 +485,7 @@ impl<'ll> OsdiDescriptor<'ll> { ctx.const_arr_ptr(tys.osdi_nature_ref, &arr_47), ctx.const_arr_ptr(ctx.ty_int(), &arr_48), self.load_noise_params, + ctx.const_unsigned_int(self.module_flags), ]; let ty = tys.osdi_descriptor; ctx.const_struct(ty, &fields) @@ -542,6 +545,7 @@ impl OsdiTyBuilder<'_, '_, '_> { ctx.ty_ptr(), ctx.ty_ptr(), ctx.ty_ptr(), + ctx.ty_int(), ]; let ty = ctx.ty_struct("OsdiDescriptor", &fields); self.osdi_descriptor = Some(ty);