diff --git a/expr_synth.cc b/expr_synth.cc index 340341b8b..4e506bacd 100644 --- a/expr_synth.cc +++ b/expr_synth.cc @@ -871,6 +871,12 @@ NetNet* NetEUReduce::synthesize(Design*des, NetScope*scope) if (isig == 0) return 0; if (isig->data_type() == IVL_VT_REAL) { + if (op() == '!') { + cerr << get_fileline() << ": sorry: ! is currently " + "unsupported for real values." << endl; + des->errors += 1; + return 0; + } cerr << get_fileline() << ": error: reduction operator (" << human_readable_op(op_) << ") may not have a REAL operand." << endl; diff --git a/netmisc.cc b/netmisc.cc index 37d781a29..b223795d3 100644 --- a/netmisc.cc +++ b/netmisc.cc @@ -378,26 +378,28 @@ const char *human_readable_op(const char op) { const char *type; switch (op) { - case '~': type = "~"; break; // Negation + case '~': type = "~"; break; // Negation - case '^': type = "^"; break; // XOR - case 'X': type = "~^"; break; // XNOR - case '&': type = "&"; break; // Bitwise AND - case 'A': type = "~&"; break; // NAND (~&) - case '|': type = "|"; break; // Bitwise OR - case 'O': type = "~|"; break; // NOR + case '^': type = "^"; break; // XOR + case 'X': type = "~^"; break; // XNOR + case '&': type = "&"; break; // Bitwise AND + case 'A': type = "~&"; break; // NAND (~&) + case '|': type = "|"; break; // Bitwise OR + case 'O': type = "~|"; break; // NOR - case 'a': type = "&&"; break; // Logical AND - case 'o': type = "||"; break; // Logical OR + case '!': type = "!"; break; // Logical NOT + case 'a': type = "&&"; break; // Logical AND + case 'o': type = "||"; break; // Logical OR - case 'E': type = "==="; break; // Case equality - case 'N': type = "!=="; break; // Case inequality + case 'E': type = "==="; break; // Case equality + case 'N': type = "!=="; break; // Case inequality - case 'l': type = "<<(<)"; break; // Left shifts - case 'r': type = ">>"; break; // Logical right shift - case 'R': type = ">>>"; break; // Arithmetic right shift + case 'l': type = "<<(<)"; break; // Left shifts + case 'r': type = ">>"; break; // Logical right shift + case 'R': type = ">>>"; break; // Arithmetic right shift - default: assert(0); + default: + assert(0); } return type; }