diff --git a/sdk/include/ddk/ioaccess.h b/sdk/include/ddk/ioaccess.h index d1247302c0a..58fd330fd51 100644 --- a/sdk/include/ddk/ioaccess.h +++ b/sdk/include/ddk/ioaccess.h @@ -43,7 +43,7 @@ extern "C" { #define MEMORY_BARRIER() -#elif defined(_PPC_) || defined(_MIPS_) || defined(_ARM_) +#elif defined(_PPC_) || defined(_MIPS_) || defined(_ARM_) || defined(_ARM64_) #define READ_REGISTER_UCHAR(r) (*(volatile UCHAR * const)(r)) #define READ_REGISTER_USHORT(r) (*(volatile USHORT * const)(r)) diff --git a/sdk/include/ndk/arm64/ketypes.h b/sdk/include/ndk/arm64/ketypes.h index 0a40c32f00f..1b2687382fb 100644 --- a/sdk/include/ndk/arm64/ketypes.h +++ b/sdk/include/ndk/arm64/ketypes.h @@ -54,6 +54,11 @@ extern "C" { // #define DOUBLE_FAULT_STACK_SIZE 0x8000 +// +// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual) +// +#define KSEG0_BASE 0xfffff80000000000ULL + // // Structure for CPUID info // diff --git a/sdk/include/ndk/psfuncs.h b/sdk/include/ndk/psfuncs.h index 48fa4a934e2..a4c0fdf690c 100644 --- a/sdk/include/ndk/psfuncs.h +++ b/sdk/include/ndk/psfuncs.h @@ -427,8 +427,7 @@ FORCEINLINE struct _TEB * NtCurrentTeb(VOID) // return (struct _TEB *)KeGetPcr()->Used_Self; return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW); #elif defined (_M_ARM64) - //UNIMPLEMENTED; - return 0; + return (struct _TEB *)__getReg(18); // #elif defined(_M_PPC) // return (struct _TEB *)_read_teb_dword(0x18); #else diff --git a/sdk/include/vcruntime/intrin.h b/sdk/include/vcruntime/intrin.h index a91d6ddd107..1f28bab2cc1 100644 --- a/sdk/include/vcruntime/intrin.h +++ b/sdk/include/vcruntime/intrin.h @@ -1007,6 +1007,10 @@ int _isunorderedf(float, float); #endif /* _M_ARM */ +#ifdef _M_ARM64 +unsigned __int64 __getReg(int); +#endif + #if defined(_M_CEE_PURE) long _InterlockedCompareExchange(_Interlocked_operand_ long volatile * _Destination, long _Exchange, long _Comparand); diff --git a/sdk/include/vcruntime/msc/intrin.h b/sdk/include/vcruntime/msc/intrin.h index 5fd30019174..a270db3d693 100644 --- a/sdk/include/vcruntime/msc/intrin.h +++ b/sdk/include/vcruntime/msc/intrin.h @@ -380,6 +380,10 @@ void _sgdt(void *Destination); #pragma intrinsic(__sev) #endif +#if defined(_M_ARM64) +#pragma intrinsic(__getReg) +#endif + /** Secure virtual machine **/ #if defined(_M_IX86) || defined(_M_AMD64) #pragma intrinsic(__svm_clgi) diff --git a/sdk/include/xdk/winnt_old.h b/sdk/include/xdk/winnt_old.h index 91f08fe745e..425ea86ab73 100644 --- a/sdk/include/xdk/winnt_old.h +++ b/sdk/include/xdk/winnt_old.h @@ -4579,8 +4579,7 @@ FORCEINLINE PVOID GetCurrentFiber(VOID) #elif defined (_M_ARM64) FORCEINLINE struct _TEB * NtCurrentTeb(VOID) { - //UNIMPLEMENTED; - return 0; + return (struct _TEB *)__getReg(18); } FORCEINLINE PVOID GetCurrentFiber(VOID) { diff --git a/sdk/lib/3rdparty/freetype/CMakeLists.txt b/sdk/lib/3rdparty/freetype/CMakeLists.txt index 5f9fa7e7092..d30f1e180ed 100644 --- a/sdk/lib/3rdparty/freetype/CMakeLists.txt +++ b/sdk/lib/3rdparty/freetype/CMakeLists.txt @@ -48,7 +48,7 @@ list(APPEND SOURCE add_library(freetype ${SOURCE}) -if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND ARCH STREQUAL "amd64") +if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND (ARCH STREQUAL "amd64" OR ARCH STREQUAL "arm64")) # error C4312: 'type cast': conversion from 'unsigned long' to 'void *' of greater size remove_target_compile_option(freetype "/we4312") endif() diff --git a/sdk/tools/spec2def/spec2def.c b/sdk/tools/spec2def/spec2def.c index df844ba9d55..d5184d31f31 100644 --- a/sdk/tools/spec2def/spec2def.c +++ b/sdk/tools/spec2def/spec2def.c @@ -1619,7 +1619,7 @@ int main(int argc, char *argv[]) else if (strcasecmp(pszArchString, "arm64") == 0) giArch = ARCH_ARM64; else if (strcasecmp(pszArchString, "ppc") == 0) giArch = ARCH_PPC; - if ((giArch == ARCH_AMD64) || (giArch == ARCH_IA64)) + if ((giArch == ARCH_AMD64) || (giArch == ARCH_IA64) || (giArch == ARCH_ARM64)) { pszArchString2 = "win64"; }