Fix for br967 - allow real value for repeat statement loop length.
This commit is contained in:
parent
7d042accfd
commit
82ef3780ec
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001-2011 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2001-2014 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -1683,7 +1683,28 @@ static int show_stmt_repeat(ivl_statement_t net, ivl_scope_t sscope)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
unsigned lab_top = local_count++, lab_out = local_count++;
|
unsigned lab_top = local_count++, lab_out = local_count++;
|
||||||
ivl_expr_t expr = ivl_stmt_cond_expr(net);
|
ivl_expr_t expr = ivl_stmt_cond_expr(net);
|
||||||
struct vector_info cnt = draw_eval_expr(expr, 0);
|
struct vector_info cnt;
|
||||||
|
if (ivl_expr_value(expr) == IVL_VT_REAL) {
|
||||||
|
int word = draw_eval_real(expr);
|
||||||
|
// 64 bit should be enough for any real use case.
|
||||||
|
cnt.base = allocate_vector(64);
|
||||||
|
cnt.wid = 64;
|
||||||
|
|
||||||
|
if (cnt.base == 0) {
|
||||||
|
fprintf(stderr, "%s:%u: vvp.tgt error: "
|
||||||
|
"Unable to allocate %u thread bits for "
|
||||||
|
"repeat expression.\n", ivl_expr_file(expr),
|
||||||
|
ivl_expr_lineno(expr), cnt.wid);
|
||||||
|
vvp_errors += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(vvp_out, " %%cvt/vr %u, %d, %u;\n",
|
||||||
|
cnt.base, word, cnt.wid);
|
||||||
|
|
||||||
|
clr_word(word);
|
||||||
|
} else {
|
||||||
|
cnt = draw_eval_expr(expr, 0);
|
||||||
|
}
|
||||||
const char *sign = ivl_expr_signed(expr) ? "s" : "u";
|
const char *sign = ivl_expr_signed(expr) ? "s" : "u";
|
||||||
|
|
||||||
/* Test that 0 < expr */
|
/* Test that 0 < expr */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue