Stephen Williams
a9db765f98
Generate better code for condition expressions.
2014-11-20 14:47:44 -08:00
Stephen Williams
c71ab5869a
vvp code generator try to generate condition flags directly.
...
When generating code for a condition expression, i.e. directly
before a %jmp/X statement, try to generate the result into the
flag bit without passing through the vec4 stack. For example, the
%cmpX/X instructions generate results into the flag bits, so it
makes no sense to push these bits into the vec4 stack then pop
them back into the flag bit. So try to handle this case.
2014-11-19 18:32:19 -08:00
Stephen Williams
04bdfbccee
Add %cmpi/s and %cmpi/u instructions for performance
...
These bypass the vec4 stack in some common cases, saving instructions
and vec4 manipulations.
Also, minor improvement to the %flag/set/vec4 statement.
Kill a few warnings.
2014-11-19 16:38:43 -08:00
Stephen Williams
2acc9fbdee
Remove dead instructsion %set/qb and %set/qf / Kill some warnings.
2014-11-19 09:15:01 -08:00
Stephen Williams
725ed869ba
Remove dead %load/vp0 instructions and related infrastructure
...
Also remove some &A<> and &PV<> symbols that use this now dead
infrastructure.
2014-11-19 09:02:21 -08:00
Stephen Williams
301edf69d3
Add and use %concati/vec4 and %addi instructions.
...
Also, clean up some warnings, and optimize some existing opcodes.
2014-11-18 12:27:55 -08:00
Stephen Williams
1612c6d638
Instruction %concat/vec4, %pad/u and %shiftl manipulate stack in place
2014-11-17 16:32:18 -08:00
Stephen Williams
aadd67cd3b
Some instructions can do stack manipultations in place.
...
By doing some stack manipulations in place, certain instructions
can eliminate, or optimize, vector copies.
2014-11-14 18:38:15 -08:00
Stephen Williams
c2ca9c3b73
Optimize draw_number_vec4 to use %pushi/vec4 zero-padding.
2014-11-14 18:37:10 -08:00
Stephen Williams
0601b4e43b
Optimizations for %pushi/vec4 and %load/vec4
...
- Have %pushi/vec4 handle some special cases optimally.
- Eliminate some duplicated method calls in %load/vec4.
- Optimize the vvp_vector4_t::copy_from_ method by inlining
some parts.
2014-11-14 14:41:04 -08:00
Stephen Williams
8aca66b109
Performance tweaks
...
Better performance for %cmp/s and the vvp_fun_part_sa node.
2014-11-14 11:48:36 -08:00
Stephen Williams
2aeb3871ed
Merge branch 'master' into vec4-stack
...
This was a challenging merge...
Conflicts:
elab_scope.cc
synth2.cc
tgt-vvp/eval_expr.c
vvp/vthread.cc
2014-11-13 16:26:15 -08:00
Stephen Williams
ea21fb856e
Mux with default, handle possible large selector.
2014-11-09 16:49:21 -08:00
Martin Whitaker
754899c99e
Make asynchronous case statement synthesis more robust.
...
Added various error/warning messages for behaviour not supported
in synthesis. Also give correct behaviour when multiple case item
expressions evaluate to the same constant value.
2014-11-09 20:20:03 +00:00
Cary R
4e94b81a4b
On a 32 bit system you can print a 32 bit value as a long (verinum)
2014-11-05 14:43:58 -08:00
Cary R
6948c27c2d
Enumerations are compatible if their type definitions match.
2014-11-04 15:05:49 -08:00
Cary R
2e9c4cde55
More refined check for enumeration width and constant width
2014-11-04 12:10:38 -08:00
Cary R
2e8c4e3dbc
Basic patch from github #44
2014-11-04 11:39:01 -08:00
Cary R
cc9fcfd13d
Only a literal constant size has to match the enumeration width.
2014-11-03 19:46:10 -08:00
Cary R
4660e0bf2f
Another tweak to the enumeration elaboration code
2014-11-02 20:26:36 -08:00
Cary R
1e7509a021
Update enumeration elaboration checks
2014-11-02 11:45:19 -08:00
Martin Whitaker
c2e53f0d63
Fix for br963 - vvp qpop instructions need to call thr_check_addr.
2014-11-02 15:36:52 +00:00
Martin Whitaker
f171161822
Fix for br962 - pop from dynamic array is not padded to correct width.
...
When the expression width is greater than the dynamic array width,
we need to generate code to pad the popped value to the correct
width.
2014-11-02 15:26:15 +00:00
Martin Whitaker
0237297e93
Added pruning of case statement expressions.
...
When unsized literals are used in case item expressions, it is likely
that the calculated expression width will be larger than necessary to
unambiguously select the correct case item (particularly when using
"strict" expression elaboration). This patch adds an optimisation
step that prunes the expressions to the minimum necessary width.
2014-11-02 13:02:57 +00:00
Martin Whitaker
e38b5d9fb7
Eliminate unnecessary rerun of test_width in case statement elaboration.
...
Also fix a typo in a comment.
2014-11-02 13:02:57 +00:00
Stephen Williams
d5123011b3
Merge branch 'master' into vec4-stack
...
Conflicts:
elab_scope.cc
2014-11-01 14:57:05 -07:00
Cary R
9a471bd81c
Don't crash if there are problems elaborating an enumeration.
2014-10-31 20:08:05 -07:00
Cary R
632e15a55c
Catch enumerations with the same name.
2014-10-31 20:06:28 -07:00
Cary R
d4313dad75
Merge branch 'master' of github.com:steveicarus/iverilog
2014-10-31 18:09:29 -07:00
Cary R
c25538d750
Pass the integer type for enumerations to the IVL target stage
2014-10-31 18:09:19 -07:00
Martin Whitaker
871d447ff7
Reinstate error recovery for range expressions.
...
If an error is found whilst elaborating a range expression in a signal
declaration, create a dummy range and continue elaboration. This stops
the compiler reporting an error every time that signal is referenced.
2014-10-31 21:42:23 +00:00
Martin Whitaker
b286b76134
Fix null pointer dereference in pform debug output.
2014-10-31 18:40:51 +00:00
Cary R
4f62a0d1f2
Check enum trimmed bits for values with undefined bits
...
If an enumeration constant has undefined bits then we need to verify that
the bits that are trimmed match the MSB of the remaining bits.
2014-10-30 19:54:38 -07:00
Cary R
e7df9774aa
When comparing that an enumeration is in range cast the value to 2-state
...
When checking that an enumeration value is in range we need to cast it to
a 2-state value so that when we compare it we get a true or false value
instead of an undefined value. Undefined bits in the comparison return
undefined which is not logically false.
2014-10-30 18:23:47 -07:00
Cary R
08afbde08d
Update cppcheck suppression file for tgt-vlog.
2014-10-30 18:23:39 -07:00
Martin Whitaker
7ab0824adf
Fix for br961 - function return type elaborated in wrong scope.
...
The return type of a function should be elaborated in the context of
the enclosing scope, not in the context of the function itself.
2014-10-30 21:09:17 +00:00
Martin Whitaker
7fad4779c5
Add error recovery when elaboration of a type range fails.
...
If elaboration of the msb or lsb expression in the range of a vector
type specification failed (due to an error in the Verilog code being
compiled), an assertion failure was being triggered when the compiler
attempted to evaluate the expressions. Bypassing the evaluation (and
using a default value) should allow us to recover from the error.
2014-10-30 20:42:12 +00:00
Stephen Williams
8ac06fb63f
Support vpiObjTypeVal for vec4Stack values.
...
Also allow vpi_get_value outside of scope. (Return 'x)
2014-10-25 20:38:39 -07:00
Stephen Williams
4e727adc25
Merge branch 'master' into vec4-stack
2014-10-25 09:49:39 -07:00
Stephen Williams
3e9c14060f
lexor handles arbitrary length defines in the precompiled_defiles file.
2014-10-25 09:48:11 -07:00
Stephen Williams
702a8c3a05
Merge branch 'master' into vec4-stack
2014-10-24 15:17:31 -07:00
Stephen Williams
48d3972299
Remove a bunch of dead vvp opcodes.
2014-10-24 15:13:28 -07:00
Stephen Williams
62fce50f8c
Remove dead code for allocate_vec handling.
2014-10-24 13:07:53 -07:00
Stephen Williams
e4b862f3d1
Clean up vector handling dead code.
2014-10-24 11:17:36 -07:00
Stephen Williams
09d3a5de59
Port %pushv/str to vec4-stack style.
2014-10-24 10:16:35 -07:00
Stephen Williams
97bde47c31
Remove dead %set/dar and %set/dar/obj instructions.
2014-10-24 10:03:22 -07:00
Stephen Williams
1c80c6e37a
Remove dead stuff_ok_flags from draw_eval_vec4 functions.
2014-10-24 09:32:32 -07:00
Stephen Williams
4588f7c615
vec4 stack versions of queue pop methods.
2014-10-24 09:03:20 -07:00
Cary R
006aef93d0
Fix a reference to an undefined element.
2014-10-23 16:56:13 -07:00
Stephen Williams
24b8752475
More cases where %store/prop/v takes a width.
2014-10-22 16:15:10 -07:00