Fix for all zero mask
authoreddiehung <e.hung@imperial.ac.uk>
Sun, 3 May 2015 11:53:09 +0000 (12:53 +0100)
committereddiehung <e.hung@imperial.ac.uk>
Sun, 3 May 2015 11:53:09 +0000 (12:53 +0100)
Makefile
backends/blif/blif.cc

index f1188da2ee16d506fe7b66f42c438e25444f5ba4..d41bec1875be83c313f374b17b935168b61dec59 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 
-CONFIG := clang
+CONFIG := icc
 # CONFIG := gcc
 # CONFIG := gcc-4.6
 # CONFIG := emcc
@@ -109,6 +109,10 @@ ABCMKARGS += ARCHFLAGS="-DSIZEOF_VOID_P=4 -DSIZEOF_LONG=4 -DSIZEOF_INT=4 -DWIN32
 ABCMKARGS += LIBS="lib/x86/pthreadVC2.lib -s" READLINE=0 CC="$(CXX)" CXX="$(CXX)"
 EXE = .exe
 
+else ifeq ($(CONFIG),icc)
+CXX = icpc
+CXXFLAGS += -std=gnu++0x -Os
+
 else ifneq ($(CONFIG),none)
 $(error Invalid CONFIG setting '$(CONFIG)'. Valid values: clang, gcc, gcc-4.6, emcc, none)
 endif
index 3a4618a901cfac28f033dfebb352f814f5349d10..2734ca32182552f999531c326eb4bff06e80a373 100644 (file)
@@ -234,13 +234,24 @@ struct BlifDumper
                                f << stringf(" %s", cstr(output));
                                f << stringf("\n");
                                RTLIL::SigSpec mask = cell->parameters.at("\\LUT");
+                               bool one = false;
                                for (int i = 0; i < (1 << width); i++)
                                        if (mask[i] == RTLIL::S1) {
                                                for (int j = width-1; j >= 0; j--) {
                                                        f << ((i>>j)&1 ? '1' : '0');
                                                }
                                                f << " 1\n";
+                                               one = true;
                                        }
+                               /* For some reason, sometimes we get LUTs with
+                                * an all zero mask, which won't give any
+                                * .names entries, so write one entry with
+                                * all don't cares */
+                               if (!one) {
+                                       for (int j = width-1; j >= 0; j--)
+                                               f << '-';
+                                       f << " 0\n";
+                               }
                                continue;
                        }