From f88378ae616b331d43ccc99797e239785bab7644 Mon Sep 17 00:00:00 2001
From: whitequark <whitequark@whitequark.org>
Date: Fri, 24 Apr 2020 05:50:10 +0000
Subject: [PATCH] cxxrtl: improve printing of narrow memories.

---
 backends/cxxrtl/cxxrtl.cc | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/backends/cxxrtl/cxxrtl.cc b/backends/cxxrtl/cxxrtl.cc
index 89e58622c..74e2a2891 100644
--- a/backends/cxxrtl/cxxrtl.cc
+++ b/backends/cxxrtl/cxxrtl.cc
@@ -726,12 +726,13 @@ struct CxxrtlWorker {
 
 	void dump_const_init(const RTLIL::Const &data, int width, int offset = 0, bool fixed_width = false)
 	{
+		const int CHUNK_SIZE = 32;
 		f << "{";
 		while (width > 0) {
-			const int CHUNK_SIZE = 32;
-			uint32_t chunk = data.extract(offset, width > CHUNK_SIZE ? CHUNK_SIZE : width).as_int();
+			int chunk_width = min(width, CHUNK_SIZE);
+			uint32_t chunk = data.extract(offset, chunk_width).as_int();
 			if (fixed_width)
-				f << stringf("0x%08xu", chunk);
+				f << stringf("0x%.*xu", chunk_width / 4, chunk);
 			else
 				f << stringf("%#xu", chunk);
 			if (width > CHUNK_SIZE)