Merge branch 'v10-branch' of github.com:steveicarus/iverilog into v10-branch
This commit is contained in:
commit
d46e7ace70
22
BUGS.txt
22
BUGS.txt
|
|
@ -116,13 +116,17 @@ programs.
|
|||
|
||||
RESEARCHING EXISTING/PAST BUGS, AND FILING REPORTS
|
||||
|
||||
The URL <http://sourceforge.net/tracker/?group_id=149850> is the main
|
||||
bug tracking system. Once you believe you have found a bug, you may
|
||||
browse the bugs database for existing bugs that may be related to
|
||||
yours. You might find that your bug has already been fixed in a later
|
||||
release or snapshot. If that's the case, then you are set. Also,
|
||||
consider if you are reporting a bug or really asking for a new
|
||||
feature, and use the appropriate tracker.
|
||||
The URL <https://sourceforge.net/p/iverilog/bugs/> is the main
|
||||
bug tracking system, although some users have reported bugs at
|
||||
<https://github.com/steveicarus/iverilog/issues/>. Once you believe
|
||||
you have found a bug, you may browse the bugs database for existing
|
||||
bugs that may be related to yours. You might find that your bug has
|
||||
already been fixed in a later release or snapshot. If that's the case,
|
||||
then you are set. Also, consider if you are reporting a bug or really
|
||||
asking for a new feature, and use the appropriate tracker.
|
||||
|
||||
system (although you will also find bug rep
|
||||
|
||||
|
||||
The bug database supports basic keyword searches, and you can
|
||||
optionally limit your search to active bugs, or fixed bugs. You may
|
||||
|
|
@ -145,7 +149,7 @@ version from git. Please see the developer documentation for more
|
|||
detailed instructions -- <http://iverilog.wikia.com/wiki/>.
|
||||
|
||||
When you make a patch, submit it to the "Patches" tracker at
|
||||
<http://sourceforge.net/tracker/?group_id=149850>. Patches added to
|
||||
<https://sourceforge.net/p/iverilog/patches/>. Patches added to
|
||||
the "Patches" tracker enter the developer workflow, are checked,
|
||||
applied to the appropriate git branch, and are pushed. Then the
|
||||
tracker item is closed.
|
||||
|
|
@ -158,7 +162,7 @@ clarification before applying it.)
|
|||
|
||||
COPYRIGHT ISSUES
|
||||
|
||||
Icarus Verilog is Copyright (c) 1998-2008 Stephen Williams except
|
||||
Icarus Verilog is Copyright (c) 1998-2018 Stephen Williams except
|
||||
where otherwise noted. Minor patches are covered as derivative works
|
||||
(or editorial comment or whatever the appropriate legal term is) and
|
||||
folded into the rest of ivl. However, if a submission can reasonably
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
THE ICARUS VERILOG COMPILATION SYSTEM
|
||||
Copyright 2000-2004 Stephen Williams
|
||||
Copyright 2000-2019 Stephen Williams
|
||||
|
||||
|
||||
1.0 What is ICARUS Verilog?
|
||||
|
|
@ -47,7 +47,7 @@ on a UNIX-like system:
|
|||
|
||||
- bison and flex
|
||||
|
||||
- gperf 2.7
|
||||
- gperf 2.7 or later
|
||||
The lexical analyzer doesn't recognize keywords directly,
|
||||
but instead matches symbols and looks them up in a hash
|
||||
table in order to get the proper lexical code. The gperf
|
||||
|
|
@ -56,7 +56,7 @@ on a UNIX-like system:
|
|||
A version problem with this program is the most common cause
|
||||
of difficulty. See the Icarus Verilog FAQ.
|
||||
|
||||
- readline 4.2
|
||||
- readline 4.2 or later
|
||||
On Linux systems, this usually means the readline-devel
|
||||
rpm. In any case, it is the development headers of readline
|
||||
that are needed.
|
||||
|
|
@ -67,7 +67,7 @@ on a UNIX-like system:
|
|||
If you are building from git, you will also need software to generate
|
||||
the configure scripts.
|
||||
|
||||
- autoconf 2.53
|
||||
- autoconf 2.53 or later
|
||||
This generates configure scripts from configure.in. The 2.53
|
||||
or later versions are known to work, autoconf 2.13 is
|
||||
reported to *not* work.
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ AC_DEFUN([AX_C99_STRTOD],
|
|||
[# On MinGW we need to jump through hoops to get a C99 compliant strtod().
|
||||
# mingw-w64 doesn't need this, and the 64-bit version doesn't support it.
|
||||
case "${host}" in
|
||||
*-*-mingw32)
|
||||
*-pc-mingw32)
|
||||
LDFLAGS+=" -Wl,--undefined=___strtod,--wrap,strtod,--defsym,___wrap_strtod=___strtod"
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
|
|
@ -264,7 +264,7 @@ that contain Verilog source files. During elaboration, the compiler
|
|||
notices the instantiation of undefined module types. If the user
|
||||
specifies library search directories, the compiler will search the
|
||||
directory for files with the name of the missing module type. If it
|
||||
finds such a file, it loads it as a Verilog source file, they tries
|
||||
finds such a file, it loads it as a Verilog source file, then tries
|
||||
again to elaborate the module.
|
||||
|
||||
Library module files should contain only a single module, but this is
|
||||
|
|
|
|||
11
elab_expr.cc
11
elab_expr.cc
|
|
@ -2535,7 +2535,13 @@ NetExpr* PECastSize::elaborate_expr(Design*des, NetScope*scope,
|
|||
ivl_assert(*this, size_);
|
||||
ivl_assert(*this, base_);
|
||||
|
||||
NetExpr*sub = base_->elaborate_expr(des, scope, base_->expr_width(), flags);
|
||||
// When changing size, a cast behaves exactly like an assignment,
|
||||
// so the result size affects the final expression width.
|
||||
unsigned cast_width = base_->expr_width();
|
||||
if (cast_width < expr_width_)
|
||||
cast_width = expr_width_;
|
||||
|
||||
NetExpr*sub = base_->elaborate_expr(des, scope, cast_width, flags);
|
||||
|
||||
// Perform the cast. The extension method (zero/sign), if needed,
|
||||
// depends on the type of the base expression.
|
||||
|
|
@ -2589,7 +2595,7 @@ NetExpr* PECastType::elaborate_expr(Design*des, NetScope*scope,
|
|||
|
||||
// Find rounded up length that can fit the whole casted array of vectors
|
||||
int len = base->expr_width() + vector->packed_width() - 1;
|
||||
if(base->expr_width() > vector->packed_width()) {
|
||||
if(base->expr_width() > (unsigned)vector->packed_width()) {
|
||||
len /= vector->packed_width();
|
||||
} else {
|
||||
len /= base->expr_width();
|
||||
|
|
@ -2753,6 +2759,7 @@ NetExpr* PEConcat::elaborate_expr(Design*, NetScope*,
|
|||
tmp->set_line(*this);
|
||||
return tmp;
|
||||
}
|
||||
// fallthrough
|
||||
default:
|
||||
cerr << get_fileline() << ": internal error: "
|
||||
<< "I don't know how to elaborate(ivl_type_t)"
|
||||
|
|
|
|||
|
|
@ -1201,7 +1201,12 @@ bool PEIdent::elaborate_lval_net_packed_member_(Design*des, NetScope*scope,
|
|||
if (!name_tail.index.empty())
|
||||
use_sel = name_tail.index.back().sel;
|
||||
|
||||
ivl_assert(*this, use_sel == index_component_t::SEL_NONE || use_sel == index_component_t::SEL_BIT);
|
||||
if (use_sel != index_component_t::SEL_NONE && use_sel != index_component_t::SEL_BIT) {
|
||||
cerr << get_fileline() << ": sorry: Assignments to part selects of "
|
||||
"a struct member are not yet supported." << endl;
|
||||
des->errors += 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! name_tail.index.empty()) {
|
||||
|
||||
|
|
|
|||
|
|
@ -1102,6 +1102,7 @@ NetEConst* NetEBShift::eval_arguments_(const NetExpr*l, const NetExpr*r) const
|
|||
break;
|
||||
case 'r':
|
||||
lv.has_sign(false);
|
||||
// fallthrough
|
||||
case 'R':
|
||||
val = cast_to_width(lv >> shift, wid);
|
||||
break;
|
||||
|
|
@ -1553,6 +1554,7 @@ NetEConst* NetEUReduce::eval_arguments_(const NetExpr*ex) const
|
|||
|
||||
case 'A':
|
||||
invert = true;
|
||||
// fallthrough
|
||||
case '&': {
|
||||
res = verinum::V1;
|
||||
for (unsigned idx = 0 ; idx < val.len() ; idx += 1)
|
||||
|
|
@ -1562,6 +1564,7 @@ NetEConst* NetEUReduce::eval_arguments_(const NetExpr*ex) const
|
|||
|
||||
case 'N':
|
||||
invert = true;
|
||||
// fallthrough
|
||||
case '|': {
|
||||
res = verinum::V0;
|
||||
for (unsigned idx = 0 ; idx < val.len() ; idx += 1)
|
||||
|
|
@ -1571,6 +1574,7 @@ NetEConst* NetEUReduce::eval_arguments_(const NetExpr*ex) const
|
|||
|
||||
case 'X':
|
||||
invert = true;
|
||||
// fallthrough
|
||||
case '^': {
|
||||
/* Reduction XOR. */
|
||||
unsigned ones = 0, unknown = 0;
|
||||
|
|
@ -1622,6 +1626,7 @@ NetExpr* NetECast::eval_arguments_(const NetExpr*ex) const
|
|||
res_val = cast_to_width(res_val, expr_width());
|
||||
res = new NetEConst(res_val);
|
||||
}
|
||||
// fallthrough
|
||||
case 'v':
|
||||
if (const NetECReal*val = dynamic_cast<const NetECReal*>(ex)) {
|
||||
verinum res_val(val->value().as_double(), false);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -335,6 +335,7 @@ NetNet* NetEBComp::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
des->errors += 1;
|
||||
return 0;
|
||||
}
|
||||
// fallthrough
|
||||
case 'e': // ==
|
||||
connect(dev->pin_AEB(), osig->pin(0));
|
||||
break;
|
||||
|
|
@ -353,6 +354,7 @@ NetNet* NetEBComp::synthesize(Design*des, NetScope*scope, NetExpr*root)
|
|||
des->errors += 1;
|
||||
return 0;
|
||||
}
|
||||
// fallthrough
|
||||
case 'n': // !=
|
||||
connect(dev->pin_ANEB(), osig->pin(0));
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ LDRELOCFLAGS = @LDRELOCFLAGS@
|
|||
|
||||
LDTARGETFLAGS = @LDTARGETFLAGS@
|
||||
|
||||
CPPFLAGS = $(INCLUDE_PATH) @CPPFLAGS@ @DEFS@ @PICFLAG@
|
||||
CPPFLAGS = $(INCLUDE_PATH) @CPPFLAGS@ @DEFS@ -DICARUS_VPI_CONST=const @PICFLAG@
|
||||
CFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CC@ @CFLAGS@
|
||||
|
||||
A = a_close.o a_compare_handles.o a_configure.o a_fetch_argc.o \
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2014 Michael Ruff (mruff at chiaro.com)
|
||||
* Copyright (c) 2002-2018 Michael Ruff (mruff at chiaro.com)
|
||||
* Michael Runyan (mrunyan at chiaro.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -42,8 +42,9 @@ typedef struct t_pli_data {
|
|||
int paramvc; /* parameter number for misctf */
|
||||
} s_pli_data, *p_pli_data;
|
||||
|
||||
static PLI_INT32 compiletf(char *);
|
||||
static PLI_INT32 calltf(char *);
|
||||
static PLI_INT32 compiletf(ICARUS_VPI_CONST PLI_BYTE8 *);
|
||||
static PLI_INT32 calltf(ICARUS_VPI_CONST PLI_BYTE8 *);
|
||||
static PLI_INT32 sizetf(ICARUS_VPI_CONST PLI_BYTE8 *);
|
||||
static PLI_INT32 callback(p_cb_data);
|
||||
|
||||
/*
|
||||
|
|
@ -150,7 +151,7 @@ void veriusertfs_register_table(p_tfcell vtable)
|
|||
tf_data.tfname = tf->tfname;
|
||||
tf_data.compiletf = compiletf;
|
||||
tf_data.calltf = calltf;
|
||||
tf_data.sizetf = (PLI_INT32 (*)(PLI_BYTE8 *))tf->sizetf;
|
||||
tf_data.sizetf = sizetf;
|
||||
tf_data.user_data = (char *)data;
|
||||
|
||||
if (pli_trace) {
|
||||
|
|
@ -180,7 +181,7 @@ void veriusertfs_register_table(p_tfcell vtable)
|
|||
* This function calls the veriusertfs checktf and sets up all the
|
||||
* callbacks misctf requires.
|
||||
*/
|
||||
static PLI_INT32 compiletf(char *data)
|
||||
static PLI_INT32 compiletf(ICARUS_VPI_CONST PLI_BYTE8*data)
|
||||
{
|
||||
p_pli_data pli;
|
||||
p_tfcell tf;
|
||||
|
|
@ -260,7 +261,7 @@ static PLI_INT32 compiletf(char *data)
|
|||
/*
|
||||
* This function is the wrapper for the veriusertfs calltf routine.
|
||||
*/
|
||||
static PLI_INT32 calltf(char *data)
|
||||
static PLI_INT32 calltf(ICARUS_VPI_CONST PLI_BYTE8*data)
|
||||
{
|
||||
int rc = 0;
|
||||
p_pli_data pli;
|
||||
|
|
@ -283,6 +284,32 @@ static PLI_INT32 calltf(char *data)
|
|||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is the wrapper for the veriusertfs sizetf routine.
|
||||
*/
|
||||
static PLI_INT32 sizetf(ICARUS_VPI_CONST PLI_BYTE8*data)
|
||||
{
|
||||
int rc = 32;
|
||||
p_pli_data pli;
|
||||
p_tfcell tf;
|
||||
|
||||
/* cast back from opaque */
|
||||
pli = (p_pli_data)data;
|
||||
tf = pli->tf;
|
||||
|
||||
/* execute sizetf */
|
||||
if (tf->sizetf) {
|
||||
if (pli_trace) {
|
||||
fprintf(pli_trace, "Call %s->sizetf(%d, %d)\n",
|
||||
tf->tfname, tf->data, reason_sizetf);
|
||||
}
|
||||
|
||||
rc = tf->sizetf(tf->data, reason_sizetf);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is the wrapper for all the misctf callbacks
|
||||
*/
|
||||
|
|
|
|||
6
main.cc
6
main.cc
|
|
@ -933,16 +933,22 @@ int main(int argc, char*argv[])
|
|||
switch (generation_flag) {
|
||||
case GN_VER2012:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1800_2012;
|
||||
// fallthrough
|
||||
case GN_VER2009:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1800_2009;
|
||||
// fallthrough
|
||||
case GN_VER2005_SV:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1800_2005;
|
||||
// fallthrough
|
||||
case GN_VER2005:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1364_2005;
|
||||
// fallthrough
|
||||
case GN_VER2001:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1364_2001_CONFIG;
|
||||
// fallthrough
|
||||
case GN_VER2001_NOCONFIG:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1364_2001;
|
||||
// fallthrough
|
||||
case GN_VER1995:
|
||||
lexor_keyword_mask |= GN_KEYWORDS_1364_1995;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2012-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2012-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -23,6 +23,10 @@
|
|||
# include <typeinfo>
|
||||
# include "ivl_assert.h"
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#define unique_ptr auto_ptr
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
/*
|
||||
|
|
@ -1018,7 +1022,7 @@ NetExpr* NetESignal::evaluate_function(const LineInfo&loc,
|
|||
NetExpr* NetETernary::evaluate_function(const LineInfo&loc,
|
||||
map<perm_string,LocalVar>&context_map) const
|
||||
{
|
||||
auto_ptr<NetExpr> cval (cond_->evaluate_function(loc, context_map));
|
||||
unique_ptr<NetExpr> cval (cond_->evaluate_function(loc, context_map));
|
||||
|
||||
switch (const_logical(cval.get())) {
|
||||
|
||||
|
|
|
|||
57
parse.y
57
parse.y
|
|
@ -627,6 +627,7 @@ static void current_function_set_statement(const YYLTYPE&loc, vector<Statement*>
|
|||
%type <decl_assignments> list_of_variable_decl_assignments
|
||||
|
||||
%type <data_type> data_type data_type_or_implicit data_type_or_implicit_or_void
|
||||
%type <data_type> simple_type_or_string
|
||||
%type <class_type> class_identifier
|
||||
%type <struct_member> struct_union_member
|
||||
%type <struct_members> struct_union_member_list
|
||||
|
|
@ -1881,6 +1882,60 @@ signing /* IEEE1800-2005: A.2.2.1 */
|
|||
| K_unsigned { $$ = false; }
|
||||
;
|
||||
|
||||
simple_type_or_string /* IEEE1800-2005: A.2.2.1 */
|
||||
: integer_vector_type
|
||||
{ ivl_variable_type_t use_vtype = $1;
|
||||
bool reg_flag = false;
|
||||
if (use_vtype == IVL_VT_NO_TYPE) {
|
||||
use_vtype = IVL_VT_LOGIC;
|
||||
reg_flag = true;
|
||||
}
|
||||
vector_type_t*tmp = new vector_type_t(use_vtype, false, 0);
|
||||
tmp->reg_flag = reg_flag;
|
||||
FILE_NAME(tmp, @1);
|
||||
$$ = tmp;
|
||||
}
|
||||
| non_integer_type
|
||||
{ real_type_t*tmp = new real_type_t($1);
|
||||
FILE_NAME(tmp, @1);
|
||||
$$ = tmp;
|
||||
}
|
||||
| atom2_type
|
||||
{ atom2_type_t*tmp = new atom2_type_t($1, true);
|
||||
FILE_NAME(tmp, @1);
|
||||
$$ = tmp;
|
||||
}
|
||||
| K_integer
|
||||
{ list<pform_range_t>*pd = make_range_from_width(integer_width);
|
||||
vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, true, pd);
|
||||
tmp->reg_flag = true;
|
||||
tmp->integer_flag = true;
|
||||
$$ = tmp;
|
||||
}
|
||||
| K_time
|
||||
{ list<pform_range_t>*pd = make_range_from_width(64);
|
||||
vector_type_t*tmp = new vector_type_t(IVL_VT_LOGIC, false, pd);
|
||||
tmp->reg_flag = !gn_system_verilog();
|
||||
$$ = tmp;
|
||||
}
|
||||
| TYPE_IDENTIFIER
|
||||
{ $$ = $1.type;
|
||||
delete[]$1.text;
|
||||
}
|
||||
| PACKAGE_IDENTIFIER K_SCOPE_RES
|
||||
{ lex_in_package_scope($1); }
|
||||
TYPE_IDENTIFIER
|
||||
{ lex_in_package_scope(0);
|
||||
$$ = $4.type;
|
||||
delete[]$4.text;
|
||||
}
|
||||
| K_string
|
||||
{ string_type_t*tmp = new string_type_t;
|
||||
FILE_NAME(tmp, @1);
|
||||
$$ = tmp;
|
||||
}
|
||||
;
|
||||
|
||||
statement /* IEEE1800-2005: A.6.4 */
|
||||
: attribute_list_opt statement_item
|
||||
{ pform_bind_attributes($2->attributes, $1);
|
||||
|
|
@ -3773,7 +3828,7 @@ expr_primary
|
|||
}
|
||||
}
|
||||
|
||||
| data_type '\'' '(' expression ')'
|
||||
| simple_type_or_string '\'' '(' expression ')'
|
||||
{ PExpr*base = $4;
|
||||
if (gn_system_verilog()) {
|
||||
PECastType*tmp = new PECastType($1, base);
|
||||
|
|
|
|||
|
|
@ -153,6 +153,11 @@ void pform_package_import(const struct vlltype&, PPackage*pkg, const char*ident)
|
|||
|
||||
scope->imports[cur->first] = pkg;
|
||||
}
|
||||
|
||||
for (set<enum_type_t*>::const_iterator cur = pkg->enum_sets.begin()
|
||||
; cur != pkg->enum_sets.end() ; ++ cur) {
|
||||
scope->enum_sets.insert(*cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_pform_types_H
|
||||
#define IVL_pform_types_H
|
||||
/*
|
||||
* Copyright (c) 2007-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2007-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -33,6 +33,10 @@
|
|||
# include <map>
|
||||
# include <memory>
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#define unique_ptr auto_ptr
|
||||
#endif
|
||||
|
||||
/*
|
||||
* parse-form types.
|
||||
*/
|
||||
|
|
@ -117,7 +121,7 @@ struct name_component_t {
|
|||
struct decl_assignment_t {
|
||||
perm_string name;
|
||||
std::list<pform_range_t>index;
|
||||
std::auto_ptr<PExpr> expr;
|
||||
std::unique_ptr<PExpr> expr;
|
||||
};
|
||||
|
||||
struct pform_tf_port_t {
|
||||
|
|
@ -170,14 +174,14 @@ struct enum_type_t : public data_type_t {
|
|||
ivl_variable_type_t base_type;
|
||||
bool signed_flag;
|
||||
bool integer_flag; // True if "integer" was used
|
||||
std::auto_ptr< list<pform_range_t> > range;
|
||||
std::auto_ptr< list<named_pexpr_t> > names;
|
||||
std::unique_ptr< list<pform_range_t> > range;
|
||||
std::unique_ptr< list<named_pexpr_t> > names;
|
||||
LineInfo li;
|
||||
};
|
||||
|
||||
struct struct_member_t : public LineInfo {
|
||||
std::auto_ptr<data_type_t> type;
|
||||
std::auto_ptr< list<decl_assignment_t*> > names;
|
||||
std::unique_ptr<data_type_t> type;
|
||||
std::unique_ptr< list<decl_assignment_t*> > names;
|
||||
void pform_dump(std::ostream&out, unsigned indent) const;
|
||||
};
|
||||
|
||||
|
|
@ -188,7 +192,7 @@ struct struct_type_t : public data_type_t {
|
|||
|
||||
bool packed_flag;
|
||||
bool union_flag;
|
||||
std::auto_ptr< list<struct_member_t*> > members;
|
||||
std::unique_ptr< list<struct_member_t*> > members;
|
||||
};
|
||||
|
||||
struct atom2_type_t : public data_type_t {
|
||||
|
|
@ -234,7 +238,7 @@ struct vector_type_t : public data_type_t {
|
|||
bool reg_flag; // True if "reg" was used
|
||||
bool integer_flag; // True if "integer" was used
|
||||
bool implicit_flag; // True if this type is implicitly logic/reg
|
||||
std::auto_ptr< list<pform_range_t> > pdims;
|
||||
std::unique_ptr< list<pform_range_t> > pdims;
|
||||
};
|
||||
|
||||
struct array_base_t : public data_type_t {
|
||||
|
|
@ -243,7 +247,7 @@ struct array_base_t : public data_type_t {
|
|||
: base_type(btype), dims(pd) { }
|
||||
|
||||
data_type_t*base_type;
|
||||
std::auto_ptr< list<pform_range_t> > dims;
|
||||
std::unique_ptr< list<pform_range_t> > dims;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -376,4 +380,8 @@ extern std::ostream& operator<< (std::ostream&out, const pform_name_t&);
|
|||
extern std::ostream& operator<< (std::ostream&out, const name_component_t&that);
|
||||
extern std::ostream& operator<< (std::ostream&out, const index_component_t&that);
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#undef unique_ptr
|
||||
#endif
|
||||
|
||||
#endif /* IVL_pform_types_H */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2018 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -1457,6 +1457,7 @@ extern "C" unsigned ivl_lpm_selects(ivl_lpm_t net)
|
|||
case IVL_LPM_CONCATZ:
|
||||
cerr << "error: ivl_lpm_selects() is no longer supported for "
|
||||
"IVL_LPM_CONCAT, use ivl_lpm_size() instead." << endl;
|
||||
// fallthrough
|
||||
default:
|
||||
assert(0);
|
||||
return 0;
|
||||
|
|
|
|||
3
t-dll.cc
3
t-dll.cc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2018 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2013 / Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
|
|
@ -2489,6 +2489,7 @@ void dll_target::scope(const NetScope*net)
|
|||
case NetScope::PACKAGE:
|
||||
cerr << "?:?" << ": internal error: "
|
||||
<< "Package scopes should not have parents." << endl;
|
||||
// fallthrough
|
||||
case NetScope::MODULE:
|
||||
scop->type_ = IVL_SCT_MODULE;
|
||||
scop->tname_ = net->module_name();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* VHDL code generation for statements.
|
||||
*
|
||||
* Copyright (C) 2008-2013 Nick Gasson (nick@nickg.me.uk)
|
||||
* Copyright (C) 2008-2018 Nick Gasson (nick@nickg.me.uk)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -683,8 +683,10 @@ static void get_nexuses_from_expr(ivl_expr_t expr, set<ivl_nexus_t> &out)
|
|||
break;
|
||||
case IVL_EX_TERNARY:
|
||||
get_nexuses_from_expr(ivl_expr_oper3(expr), out);
|
||||
// fallthrough
|
||||
case IVL_EX_BINARY:
|
||||
get_nexuses_from_expr(ivl_expr_oper2(expr), out);
|
||||
// fallthrough
|
||||
case IVL_EX_UNARY:
|
||||
get_nexuses_from_expr(ivl_expr_oper1(expr), out);
|
||||
break;
|
||||
|
|
@ -1248,6 +1250,7 @@ static void process_number(vhdl_binop_expr *all, vhdl_var_ref *test,
|
|||
switch (bits[i]) {
|
||||
case 'x':
|
||||
if (is_casez) break;
|
||||
// fallthrough
|
||||
case '?':
|
||||
case 'z':
|
||||
continue; // Ignore these.
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ void vhdl_element::print() const
|
|||
// Trap allocations of vhdl_element subclasses.
|
||||
// This records the pointer allocated in a static field of vhdl_element
|
||||
// so we can delete it just before the code generator exits.
|
||||
void* vhdl_element::operator new(size_t size) throw (bad_alloc)
|
||||
void* vhdl_element::operator new(size_t size)
|
||||
{
|
||||
// Let the default new handle the allocation
|
||||
void* ptr = ::operator new(size);
|
||||
|
|
@ -171,4 +171,3 @@ int vhdl_element::free_all_objects()
|
|||
|
||||
return freed;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class vhdl_element {
|
|||
public:
|
||||
virtual ~vhdl_element() {}
|
||||
|
||||
void* operator new(size_t size) throw (std::bad_alloc);
|
||||
void* operator new(size_t size);
|
||||
void operator delete(void* ptr);
|
||||
|
||||
virtual void emit(std::ostream &of, int level=0) const = 0;
|
||||
|
|
@ -74,4 +74,3 @@ std::string nl_string(int level);
|
|||
void blank_line(std::ostream &of, int level);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2011-2014 Cary R. (cygcary@yahoo.com)
|
||||
* Copyright (C) 2011-2018 Cary R. (cygcary@yahoo.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -447,6 +447,7 @@ static void emit_expr_binary(ivl_scope_t scope, ivl_expr_t expr, unsigned wid,
|
|||
ivl_expr_file(expr), ivl_expr_lineno(expr));
|
||||
vlog_errors += 1;
|
||||
}
|
||||
//fallthrough
|
||||
case '+':
|
||||
case '-':
|
||||
case '*':
|
||||
|
|
@ -492,6 +493,7 @@ static void emit_expr_binary(ivl_scope_t scope, ivl_expr_t expr, unsigned wid,
|
|||
ivl_expr_file(expr), ivl_expr_lineno(expr));
|
||||
vlog_errors += 1;
|
||||
}
|
||||
// fallthrough
|
||||
case 'l':
|
||||
case 'r':
|
||||
emit_expr(scope, oper1, wid, 0, 0, 0);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2011-2015 Cary R. (cygcary@yahoo.com)
|
||||
* Copyright (C) 2011-2018 Cary R. (cygcary@yahoo.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -1055,6 +1055,7 @@ static void emit_lpm_as_ca(ivl_scope_t scope, ivl_lpm_t lpm,
|
|||
"should not be generated.\n",
|
||||
ivl_lpm_file(lpm), ivl_lpm_lineno(lpm));
|
||||
vlog_errors += 1;
|
||||
// fallthrough
|
||||
case IVL_LPM_CONCAT:
|
||||
emit_lpm_concat(scope, lpm);
|
||||
break;
|
||||
|
|
@ -2167,10 +2168,9 @@ void dump_nexus_information(ivl_scope_t scope, ivl_nexus_t nex)
|
|||
case IVL_VT_BOOL: fprintf(stderr, " bool"); break;
|
||||
case IVL_VT_LOGIC: fprintf(stderr, " logic"); break;
|
||||
case IVL_VT_STRING: fprintf(stderr, " string"); break;
|
||||
case IVL_VT_DARRAY: fprintf(stderr, " dynamic array");
|
||||
case IVL_VT_CLASS: fprintf(stderr, " class");
|
||||
case IVL_VT_QUEUE: fprintf(stderr, " queue");
|
||||
break;
|
||||
case IVL_VT_DARRAY: fprintf(stderr, " dynamic array"); break;
|
||||
case IVL_VT_CLASS: fprintf(stderr, " class"); break;
|
||||
case IVL_VT_QUEUE: fprintf(stderr, " queue"); break;
|
||||
}
|
||||
if (ivl_signal_signed(sig)) fprintf(stderr, " <signed>");
|
||||
} else fprintf(stderr, "Error: No/missing information!");
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -823,6 +823,7 @@ static void draw_udp_in_scope(ivl_net_logic_t lptr)
|
|||
* (.resolv, etc.) can be built before we build the .udp call.
|
||||
* This matches what is done for the other primitives.
|
||||
*/
|
||||
assert(ivl_logic_pins(lptr) > 0);
|
||||
ninp = ivl_logic_pins(lptr) - 1;
|
||||
input_strings = calloc(ninp, sizeof(char*));
|
||||
for (pdx = 0 ; pdx < ninp ; pdx += 1) {
|
||||
|
|
@ -885,7 +886,7 @@ static void draw_logic_in_scope(ivl_net_logic_t lptr)
|
|||
ivl_drive_t str1 = ivl_logic_drive1(lptr);
|
||||
|
||||
int level;
|
||||
int ninp;
|
||||
unsigned ninp;
|
||||
const char **input_strings;
|
||||
|
||||
switch (ivl_logic_type(lptr)) {
|
||||
|
|
@ -1018,8 +1019,8 @@ static void draw_logic_in_scope(ivl_net_logic_t lptr)
|
|||
|
||||
/* Get all the input label that I will use for parameters to
|
||||
the functor that I create later. */
|
||||
assert(ivl_logic_pins(lptr) > 0);
|
||||
ninp = ivl_logic_pins(lptr) - 1;
|
||||
assert(ninp >= 0);
|
||||
input_strings = calloc(ninp, sizeof(char*));
|
||||
for (pdx = 0 ; pdx < (unsigned)ninp ; pdx += 1)
|
||||
input_strings[pdx] = draw_net_input(ivl_logic_pin(lptr, pdx+1));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef VERIUSER_H
|
||||
#define VERIUSER_H
|
||||
/*
|
||||
* Copyright (c) 2002-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -159,6 +159,7 @@ extern void veriusertfs_register_table(p_tfcell vtable);
|
|||
|
||||
/* callback reasons */
|
||||
#define reason_checktf 1
|
||||
#define reason_sizetf 2
|
||||
#define reason_calltf 3
|
||||
#define reason_paramvc 7
|
||||
#define reason_synch 8
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef IVL_expression_H
|
||||
#define IVL_expression_H
|
||||
/*
|
||||
* Copyright (c) 2011-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2011-2018 Stephen Williams (steve@icarus.com)
|
||||
* Copyright CERN 2015 / Stephen Williams (steve@icarus.com),
|
||||
* @author Maciej Suminski (maciej.suminski@cern.ch)
|
||||
*
|
||||
|
|
@ -38,6 +38,10 @@ class VTypeArray;
|
|||
class VTypePrimitive;
|
||||
class ExpName;
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#define unique_ptr auto_ptr
|
||||
#endif
|
||||
|
||||
struct ExprVisitor {
|
||||
virtual ~ExprVisitor() {};
|
||||
virtual void operator() (Expression*s) = 0;
|
||||
|
|
@ -255,8 +259,8 @@ class ExpAggregate : public Expression {
|
|||
void dump(ostream&out, int indent) const;
|
||||
|
||||
private:
|
||||
std::auto_ptr<Expression>expr_;
|
||||
std::auto_ptr<prange_t> range_;
|
||||
std::unique_ptr<Expression>expr_;
|
||||
std::unique_ptr<prange_t> range_;
|
||||
private: // not implemented
|
||||
choice_t& operator= (const choice_t&);
|
||||
};
|
||||
|
|
@ -718,7 +722,7 @@ class ExpName : public Expression {
|
|||
const list<index_t*>&indices, int field_size);
|
||||
|
||||
private:
|
||||
std::auto_ptr<ExpName> prefix_;
|
||||
std::unique_ptr<ExpName> prefix_;
|
||||
perm_string name_;
|
||||
Expression*index_;
|
||||
Expression*lsb_;
|
||||
|
|
@ -899,4 +903,8 @@ class ExpTime : public Expression {
|
|||
timeunit_t unit_;
|
||||
};
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
#undef unique_ptr
|
||||
#endif
|
||||
|
||||
#endif /* IVL_expression_H */
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ else
|
|||
INCLUDE_PATH = -I. -I.. -I$(srcdir) -I$(srcdir)/..
|
||||
endif
|
||||
|
||||
CPPFLAGS = $(INCLUDE_PATH) @file64_support@ @CPPFLAGS@ @DEFS@ @PICFLAG@
|
||||
CPPFLAGS = $(INCLUDE_PATH) @file64_support@ @CPPFLAGS@ @DEFS@ -DICARUS_VPI_CONST=const @PICFLAG@
|
||||
CFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CC@ @CFLAGS@
|
||||
CXXFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CXX@ @CXXFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
|
|
|
|||
505
vpi/fstapi.c
505
vpi/fstapi.c
File diff suppressed because it is too large
Load Diff
32
vpi/fstapi.h
32
vpi/fstapi.h
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2009-2017 Tony Bybell.
|
||||
* Copyright (c) 2009-2018 Tony Bybell.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -39,6 +39,7 @@ extern "C" {
|
|||
#define FST_RDLOAD "FSTLOAD | "
|
||||
|
||||
typedef uint32_t fstHandle;
|
||||
typedef uint32_t fstEnumHandle;
|
||||
|
||||
enum fstWriterPackType {
|
||||
FST_WR_PT_ZLIB = 0,
|
||||
|
|
@ -196,9 +197,10 @@ enum fstMiscType {
|
|||
FST_MT_SOURCESTEM = 4, /* use fstWriterSetSourceStem() to emit */
|
||||
FST_MT_SOURCEISTEM = 5, /* use fstWriterSetSourceInstantiationStem() to emit */
|
||||
FST_MT_VALUELIST = 6, /* use fstWriterSetValueList() to emit, followed by fstWriterCreateVar*() */
|
||||
FST_MT_UNKNOWN = 7,
|
||||
FST_MT_ENUMTABLE = 7, /* use fstWriterCreateEnumTable() and fstWriterEmitEnumTableRef() to emit */
|
||||
FST_MT_UNKNOWN = 8,
|
||||
|
||||
FST_MT_MAX = 7
|
||||
FST_MT_MAX = 8
|
||||
};
|
||||
|
||||
enum fstArrayType {
|
||||
|
|
@ -228,7 +230,10 @@ enum fstEnumValueType {
|
|||
FST_EV_SV_UNSIGNED_LONGINT = 12,
|
||||
FST_EV_SV_UNSIGNED_BYTE = 13,
|
||||
|
||||
FST_EV_MAX = 13
|
||||
FST_EV_REG = 14,
|
||||
FST_EV_TIME = 15,
|
||||
|
||||
FST_EV_MAX = 15
|
||||
};
|
||||
|
||||
enum fstPackType {
|
||||
|
|
@ -324,11 +329,21 @@ union {
|
|||
};
|
||||
|
||||
|
||||
struct fstETab
|
||||
{
|
||||
char *name;
|
||||
uint32_t elem_count;
|
||||
char **literal_arr;
|
||||
char **val_arr;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* writer functions
|
||||
*/
|
||||
void fstWriterClose(void *ctx);
|
||||
void * fstWriterCreate(const char *nam, int use_compressed_hier);
|
||||
fstEnumHandle fstWriterCreateEnumTable(void *ctx, const char *name, uint32_t elem_count, unsigned int min_valbits, const char **literal_arr, const char **val_arr);
|
||||
/* used for Verilog/SV */
|
||||
fstHandle fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd,
|
||||
uint32_t len, const char *nam, fstHandle aliasHandle);
|
||||
|
|
@ -337,9 +352,10 @@ fstHandle fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir
|
|||
fstHandle fstWriterCreateVar2(void *ctx, enum fstVarType vt, enum fstVarDir vd,
|
||||
uint32_t len, const char *nam, fstHandle aliasHandle,
|
||||
const char *type, enum fstSupplementalVarType svt, enum fstSupplementalDataType sdt);
|
||||
void fstWriterEmitDumpActive(void *ctx, int enable);
|
||||
void fstWriterEmitEnumTableRef(void *ctx, fstEnumHandle handle);
|
||||
void fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val);
|
||||
void fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len);
|
||||
void fstWriterEmitDumpActive(void *ctx, int enable);
|
||||
void fstWriterEmitTimeChange(void *ctx, uint64_t tim);
|
||||
void fstWriterFlushContext(void *ctx);
|
||||
int fstWriterGetDumpSizeLimitReached(void *ctx);
|
||||
|
|
@ -422,8 +438,12 @@ void fstReaderSetVcdExtensions(void *ctx, int enable);
|
|||
/*
|
||||
* utility functions
|
||||
*/
|
||||
int fstUtilityBinToEsc(unsigned char *d, unsigned char *s, int len);
|
||||
int fstUtilityBinToEscConvertedLen(const unsigned char *s, int len); /* used for mallocs for fstUtilityBinToEsc() */
|
||||
int fstUtilityBinToEsc(unsigned char *d, const unsigned char *s, int len);
|
||||
int fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len);
|
||||
struct fstETab *fstUtilityExtractEnumTableFromString(const char *s);
|
||||
void fstUtilityFreeEnumTable(struct fstETab *etab); /* must use to free fstETab properly */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ if (lo<hi)
|
|||
|
||||
static void wave_msort(struct lxt2_wr_symbol **a, int num)
|
||||
{
|
||||
struct lxt2_wr_symbol **b = malloc(((num/2)+1) * sizeof(struct lxt2_wr_symbol *));
|
||||
struct lxt2_wr_symbol **b = (struct lxt2_wr_symbol**)malloc(((num/2)+1) * sizeof(struct lxt2_wr_symbol *));
|
||||
|
||||
wave_mergesort(a, b, 0, num-1);
|
||||
|
||||
|
|
@ -583,7 +583,7 @@ unsigned int i;
|
|||
if((lt)&&(lt->numfacs))
|
||||
{
|
||||
struct lxt2_wr_symbol *s = lt->symchain;
|
||||
struct lxt2_wr_symbol **aliascache = calloc(lt->numalias ? lt->numalias : 1, sizeof(struct lxt2_wr_symbol *));
|
||||
struct lxt2_wr_symbol **aliascache = (struct lxt2_wr_symbol**)calloc(lt->numalias ? lt->numalias : 1, sizeof(struct lxt2_wr_symbol *));
|
||||
unsigned int aliases_encountered, facs_encountered;
|
||||
|
||||
lt->sorted_facs = (struct lxt2_wr_symbol **)calloc(lt->numfacs, sizeof(struct lxt2_wr_symbol *));
|
||||
|
|
@ -920,7 +920,7 @@ if(flags&LXT2_WR_SYM_F_DOUBLE)
|
|||
s->len = 32;
|
||||
}
|
||||
|
||||
s->value = malloc(s->len + 1);
|
||||
s->value = (char*)malloc(s->len + 1);
|
||||
memset(s->value, lt->initial_value, s->len);
|
||||
s->value[s->len]=0;
|
||||
|
||||
|
|
@ -1017,7 +1017,7 @@ static void lxt2_wr_emit_do_breakfile(struct lxt2_wr_trace *lt)
|
|||
{
|
||||
unsigned int len = strlen(lt->lxtname);
|
||||
int i;
|
||||
char *tname = malloc(len + 30);
|
||||
char *tname = (char*)malloc(len + 30);
|
||||
FILE *f2, *clone;
|
||||
off_t cnt, seg;
|
||||
char buf[32768];
|
||||
|
|
@ -1810,13 +1810,13 @@ while(s->aliased_to) /* find root alias if exists */
|
|||
valuelen = strlen(value); /* ensure string is proper length */
|
||||
if(valuelen == s->len)
|
||||
{
|
||||
vfix = wave_alloca(s->len+1);
|
||||
vfix = (char*)wave_alloca(s->len+1);
|
||||
strcpy(vfix, value);
|
||||
value = vfix;
|
||||
}
|
||||
else
|
||||
{
|
||||
vfix = wave_alloca(s->len+1);
|
||||
vfix = (char*)wave_alloca(s->len+1);
|
||||
|
||||
if(valuelen < s->len)
|
||||
{
|
||||
|
|
@ -2088,7 +2088,7 @@ if((lt)&&(lt->blackout))
|
|||
else
|
||||
{
|
||||
free(s->value);
|
||||
s->value = calloc(1, 1*sizeof(char));
|
||||
s->value = (char*)calloc(1, 1*sizeof(char));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2101,9 +2101,11 @@ if((lt)&&(lt->blackout))
|
|||
{
|
||||
if((!(s->flags&LXT2_WR_SYM_F_ALIAS))&&(s->rows<2))
|
||||
{
|
||||
char tmp[16]; /* To get rid of the warning */
|
||||
if(!(s->flags&(LXT2_WR_SYM_F_DOUBLE|LXT2_WR_SYM_F_STRING)))
|
||||
{
|
||||
lxt2_wr_emit_value_bit_string(lt, s, 0, "x");
|
||||
strcpy(tmp, "x");
|
||||
lxt2_wr_emit_value_bit_string(lt, s, 0, tmp);
|
||||
}
|
||||
else if (s->flags&LXT2_WR_SYM_F_DOUBLE)
|
||||
{
|
||||
|
|
@ -2113,7 +2115,8 @@ if((lt)&&(lt->blackout))
|
|||
}
|
||||
else if (s->flags&LXT2_WR_SYM_F_STRING)
|
||||
{
|
||||
lxt2_wr_emit_value_string(lt, s, 0, "UNDEF");
|
||||
strcpy(tmp, "UNDEF");
|
||||
lxt2_wr_emit_value_string(lt, s, 0, tmp);
|
||||
}
|
||||
}
|
||||
s=s->symchain;
|
||||
|
|
@ -2202,4 +2205,3 @@ if(lt)
|
|||
lt->timezero = timeval;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ extern "C" {
|
|||
#define ftello ftell
|
||||
#endif
|
||||
|
||||
#include <wavealloca.h>
|
||||
#include "wavealloca.h"
|
||||
|
||||
#define LXT2_WR_HDRID (0x1380)
|
||||
#define LXT2_WR_VERSION (0x0001)
|
||||
|
|
@ -314,4 +314,3 @@ int lxt2_wr_emit_value_bit_string(struct lxt2_wr_trace *lt, struct lxt2_wr_sy
|
|||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -228,6 +228,9 @@ static const int LZ4_minLength = (MFLIMIT+1);
|
|||
#define GB *(1U<<30)
|
||||
|
||||
#define MAXD_LOG 16
|
||||
#ifdef MAX_DISTANCE
|
||||
#undef MAX_DISTANCE
|
||||
#endif
|
||||
#define MAX_DISTANCE ((1 << MAXD_LOG) - 1)
|
||||
|
||||
#define ML_BITS 4
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2014 Michael Ruff (mruff at chiaro.com)
|
||||
* Copyright (c) 2003-2018 Michael Ruff (mruff at chiaro.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -90,12 +90,12 @@ static void error_message(vpiHandle callh, const char* msg)
|
|||
vpi_control(vpiFinish, 1);
|
||||
}
|
||||
|
||||
static PLI_INT32 sizetf_32 (PLI_BYTE8*name)
|
||||
static PLI_INT32 sizetf_32 (ICARUS_VPI_CONST PLI_BYTE8*name)
|
||||
{
|
||||
(void)name; /* Parameter is not used. */
|
||||
return 32;
|
||||
}
|
||||
static PLI_INT32 sizetf_64 (PLI_BYTE8*name)
|
||||
static PLI_INT32 sizetf_64 (ICARUS_VPI_CONST PLI_BYTE8*name)
|
||||
{
|
||||
(void)name; /* Parameter is not used. */
|
||||
return 64;
|
||||
|
|
@ -288,4 +288,3 @@ void sys_convert_register(void)
|
|||
res = vpi_register_systf(&tf_data);
|
||||
vpip_make_systf_system_defined(res);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 Martin Whitaker. (icarus@martin-whitaker.me.uk)
|
||||
* Copyright (C) 2012-2018 Martin Whitaker. (icarus@martin-whitaker.me.uk)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -33,6 +33,7 @@ static void check_net_arg(vpiHandle arg, vpiHandle callh, const char *name)
|
|||
case vpiPartSelect:
|
||||
if (vpi_get(vpiType, vpi_handle(vpiParent, arg)) != vpiNet)
|
||||
break;
|
||||
// fallthrough
|
||||
case vpiNet:
|
||||
if (vpi_get(vpiSize, arg) != 1)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2017 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -406,31 +406,31 @@ static unsigned int get_format_char(char **rtn, int ljust, int plus,
|
|||
vpi_printf("WARNING: %s:%d: missing argument for %s%s.\n",
|
||||
info->filename, info->lineno, info->name, fmtb);
|
||||
} else {
|
||||
value.format = vpiStringVal;
|
||||
value.format = vpiIntVal;
|
||||
vpi_get_value(info->items[*idx], &value);
|
||||
if (value.format == vpiSuppressVal) {
|
||||
vpi_printf("WARNING: %s:%d: incompatible value for %s%s.\n",
|
||||
info->filename, info->lineno, info->name, fmtb);
|
||||
} else {
|
||||
char ch = value.value.str[strlen(value.value.str)-1];
|
||||
|
||||
/* If the default buffer is too small, make it big enough. */
|
||||
size = width + 1;
|
||||
if (size > ini_size) result = realloc(result, size*sizeof(char));
|
||||
char ch = value.value.integer;
|
||||
|
||||
/* If the width is less than one then use a width of one. */
|
||||
if (width < 1) width = 1;
|
||||
size = width + 1;
|
||||
assert(size <= ini_size);
|
||||
|
||||
if (ljust == 0) {
|
||||
if (width > 1) {
|
||||
char *cp = malloc((width+1)*sizeof(char));
|
||||
memset(cp, (ld_zero == 1 ? '0': ' '), width-1);
|
||||
cp[width-1] = ch;
|
||||
cp[width] = '\0';
|
||||
sprintf(result, "%*s", width, cp);
|
||||
free(cp);
|
||||
} else sprintf(result, "%c", ch);
|
||||
} else sprintf(result, "%-*c", width, ch);
|
||||
size = strlen(result) + 1;
|
||||
memset(result, (ld_zero == 1 ? '0': ' '), width-1);
|
||||
}
|
||||
result[width-1] = ch;
|
||||
} else {
|
||||
result[0] = ch;
|
||||
if (width > 1) {
|
||||
memset(result+1, ' ', width-1);
|
||||
}
|
||||
}
|
||||
result[width] = '\0';
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -1138,7 +1138,7 @@ static int sys_check_args(vpiHandle callh, vpiHandle argv, const PLI_BYTE8*name,
|
|||
name, vpi_get_str(vpiType, arg));
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
// fallthrough
|
||||
case vpiConstant:
|
||||
case vpiParameter:
|
||||
case vpiNet:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2013 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2003-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -132,7 +132,7 @@ static PLI_INT32 sys_fopen_calltf(ICARUS_VPI_CONST PLI_BYTE8*name)
|
|||
}
|
||||
}
|
||||
if (! fail) break;
|
||||
|
||||
// fallthrough
|
||||
default:
|
||||
vpi_printf("WARNING: %s:%d: ",
|
||||
vpi_get_str(vpiFile, callh),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -549,6 +549,7 @@ static void scan_item(unsigned depth, vpiHandle item, int skip)
|
|||
PLI_INT32 idx = vpi_get(vpiIndex, item);
|
||||
item = vpi_handle_by_index(array, idx);
|
||||
}
|
||||
// fallthrough
|
||||
case vpiIntegerVar:
|
||||
case vpiBitVar:
|
||||
case vpiByteVar:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2003-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -612,6 +612,7 @@ static void scan_item(unsigned depth, vpiHandle item, int skip)
|
|||
PLI_INT32 idx = vpi_get(vpiIndex, item);
|
||||
item = vpi_handle_by_index(array, idx);
|
||||
}
|
||||
// fallthrough
|
||||
case vpiIntegerVar:
|
||||
case vpiBitVar:
|
||||
case vpiByteVar:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2011-2014 Cary R. (cygcary@yahoo.com)
|
||||
* Copyright (C) 2011-2018 Cary R. (cygcary@yahoo.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -781,6 +781,7 @@ static PLI_INT32 fill_variable_with_scaled_time(vpiHandle var, uint64_t c_time)
|
|||
switch (words) {
|
||||
default:
|
||||
val_ptr[1].aval = (c_time >> 32) & 0xffffffff;
|
||||
// fallthrough
|
||||
case 1:
|
||||
val_ptr[0].aval = c_time & 0xffffffff;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2000-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -924,7 +924,7 @@ static PLI_INT32 sys_dist_erlang_calltf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PLI_INT32 sys_rand_func_sizetf(PLI_BYTE8 *name)
|
||||
static PLI_INT32 sys_rand_func_sizetf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
(void)name; /* Parameter is not used. */
|
||||
return 32;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -49,6 +49,7 @@ static void get_mem_params(vpiHandle argv, vpiHandle callh, const char *name,
|
|||
case vpiConstant:
|
||||
case vpiParameter:
|
||||
if (vpi_get(vpiConstType, *start_item) != vpiRealConst) break;
|
||||
// fallthrough
|
||||
case vpiRealVar:
|
||||
vpi_printf("WARNING: %s:%d: ", vpi_get_str(vpiFile, callh),
|
||||
(int)vpi_get(vpiLineNo, callh));
|
||||
|
|
@ -67,6 +68,7 @@ static void get_mem_params(vpiHandle argv, vpiHandle callh, const char *name,
|
|||
if (vpi_get(vpiConstType, *stop_item) != vpiRealConst) {
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
case vpiRealVar:
|
||||
vpi_printf("WARNING: %s:%d: ",
|
||||
vpi_get_str(vpiFile, callh),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2006-2015 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2006-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -219,7 +219,7 @@ static double get_float(struct byte_source *src, unsigned width, int *match)
|
|||
*/
|
||||
static int scan_format_float(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name,
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name,
|
||||
char code)
|
||||
{
|
||||
vpiHandle arg;
|
||||
|
|
@ -266,7 +266,7 @@ static int scan_format_float(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_float_time(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source*src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle scope = vpi_handle(vpiScope, callh);
|
||||
int time_units = vpi_get(vpiTimeUnit, scope);
|
||||
|
|
@ -330,7 +330,7 @@ static int scan_format_float_time(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_base(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name,
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name,
|
||||
const char *match, char code,
|
||||
PLI_INT32 type)
|
||||
{
|
||||
|
|
@ -406,7 +406,7 @@ static int scan_format_base(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_binary(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, int width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
return scan_format_base(callh, argv, src, width, suppress_flag, name,
|
||||
"01xzXZ?_", 'b', vpiBinStrVal);
|
||||
|
|
@ -420,7 +420,7 @@ static int scan_format_binary(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_char(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle arg;
|
||||
s_vpi_value val;
|
||||
|
|
@ -466,7 +466,7 @@ static int scan_format_char(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_decimal(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle arg;
|
||||
char *strval = malloc(1);
|
||||
|
|
@ -585,7 +585,7 @@ static int scan_format_decimal(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_hex(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
return scan_format_base(callh, argv, src, width, suppress_flag, name,
|
||||
"0123456789abcdefxzABCDEFXZ?_", 'h',
|
||||
|
|
@ -597,7 +597,7 @@ static int scan_format_hex(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_octal(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
return scan_format_base(callh, argv, src, width, suppress_flag, name,
|
||||
"01234567xzXZ?_", 'o', vpiOctStrVal);
|
||||
|
|
@ -608,7 +608,7 @@ static int scan_format_octal(vpiHandle callh, vpiHandle argv,
|
|||
* Routine to return the current hierarchical path (implements %m).
|
||||
*/
|
||||
static int scan_format_module_path(vpiHandle callh, vpiHandle argv,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle scope, arg;
|
||||
char *module_path;
|
||||
|
|
@ -650,7 +650,7 @@ static int scan_format_module_path(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_string(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle arg;
|
||||
char *strval = malloc(1);
|
||||
|
|
@ -729,7 +729,7 @@ static int scan_format_string(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_two_state(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle arg;
|
||||
p_vpi_vecval val_ptr;
|
||||
|
|
@ -868,7 +868,7 @@ static int scan_format_two_state(vpiHandle callh, vpiHandle argv,
|
|||
*/
|
||||
static int scan_format_four_state(vpiHandle callh, vpiHandle argv,
|
||||
struct byte_source *src, unsigned width,
|
||||
unsigned suppress_flag, PLI_BYTE8 *name)
|
||||
unsigned suppress_flag, ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
vpiHandle arg;
|
||||
p_vpi_vecval val_ptr;
|
||||
|
|
@ -1006,7 +1006,7 @@ static int scan_format_four_state(vpiHandle callh, vpiHandle argv,
|
|||
* passed to this function, which processes the rest of the function.
|
||||
*/
|
||||
static int scan_format(vpiHandle callh, struct byte_source*src, vpiHandle argv,
|
||||
PLI_BYTE8 *name)
|
||||
ICARUS_VPI_CONST PLI_BYTE8 *name)
|
||||
{
|
||||
s_vpi_value val;
|
||||
vpiHandle item;
|
||||
|
|
@ -1258,6 +1258,7 @@ static int is_assignable_obj(vpiHandle obj)
|
|||
break;
|
||||
case vpiPartSelect:
|
||||
if (! is_assignable_obj(vpi_handle(vpiParent, obj))) break;
|
||||
// fallthrough
|
||||
case vpiIntegerVar:
|
||||
case vpiBitVar:
|
||||
case vpiByteVar:
|
||||
|
|
@ -1403,7 +1404,7 @@ static PLI_INT32 sys_sscanf_compiletf(ICARUS_VPI_CONST PLI_BYTE8 *name)
|
|||
case vpiConstant:
|
||||
case vpiParameter:
|
||||
if (vpi_get(vpiConstType, reg) == vpiStringConst) break;
|
||||
|
||||
// fallthrough
|
||||
default:
|
||||
vpi_printf("ERROR: %s:%d: ", vpi_get_str(vpiFile, callh),
|
||||
(int)vpi_get(vpiLineNo, callh));
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2010-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2010-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -108,6 +108,7 @@ static PLI_INT32 ivl_enum_method_next_prev_compiletf(ICARUS_VPI_CONST PLI_BYTE8*
|
|||
case vpiConstant:
|
||||
case vpiParameter:
|
||||
if (vpi_get(vpiConstType, arg_count) != vpiStringConst) break;
|
||||
// fallthrough
|
||||
default:
|
||||
vpi_printf("%s:%d: compiler error: ",
|
||||
vpi_get_str(vpiFile, sys),
|
||||
|
|
@ -226,7 +227,7 @@ static void fill_handle_with_init(vpiHandle arg, int is_two_state)
|
|||
/*
|
||||
* Implement the next()/prev() enumeration methods.
|
||||
*/
|
||||
static PLI_INT32 ivl_enum_method_next_prev_calltf(PLI_BYTE8*name)
|
||||
static PLI_INT32 ivl_enum_method_next_prev_calltf(ICARUS_VPI_CONST PLI_BYTE8*name)
|
||||
{
|
||||
vpiHandle sys = vpi_handle(vpiSysTfCall, 0);
|
||||
vpiHandle argv = vpi_iterate(vpiArgument, sys);
|
||||
|
|
@ -431,7 +432,7 @@ static PLI_INT32 ivl_enum_method_name_compiletf(ICARUS_VPI_CONST PLI_BYTE8*name)
|
|||
/*
|
||||
* Implement the name() enumeration method.
|
||||
*/
|
||||
static PLI_INT32 ivl_enum_method_name_calltf(PLI_BYTE8*name)
|
||||
static PLI_INT32 ivl_enum_method_name_calltf(ICARUS_VPI_CONST PLI_BYTE8*name)
|
||||
{
|
||||
vpiHandle sys = vpi_handle(vpiSysTfCall, 0);
|
||||
vpiHandle argv = vpi_iterate(vpiArgument, sys);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2008-2014 Cary R. (cygcary@yahoo.com)
|
||||
* Copyright (C) 2008-2018 Cary R. (cygcary@yahoo.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -247,7 +247,7 @@ static PLI_INT32 simparam_str_calltf(ICARUS_VPI_CONST PLI_BYTE8 *name_ext)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PLI_INT32 simparam_str_sizetf(PLI_BYTE8 *name_ext)
|
||||
static PLI_INT32 simparam_str_sizetf(ICARUS_VPI_CONST PLI_BYTE8 *name_ext)
|
||||
{
|
||||
(void) name_ext; /* Parameter is not used. */
|
||||
return MAX_STRING_RESULT; /* 128 characters max! */
|
||||
|
|
|
|||
|
|
@ -1,10 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) Tony Bybell 1999.
|
||||
* Copyright (c) 1999 Tony Bybell.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef WAVE_ALLOCA_H
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef VPI_USER_H
|
||||
#define VPI_USER_H
|
||||
/*
|
||||
* Copyright (c) 1999-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -46,7 +46,9 @@ EXTERN_C_START
|
|||
# include <stdarg.h>
|
||||
# include "_pli_types.h"
|
||||
|
||||
#ifndef ICARUS_VPI_CONST
|
||||
#define ICARUS_VPI_CONST
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
typedef class __vpiHandle *vpiHandle;
|
||||
#else
|
||||
|
|
@ -63,7 +65,7 @@ typedef struct t_vpi_systf_data {
|
|||
const char *tfname;
|
||||
PLI_INT32 (*calltf) (ICARUS_VPI_CONST PLI_BYTE8*);
|
||||
PLI_INT32 (*compiletf)(ICARUS_VPI_CONST PLI_BYTE8*);
|
||||
PLI_INT32 (*sizetf) (PLI_BYTE8*);
|
||||
PLI_INT32 (*sizetf) (ICARUS_VPI_CONST PLI_BYTE8*);
|
||||
ICARUS_VPI_CONST PLI_BYTE8 *user_data;
|
||||
} s_vpi_systf_data, *p_vpi_systf_data;
|
||||
|
||||
|
|
@ -466,7 +468,7 @@ typedef struct t_cb_data {
|
|||
p_vpi_time time;
|
||||
p_vpi_value value;
|
||||
PLI_INT32 index;
|
||||
char *user_data;
|
||||
ICARUS_VPI_CONST PLI_BYTE8 *user_data;
|
||||
} s_cb_data, *p_cb_data;
|
||||
|
||||
#define cbValueChange 1
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ else
|
|||
INCLUDE_PATH = -I. -I.. -I$(srcdir) -I$(srcdir)/..
|
||||
endif
|
||||
|
||||
CPPFLAGS = $(INCLUDE_PATH) @CPPFLAGS@ @DEFS@
|
||||
CPPFLAGS = $(INCLUDE_PATH) @CPPFLAGS@ @DEFS@ -DICARUS_VPI_CONST=const
|
||||
CFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CC@ @CFLAGS@
|
||||
CXXFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CXX@ @CXXFLAGS@
|
||||
LDFLAGS = @rdynamic@ @LDFLAGS@
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -527,27 +527,40 @@ bool schedule_stopped(void)
|
|||
|
||||
/*
|
||||
* These are the signal handling infrastructure. The SIGINT signal
|
||||
* leads to an implicit $stop.
|
||||
* leads to an implicit $stop. The SIGHUP and SIGTERM signals lead
|
||||
* to an implicit $finish.
|
||||
*/
|
||||
extern "C" void signals_handler(int)
|
||||
extern bool stop_is_finish;
|
||||
|
||||
extern "C" void signals_handler(int signum)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
// Windows implements the original UNIX semantics for signal,
|
||||
// so we have to re-establish the signal handler each time a
|
||||
// signal is caught.
|
||||
signal(SIGINT, &signals_handler);
|
||||
signal(signum, &signals_handler);
|
||||
#endif
|
||||
if (signum != SIGINT)
|
||||
stop_is_finish = true;
|
||||
schedule_stopped_flag = true;
|
||||
}
|
||||
|
||||
static void signals_capture(void)
|
||||
{
|
||||
signal(SIGINT, &signals_handler);
|
||||
#ifndef __MINGW32__
|
||||
signal(SIGHUP, &signals_handler);
|
||||
#endif
|
||||
signal(SIGINT, &signals_handler);
|
||||
signal(SIGTERM, &signals_handler);
|
||||
}
|
||||
|
||||
static void signals_revert(void)
|
||||
{
|
||||
signal(SIGINT, SIG_DFL);
|
||||
#ifndef __MINGW32__
|
||||
signal(SIGHUP, SIG_DFL);
|
||||
#endif
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2013 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2003-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -373,6 +373,7 @@ static void cmd_trace(unsigned argc, char*argv[])
|
|||
break;
|
||||
default:
|
||||
printf("Only using the first argument to trace.\n");
|
||||
// fallthrough
|
||||
case 2:
|
||||
if ((strcmp(argv[1], "on") == 0) || (strcmp(argv[1], "1") == 0)) {
|
||||
show_file_line = true;
|
||||
|
|
|
|||
|
|
@ -796,7 +796,7 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
|
|||
switch (vp->format) {
|
||||
case vpiObjTypeVal:
|
||||
vp->format = vpiRealVal;
|
||||
|
||||
// fallthrough
|
||||
case vpiRealVal:
|
||||
vp->value.real = rval;
|
||||
break;
|
||||
|
|
@ -820,12 +820,12 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
|
|||
break;
|
||||
|
||||
case vpiHexStrVal:
|
||||
sprintf(rbuf, "%lx", (long)vlg_round(rval));
|
||||
sprintf(rbuf, "%" PRIx64, (uint64_t)vlg_round(rval));
|
||||
vp->value.str = rbuf;
|
||||
break;
|
||||
|
||||
case vpiBinStrVal: {
|
||||
unsigned long val = (unsigned long)vlg_round(rval);
|
||||
uint64_t val = (uint64_t)vlg_round(rval);
|
||||
unsigned len = 0;
|
||||
|
||||
while (val > 0) {
|
||||
|
|
@ -833,7 +833,7 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
|
|||
val /= 2;
|
||||
}
|
||||
|
||||
val = (unsigned long)vlg_round(rval);
|
||||
val = (uint64_t)vlg_round(rval);
|
||||
for (unsigned idx = 0 ; idx < len ; idx += 1) {
|
||||
rbuf[len-idx-1] = (val & 1)? '1' : '0';
|
||||
val /= 2;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -129,7 +129,7 @@ void __vpiStringConst::vpi_get_value(p_vpi_value vp)
|
|||
case vpiObjTypeVal:
|
||||
/* String parameters by default have vpiStringVal values. */
|
||||
vp->format = vpiStringVal;
|
||||
|
||||
// fallthrough
|
||||
case vpiStringVal:
|
||||
rbuf = (char *) need_result_buf(size + 1, RBUF_VAL);
|
||||
strcpy(rbuf, value_);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2008-2017 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2008-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -724,7 +724,7 @@ void vpip_vec4_get_value(const vvp_vector4_t&word_val, unsigned width,
|
|||
case vpiObjTypeVal:
|
||||
// Use the following case to actually set the value!
|
||||
vp->format = vpiVectorVal;
|
||||
|
||||
// fallthrough
|
||||
case vpiVectorVal: {
|
||||
unsigned hwid = (width + 31)/32;
|
||||
|
||||
|
|
@ -784,6 +784,7 @@ void vpip_vec2_get_value(const vvp_vector2_t&word_val, unsigned width,
|
|||
|
||||
case vpiObjTypeVal:
|
||||
vp->format = vpiIntVal;
|
||||
// fallthrough
|
||||
case vpiIntVal:
|
||||
vector2_to_value(word_val, vp->value.integer, signed_flag);
|
||||
break;
|
||||
|
|
@ -862,7 +863,7 @@ void vpip_real_get_value(double real, s_vpi_value*vp)
|
|||
case vpiObjTypeVal:
|
||||
// Use the following case to actually set the value!
|
||||
vp->format = vpiRealVal;
|
||||
|
||||
// fallthrough
|
||||
case vpiRealVal:
|
||||
vp->value.real = real;
|
||||
break;
|
||||
|
|
@ -944,7 +945,7 @@ void vpip_string_get_value(const string&val, s_vpi_value*vp)
|
|||
case vpiObjTypeVal:
|
||||
// Use the following case to actually set the value!
|
||||
vp->format = vpiStringVal;
|
||||
|
||||
// fallthrough
|
||||
case vpiStringVal:
|
||||
rbuf = (char *) need_result_buf(val.size() + 1, RBUF_VAL);
|
||||
strcpy(rbuf, val.c_str());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2016 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -1200,6 +1200,7 @@ static int PV_get(int code, vpiHandle ref)
|
|||
|
||||
case vpiLeftRange:
|
||||
rval += rfp->width - 1;
|
||||
// fallthrough
|
||||
case vpiRightRange:
|
||||
rval += vpi_get(vpiRightRange, rfp->parent) + PV_get_base(rfp);
|
||||
return rval;
|
||||
|
|
|
|||
|
|
@ -475,6 +475,7 @@ vpiHandle sysfunc_4net::vpi_put_value(p_vpi_value vp, int)
|
|||
(int)vp->value.scalar);
|
||||
assert(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case vpiIntVal: {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2014 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2001-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -131,6 +131,7 @@ static void timevar_get_value(vpiHandle ref, s_vpi_value*vp, bool is_int_func,
|
|||
case vpiObjTypeVal:
|
||||
/* The default format is vpiTimeVal. */
|
||||
vp->format = vpiTimeVal;
|
||||
// fallthrough
|
||||
case vpiTimeVal:
|
||||
vp->value.time = &time_value;
|
||||
vp->value.time->type = vpiSimTime;
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
|
||||
case vpiObjTypeVal:
|
||||
vp->format = vpiRealVal;
|
||||
// fallthrough
|
||||
case vpiRealVal:
|
||||
vp->value.real = val;
|
||||
break;
|
||||
|
|
@ -131,17 +132,17 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
break;
|
||||
|
||||
case vpiOctStrVal:
|
||||
sprintf(rbuf, "%lo", (long)vlg_round(val));
|
||||
sprintf(rbuf, "%" PRIo64, (uint64_t)vlg_round(val));
|
||||
vp->value.str = rbuf;
|
||||
break;
|
||||
|
||||
case vpiHexStrVal:
|
||||
sprintf(rbuf, "%lx", (long)vlg_round(val));
|
||||
sprintf(rbuf, "%" PRIx64, (uint64_t)vlg_round(val));
|
||||
vp->value.str = rbuf;
|
||||
break;
|
||||
|
||||
case vpiBinStrVal: {
|
||||
unsigned long vali = (unsigned long)vlg_round(val);
|
||||
uint64_t vali = (uint64_t)vlg_round(val);
|
||||
unsigned len = 0;
|
||||
|
||||
while (vali > 0) {
|
||||
|
|
@ -149,7 +150,7 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
|
|||
vali /= 2;
|
||||
}
|
||||
|
||||
vali = (unsigned long)vlg_round(val);
|
||||
vali = (uint64_t)vlg_round(val);
|
||||
for (unsigned idx = 0 ; idx < len ; idx += 1) {
|
||||
rbuf[len-idx-1] = (vali & 1)? '1' : '0';
|
||||
vali /= 2;
|
||||
|
|
@ -258,6 +259,7 @@ void __vpiVThrStrStack::vpi_get_value(p_vpi_value vp)
|
|||
|
||||
case vpiObjTypeVal:
|
||||
vp->format = vpiStringVal;
|
||||
// fallthrough
|
||||
case vpiStringVal:
|
||||
rbuf = (char *) need_result_buf(val.size()+1, RBUF_VAL);
|
||||
strcpy(rbuf, val.c_str());
|
||||
|
|
@ -376,6 +378,7 @@ void __vpiVThrVec4Stack::vpi_get_value(p_vpi_value vp)
|
|||
break;
|
||||
case vpiObjTypeVal:
|
||||
vp->format = vpiVectorVal;
|
||||
// fallthrough
|
||||
case vpiVectorVal:
|
||||
vpi_get_value_vector_(vp, val);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ void vpip_bin_str_to_vec4(vvp_vector4_t&vec4, const char*buf)
|
|||
pad = BIT4_1;
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
default: // Everything else gets '0' padded/
|
||||
pad = BIT4_0;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2013 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 2002-2018 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -126,6 +126,7 @@ void vpip_hex_str_to_vec4(vvp_vector4_t&val, const char*str)
|
|||
pad = BIT4_1;
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
default: // Everything else gets '0' padded.
|
||||
pad = BIT4_0;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ void vpip_oct_str_to_vec4(vvp_vector4_t&val, const char*str)
|
|||
pad = BIT4_1;
|
||||
break;
|
||||
}
|
||||
// fallthrough
|
||||
default: // Everything else gets '0' padded.
|
||||
pad = BIT4_0;
|
||||
break;
|
||||
|
|
@ -116,7 +117,6 @@ void vpip_oct_str_to_vec4(vvp_vector4_t&val, const char*str)
|
|||
if (idx < tval.size()) val.set_bit(idx, tval.value(idx));
|
||||
else val.set_bit(idx, pad);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void vpip_vec4_to_oct_str(const vvp_vector4_t&bits, char*buf, unsigned nbuf)
|
||||
|
|
|
|||
|
|
@ -3771,7 +3771,7 @@ bool of_MOD_S(vthread_t thr, vvp_code_t)
|
|||
if (rv == 0)
|
||||
goto x_out;
|
||||
|
||||
if ((lv == LONG_LONG_MIN) && (rv == -1))
|
||||
if ((lv == LLONG_MIN) && (rv == -1))
|
||||
goto zero_out;
|
||||
|
||||
/* Sign extend the signed operands when needed. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue