Hi,

I have two questions about the O3 load/store unit, specifically
the code in src/cpu/o3/lsq_unit_impl.hh.

Firstly, I notice that the code used to detect loads and stores
to the same addresses appears to assume that accesses within the
same 256 byte block will clash:
>       if (loadQueue[load_idx]->effAddrValid &&
>           (loadQueue[load_idx]->effAddr >> 8) ==
>           (inst->effAddr >> 8)) {
Should ">> 8" be "/ 8" (quadword rather than 256 byte block)?
The comments say "this is extra conservative" so it might be
deliberate :).

Secondly, I am puzzled why carrying out _load_ operations with
the same address in non-program order is a memory order violation. 
If your code is:
>  000000378:   00 00 5b a0     ldl     t1,0(t12)
>  00000037c:   00 00 66 a0     ldl     t2,0(t5)
and t5 == t12, surely it does not matter if you execute 0x37c 
before 0x378 unless you are accessing some sort of memory mapped 
device, in which case you would use a memory barrier instruction 
anyway.

I was wondering if someone would be able to explain the reason
for this, as I assume I must be missing something. 


Thanks in advance,

Jack

-- 
Jack Whitham
[EMAIL PROTECTED]

_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to