Hi there, I have trouble with CMPXCHG8B/CMPXCHG16B instructions. It seems that these instructions will always cause deadlocks in the pipeline. I've seen into the logs. Each of them were trying to lock the same cache line twice. But Marss treated each micro-op as an individual, so the second attempt was not allowed. And it stopped the pipeline from making any progress. And I look a little into the locking mechanism. Here's the questions that I have. 1. Each micro-op is treated as an individual. So, deadlock may occur even inside a single macro-op? 2. Write-locks are not explicitly acquired and released. But, one can imaging that these pair actions are done inside the commit state. However, micro-ops inside a macro-op are not going to be committed in the same cycle. So, two-phase locking protocol may be broken, and lead to unserializable result? 3. When deadlock happens, is there any arbiter to design which lock to abort? May you help me with there questions. Thank you.
Regards, Ying-Chen Lin
_______________________________________________ http://www.marss86.org Marss86-Devel mailing list [email protected] https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel
