-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LDP and STP forwarding #90
Comments
I decided to move on with option 1. Option 2 had a lot of problems because some searches and snoops in LSQ depends on each instruction having single entry. Option 3 required a lot of changes to the forwarding logic. Overall changes:
Fix: afcf2fc |
*Description* LDP and STP instructions load or store to 2 memory locations. It is normally implemented as two uOps in hardware, but it is a single uOp in flexus. This causes some unintended bugs where store-load forwarding breaks etc. *Steps to Reproduce* Run data caching image with 2 coresAfter some time, there will be a sequence of instructions as follows:str to address x + 8ldp to address x *Expected Behavior* Load pair should get a part of its value from str because the second load value of the pair address matches the str address. *Actual Behavior* It does not forward because the addresses x and x+8 are not the same.
Very small bug in this thread. Used auto for a value used in offset calculation. Compiler assumed unsigned 32 bits but it needed to be signed 64 bits. Causing a bug in a special case where we use the negative version of it. Fix: a64c475 |
*Description* LDP and STP instructions load or store to 2 memory locations. It is normally implemented as two uOps in hardware, but it is a single uOp in flexus. This causes some unintended bugs where store-load forwarding breaks etc. *Steps to Reproduce* Run data caching image with 2 coresAfter some time, there will be a sequence of instructions as follows:str to address x + 8ldp to address x *Expected Behavior* Load pair should get a part of its value from str because the second load value of the pair address matches the str address. *Actual Behavior* It does not forward because the addresses x and x+8 are not the same.
Description
LDP and STP instructions load or store to 2 memory locations. It is normally implemented as two uOps in hardware, but it is a single uOp in flexus. This causes some unintended bugs where store-load forwarding breaks etc.
Steps to Reproduce
Run data caching image with 2 cores
After some time, there will be a sequence of instructions as follows:
str to address x + 8
ldp to address x
Expected Behavior
Load pair should get a part of its value from str because the second load value of the pair address matches the str address.
Actual Behavior
It does not forward because the addresses x and x+8 are not the same.
Solution:
After a lot of back and forth with Yuanlong and Shanqing about solution, we came up with a couple solutions:
The text was updated successfully, but these errors were encountered: