mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	cxxrtl: Fix value::ctlz
This commit is contained in:
		
							parent
							
								
									ded63bedd5
								
							
						
					
					
						commit
						d7cb6981b5
					
				
					 2 changed files with 9 additions and 2 deletions
				
			
		|  | @ -511,7 +511,8 @@ struct value : public expr_base<value<Bits>> { | ||||||
| 		for (size_t n = 0; n < chunks; n++) { | 		for (size_t n = 0; n < chunks; n++) { | ||||||
| 			chunk::type x = data[chunks - 1 - n]; | 			chunk::type x = data[chunks - 1 - n]; | ||||||
| 			// First add to `count` as if the chunk is zero
 | 			// First add to `count` as if the chunk is zero
 | ||||||
| 			count += (n == 0 ? Bits % chunk::bits : chunk::bits); | 			constexpr size_t msb_chunk_bits = Bits % chunk::bits != 0 ? Bits % chunk::bits : chunk::bits; | ||||||
|  | 			count += (n == 0 ? msb_chunk_bits : chunk::bits); | ||||||
| 			// If the chunk isn't zero, correct the `count` value and return
 | 			// If the chunk isn't zero, correct the `count` value and return
 | ||||||
| 			if (x != 0) { | 			if (x != 0) { | ||||||
| 				for (; x != 0; count--) | 				for (; x != 0; count--) | ||||||
|  |  | ||||||
|  | @ -36,4 +36,10 @@ int main() | ||||||
|         cxxrtl::value<64> c = a.sshr(b); |         cxxrtl::value<64> c = a.sshr(b); | ||||||
|         assert(c.get<uint64_t>() == 0xffffffff8abcdef1u); |         assert(c.get<uint64_t>() == 0xffffffff8abcdef1u); | ||||||
|     } |     } | ||||||
| } | 
 | ||||||
|  |     { | ||||||
|  |         // ctlz should work with Bits that are a multiple of chunk size
 | ||||||
|  |         cxxrtl::value<32> a(0x00040000u); | ||||||
|  |         assert(a.ctlz() == 13); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue