고전적인 곱셈 - 누적 연산은 a = a + b * c입니다. (을 A와 B는 64 개 비트 정수 서명되지 않은 : 부호없는 long int와 긴)하지만 현재 1 클럭 사이클의 정수에 다음 작업을 수행 할 수 있습니다 ASM의 지시가 존재 궁금 C/C++/ASM : 곱하기 a = a * 2 + b를 CPU에 추가 하시겠습니까?
a = a*2-1
a = a*2+b
현재, 내가 사용
a *= 2
a += b
a *= 2
--a
첫 번째에 대한
및
을 1 초 동안. 그리고 나는 각각이 ASM에서 2 개의 명령어로 변환된다고 생각합니다. 하지만 대신 1 ASM 명령어를 사용하는 방법이 있습니까? (인텔 CPU에서 명령어 세트 확장이 있습니까?)은 인텔 CPU의 경우
컴파일러에서 생성하는 명령어의 수와 관련하여 중요한 이유는 무엇입니까? 이것은 계산에 소요되는 클록주기의 수와 느슨하게 관련이 있습니다. –
어쩌면'lea'가 그렇게 할 수 있습니다 ... –
@KerrekSB, 맞아요 -'lea'는'b'가 0에서 4096 사이에 있으면'a * 2 + b'를 할 수 있습니다. – ugoren