mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	Add YOSYS_NO_IDS_REFCNT configuration macro
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
		
							parent
							
								
									390bf459fb
								
							
						
					
					
						commit
						b25cf36856
					
				
					 2 changed files with 25 additions and 2 deletions
				
			
		| 
						 | 
					@ -29,10 +29,12 @@
 | 
				
			||||||
YOSYS_NAMESPACE_BEGIN
 | 
					YOSYS_NAMESPACE_BEGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RTLIL::IdString::destruct_guard_t RTLIL::IdString::destruct_guard;
 | 
					RTLIL::IdString::destruct_guard_t RTLIL::IdString::destruct_guard;
 | 
				
			||||||
std::vector<int> RTLIL::IdString::global_refcount_storage_;
 | 
					 | 
				
			||||||
std::vector<char*> RTLIL::IdString::global_id_storage_;
 | 
					std::vector<char*> RTLIL::IdString::global_id_storage_;
 | 
				
			||||||
dict<char*, int, hash_cstr_ops> RTLIL::IdString::global_id_index_;
 | 
					dict<char*, int, hash_cstr_ops> RTLIL::IdString::global_id_index_;
 | 
				
			||||||
 | 
					#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
 | 
					std::vector<int> RTLIL::IdString::global_refcount_storage_;
 | 
				
			||||||
std::vector<int> RTLIL::IdString::global_free_idx_list_;
 | 
					std::vector<int> RTLIL::IdString::global_free_idx_list_;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#ifdef YOSYS_USE_STICKY_IDS
 | 
					#ifdef YOSYS_USE_STICKY_IDS
 | 
				
			||||||
int RTLIL::IdString::last_created_idx_[8];
 | 
					int RTLIL::IdString::last_created_idx_[8];
 | 
				
			||||||
int RTLIL::IdString::last_created_idx_ptr_;
 | 
					int RTLIL::IdString::last_created_idx_ptr_;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,6 +79,7 @@ namespace RTLIL
 | 
				
			||||||
		#undef YOSYS_XTRACE_GET_PUT
 | 
							#undef YOSYS_XTRACE_GET_PUT
 | 
				
			||||||
		#undef YOSYS_SORT_ID_FREE_LIST
 | 
							#undef YOSYS_SORT_ID_FREE_LIST
 | 
				
			||||||
		#undef YOSYS_USE_STICKY_IDS
 | 
							#undef YOSYS_USE_STICKY_IDS
 | 
				
			||||||
 | 
							#undef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// the global id string cache
 | 
							// the global id string cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,10 +89,12 @@ namespace RTLIL
 | 
				
			||||||
			~destruct_guard_t() { ok = false; }
 | 
								~destruct_guard_t() { ok = false; }
 | 
				
			||||||
		} destruct_guard;
 | 
							} destruct_guard;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		static std::vector<int> global_refcount_storage_;
 | 
					 | 
				
			||||||
		static std::vector<char*> global_id_storage_;
 | 
							static std::vector<char*> global_id_storage_;
 | 
				
			||||||
		static dict<char*, int, hash_cstr_ops> global_id_index_;
 | 
							static dict<char*, int, hash_cstr_ops> global_id_index_;
 | 
				
			||||||
 | 
						#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
 | 
							static std::vector<int> global_refcount_storage_;
 | 
				
			||||||
		static std::vector<int> global_free_idx_list_;
 | 
							static std::vector<int> global_free_idx_list_;
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#ifdef YOSYS_USE_STICKY_IDS
 | 
						#ifdef YOSYS_USE_STICKY_IDS
 | 
				
			||||||
		static int last_created_idx_ptr_;
 | 
							static int last_created_idx_ptr_;
 | 
				
			||||||
