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