Initial groundwork for ARM64 support

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7001 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
anders_k 2018-06-03 21:00:53 +00:00
parent bca384e691
commit 460b3f59a9
11 changed files with 101 additions and 51 deletions

View file

@ -191,7 +191,9 @@ extern "C" BOOL APIENTRY DllMain(HINSTANCE _hModule, DWORD ul_reason_for_call,
return TRUE;
}
#ifndef INT32_MAX
#define INT32_MAX 0x7fffffff
#endif
int MulDiv64(int nNumber, __int64 nNumerator, __int64 nDenominator)
{

View file

@ -77,13 +77,18 @@ void myitoa64(__int64 i, char *buffer)
// Visual Studio 2015 (CLv19 x86) and some older versions of CLv14 x64 will optimize
// our loop into a direct call to _memset and this fails to link because we don't use the CRT
#if defined(_MSC_VER) && _MSC_VER+0 >= 1400
#if defined(_MSC_FULL_VER) && _MSC_FULL_VER+0 >= 140050727
#include <intrin.h>
#else
EXTERN_C void __stosb(BYTE*,BYTE,size_t);
#endif //~ _MSC_FULL_VER >= 140050727
#pragma intrinsic(__stosb)
#define CRTINTRINSIC_memset(p,c,s) __stosb((BYTE*)(p),(BYTE)(c),(s))
# if defined(_MSC_FULL_VER) && _MSC_FULL_VER+0 >= 140050727
# include <intrin.h>
# else
EXTERN_C void __stosb(BYTE*,BYTE,size_t);
# endif //~ _MSC_FULL_VER >= 140050727
# if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) // __stosb not available under _M_ARM nor _M_ARM64
# pragma intrinsic(__stosb)
# define CRTINTRINSIC_memset(p,c,s) __stosb((BYTE*)(p),(BYTE)(c),(s))
# elif defined(_M_ARM) || defined(_M_ARM64) // For _MSC_VER=1914 (VS 15.7.27703.2026/CL 19.14.26430)
EXTERN_C void* __cdecl memset(void *d, int v, size_t l) { char *p=(char*)d; while (l-- > 0) *p++=v; return d; }
# pragma function(memset)
# endif
#endif //~ _MSC_VER
void mini_memset(void *o,char i,int l)