| 
						 | 
					@ -129,7 +132,9 @@ namespace RTLIL
 | 
				
			||||||
		static inline int get_reference(int idx)
 | 
							static inline int get_reference(int idx)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (idx) {
 | 
								if (idx) {
 | 
				
			||||||
 | 
							#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
				global_refcount_storage_[idx]++;
 | 
									global_refcount_storage_[idx]++;
 | 
				
			||||||
 | 
							#endif
 | 
				
			||||||
		#ifdef YOSYS_XTRACE_GET_PUT
 | 
							#ifdef YOSYS_XTRACE_GET_PUT
 | 
				
			||||||
				if (yosys_xtrace)
 | 
									if (yosys_xtrace)
 | 
				
			||||||
					log("#X# GET-BY-INDEX '%s' (index %d, refcount %d)\n", global_id_storage_.at(idx), idx, global_refcount_storage_.at(idx));
 | 
										log("#X# GET-BY-INDEX '%s' (index %d, refcount %d)\n", global_id_storage_.at(idx), idx, global_refcount_storage_.at(idx));
 | 
				
			||||||
| 
						 | 
					@ -150,7 +155,9 @@ namespace RTLIL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			auto it = global_id_index_.find((char*)p);
 | 
								auto it = global_id_index_.find((char*)p);
 | 
				
			||||||
			if (it != global_id_index_.end()) {
 | 
								if (it != global_id_index_.end()) {
 | 
				
			||||||
 | 
							#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
				global_refcount_storage_.at(it->second)++;
 | 
									global_refcount_storage_.at(it->second)++;
 | 
				
			||||||
 | 
							#endif
 | 
				
			||||||
		#ifdef YOSYS_XTRACE_GET_PUT
 | 
							#ifdef YOSYS_XTRACE_GET_PUT
 | 
				
			||||||
				if (yosys_xtrace)
 | 
									if (yosys_xtrace)
 | 
				
			||||||
					log("#X# GET-BY-NAME '%s' (index %d, refcount %d)\n", global_id_storage_.at(it->second), it->second, global_refcount_storage_.at(it->second));
 | 
										log("#X# GET-BY-NAME '%s' (index %d, refcount %d)\n", global_id_storage_.at(it->second), it->second, global_refcount_storage_.at(it->second));
 | 
				
			||||||
| 
						 | 
					@ -158,6 +165,7 @@ namespace RTLIL
 | 
				
			||||||
				return it->second;
 | 
									return it->second;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
			if (global_free_idx_list_.empty()) {
 | 
								if (global_free_idx_list_.empty()) {
 | 
				
			||||||
				if (global_id_storage_.empty()) {
 | 
									if (global_id_storage_.empty()) {
 | 
				
			||||||
					global_refcount_storage_.push_back(0);
 | 
										global_refcount_storage_.push_back(0);
 | 
				
			||||||
| 
						 | 
					@ -175,6 +183,15 @@ namespace RTLIL
 | 
				
			||||||
			global_id_storage_.at(idx) = strdup(p);
 | 
								global_id_storage_.at(idx) = strdup(p);
 | 
				
			||||||
			global_id_index_[global_id_storage_.at(idx)] = idx;
 | 
								global_id_index_[global_id_storage_.at(idx)] = idx;
 | 
				
			||||||
			global_refcount_storage_.at(idx)++;
 | 
								global_refcount_storage_.at(idx)++;
 | 
				
			||||||
 | 
							#else
 | 
				
			||||||
 | 
								if (global_id_storage_.empty()) {
 | 
				
			||||||
 | 
									global_id_storage_.push_back((char*)"");
 | 
				
			||||||
 | 
									global_id_index_[global_id_storage_.back()] = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								int idx = global_id_storage_.size();
 | 
				
			||||||
 | 
								global_id_storage_.push_back(strdup(p));
 | 
				
			||||||
 | 
								global_id_index_[global_id_storage_.back()] = idx;
 | 
				
			||||||
 | 
							#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (yosys_xtrace) {
 | 
								if (yosys_xtrace) {
 | 
				
			||||||
				log("#X# New IdString '%s' with index %d.\n", p, idx);
 | 
									log("#X# New IdString '%s' with index %d.\n", p, idx);
 | 
				
			||||||
| 
						 | 
					@ -198,6 +215,7 @@ namespace RTLIL
 | 
				
			||||||
			return idx;
 | 
								return idx;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#ifndef YOSYS_NO_IDS_REFCNT
 | 
				
			||||||
		static inline void put_reference(int idx)
 | 
							static inline void put_reference(int idx)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// put_reference() may be called from destructors after the destructor of
 | 
								// put_reference() may be called from destructors after the destructor of
 | 
				
			||||||
| 
						 | 
					@ -228,6 +246,9 @@ namespace RTLIL
 | 
				
			||||||
			global_id_storage_.at(idx) = nullptr;
 | 
								global_id_storage_.at(idx) = nullptr;
 | 
				
			||||||
			global_free_idx_list_.push_back(idx);
 | 
								global_free_idx_list_.push_back(idx);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						#else
 | 
				
			||||||
 | 
							static inline void put_reference(int) { }
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// the actual IdString object is just is a single int
 | 
							// the actual IdString object is just is a single int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue