2017-12-20 12 views
0

mxcsr 제어 레지스터에 비트를 설정하려고합니다. gcc (fesetenv)로이 작업을 수행하는 방법을 알고 있지만이 MSVC를 사용할 수 없었습니다. 내가 고려한 가능성은 다음과 같습니다.mxcsr 레지스터의 비트 반전

  1. MSVC x64에서는 인라인으로 지원되지 않습니다.
  2. _controlfp 기능이 1 대 1과 일치하지 않는 것으로 보입니다 (이 기능을 완전히 오해하고있을 수도 있지만,이 모든 것은 잘 설명되어 있지 않습니다).

특히, 나는 these bits을 설정하려면 :

  • 나는이 작업을 수행 할 수있는 방법에 대한 모든 아이디어는

"플러시 0으로" "denormal을가 제로가?"

+0

사용, 제로로 비정규 피연산자 출력을 세척하는의 x64 SSE2를 설정하려면? https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/control87-controlfp-control87-2 – NetMage

+0

FP 제어 단어가 레지스터의 정확한 내용으로 지정 되었습니까? – xaav

+0

기사를 읽었습니까? 나는 당신이 무엇을 요구하고 있는지 확신하지 못합니다. 그것은'_controlfp'와'_control87'의 차이점을 설명하고'_controlfp_s'를 볼 수도 있습니다. 기본적으로 당신은'_control87'을 사용할 필요가 있다고 생각합니다. – NetMage

답변

0

_controlfp 루틴은 ARM, x86 및 x64에서 작동하는 일반 루틴으로서 실제 하드웨어 레지스터에서 사용하는 것과 동일한 비트를 사용할 것으로 기대할 이유가 없습니다.

문서 _controlfp에서 _controlfp은 입력 및 출력 비정규의 개별 제어를 허용하지 않지만 함께 설정합니다.

이 당신이 할 수 있습니다 무엇인지 자세히 설명하는 것 같다

_controlfp(_DN_FLUSH, _MCW_DN); 
+0

좋은 답변이지만, 내가 정말로 찾고 있었던 대답은 여기에 있었다 : https://softwareengineering.stackexchange.com/questions/337246/how-to-stop-denormals-from-messing-up-a-real- 시간 처리와 같은 오디오 응용 프로그램 또는 337251 # 337251 – xaav

+0

정말 까다로운 점은 내가 찾고있는 기능이 실제로 문서화되지 않았다는 것입니다. 심지어 최신 VS 문서에서 제거되었습니다. – xaav

+0

내가 볼 수 있듯이, 그것은'_controlfp' 코드와 같은 결과를 가져야합니다 -이 기사는 MXCSR 레지스터를 어떻게 변경하는지에 대해 이야기합니다. OTOH, 나는이 수준에서 부동 소수점 제어가 필요하지 않습니다. – NetMage