[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gEDA: Icarus Verilog 20010112 Snapshot
Stephen Williams <steve@icarus.com> writes:
> This has nothing to do with sign. The real problem here, now that I
> look at it, is that there is apparently an 'x' or 'z' in a constant
> memory address vector.
stephan@nevis.columbia.edu said:
> The %ix/load loads a negative memory index (-4). The actual memory
> reference is supposed to yield 4'hx, since there is no mem[1]. This
> is all correct, except that the vvp parser does not like negative
> integers.
I see your point. However, your workaround of changing unsigned longs
to unsigned int is not really a fix. I see some potential issues here:
1) Thread index registers can hold *signed*long* values. However,
2) memory addresses are normalized and cannot be <0.
In this case, it seems to me that the proper solution is to notice
that the *constant* index is outside the range of the memory and elide
the memory access completely. This fixes the problem *and* improves
the performance of the generated code.
There may come a time when the vvp parser needs to learn about signed
numbers, at least for loading index registers, but this bug can be
handled better without that sort of change.
--
Steve Williams "The woods are lovely, dark and deep.
steve at icarus.com But I have promises to keep,
steve at picturel.com and lines to code before I sleep,
http://www.picturel.com And lines to code before I sleep."