1
어셈블리 함수 호출 전에 모든 XMM 레지스터를 저장/밀어 넣어야합니까? 64 비트 개발의 릴리스 모드 (AVX2 사용)에서 내 코드의 크래시 문제를 관찰하고 있습니다. 디버그 모드에서 잘 작동합니다. 나는 XMM8 레지스터의 내용을 저장하고 함수 호출이 끝날 때 그것을 복원 한 다음 잘 동작했다.함수 호출 전에 XMM 레지스터 저장
어떤 아이디어 또는 참조?
어셈블리 함수 호출 전에 모든 XMM 레지스터를 저장/밀어 넣어야합니까? 64 비트 개발의 릴리스 모드 (AVX2 사용)에서 내 코드의 크래시 문제를 관찰하고 있습니다. 디버그 모드에서 잘 작동합니다. 나는 XMM8 레지스터의 내용을 저장하고 함수 호출이 끝날 때 그것을 복원 한 다음 잘 동작했다.함수 호출 전에 XMM 레지스터 저장
어떤 아이디어 또는 참조?
예, Microsoft Windows에서는 XMM6-XMM15 레지스터를 보존해야합니다. http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx을 참조하십시오. - xmm8을 포함하므로 보존하거나 사용하지 마십시오.
그러나 Linux에서는 임시 레지스터이므로 보존 할 필요가 없습니다. http://www.x86-64.org/documentation/abi.pdf 페이지 21을 참조하십시오.
예,하지만 어떤 호출 규칙이 있습니까? Win64 또는 SystemV? xmm8은 두 가지 모두에서 발신자 저장이지만 다른 참조를 제공합니다. – harold
Std 호출 규칙을 사용하고 있습니다. – Falcon
글쎄, 그건 64 비트 코드의 옵션 중 하나가 아닙니다. 그냥 사용할 수 있지만 외부 함수를 호출하면 작동하지 않습니다. – harold