Hi Magnus,

Dropping hotspot-runtime-dev.

As you posted the patch you mentioned before (see 
https://mail.openjdk.java.net/pipermail/build-dev/2020-July/027872.html), I 
want to share an updated patch for the build system rebased on top of your 
patch. (I understand your patch still needs to go through a review, but I hope 
this will give us a better reference point on what adding support for 
Windows-AArch64 would look like in the build system.)

As I mentioned in your patch's discussion, I've broken down adding the support 
for Windows-AArch64 into 2 bits: [1] adding support for cross-compilation when 
targetting Windows, and [2] adding support for targetting Windows-AArch64. The 
two patches are available below.

Is it more in line with what you have in mind?

Thank you,

--
Ludovic


[1] Adding support for cross-compilation when targetting Windows

```
diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4
index 7248163242d..60b4097cba9 100644
--- a/make/autoconf/basic.m4
+++ b/make/autoconf/basic.m4
@@ -111,6 +111,16 @@ AC_DEFUN([BASIC_EVAL_DEVKIT_VARIABLE],
   fi
 ])
 
+###############################################################################
+# Evaluates platform specific overrides for build devkit variables.
+# $1: Name of variable
+AC_DEFUN([BASIC_EVAL_BUILD_DEVKIT_VARIABLE],
+[
+  if test "x[$]$1" = x; then
+    eval $1="\${$1_${OPENJDK_BUILD_CPU}}"
+  fi
+])
+
 ###############################################################################
 AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
 [
diff --git a/make/autoconf/flags-ldflags.m4 b/make/autoconf/flags-ldflags.m4
index a2a52f98ef7..8af9a20b5e8 100644
--- a/make/autoconf/flags-ldflags.m4
+++ b/make/autoconf/flags-ldflags.m4
@@ -164,15 +164,14 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
     fi
 
   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
-    if test "x${OPENJDK_$1_CPU}" = "xx86"; then
-      $1_CPU_LDFLAGS="-safeseh"
-      # NOTE: Old build added -machine. Probably not needed.
-      $1_CPU_LDFLAGS_JVM_ONLY="-machine:I386"
+    if test "x${OPENJDK_$1_CPU_BITS}" = "x32"; then
       $1_CPU_EXECUTABLE_LDFLAGS="-stack:327680"
-    else
-      $1_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64"
+    elif test "x${OPENJDK_$1_CPU_BITS}" = "x64"; then
       $1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
     fi
+    if test "x${OPENJDK_$1_CPU}" = "xx86"; then
+      $1_CPU_LDFLAGS="-safeseh"
+    fi
   fi
 
   # JVM_VARIANT_PATH depends on if this is build or target...
diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4
index 694d41052ba..8cbf306ab0c 100644
--- a/make/autoconf/flags.m4
+++ b/make/autoconf/flags.m4
@@ -204,32 +204,36 @@ AC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS],
 # Param 1 - Optional prefix to all variables. (e.g BUILD_)
 AC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS],
 [
-  if test "x[$]$1SYSROOT" != "x"; then
-    if test "x$TOOLCHAIN_TYPE" = xgcc; then
-      $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT"
-      $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT"
-    elif test "x$TOOLCHAIN_TYPE" = xclang; then
-      $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT"
-      $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT"
-    fi
-  fi
-
-  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
-    # We also need -iframework<path>/System/Library/Frameworks
-    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework 
[$]$1SYSROOT/System/Library/Frameworks"
-    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework 
[$]$1SYSROOT/System/Library/Frameworks"
-    # These always need to be set, or we can't find the frameworks embedded in 
JavaVM.framework
-    # set this here so it doesn't have to be peppered throughout the forest
-    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F 
[$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
-    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F 
[$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
-  fi
-
   # For the microsoft toolchain, we need to get the SYSROOT flags from the
   # Visual Studio environment. Currently we cannot handle this as a separate
   # build toolchain.
-  if test "x$1" = x && test "x$OPENJDK_BUILD_OS" = "xwindows" \
-      && test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
-    TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
+  if test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
+    # The BUILD_* flags are setup in TOOLCHAIN_SETUP_BUILD_COMPILERS
+    if test "x$1" = x; then
+      TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
+    fi
+
+    TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS([$1])
+  else
+    if test "x[$]$1SYSROOT" != "x"; then
+      if test "x$TOOLCHAIN_TYPE" = xgcc; then
+        $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT"
+        $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT"
+      elif test "x$TOOLCHAIN_TYPE" = xclang; then
+        $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT"
+        $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT"
+      fi
+    fi
+
+    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+      # We also need -iframework<path>/System/Library/Frameworks
+      $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework 
[$]$1SYSROOT/System/Library/Frameworks"
+      $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework 
[$]$1SYSROOT/System/Library/Frameworks"
+      # These always need to be set, or we can't find the frameworks embedded 
in JavaVM.framework
+      # set this here so it doesn't have to be peppered throughout the forest
+      $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F 
[$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
+      $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F 
[$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
+    fi
   fi
 
   AC_SUBST($1SYSROOT_CFLAGS)
@@ -373,7 +377,8 @@ AC_DEFUN_ONCE([FLAGS_POST_TOOLCHAIN],
 [
   FLAGS_SETUP_TOOLCHAIN_CONTROL
 
-  if test "x$BUILD_SYSROOT" != x; then
+  if test "x$BUILD_SYSROOT" != x || \
+      test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
     FLAGS_SETUP_SYSROOT_FLAGS([BUILD_])
   else
     if test "x$COMPILE_TYPE" != "xcross"; then
diff --git a/make/autoconf/toolchain.m4 b/make/autoconf/toolchain.m4
index 14213f896d4..4a2462c2dd6 100644
--- a/make/autoconf/toolchain.m4
+++ b/make/autoconf/toolchain.m4
@@ -798,14 +798,18 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
           . $CONFIGURESUPPORT_OUTPUTDIR/build-devkit.info
           # This potentially sets the following:
           # A descriptive name of the devkit
-          BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_NAME])
+          BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_NAME])
           # Corresponds to --with-extra-path
-          BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_EXTRA_PATH])
+          BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_EXTRA_PATH])
           # Corresponds to --with-toolchain-path
-          BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_TOOLCHAIN_PATH])
+          BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_TOOLCHAIN_PATH])
           # Corresponds to --with-sysroot
-          BASIC_EVAL_DEVKIT_VARIABLE([BUILD_DEVKIT_SYSROOT])
-          # Skip the Window specific parts
+          BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_SYSROOT])
+
+          if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+            BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_VS_INCLUDE])
+            BASIC_EVAL_BUILD_DEVKIT_VARIABLE([BUILD_DEVKIT_VS_LIB])
+          fi
         fi
 
         AC_MSG_CHECKING([for build platform devkit])
@@ -817,11 +821,17 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
 
         BUILD_SYSROOT="$BUILD_DEVKIT_SYSROOT"
 
-         # Fallback default of just /bin if DEVKIT_PATH is not defined
+        # Fallback default of just /bin if DEVKIT_PATH is not defined
         if test "x$BUILD_DEVKIT_TOOLCHAIN_PATH" = x; then
           BUILD_DEVKIT_TOOLCHAIN_PATH="$BUILD_DEVKIT_ROOT/bin"
         fi
-        PATH="$BUILD_DEVKIT_TOOLCHAIN_PATH:$BUILD_DEVKIT_EXTRA_PATH"
+
+        
UTIL_PREPEND_TO_PATH([PATH],"$BUILD_DEVKIT_TOOLCHAIN_PATH:$BUILD_DEVKIT_EXTRA_PATH")
+
+        if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+          BUILD_VS_INCLUDE="${BUILD_DEVKIT_VS_INCLUDE//;/:}"
+          BUILD_VS_LIB="${BUILD_DEVKIT_VS_LIB//;/:}"
+        fi
       fi
     fi
 
@@ -836,9 +846,27 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
     UTIL_LOOKUP_PROGS(BUILD_STRIP, strip)
     # Assume the C compiler is the assembler
     BUILD_AS="$BUILD_CC -c"
-    # Just like for the target compiler, use the compiler as linker
-    BUILD_LD="$BUILD_CC"
-    BUILD_LDCXX="$BUILD_CXX"
+    if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+      # In the Microsoft toolchain we have a separate LD command "link".
+      UTIL_LOOKUP_TOOLCHAIN_PROGS(BUILD_LD, link)
+
+      # Make sure we did not pick up /usr/bin/link, which is the unix-style
+      # link executable.
+      AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio 
linker])
+      $BUILD_LD --version > /dev/null
+      if test $? -eq 0 ; then
+        AC_MSG_RESULT([no])
+        AC_MSG_ERROR([This is the winenv link tool. Please check your PATH and 
rerun configure.])
+      else
+        AC_MSG_RESULT([yes])
+      fi
+
+      BUILD_LDCXX="$BUILD_LD"
+    else
+      # Just like for the target compiler, use the compiler as linker
+      BUILD_LD="$BUILD_CC"
+      BUILD_LDCXX="$BUILD_CXX"
+    fi
 
     PATH="$OLDPATH"
 
@@ -879,7 +907,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
   # Check for extra potential brokenness.
   if test  "x$TOOLCHAIN_TYPE" = xmicrosoft; then
     # On Windows, double-check that we got the right compiler.
-    CC_VERSION_OUTPUT=`$COMPILER 2>&1 1>/dev/null | $GREP -v 
'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
+    CC_VERSION_OUTPUT=`$CC 2>&1 1>/dev/null | $GREP -v 
'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
     COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
     if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
       if test "x$COMPILER_CPU_TEST" != "x80x86" -a "x$COMPILER_CPU_TEST" != 
"xx86"; then
diff --git a/make/autoconf/toolchain_microsoft.m4 
b/make/autoconf/toolchain_microsoft.m4
index fd8dfc3641d..2e297dc8be1 100644
--- a/make/autoconf/toolchain_microsoft.m4
+++ b/make/autoconf/toolchain_microsoft.m4
@@ -309,8 +309,8 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
     eval VS_SUPPORTED="\${VS_SUPPORTED_${VS_VERSION}}"
     eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
 
-    VS_INCLUDE=${DEVKIT_VS_INCLUDE//;/:}
-    VS_LIB=${DEVKIT_VS_LIB//;/:}
+    VS_INCLUDE="${DEVKIT_VS_INCLUDE//;/:}"
+    VS_LIB="${DEVKIT_VS_LIB//;/:}"
 
     AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION])
 
@@ -426,21 +426,6 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
 
       # Turn VS_PATH into TOOLCHAIN_PATH
       TOOLCHAIN_PATH="$TOOLCHAIN_PATH:$VS_PATH"
-
-      # Convert VS_INCLUDE into SYSROOT_CFLAGS
-      OLDIFS="$IFS"
-      IFS=":"
-
-      for ipath in $VS_INCLUDE; do
-        SYSROOT_CFLAGS="$SYSROOT_CFLAGS -I$ipath"
-      done
-
-      # Convert VS_LIB into SYSROOT_LDFLAGS
-      for libpath in $VS_LIB; do
-        SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -libpath:$libpath"
-      done
-
-      IFS="$OLDIFS"
     fi
   else
     AC_MSG_RESULT([not found])
@@ -488,22 +473,20 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
   DLL_NAME="$1"
   MSVC_DLL=
 
+  if test "x$OPENJDK_TARGET_CPU" = xx86; then
+    vs_target_cpu=x86
+  elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
+    vs_target_cpu=x64
+  fi
+
   if test "x$MSVC_DLL" = x; then
     if test "x$VCINSTALLDIR" != x; then
       if test "$VS_VERSION" -lt 2017; then
         # Probe: Using well-known location from Visual Studio 12.0 and older
-        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-          
POSSIBLE_MSVC_DLL="$VCINSTALLDIR/redist/x64/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME"
-        else
-          
POSSIBLE_MSVC_DLL="$VCINSTALLDIR/redist/x86/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME"
-        fi
+        
POSSIBLE_MSVC_DLL="$VCINSTALLDIR/redist/$vs_target_cpu/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
       else
         # Probe: Using well-known location from VS 2017 and VS 2019
-        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-          POSSIBLE_MSVC_DLL="`ls 
$VCToolsRedistDir/x64/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME`"
-        else
-          POSSIBLE_MSVC_DLL="`ls 
$VCToolsRedistDir/x86/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME`"
-        fi
+        POSSIBLE_MSVC_DLL="`ls 
$VCToolsRedistDir/$vs_target_cpu/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME`"
       fi
       # In case any of the above finds more than one file, loop over them.
       for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
@@ -537,13 +520,8 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
       WIN_VS_TOOLS_DIR="$VS100COMNTOOLS/.."
       UTIL_FIXUP_PATH(WIN_VS_TOOLS_DIR, NOFAIL)
       if test "x$WIN_VS_TOOLS_DIR" != x; then
-        if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-          POSSIBLE_MSVC_DLL=`$FIND "$WIN_VS_TOOLS_DIR" -name $DLL_NAME \
-          | $GREP -i /x64/ | $HEAD --lines 1`
-        else
-          POSSIBLE_MSVC_DLL=`$FIND "$WIN_VS_TOOLS_DIR" -name $DLL_NAME \
-          | $GREP -i /x86/ | $HEAD --lines 1`
-        fi
+        POSSIBLE_MSVC_DLL=`$FIND "$WIN_VS_TOOLS_DIR" -name $DLL_NAME \
+          | $GREP -i /$vs_target_cpu/ | $HEAD --lines 1`
         TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
             [search of VS100COMNTOOLS])
       fi
@@ -554,17 +532,17 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
     # Probe: Search wildly in the VCINSTALLDIR. We've probably lost by now.
     # (This was the original behaviour; kept since it might turn something up)
     if test "x$VCINSTALLDIR" != x; then
-      if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
-        POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
-        | $GREP x64 | $HEAD --lines 1`
-      else
+      if test "x$vs_target_cpu" = xx86; then
         POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
-        | $GREP x86 | $GREP -v ia64 | $GREP -v x64 | $HEAD --lines 1`
+          | $GREP x86 | $GREP -v ia64 | $GREP -v x64 | $GREP -v arm64 | $HEAD 
--lines 1`
         if test "x$POSSIBLE_MSVC_DLL" = x; then
           # We're grasping at straws now...
           POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
-          | $HEAD --lines 1`
+            | $HEAD --lines 1`
         fi
+      else
+        POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
+          | $GREP $vs_target_cpu | $HEAD --lines 1`
       fi
 
       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
@@ -628,9 +606,9 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
   fi
 
   AC_ARG_WITH(vcruntime-1-dll, [AS_HELP_STRING([--with-vcruntime-1-dll],
-      [path to microsoft C++ runtime dll (vcruntime*_1.dll) (Windows x64 only) 
@<:@probed@:>@])])
+      [path to microsoft C++ runtime dll (vcruntime*_1.dll) (Windows 64-bits 
only) @<:@probed@:>@])])
 
-  if test "x$VCRUNTIME_1_NAME" != "x" && test "x$OPENJDK_TARGET_BITS" = x64; 
then
+  if test "x$VCRUNTIME_1_NAME" != "x" && test "x$OPENJDK_TARGET_CPU_BITS" = 
x64; then
     if test "x$with_vcruntime_1_dll" != x; then
       # If given explicitly by user, do not probe. If not present, fail 
directly.
       TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($VCRUNTIME_1_NAME, 
[$with_vcruntime_1_dll],
@@ -695,3 +673,25 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
   fi
   AC_SUBST(UCRT_DLL_DIR)
 ])
+
+# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so
+# that configure can use them while detecting compilers.
+# TOOLCHAIN_TYPE is available here.
+# Param 1 - Optional prefix to all variables. (e.g BUILD_)
+AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS],
+[
+  OLDIFS="$IFS"
+  IFS=":"
+
+  # Convert $1VS_INCLUDE into $1SYSROOT_CFLAGS
+  for ipath in [$]$1VS_INCLUDE; do
+    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -I$ipath"
+  done
+
+  # Convert $1VS_LIB into $1SYSROOT_LDFLAGS
+  for libpath in [$]$1VS_LIB; do
+    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -libpath:$libpath"
+  done
+
+  IFS="$OLDIFS"
+])
diff --git a/make/hotspot/gensrc/GensrcAdlc.gmk 
b/make/hotspot/gensrc/GensrcAdlc.gmk
index 0947133c16e..bcdea62590d 100644
--- a/make/hotspot/gensrc/GensrcAdlc.gmk
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk
@@ -88,6 +88,10 @@ ifeq ($(call check-jvm-feature, compiler2), true)
     ADLCFLAGS += -DAIX=1
   else ifeq ($(call isTargetOs, macosx), true)
     ADLCFLAGS += -D_ALLBSD_SOURCE=1 -D_GNU_SOURCE=1
+  else ifeq ($(call isTargetOs, windows), true)
+    ifeq ($(call isTargetCpuBits, 64), true)
+      ADLCFLAGS += -D_WIN64=1
+    endif
   endif
 
   ifeq ($(call isTargetOs, windows), false)
diff --git a/make/modules/java.base/gensrc/GensrcMisc.gmk 
b/make/modules/java.base/gensrc/GensrcMisc.gmk
index cd12f2ab318..5390fcabe85 100644
--- a/make/modules/java.base/gensrc/GensrcMisc.gmk
+++ b/make/modules/java.base/gensrc/GensrcMisc.gmk
@@ -60,6 +60,10 @@ ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
   CPP_FLAGS += -x c
 else ifeq ($(TOOLCHAIN_TYPE), microsoft)
   CPP_FLAGS += -nologo
+
+  # cl.exe does only recognize few file extensions as valid (ex: .c, .h, 
.cpp), so
+  # make sure *.java.template files are recognized as valid input files
+  CPP_FILEPREFIX = -Tc
 endif
 
 # Generate a java source file from a template through the C preprocessor for 
the
@@ -73,7 +77,7 @@ define generate-preproc-src
        $(call MakeDir, $(@D))
        $(call ExecuteWithLog, $(SUPPORT_OUTPUTDIR)/gensrc/java.base/_$(@F), \
            ( $(NAWK) '/@@END_COPYRIGHT@@/{exit}1' $< && \
-             $(CPP) $(CPP_FLAGS) $(SYSROOT_CFLAGS) $(CFLAGS_JDKLIB) $< \
+             $(CPP) $(CPP_FLAGS) $(SYSROOT_CFLAGS) $(CFLAGS_JDKLIB) 
$(CPP_FILEPREFIX) $< \
                  2> >($(GREP) -v '^$(<F)$$' >&2) \
                  | $(NAWK) '/@@START_HERE@@/,0' \
                  |  $(SED) -e 's/@@START_HERE@@/\/\/ AUTOMATICALLY GENERATED 
FILE - DO NOT EDIT/' \
```

[2] Adding support for targetting Windows-AArch64

```
diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4
index f5545caf10d..a8cf273644a 100644
--- a/make/autoconf/flags-cflags.m4
+++ b/make/autoconf/flags-cflags.m4
@@ -650,7 +650,9 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
 
   # toolchain dependend, per-cpu
   if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
-    if test "x$FLAGS_CPU" = xx86_64; then
+    if test "x$FLAGS_CPU" = xaarch64; then
+      $1_DEFINES_CPU_JDK="${$1_DEFINES_CPU_JDK} -D_ARM64_ -Darm64"
+    elif test "x$FLAGS_CPU" = xx86_64; then
       $1_DEFINES_CPU_JDK="${$1_DEFINES_CPU_JDK} -D_AMD64_ -Damd64"
     else
       $1_DEFINES_CPU_JDK="${$1_DEFINES_CPU_JDK} -D_X86_ -Dx86"
diff --git a/make/autoconf/jvm-features.m4 b/make/autoconf/jvm-features.m4
index 8ec76f669f7..80678458263 100644
--- a/make/autoconf/jvm-features.m4
+++ b/make/autoconf/jvm-features.m4
@@ -237,8 +237,9 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_AOT],
   JVM_FEATURES_CHECK_AVAILABILITY(aot, [
     AC_MSG_CHECKING([if platform is supported by AOT])
     # AOT is only available where JVMCI is available since it requires JVMCI.
-    if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
-        test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
+    if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+      AC_MSG_RESULT([yes])
+    elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; 
then
       AC_MSG_RESULT([yes])
     else
       AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -303,8 +304,9 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_GRAAL],
   JVM_FEATURES_CHECK_AVAILABILITY(graal, [
     AC_MSG_CHECKING([if platform is supported by Graal])
     # Graal is only available where JVMCI is available since it requires JVMCI.
-    if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
-        test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+    if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+      AC_MSG_RESULT([yes])
+    elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; 
then
       AC_MSG_RESULT([yes])
     else
       AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -336,8 +338,9 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_JVMCI],
 [
   JVM_FEATURES_CHECK_AVAILABILITY(jvmci, [
     AC_MSG_CHECKING([if platform is supported by JVMCI])
-    if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
-        test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+    if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+      AC_MSG_RESULT([yes])
+    elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; 
then
       AC_MSG_RESULT([yes])
     else
       AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -353,8 +356,9 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_SHENANDOAHGC],
 [
   JVM_FEATURES_CHECK_AVAILABILITY(shenandoahgc, [
     AC_MSG_CHECKING([if platform is supported by Shenandoah])
-    if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
-        test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+    if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
+      AC_MSG_RESULT([yes])
+    elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; 
then
       AC_MSG_RESULT([yes])
     else
       AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
diff --git a/make/autoconf/toolchain.m4 b/make/autoconf/toolchain.m4
index 4a2462c2dd6..aa77fe1db06 100644
--- a/make/autoconf/toolchain.m4
+++ b/make/autoconf/toolchain.m4
@@ -917,6 +917,10 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
       if test "x$COMPILER_CPU_TEST" != "xx64"; then
         AC_MSG_ERROR([Target CPU mismatch. We are building for 
$OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".])
       fi
+    elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
+      if test "x$COMPILER_CPU_TEST" != "xARM64"; then
+        AC_MSG_ERROR([Target CPU mismatch. We are building for 
$OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "arm64".])
+      fi
     fi
   fi
 
diff --git a/make/autoconf/toolchain_microsoft.m4 
b/make/autoconf/toolchain_microsoft.m4
index 2e297dc8be1..22f4c47e3a3 100644
--- a/make/autoconf/toolchain_microsoft.m4
+++ b/make/autoconf/toolchain_microsoft.m4
@@ -128,11 +128,15 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
       fi
 
       AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using 
$METHOD])
-      if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+      if test "x$OPENJDK_TARGET_CPU" = xx86; then
         VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
-      else
+      elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
         VCVARSFILES="vc/bin/amd64/vcvars64.bat 
vc/bin/x86_amd64/vcvarsx86_amd64.bat \
             vc/auxiliary/build/vcvarsx86_amd64.bat 
vc/auxiliary/build/vcvars64.bat"
+      elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+        # for host x86-64, target aarch64
+        VCVARSFILES="vc/auxiliary/build/vcvarsamd64_arm64.bat \
+            vc/auxiliary/build/vcvarsx86_arm64.bat"
       fi
 
       for VCVARSFILE in $VCVARSFILES; do
@@ -174,10 +178,12 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT],
       elif test -f "$WIN_SDK_BASE/bin/setenv.cmd"; then
         AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using 
$METHOD])
         VS_ENV_CMD="$WIN_SDK_BASE/bin/setenv.cmd"
-        if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+        if test "x$OPENJDK_TARGET_CPU" = xx86; then
           VS_ENV_ARGS="/x86"
-        else
+        elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
           VS_ENV_ARGS="/x64"
+        elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+          VS_ENV_ARGS="/arm64"
         fi
         # PLATFORM_TOOLSET is used during the compilation of the freetype 
sources (see
         # 'LIB_BUILD_FREETYPE' in libraries.m4) and must be 'Windows7.1SDK' 
for Windows7.1SDK
@@ -451,10 +457,15 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
     # Need to check if the found msvcr is correct architecture
     AC_MSG_CHECKING([found $DLL_NAME architecture])
     MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"`
-    if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
+    if test "x$OPENJDK_TARGET_CPU" = xx86; then
       CORRECT_MSVCR_ARCH=386
-    else
+    elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
       CORRECT_MSVCR_ARCH=x86-64
+    elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+      # The cygwin 'file' command only returns "PE32+ executable (DLL) 
(console), for MS Windows",
+      # without specifying which architecture it is for specifically. This has 
been fixed upstream.
+      # 
https://github.com/file/file/commit/b849b1af098ddd530094bf779b58431395db2e10#diff-ff2eced09e6860de75057dd731d092aeR142
+      CORRECT_MSVCR_ARCH="PE32+ executable"
     fi
     if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > 
/dev/null; then
       AC_MSG_RESULT([ok])
@@ -477,6 +488,8 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
     vs_target_cpu=x86
   elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
     vs_target_cpu=x64
+  elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+    vs_target_cpu=arm64
   fi
 
   if test "x$MSVC_DLL" = x; then
@@ -649,8 +662,12 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
       AC_MSG_RESULT($UCRT_DLL_DIR)
     else
       dll_subdir=$OPENJDK_TARGET_CPU
-      if test "x$dll_subdir" = "xx86_64"; then
+      if test "x$dll_subdir" = "xaarch64"; then
+        dll_subdir="arm64"
+      elif test "x$dll_subdir" = "xx86_64"; then
         dll_subdir="x64"
+      elif test "x$dll_subdir" = "xx86"; then
+        dll_subdir="x86"
       fi
       UCRT_DLL_DIR="$WINDOWSSDKDIR/redist/ucrt/dlls/$dll_subdir"
       if test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then
diff --git a/make/devkit/createWindowsDevkit2017.sh 
b/make/devkit/createWindowsDevkit2017.sh
index a802b18a557..91227259bdf 100644
--- a/make/devkit/createWindowsDevkit2017.sh
+++ b/make/devkit/createWindowsDevkit2017.sh
@@ -113,19 +113,23 @@ REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION"
 echo "Copying VC..."
 rm -rf $DEVKIT_ROOT/VC
 mkdir -p $DEVKIT_ROOT/VC/bin
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
 mkdir -p $DEVKIT_ROOT/VC/lib
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/arm64" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/
 mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/arm64" 
$DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
 mkdir -p $DEVKIT_ROOT/VC/Auxiliary
 cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/
 mkdir -p $DEVKIT_ROOT/VC/redist
+cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/arm64" $DEVKIT_ROOT/VC/redist/
 cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/
 cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/
 
@@ -134,7 +138,9 @@ cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" 
$DEVKIT_ROOT/VC/redist/
 cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86
 cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86
 cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
-cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64
+cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
+cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64
+cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64
 
 
################################################################################
 # Copy SDK files
@@ -152,8 +158,10 @@ mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
 cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" 
$DEVKIT_ROOT/$SDK_VERSION/bin/
 cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" 
$DEVKIT_ROOT/$SDK_VERSION/bin/
 mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
+cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/arm64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
+cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/arm64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist
@@ -188,6 +196,13 @@ echo-info 
"DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
 echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
 echo-info 
"DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\""
 echo-info ""
+echo-info 
"DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info 
"DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info 
"DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\""
+echo-info 
"DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\""
+echo-info 
"DEVKIT_MSVCP_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL\""
+echo-info 
"DEVKIT_UCRT_DLL_DIR_aarch64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/arm64\""
+echo-info ""
 echo-info "DEVKIT_TOOLS_VERSION=\"$TOOLS_VERSION\""
 echo-info "DEVKIT_REDIST_VERSION=\"$REDIST_VERSION\""
 echo-info "DEVKIT_SDK_VERSION=\"$SDK_FULL_VERSION\""
diff --git a/make/devkit/createWindowsDevkit2019.sh 
b/make/devkit/createWindowsDevkit2019.sh
index 8a97f0c2a3b..a5c89f09faa 100644
--- a/make/devkit/createWindowsDevkit2019.sh
+++ b/make/devkit/createWindowsDevkit2019.sh
@@ -117,19 +117,23 @@ REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION"
 echo "Copying VC..."
 rm -rf $DEVKIT_ROOT/VC
 mkdir -p $DEVKIT_ROOT/VC/bin
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
 mkdir -p $DEVKIT_ROOT/VC/lib
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/arm64" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/
 mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
+cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/arm64" 
$DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/
 cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
 mkdir -p $DEVKIT_ROOT/VC/Auxiliary
 cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/
 mkdir -p $DEVKIT_ROOT/VC/redist
+cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/arm64" $DEVKIT_ROOT/VC/redist/
 cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/
 cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/
 
@@ -139,6 +143,8 @@ cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL 
$DEVKIT_ROOT/VC/bin/x86
 cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86
 cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
 cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64
+cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/arm64
+cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64
 
 
################################################################################
 # Copy SDK files
@@ -156,8 +162,10 @@ mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
 cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" 
$DEVKIT_ROOT/$SDK_VERSION/bin/
 cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" 
$DEVKIT_ROOT/$SDK_VERSION/bin/
 mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
+cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/arm64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
+cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/arm64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" 
$DEVKIT_ROOT/$SDK_VERSION/lib/
 mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist
@@ -193,6 +201,14 @@ echo-info 
"DEVKIT_VCRUNTIME_1_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$VCRUNTIM
 echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
 echo-info 
"DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\""
 echo-info ""
+echo-info 
"DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\""
+echo-info 
"DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
+echo-info 
"DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\""
+echo-info 
"DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\""
+echo-info 
"DEVKIT_VCRUNTIME_1_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$VCRUNTIME_1_DLL\""
+echo-info 
"DEVKIT_MSVCP_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL\""
+echo-info 
"DEVKIT_UCRT_DLL_DIR_aarch64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/arm64\""
+echo-info ""
 echo-info "DEVKIT_TOOLS_VERSION=\"$TOOLS_VERSION\""
 echo-info "DEVKIT_REDIST_VERSION=\"$REDIST_VERSION\""
 echo-info "DEVKIT_SDK_VERSION=\"$SDK_FULL_VERSION\""
```
________________________________________
From: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>
Sent: Tuesday, June 30, 2020 02:39
To: Ludovic Henry; Monica Beckwith; hotspot-runtime-...@openjdk.java.net; 
aarch64-port-...@openjdk.java.net; build-dev
Cc: openjdk-aarch64
Subject: Re: OpenJDK extension to AArch64 and Windows



On 2020-06-30 01:20, Ludovic Henry wrote:
> Hi Magnus,
>
>> I have now looked a bit more closely at the code. This is what I have
>> found so far that attracted my eye. Please note that this is not a
>> complete review. When you have a JEP and a test plan for how to verify
>> these changes and make sure you do not break existing platforms, you can
>> post a new RFR and I'll do a full review.
> Understood. I'll answer some of your remarks here, taking into account that 
> Monica is currently working on the JEP.
>
>> * In flags-cflags.m4: You don't have to set  $1_CFLAGS_CPU_JVM="", an
>> empty value is default for unspecified variables.
> I'll revert that.
>
>> * In flags-ldflags.m4: The stack size seems dependent on CPU_BITS, not
>> the CPU arch. Please break out the -stack argument setting. Also, have
>> you verified if -machine is really needed? The comment says that it's
>> probably not; if it's just an old, unnecessary, precaution, we should
>> probably remove it instead, to simplify the logic.
> I've verified that it works without the `-machine` bit for ARM64, I'll revert 
> it. I'll also split the `-stack` arguments into 32 and 64 bits checks.
Great! If you can test if -machine can be removed for the other
platforms as well, I'd be grateful. Old code which adds special cases,
and besides that is flagged as "probably not needed", should really be
cleaned away.
>
>> * In platform.m4: These changes worries me. Neither of them were
>> necessary for the linux-aarch64 port. But now you are changing the
>> values for all aarch64 builds, not just windows-aarch64. Have you
>> discovered a bug for linux-aarch64? Otherwise, these changes looks like
>> they are going to break linux-aarch64. If you believe you need to modify
>> these legacy values (which we'd rather move away from), please see if
>> you have made changes elsewhere that can be resolved without resorting
>> to adding new identifiers to the legacy values.
> It seems to have been a mistake in the early stage of our port, I'll revert 
> it.
I see. Good.
>
>> * In basic.m4: Please move BASIC_EVAL_BUILD_DEVKIT_VARIABLE to be
>> positioned next to BASIC_EVAL_DEVKIT_VARIABLE.
> Ok
>
>> * In toolchain_windows.m4:
>>    In TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL, if you know about the upcoming
>> changes to file, why don't you add both the old and the new pattern to
>> the test?
> The comment is slightly inaccurate as it won't break, it is just not going to 
> be as precise as it could be. The future version of file(1) will still return 
> `PE32+ executable` (like it does for x86_64 executables), but it will also 
> return something specifically for aarch64.
I see. Since we will need to support old versions of file for a long
time to come, the upcoming fix is really not relevant for us then. We'll
just have to accept the fact that the check is not really useful for
aarch64. Perhaps you can adjust the wording of the comment, so it's
clear that it's irrelevant if the bug fix is present or not in the
version of file that the user has.
>
>>    In TOOLCHAIN_SETUP_MSVC_DLL, when it was just two instances, the code
>> duplication could be accepted, but with three instances you need to
>> generalize this and refactor out the changing platform part of the path
>> only to the if statement. This applies, with some variation, to all four
>> changed places.
> Ok, I'll refactor by adding a variable containing x86, x64 or arm64.
Perfect!
>
>>    In the new TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS, you are doing
>>     AC_SUBST($1SYSROOT_CFLAGS)
>>     AC_SUBST($1SYSROOT_LDFLAGS)
>>
>> However, that seems superfluous, since it is already done by
>> FLAGS_SETUP_SYSROOT_FLAGS in flags.m4. In fact, now that I checked this,
>> I spotted that we *already* do an unnecessary AC_SUBST in
>> FLAGS_POST_TOOLCHAIN for the build sysroot flags! :-o
> This part is what caused the most problems in getting cross-compilation with 
> MSVC working, and the current solution is the simplest changeset I could come 
> up with. I've to admit that this part stretched my understanding of the build 
> system, and thus I'm not even sure what I propose as good as it can be.
>
> FLAGS_SETUP_SYSROOT_FLAGS for example, only sets $1SYSROOT_CFLAGS and 
> $1SYSROOT_LDLAGS to a valid value on non-"microsoft" toolchain. That is 
> because at the time FLAGS_PRE_TOOLCHAIN is called, the "microsoft" toolchain 
> has not been initialized yet. It only gets properly initialized once 
> TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV is called.
I understand if it's confusing. Autoconf is a beast to work with; I've
done that for more years than I want to think about, and I still don't
understand it fully. However, in this case, it's "easy". The call to
AC_SUBST only flags a variable for export. The actual exportation to
spec.gmk is done at the end of the configure script, with the call to
AC_OUTPUT, and the value exported is the value the variables has at that
point. So the order of execution does not matter here. This also means
that it is not an error to call AC_SUBST multiple times, but it is a
style issue. On the other hand, we try to follow the pattern of "create
variable, call AC_SUBST" for our own sanity.

Conceptually, the microsoft toolchain setup is almost equivalent to
FLAGS_PRE_TOOLCHAIN. That is, the result should be that we have a set of
"sysroot" (think "global") flags that should always be added. I have a
patch in the works that changes this somewhat, and makes the
dependencies clearer.
>
>> * In GensrcMisc,gmk: You are changing this for all users of the
>> microsoft toolchain. I don't recall seeing any problems with this on
>> x64. What version of Visual Studio are you using? Is this a limitation
>> in the aarch64 version of CL.EXE, or does it apply to other platforms as
>> well? Finally, if we do need to keep it, please use "-" as prefix for
>> options (even though the microsoft tooling normally suggests the
>> non-standard "/" -- this can all too easily be confused with path names.)
> Ok.
>
>> * In GensrcAdlc.gmk: You are adding -D_WIN64=1 for all 64-bit platforms,
>> i.e. also for x64, which has apparently worked fine until now without
>> that define. What does the define do, and what is the rationale for not
>> only adding it on your platform?
> It is the default define used on Windows-compatible codebases to specify 
> whether it's targetting a 64-bit platform or not. We need to define it to 
> have Windows-specific code in the existing aarch64 code of the OpenJDK. It 
> makes sense to define it for x64 as well as arm64, but I agree it's not a 
> requirement.
Ok, sounds good. Keep it as it is then.
>
>> * In jib-profiles.js: I appreciate the effort, but this file is
>> basically just for Oracle-internal usage. If and when we will add
>> support for building on windows-aarch64, we can update the file to work
>> properly with the JIB tool.
> Ok.
>
>> I am impressed that you manage to get cross-compilation working for
>> Windows with that small amount of changes, though! If you had asked med
>> beforehand, I'd have guessed that it would require more substantial
>> changes. As you say, this is not something we have done before.
> The meat of the change is in `toolchain.m4` with the support functions in 
> `toolchain_windows.m4`. It is where I iterated the most to find the right 
> encapsulation across the different components relying on it - and I've to say 
> it wasn't straightforward to understand how all the pieces fit together. I'd 
> be happy to work out with you a better way to do the foundational work of 
> supporting cross-compilation with the Microsoft toolchain, just le me know 
> how you'd like to proceed.
I think you have found more or less exactly the right spots to inject
the support for cross-compilation. I think I'd ended up with something
similar if I was tasked with getting cross-compilation work on Windows.
Maybe there's room for more generalisations, but it's a bit hard to say
at this moment. I think things might clear up a bit more when I get the
"unified winenv" patch in. It makes the sysroot cflag handling a bit
more transparent.

/Magnus
>
> Thank you,
>
> --
> Ludovic
>
> ________________________________________
> From: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>
> Sent: Monday, June 29, 2020 07:12
> To: Ludovic Henry; Monica Beckwith; hotspot-runtime-...@openjdk.java.net; 
> aarch64-port-...@openjdk.java.net; build-dev
> Cc: openjdk-aarch64
> Subject: Re: OpenJDK extension to AArch64 and Windows
>
> I have now looked a bit more closely at the code. This is what I have
> found so far that attracted my eye. Please note that this is not a
> complete review. When you have a JEP and a test plan for how to verify
> these changes and make sure you do not break existing platforms, you can
> post a new RFR and I'll do a full review.
>
> * In flags-cflags.m4: You don't have to set  $1_CFLAGS_CPU_JVM="", an
> empty value is default for unspecified variables.
>
> * In flags-ldflags.m4: The stack size seems dependent on CPU_BITS, not
> the CPU arch. Please break out the -stack argument setting. Also, have
> you verified if -machine is really needed? The comment says that it's
> probably not; if it's just an old, unnecessary, precaution, we should
> probably remove it instead, to simplify the logic.
>
> * In platform.m4: These changes worries me. Neither of them were
> necessary for the linux-aarch64 port. But now you are changing the
> values for all aarch64 builds, not just windows-aarch64. Have you
> discovered a bug for linux-aarch64? Otherwise, these changes looks like
> they are going to break linux-aarch64. If you believe you need to modify
> these legacy values (which we'd rather move away from), please see if
> you have made changes elsewhere that can be resolved without resorting
> to adding new identifiers to the legacy values.
>
> * In basic.m4: Please move BASIC_EVAL_BUILD_DEVKIT_VARIABLE to be
> positioned next to BASIC_EVAL_DEVKIT_VARIABLE.
>
> * In toolchain_windows.m4:
>    In TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL, if you know about the upcoming
> changes to file, why don't you add both the old and the new pattern to
> the test?
>
>    In TOOLCHAIN_SETUP_MSVC_DLL, when it was just two instances, the code
> duplication could be accepted, but with three instances you need to
> generalize this and refactor out the changing platform part of the path
> only to the if statement. This applies, with some variation, to all four
> changed places.
>
>    In the new TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS, you are doing
>     AC_SUBST($1SYSROOT_CFLAGS)
>     AC_SUBST($1SYSROOT_LDFLAGS)
>
> However, that seems superfluous, since it is already done by
> FLAGS_SETUP_SYSROOT_FLAGS in flags.m4. In fact, now that I checked this,
> I spotted that we *already* do an unnecessary AC_SUBST in
> FLAGS_POST_TOOLCHAIN for the build sysroot flags! :-o
>
> * In GensrcMisc,gmk: You are changing this for all users of the
> microsoft toolchain. I don't recall seeing any problems with this on
> x64. What version of Visual Studio are you using? Is this a limitation
> in the aarch64 version of CL.EXE, or does it apply to other platforms as
> well? Finally, if we do need to keep it, please use "-" as prefix for
> options (even though the microsoft tooling normally suggests the
> non-standard "/" -- this can all too easily be confused with path names.)
>
> * In GensrcAdlc.gmk: You are adding -D_WIN64=1 for all 64-bit platforms,
> i.e. also for x64, which has apparently worked fine until now without
> that define. What does the define do, and what is the rationale for not
> only adding it on your platform?
>
> * In jib-profiles.js: I appreciate the effort, but this file is
> basically just for Oracle-internal usage. If and when we will add
> support for building on windows-aarch64, we can update the file to work
> properly with the JIB tool.
>
> I am impressed that you manage to get cross-compilation working for
> Windows with that small amount of changes, though! If you had asked med
> beforehand, I'd have guessed that it would require more substantial
> changes. As you say, this is not something we have done before.
>
> /Magnus
>
>
>
> On 2020-06-24 23:33, Ludovic Henry wrote:
>> Hi Magnus,
>>
>> Happy to answer any question you have on the build system changes.
>>
>> A lot of the changes were due to the build system not supporting 
>> cross-compilation well when targetting the microsoft toolchain (it just 
>> never really had to support it). We had to go through a few hoops to remove 
>> as many of our own quick hacks, initially there just to get things building 
>> - like hardcoding the target being windows-aarch64 for example.
>>
>> Thank you for your review,
>>
>> --
>> Ludovic
>>
>> ________________________________________
>> From: Magnus Ihse Bursie <magnus.ihse.bur...@oracle.com>
>> Sent: Wednesday, June 24, 2020 13:44
>> To: Monica Beckwith; hotspot-runtime-...@openjdk.java.net; 
>> aarch64-port-...@openjdk.java.net; build-dev
>> Cc: openjdk-aarch64
>> Subject: Re: OpenJDK extension to AArch64 and Windows
>>
>> Hi Monica,
>>
>> All build system changes must be sent to build-dev for review by the
>> build team, and you are doing quite a lot of build changes. (I'm cc:ing
>> build-dev now.)
>>
>> I did a quick scan and found some changes that looked odd enough to draw
>> my attention.
>>
>> I will need some time to fully understand what you are trying to
>> accomplish here, before I can give a full review.
>>
>> /Magnus
>>
>>
>> On 2020-06-24 18:40, Monica Beckwith wrote:
>>> Hello OpenJDK community,
>>>
>>> As the project lead here @Microsoft, I am pleased to share that we have 
>>> been working towards a Windows addition to the OpenJDK AArch64 port. We are 
>>> very thankful to all that have contributed to the Linux+aarch64 and 
>>> Windows+x86-64. Both these codebases came to our rescue on numerous 
>>> occasions.
>>>
>>> Support status: We have successfully ported C2 and can build the server 
>>> release (cross-compiled environment)
>>> Test coverage: C2 + ParallelGC (No AOT, JVMCI, ZGC, ShenandoahGC, G1GC)
>>> Tests and benchmarks covered [1]: JTReg [2], JCStress, 
>>> jmh-jdk-microbenchmarks, SPEC SERT, SPECJBB2015 [3], SPEC JVM2008, 
>>> Scimark2, SPEC JBB2005.
>>> Umbrella Bug ID: 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.openjdk.java.net%2Fbrowse%2FJDK-8248238&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232489298&amp;sdata=JcmGbXJwXrDl3f37gnajyIeyahgdRtpg%2BZSgXCHtzeA%3D&amp;reserved=0
>>> Webrevs:
>>> `Webrev P1`: 
>>> https://nam06.safelinks.protection.outlook.com/?url=http:%2F%2Fcr.openjdk.java.net%2F~burban%2Fwinarm64_p1_llp64%2F&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232489298&amp;sdata=ExZFlWo83XVb5ObE6nn9MjOEJEPkxd4ZCKwfPLhoQT4%3D&amp;reserved=0
>>>   &
>>> `Webrev P2`: 
>>> https://nam06.safelinks.protection.outlook.com/?url=http:%2F%2Fcr.openjdk.java.net%2F~burban%2Fwinarm64_p2_new-target%2F&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=eZmyl9Kni3MOzk%2BCzUM42Om20Z%2BYoLbGXYRykka1YaE%3D&amp;reserved=0
>>>
>>> The first patch `Webrev P1` (patch 1 aka P1 in our tests) helps integrate 
>>> support for Windows (LLP64) on Linux + AArch64
>>> The second patch `Webrev P2` (patch 2 aka P2 in our tests) adds the 
>>> 'windows-aarch64' support in `os_cpu`. We also had to modify shared code, 
>>> and I am highlighting a few details here:
>>>         * In windows_x86 such as the `get_frame_at_stack_banging_point` in 
>>> `os_windows_x86.cpp`,
>>>         * In `os/windows os_windows.cpp` to make it aware of Windows + Arm64
>>>         * `os/windows` in `threadCritical_windows.cpp`,
>>>         * Windbg support
>>>         * `globalDefinitions_visCPP.hpp` in `share/utilities`
>>>         * We also added Vectored Exception Handling (VEH) to P2, as it is a 
>>> requirement on Windows + Arm64 (due to ABI specifications).
>>> Also, in `Webrev P2`, you will find that we have made some significant 
>>> changes to `cpu/aarch64` around register usage since on Windows + Arm64, 
>>> register R18 points to TEB [4]. We have discussed this with Andrew Haley 
>>> and Andrew Dinn, and they are helping us with a cleaner implementation of 
>>> the same. Their constant support and guidance have humbled me.
>>>
>>> I'd also like to recognize the great work done by Ludovic Henry (our 
>>> resident runtime expert) in driving the C2 support and by Bernhard 
>>> Urban-Forster, (who recently joined our team) in helping expand the 
>>> coverage to G1 GC.
>>>
>>> As a part of this project, we have also worked on two additional patches:
>>>         * Expanding VEH on Windows to x86-64 (patch 3 aka P3 in our tests). 
>>> Details here: 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.openjdk.java.net%2Fbrowse%2FJDK-8247941&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=w7L9DmFX1jVWQ6Y7kHCBJTAkdVrhvhScZKITimpf53k%3D&amp;reserved=0
>>>         * Improvements in the shared cross-platform code on Windows (patch 
>>> 4 aka P4 in our tests) - We will send out a separate patch soon.
>>>
>>> We welcome any feedback and comments from the community and are looking 
>>> forward to working together.
>>>
>>> Regards,
>>> Monica
>>>
>>> [1] 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fopenjdk-aarch64%2Fblob%2Fmaster%2Fwkload-status-on-Win%252BArm64.md&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=PBTDSkXsABCl4fPCGAPWxiUfWMxoBhgPY7y62GHPFJY%3D&amp;reserved=0
>>> [2] 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fopenjdk-aarch64%2Fblob%2Fmaster%2FJTRegtests.md&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=ddMzJGZMafiohidzmSiqBvF%2B3nx7yFsceFU1vd5tovs%3D&amp;reserved=0
>>> [3] 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fopenjdk-aarch64%2Fblob%2Fmaster%2FSPECJBB2015-test-matrices.md&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=NTLcoiHmlvnKugwkH%2BM0bO8hBipD9MKClXelmTPw9w8%3D&amp;reserved=0
>>> [4] 
>>> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fcpp%2Fbuild%2Farm64-windows-abi-conventions%3Fview%3Dvs-2019%23integer-registers&amp;data=02%7C01%7Cluhenry%40microsoft.com%7C9136394326d9424e376c08d81cd99b84%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637291068232499294&amp;sdata=TxtHh9ZQkqBmuIIckce71E%2FZNkX%2BxyvB4tja26ZoT6s%3D&amp;reserved=0

Reply via email to