Delphi XE 또는 XE2에서 매우 빠른 Intel POPCNT 명령어를 사용하여 16/32/64 비트 워드 내에 1 비트 수를 구현하려면 어떻게해야합니까? 이 지침에 직접 액세스 할 수있는 라이브러리 루틴이 있습니까? 누군가가 그것의 사용을 보여주는 데모 asm 섹션을 작성해 주실 수 있습니까? 그리고 마지막으로, 64 비트 델파이 (asm을 사용할 수 없음)의 옵션은 무엇입니까? 미리 감사드립니다. tPOPCNT in Delphi XE/XE2 64bit
답변
Rob Kennedy가 다뤘 듯이 여기에는 32 비트 및 64 비트 Delphi IDE 용 기능이 있습니다.
function GetBitCount(num: integer): integer;
asm
POPCNT eax, num
end;
function GetBitCount(num: Int64): integer;
asm
POPCNT rax, num
end;
EDIT : 이 32 비트 및 64 비트 호환 버전 델파이
{$IF CompilerVersion < 23} //pre-XE2
NativeInt = integer;
{$IFEND}
function GetBitCount(num: NativeInt): integer;
asm
{$IFNDEF CPUX64}
POPCNT eax, num
{$ELSE CPUX64}
POPCNT rax, num
{$ENDIF CPUX64}
end;
그 마지막 하나는 사납게 보입니다. 아마도 32 비트 값에서 작동하고 64 비트 값으로 저장 될 것입니까? 상위 32 비트를 제로로 만들거나 int64로 선언 하시겠습니까? –
@Marco van de Voort 네, 기본적으로 32 비트입니다.하지만 num을 NativeInt 또는 Int64 또는 UInt64로 선언 할 수 있습니다. 대신 tham 모두와 작동합니다. Int64로 수정되었습니다! –
변수 int 크기를 사용하는 경우 popcnt 줄에서 ifdef 레지스터를 정의해야합니다. –
- 1. Inno-setup 32bit와 64bit in one
- 2. Delphi Stringlist in Record
- 3. JFreeChart-like in Delphi
- 4. TThreadedStringList in delphi xe2
- 5. DOA components in delphi
- 6. OLE ERROR 805303E in delphi?
- 7. 64bit 메모리 할당
- 8. Control + Click Freeze in Delphi XE
- 9. C++ 유형 int8_t [20] in delphi?
- 10. JMF on 64bit java?
- 11. VMware 4 64Bit CPU의 ESXi는 64Bit 게스트를 실행합니까?
- 12. 64bit dll mingw 연결하기
- 13. PHP windows 64bit
- 14. Windows7 Maven 3 64Bit
- 15. CassiniDev 64bit 연속 통합
- 16. pymongo 64bit 부호없는 정수
- 17. MIPS QTSPIM 64bit
- 18. BCmath php 64bit
- 19. 64bit .NET 성능 튜닝
- 20. iis에서 SKYPE4COM 실행 64bit
- 21. GAS 64bit 튜토리얼
- 22. 우분투에 레일 설치 64bit
- 23. windows 64bit problem
- 24. LuaInterface and 64Bit
- 25. OpenCL : GPU에서 32 비트 및 64 비트 popcnt 명령?
- 26. Java + Sqlite 및 64Bit 문제?
- 27. .NET Webservice using ODP.NET 64bit
- 28. DOS에서 Windows xp 64bit 설치
- 29. 64bit IE에서 ActiveX 컨트롤 설치
- 30. Google 프로토콜 버퍼 - 64Bit Vs2010
ASM뿐만 아니라 64 비트 델파이 avaible이다. – Giel
asm 블록 안에'popcnt eax, eax' 또는'popcnt rax, rcx '를 쓰는 것만 큼 간단하지는 않습니까? –
약간 벗어난 주제 : http://www.strchr.com/crc32_popcnt에는 popcnt 구현의 비교표가 있습니다. SSSE3 (니블 테이블 조회 용 'pshufb') 변형은 실제로 일부 시스템에서'popcnt '를 능가합니다. 몇 % 만, 모든 CPU에서 반드시 같을 필요는 없으며 큰 (100 바이트 이상) 데이터를 처리하는 경우에만 유용합니다. _ 매우 빠르지는 상대적인 것입니다. –