In short, yes. That will cause the processor to stall while it waits for that instruction to complete and data to be available before the next instruction can be run. There is no way to easily predict what data will arrive and so that inc
instruction simply cannot run until the mov
is complete.
That may not be a big problem though as the processor may well be able to schedule instructions that are not dependant on the result of that mov
instruction in order to keep the core working.
This is known as Out-of-order execution and it can help mitigate the cost of processor stalls when waiting for long instructions such as these.
A further clarification...
I should have read your example better, I do not believe that the mov [rcx], rax
instruction will cause a stall on the inc rax
instruction, but will cause anything dependant on rcx
to stall.
The page you linked lists reciprocal throughput whereby another instruction of that type can be issued. Specifically I would assume in that length of time any instruction with similar dependencies could be issued.
Thus I would assume that the RAX register is either renamed as the instruction is sent for execution or is encoded in the u-ops for the instruction. The next instruction can work on that register so long as it is not dependant on the results of a previous operation being stored in that register.
So in your questions example what I believe should happen is that the CPU effectively has two instructions whose only dependency is the current value of the RAX register and the value in it is only modified by the second instruction. The first instruction should be dispatched and almost immediate execution can begin on the second (inc
) instruction.