There is a small issue with adding instructions to the isa relating
to the fact that loads and stores have the effective address
computation separated from the memory access. This took me a few
hours to debug because the error it causes
seems to have nothing to do with the problem, I declared an
instruction like this:
format LoadOrPrefetch {
.........
0x01: ldo({{ EA = Rb + disp; }}, {{ Ra.uq = (Mem.ul |
Rb<63:32>);}});
}
The bug you run into is the assertion in load_store_queue::writeback
that the instruction isn't a store. At first glance
the above code seems like it should work. The problem is that the
memory access now requires a register operand.
The worst part is this seems to work correctly on programs where the
use of Rb is far enough away from the creation
that it gets the Rb from the register file (at least that's my theory
for why it only crashes on some tests). Fixing the code
to do the same thing and not break:
format LoadOrPrefetch {
.........
0x01: ldo({{ EA = Rb + disp; }}, {{ Ra.uq = (Mem.ul |
EA<63:32>);}});
}
So the point of all this is I think a small note on this should be
added to the isa description documentation to alert others
to this potential pitfall (maybe even including the above example).
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
m5sim-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/m5sim-users