2015-01-05 2 views
0

어떤 u는 64 비트 서명되지 세트의 V7M ARM 명령어의ARM V7M 64 비트 분할

d=u/v 
r=u mod v 

를 구현하는 가장 효율적인 방법이며, V는 32 비트 부호입니까?

특히 v가 "정규화"되어 상위 비트가 설정되는 특별한 경우에 관심이 있습니다.

나는, "컴퓨터 프로그래밍 (2 권)의 예술"크 누스의 다양한 옵션을 본 적이 있지만, 컴파일러 때문에이 가능한 V7M 지침 등 UMULL

+0

"정규화"또는 상위 비트 관련성의 의미를 알 수 없습니다. 당신은 정교 할 수 있습니까? – Clifford

+0

가장 빠른 것을 정규화하려면 아마도 룩업 테이블 일 것이고, 첫 번째 비트 명령어를 찾는다는 것을 확신하지 못할 것입니다. 저는 Clifford와 동의합니다, 컴파일러가 나누기를 처리하게하십시오. –

+0

곱셈 누적 명령어가 사용되는지 알고 싶으면 팔 어셈블리에 [tag : C] 코드를 컴파일하고 살펴 봅니다. 최적의 알고리즘은 이러한 추가 지침이 있기 때문에 변경해서는 안되지만이 지침에서 추가 성능을 향상시킬 수는 있습니다. – Degustaf

답변

0

를 사용하여 구현하는 최선의 방법을 보는 데 문제가 있어요 거의 확실하게 64 비트 데이터 타입을 지원합니다. 컴파일러로 하여금 적절한 코드를 생성하게하는 것은 잘못된 것입니까? 컴파일러는 많은 타겟 특정 지식을 포함하며 아마도 최적의 결과를 생성합니다.

을 감안할 때 : 다음

uint64_t u = x ; 
uint32_t v = y ; 

:

uint64_t d = u/v ; 
uint32_t r = u % v ; 
+0

그는 조립품 태그를 지정하고 있습니다 –

+0

@ LưuVĩnhPhúc : 또한 C로 태그가 붙여져있어 정답입니다. 컴파일러가 생성하는 어셈블리를 항상 검사 할 수는 있지만 거의 목적이 없습니다. – Clifford

+0

어셈블리를 검사하는 경우 구현시 제공해야하는 칩 외부 분할 루틴 호출이 표시됩니다 – user1444886

2

ARM 32 비트 툴체인은 기능 구현에 __aeabi_uldivmod라고 요구 (이것은 또 다른 각도에서 다른 대답과 유사) 오프로드 (off-load), 아마도 다양한 구현을 찾을 수 있으며, 하나는 clangudivmoddi4.c wh Figure 3-40 of The PowerPC Compiler Writer's Guide (섹션 3.2.3.7)을 가리 킵니다

+0

이것이 맞습니다 - ARM은 칩에서 나눗셈을하지 않습니다 - 곱셈을 수행하고 단일 사이클 연산만을 수행하기 때문에 (심지어 RISC이기 때문에) 그렇게하지 않았습니다. Division은 다중 ARM 명령어로 코딩 된 루틴에서 칩 밖에서 처리됩니다. – user1444886

+0

@ user1444886 일부 코어, v7r 및 64 비트 변형에는 분할 기능이 있지만이 질문과 관련이 없습니다. – auselen

+0

@auselen "적은 수의 코어"가 아닙니다. 심지어 로우 엔드 Cortex-M3에도 정수 나누기 (64 비트 제외)가 있습니다. – Clifford

관련 문제