Расширение моего комментария:
Для не различающего процессора, такого как Pentium Pro, xorl %eax, %eax
, похоже, зависит от %eax
и, следовательно, должен ждать, пока значение этого регистра станет доступным. Более поздние процессоры на самом деле имеют дополнительную логику для распознавания этой инструкции как не имеющей каких-либо зависимостей.
Инструкции incl
и decl
устанавливают некоторые флаги, но оставляют другие без изменений. Это наихудшая ситуация, если флаги моделируются как один регистр с целью переупорядочения инструкций: любая инструкция, которая читает флаг после incl
или decl
, должна рассматриваться как зависящая от incl
или decl
( в случае, если он читает один из флагов, которые устанавливает эта инструкция), а также в предыдущей инструкции, которая устанавливает флаги (в случае, если он читает один из флагов, которые эта команда не устанавливает). Решением было бы разделить регистр флагов на две части и рассмотреть зависимости с этим более мелким зерном ... но у AMD была лучшая идея и полностью удалили эти инструкции из 64-битного расширения, которое они предложили несколько лет назад.
Что касается ссылок, я нашел это либо в руководствах Intel, ссылки на которые бесполезны, поскольку они находятся на корпоративном веб-сайте, который реорганизуется каждые шесть месяцев, либо на сайте Agner Fog: http://www.agner.org/optimize/#manuals