[Computer Architecture] rep; ret Instruction for x86-64
x86-64 assembly를 보다 다음과 같은 instruction stream에서 rep; ret
라는 instruction이 나왔다.
.L2: addq %rdx, %rax # result = t shrq %rdi # x >>= 1 jne .L2 # if(x) goto loop rep; ret
일단 rep
instruction이 쓰이는 이유는 AMD processors’ branch predictors에 문제가 있었다고 한다. ret
instruction은 single-byte instruction으로 conditional jump instruction 뒤에 있는 경우 rep
dummy instruction 추가를 통해 문제를 workaround를 한다고 한다.
왜 branch target address가 single-byte address를 가진 instruction인 경우 안되는지는 모르지만, 추축해보면 address granularity가 single-byte를 지원하지 못해서인 것으로 추측한다.
Reference
- https://stackoverflow.com/questions/20526361/what-does-rep-ret-mean
- https://board.flatassembler.net/topic.php?t=6264