2012-08-11 2 views
0

은 ( 몇 일에서 어셈블리를 학습)하지만 난이 책을 통해 찾아보고되었다 f는 86 FPU에 대한 몇 가지 플로트를 1/f를 계산하기위한 적절한 빠른 방법이 무엇인지fpu에서 1/f를 어떻게 나누는가? 등의 간단한 질문에 대한 죄송합니다

답을 찾을 수 couldnt한다

fld dword [ebp+8] 
    fld1 
    fdivrp   ; fdivrp st0 st1 ? 

입니까?

은 (문자 그대로 의미가 없기 때문에) 이거나 가장 간단한 가장 간단한 방법입니까?

// EDIT

이 1/F를 div에 할 수있는 가장 좋은 방법입니다 (또는 1/SQRT는 (F) 고전 FPU의 ASM에 (SSE없이, 그리고 카맥 트릭없이 - 나는 l8er을 시도 할 것이다, 지금은 노력은 단지 '적절한 FPU') 인텔 CPU의 문서에서

+0

더티 트릭이나 SSE가 없으면 특별한 일은 할 수 없습니다. – harold

답변

4

을 해요 :

FDIVRP - 분할 ST (0) ST (1), ST에 저장 결과 (1) 레지스터 스택을 팝합니다.

문서를 읽으십시오.

+0

괜찮아, 그것을 확인하고 그것이 작동하고있는 것 같습니다 (sloow 43 cycles :()하지만 나는 합리적으로 fpu ASM (15 년 후에 정확하게 갱신되는 접촉)에서 새롭고 그것이 가장 빠른 방법인지 확실하지 않습니다. 오전 SSE 간단히 fpu에 대한 talkimg 아니에요) 아마도 1/float (또는 1/sqrt (float)을 빠르게 계산하는 몇 가지 고유 한 지침이 있습니까? - 나는 FPE 어셈블러에 'float of vector normalize'를 쓰려고합니다 : ( –

+2

@ grungefightr 있습니다. 일부 미친 트릭 (http://en.wikipedia.org/wiki/Fast_inverse_square_root)하지만 SSE를 사용하지 않는 이유는 무엇입니까? – harold

+0

@harold - SSE/AVX를 사용합니다. 물론 이죠. :)하지만 이제는 이해하려고합니다. fpu - 위의 트릭도 멋지다 ;-) 예를 들어 '간단히 fpu'튜토리얼을 얻었지만 finnt fpu fins 루틴의 좋은 소스를 통해 fpu/sse에 도움이되는 Google - 자주 fpu 테마로 검색하는 물건을 찾을 수 없음) –