OpenVAF-reloaded compiled model support.
This commit is contained in:
parent
368c59466b
commit
b40dcaa18d
|
|
@ -312,6 +312,10 @@ static size_t calc_osdi_noise_off(const OsdiDescriptor *descr) {
|
||||||
} \
|
} \
|
||||||
const ty *name = (ty *)sym;
|
const ty *name = (ty *)sym;
|
||||||
|
|
||||||
|
#define GET_PTR_NOCHECK(name, ty) \
|
||||||
|
sym = GET_SYM(handle, STRINGIFY(name)); \
|
||||||
|
const ty *name = (ty *)sym;
|
||||||
|
|
||||||
#define INIT_CALLBACK(name, ty) \
|
#define INIT_CALLBACK(name, ty) \
|
||||||
sym = GET_SYM(handle, STRINGIFY(name)); \
|
sym = GET_SYM(handle, STRINGIFY(name)); \
|
||||||
if (sym) { \
|
if (sym) { \
|
||||||
|
|
@ -373,17 +377,39 @@ extern OsdiObjectFile load_object_file(const char *input) {
|
||||||
return EMPTY_OBJECT;
|
return EMPTY_OBJECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try to get OSDI_DESCRIPTOR_SIZE
|
||||||
|
GET_PTR_NOCHECK(OSDI_DESCRIPTOR_SIZE, uint32_t);
|
||||||
|
size_t descriptor_size;
|
||||||
|
|
||||||
|
// Get major and minor OSDI version
|
||||||
GET_CONST(OSDI_VERSION_MAJOR, uint32_t);
|
GET_CONST(OSDI_VERSION_MAJOR, uint32_t);
|
||||||
GET_CONST(OSDI_VERSION_MINOR, uint32_t);
|
GET_CONST(OSDI_VERSION_MINOR, uint32_t);
|
||||||
|
|
||||||
|
if (OSDI_DESCRIPTOR_SIZE) {
|
||||||
|
// This must be openvaf-reloaded
|
||||||
|
// Must be version>=0.4
|
||||||
|
if (!(
|
||||||
|
(OSDI_VERSION_MAJOR == 0 && OSDI_VERSION_MINOR >= 4) ||
|
||||||
|
OSDI_VERSION_MAJOR >= 1
|
||||||
|
)) {
|
||||||
|
printf("NGSPICE supports OpenVAF-reloaded OSDI >= 0.4 but \"%s\" uses v%d.%d!",
|
||||||
|
path, OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR);
|
||||||
|
txfree(path);
|
||||||
|
return INVALID_OBJECT;
|
||||||
|
}
|
||||||
|
descriptor_size = *OSDI_DESCRIPTOR_SIZE;
|
||||||
|
} else {
|
||||||
|
// Original OpenVAF, must be version==0.3
|
||||||
if (OSDI_VERSION_MAJOR != OSDI_VERSION_MAJOR_CURR ||
|
if (OSDI_VERSION_MAJOR != OSDI_VERSION_MAJOR_CURR ||
|
||||||
OSDI_VERSION_MINOR != OSDI_VERSION_MINOR_CURR) {
|
OSDI_VERSION_MINOR != OSDI_VERSION_MINOR_CURR) {
|
||||||
printf("NGSPICE only supports OSDI v%d.%d but \"%s\" targets v%d.%d!",
|
printf("NGSPICE only supports OSDI v%d.%d but \"%s\" uses v%d.%d!",
|
||||||
OSDI_VERSION_MAJOR_CURR, OSDI_VERSION_MINOR_CURR, path,
|
OSDI_VERSION_MAJOR_CURR, OSDI_VERSION_MINOR_CURR, path,
|
||||||
OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR);
|
OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR);
|
||||||
txfree(path);
|
txfree(path);
|
||||||
return INVALID_OBJECT;
|
return INVALID_OBJECT;
|
||||||
}
|
}
|
||||||
|
descriptor_size = sizeof(OsdiDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
GET_CONST(OSDI_NUM_DESCRIPTORS, uint32_t);
|
GET_CONST(OSDI_NUM_DESCRIPTORS, uint32_t);
|
||||||
GET_PTR(OSDI_DESCRIPTORS, OsdiDescriptor);
|
GET_PTR(OSDI_DESCRIPTORS, OsdiDescriptor);
|
||||||
|
|
@ -421,8 +447,10 @@ extern OsdiObjectFile load_object_file(const char *input) {
|
||||||
|
|
||||||
OsdiRegistryEntry *dst = TMALLOC(OsdiRegistryEntry, OSDI_NUM_DESCRIPTORS);
|
OsdiRegistryEntry *dst = TMALLOC(OsdiRegistryEntry, OSDI_NUM_DESCRIPTORS);
|
||||||
|
|
||||||
|
char* desc_ptr = (char*)OSDI_DESCRIPTORS;
|
||||||
for (uint32_t i = 0; i < OSDI_NUM_DESCRIPTORS; i++) {
|
for (uint32_t i = 0; i < OSDI_NUM_DESCRIPTORS; i++) {
|
||||||
const OsdiDescriptor *descr = &OSDI_DESCRIPTORS[i];
|
const OsdiDescriptor *descr = (OsdiDescriptor*)desc_ptr;
|
||||||
|
desc_ptr += descriptor_size;
|
||||||
|
|
||||||
uint32_t dt = descr->num_params + descr->num_opvars;
|
uint32_t dt = descr->num_params + descr->num_opvars;
|
||||||
bool has_m = false;
|
bool has_m = false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue