ISA와 어셈블리
M 확장이 없는 RV32I CPU용으로 C 언어의 'a * b'(int끼리의 곱셈)를 컴파일하면 일반적으로 어떻게 되는가?
- A시프트와 덧셈을 반복하여 곱셈을 수행하는 라이브러리 함수 호출이 된다
- B곱셈은 사용할 수 없으므로 컴파일 오류가 된다
- CM 확장의 mul 명령어가 그대로 출력되고 실행 시 자동으로 추가된다
정답과 해설 보기
정답: A. 시프트와 덧셈을 반복하여 곱셈을 수행하는 라이브러리 함수 호출이 된다
곱셈기가 없는 CPU용으로는 컴파일러가 곱셈을 __mulsi3 같은 보조 라이브러리 함수 호출로 치환합니다. 이 함수는 한쪽 수의 비트를 하나씩 조사하여 1이면 다른 쪽을 시프트한 값을 더하는, 필산과 같은 방법으로 곱을 구합니다. 올바르게 계산되지만 하드웨어 곱셈기보다 수십 배 느려집니다. ISA 확장을 생략하면 회로가 작아지는 대신 처리는 느려집니다.