Một sự thay đổi có thể tạo ra một quầy đăng ký một phần (hoặc đăng ký tái tổ hợp eryops) trên ecx
? Nếu có, trên kiến trúc vi mô nào?Có thể thay đổi bằng cách sử dụng kết quả đăng ký CL trong một quầy đăng ký một phần không?
Tôi đã thử nghiệm điều này trên Core2 (65nm), dường như chỉ đọc cl
.
_shiftbench:
push rbx
mov edx, -10000000
mov ecx, 5
_shiftloop:
mov bl, 5 ; replace by cl to see possible recombining
shl eax, cl
add edx, 1
jnz _shiftloop
pop rbx
ret
Thay mov bl, 5
bởi mov cl, 5
đã có sự khác biệt, mà nó sẽ có nếu có đăng ký tái hợp xảy ra, như thể được chứng minh bằng cách thay thế shl eax, cl
bởi add eax, ecx
(trong các thử nghiệm của tôi phiên bản với add
trải qua một sự suy giảm 2.8x khi ghi vào cl
thay vì bl
).
Kết quả thử nghiệm:
- Merom: không có gian hàng quan sát
- Penryn: không có gian hàng quan sát
- Nehalem: không có gian hàng quan sát
Cập nhật: mới shrx
-group thay đổi trong Haswell không cho biết gian hàng đó. Đối số đếm thay đổi không được viết như một thanh ghi 8bit, do đó có thể được mong đợi, nhưng biểu diễn văn bản thực sự không nói bất cứ điều gì về các chi tiết kiến trúc vi mô đó.
Không có opcode nào cho 'shl' bởi' ecx'. Tại sao bạn nghĩ có? – interjay
@interjay nó là một từ đồng nghĩa, một số trình biên dịch cho phép biểu mẫu đó. – harold
Nếu đó là một từ đồng nghĩa, bạn mong đợi nó có tác dụng khác như thế nào? – interjay