fedor.sergeev added a comment. In D70157#1774561 <https://reviews.llvm.org/D70157#1774561>, @skan wrote:
> I could not reproduce the phenomenon that N-byte nop becomes (N+M) bytes with > your example. So according to my understanding, I slightly modified your > case. (If my understand is wrong, I hope you can point it out :-). ) > > .text > nop > .Ltmp0: > .p2align 3, 0x90 > .rept 16 > nop > .endr > .Ltmp3: > movl %eax, -4(%rsp) In our case it was andl $1, %eax but it does not matter that much. > .rept 2 > nop > .endr > jmp .Ltmp0 > > The instruction `jmp .Ltmp0` starts at byte 0x1e and ends at byte 0x20. Again, in our particular case start of the sequence was at xxx8, so 8 + 16(our sequence) + 3(andl) + 5(jmp) == 32. > If we align the jump with preifx, two prefixes will be added to the `.rept2 > 16 nop .endr`. After prefixes are added, the 16-byte nop becomes 18-byte nop, > then the label '.Ltmp3' is not 8-byte aligned any more. Yes, thats what happened. > I doubt whether the assumption that '.Ltmp3' is 8-byte aligned is right, > since the alignment is not explicitly required. The point is that we have explicit requirement at the start and we have a lowering into 16-byte sequence that we need to be preserved exactly as it is. Essentially what we need is a "protection" for this sequence from any changes by machinery that generates the binary code. How can we protect a particular byte sequence from being changed by this branch aligner? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D70157/new/ https://reviews.llvm.org/D70157 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits