2010-08-23 7 views
9

ARM9 프로세서에서 FIR 필터를 구현 중이며 SMLAL 명령어를 사용하려고합니다.C++에서 곱셈 누적 명령어 인라인 어셈블리 사용

처음에는 다음 필터를 구현했으며이 방법은 응용 프로그램에서 사용하기에는 너무 많은 처리 능력을 사용한다는 것을 제외하고는 완벽하게 작동했습니다. 01,235,069,521,915,909,585,032,743,210 0,123,414,620,935,846,510,403,210

나는 GCC 최적화가 켜져도 함께 MAC 명령어를 사용하지 않는 때문에 곱셈 인라인 어셈블리와 축적 교체를 시도하고있다. for 루프를 다음과 같이 바꿨습니다.

출력은 내가 예상했던 필터링 된 데이터가 아닙니다. 원래 신호 또는 예상 데이터에 패턴이나 연결이없는 것처럼 보이는 무작위 값을 가져 왔습니다.

내가 64 비트 누산기를 명령어의 상위 및 하위 레지스터로 분할하는 데 문제가 있거나 또는 잘못 다시 끼워 넣는 느낌이 들었습니다. 어쨌든 왜 C 코드를 인라인 어셈블리로 바꿔서 올바른 출력을 얻을 수 없는지 확신 할 수 없습니다.

+0

왜 DSP 라이브러리를 사용하지 않으시겠습니까? –

+4

어떤 컴파일러 버전을 사용하고 있습니까? -O3 -march = armv5te 옵션을 사용하여 GCC 4.4.3을 사용하여 C 전용 코드를 컴파일하려고 시도했지만 smlal 명령이 생성되었습니다. –

+0

4.3.2를 사용하고 있습니다. 그런 식으로 -march 플래그를 지정할 수 있는지 알지 못했습니다. 일단 내가 그것을 추가, GCC는 또한 내가 기대했던 어셈블리를 생산했다. 감사! –

답변

3

어떤 컴파일러 버전을 사용하고 있습니까? -O3 -march = armv5te 옵션을 사용하여 GCC 4.4.3을 사용하여 C 전용 코드를 컴파일하려고 시도했지만 smlal 명령이 생성되었습니다.

관련 문제