xmm 레지스터에 고정되어있는 double precision float 값의 아크 탄젠트를 계산하려고합니다. 정상적인 float 포인팅을 사용하면 FPATAN x87 명령을 사용하는 것이 가능하지만 어떻게 double을 사용하여이 작업을 수행 할 수 있습니까?인텔 x86_64 어셈블리, x87과 SSE2 사이를 이동하는 방법? (double의 역 탄젠트 계산)
0
A
답변
2
은 여전히 xmm에서 x87로 데이터를 복사하여 fpatan
과 같은 명령어를 사용하지만 일반적으로 수학 라이브러리 함수를 호출해야합니다. (fpatan
은 너무 느리기 때문에 많은 간단한 지침으로 대체하는 것이 좋습니다.) Wikipedia는 무료로 재배포 가능한 C 구현을 위해 Netlib을 살펴볼 것을 제안합니다. (물론 가장 쉬운 방법은 당신이 사용하는 어떤 시스템에 libm의에서 함수를 호출하는 것입니다.)
당신은 당신을 통해 반송 메모리 정적 스토리지를 사용하지 않는, 그것을하기 위하여려고하는 경우에; 스택에 임시를 사용하십시오.
fpatan
takes 2 inputs 또한 atan2
library function을 구현하므로 두 입력의 부호에 따라 적절한 사분면을 결과로 제공합니다.
; assuming you did sub rsp, 24 or something earlier in your function
movsd [rsp], xmm1
fld qword [rsp] ; st0 = xmm1
movsd [rsp], xmm0
fld qword [rsp] ; st0 = xmm0, st1 = xmm1
fpatan ; st0 = arctan(xmm1/xmm0)
fstp qword [rsp] ; x87 stack is empty again
movsd xmm0, [rsp] ; xmm0 = arctan(xmm1/xmm0)
; and then add rsp, 24 at some point before returning
관련 문제
- 1. 탄젠트 공간, 탄젠트/바이너리 계산
- 2. 부분 도함수를 통한 탄젠트 및 비트 탄젠트 벡터 계산
- 3. x86_64 어셈블리 미적분기가 있습니까?
- 4. 인텔 AVX2 어셈블리 개발
- 5. 지수화 기능 인텔 어셈블리
- 6. 탄젠트 수식
- 7. x86_64 어셈블리 명령 줄 인수
- 8. x86_64 어셈블리 문제에 복식 추가
- 9. 세그먼트 결함 어셈블리 i386 : x86_64
- 10. gcc로 x86_64 어셈블리 출력을 지우시겠습니까?
- 11. 인텔 8080 : 메모리 오프셋 계산
- 12. AT & T 스타일 어셈블리 코드를 Visual Studio 및 인텔 스타일 구문으로 이동하는 방법?
- 13. 어셈블리 언어로 기계 명령어를 excecute하는 방법 (인텔)
- 14. 페이지 사이를 이동하는 동안로드를 표시하는 방법
- 15. 자바 : 탄젠트 방법
- 16. 어셈블리 코드 디버깅 (인텔 8086)
- 17. 는 인텔 x86 어셈블리 (NASM)
- 18. 인텔 어셈블리 변환기에 AT & T를
- 19. gcc의 인텔 스타일 인라인 어셈블리
- 20. 페이지 사이를 이동하는 방법을 효과적으로
- 21. 계산 역 모는
- 22. 인텔 : 부동 소수점 숫자 계산
- 23. x86_64 어셈블리 규칙 저장 인수 레지스터
- 24. 인텔 어셈블리 병합 정렬 코드를 C++로 포함 (인라인 어셈블리)
- 25. 인텔 코어 i5는 i686 또는 x86_64 제품군에 속합니까
- 26. 인텔 기반 어셈블리 언어 세그먼트 화 오류
- 27. 어셈블리 인텔 로컬 변수가있는 x86 호출 함수
- 28. gcc/mingw를 사용하여 인텔 어셈블리 컴파일
- 29. 인텔 어셈블리 - r10d를 사용하면 사이클이 늘어납니다.
- 30. 문자열 역 어셈블리 언어 x86
오래된 x87 부동 소수점 스택은 xmm 레지스터보다 정밀도가 높기 때문에 여기에서 계산을 수행 할 수 있습니다. – MicroVirus
그러면 어떻게 xmm 값을 해당 포인트 스택으로 옮길 수 있습니까 ?? fld xmm does does all at – formateu
'[x/y/z] mm'-registers와 x87-stack 사이에서 값을 이동하려면 메모리 (일반적으로 프로그램 스택)를 사용해야합니다. – EOF