Hi, all,

I wonder if anyone encountered this before. I ran a SPEC2006 application
(GemsFDTD), there are two instructions 1: stq r24, 16(r30) followed by 2:
ldt f0, 16(r30), very close.

In the unmodified OOO execution, 1 forwards the value (0x17) to 2
correctly. If I separated them, and make 1 complete before 2 starts, then 2
has to read cache. Cache still returns the correct value (0x17), however,
in *AlphaISAInst::Ldt::completeAcc(...), getMem()* cannot return the
correct value, the reason is that it transforms the returned data (0x17) by
*(T*)data where T here is of type double.

In gdb, **(double*)* data return a value almost 0 while **data* gives the
correct value 0x17. Thus when **(T*)data* is provided to gtoh(...) in
getMem(...), 0 is returned.

I wonder how could we possibly fix this transformation between integer
store and floating point load without impacting other instructions, or
maybe I made a mistake here (but I didn't change the generated code for Ldt
instruction ). Does anybody have any hints? Thanks in advance.

-- 
Regards,

Veydan
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to