Update BUILD.gn configs to support ARM[64] builds.

Bug: b/114402930
Change-Id: Id7eedc6b01f40d24188d514755d5c89689b24abb
Reviewed-on: https://swiftshader-review.googlesource.com/20568
Tested-by: Stephen Lanham <slan@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 7af9f6a..d218425 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -88,7 +88,7 @@
         "-march=x86-64",
         "-mtune=generic",
       ]
-    } else {  # 32 bit version
+    } else if (target_cpu == "x86") {  # 32 bit version
       cflags += [
         "-m32",
         "-msse2",
diff --git a/src/Common/BUILD.gn b/src/Common/BUILD.gn
index 6b23321..87b7005 100644
--- a/src/Common/BUILD.gn
+++ b/src/Common/BUILD.gn
@@ -21,7 +21,7 @@
       "/wd4201",  # nameless struct/union
       "/wd5030",  # attribute is not recognized
     ]
-  } else {
+  } else if (target_cpu == "x86" || target_cpu == "x64") {
     cflags = [ "-msse2" ]
   }
 }
diff --git a/src/Common/Thread.hpp b/src/Common/Thread.hpp
index 14ccfd5..b8280f1 100644
--- a/src/Common/Thread.hpp
+++ b/src/Common/Thread.hpp
@@ -241,7 +241,7 @@
 			return InterlockedExchange64(target, value);
 		#else
 			int ret;
-			__asm__ __volatile__("lock; xchg8 %0,(%1)" : "=r" (ret) :"r" (target), "0" (value) : "memory" );
+			__asm__ __volatile__("lock; xchg8 %x0,(%x1)" : "=r" (ret) :"r" (target), "0" (value) : "memory" );
 			return ret;
 		#endif
 	}
@@ -252,7 +252,7 @@
 			return InterlockedExchange((volatile long*)target, (long)value);
 		#else
 			int ret;
-			__asm__ __volatile__("lock; xchgl %0,(%1)" : "=r" (ret) :"r" (target), "0" (value) : "memory" );
+			__asm__ __volatile__("lock; xchgl %x0,(%x1)" : "=r" (ret) :"r" (target), "0" (value) : "memory" );
 			return ret;
 		#endif
 	}
diff --git a/src/Main/BUILD.gn b/src/Main/BUILD.gn
index ee76067..61054d4 100644
--- a/src/Main/BUILD.gn
+++ b/src/Main/BUILD.gn
@@ -29,7 +29,7 @@
         "-Wno-sign-compare",
       ]
     }
-  } else {
+  } else if (target_cpu == "x86" || target_cpu == "x64") {
     cflags = [ "-msse2" ]
     defines =
         [ "NO_SANITIZE_FUNCTION=__attribute__((no_sanitize(\"function\")))" ]
diff --git a/src/OpenGL/libEGL/BUILD.gn b/src/OpenGL/libEGL/BUILD.gn
index bbbd2eb..3184f9b 100644
--- a/src/OpenGL/libEGL/BUILD.gn
+++ b/src/OpenGL/libEGL/BUILD.gn
@@ -28,7 +28,10 @@
 
     defines += [ "EGLAPI=" ]
   } else {
-    cflags = [ "-Wno-sign-compare" ]
+    cflags = [
+      "-Wno-sign-compare",
+      "-Wno-unused-function",
+    ]
     if (!is_clang) {
       cflags += [ "-Wno-unused-but-set-variable" ]
     }
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index 97446fc..1084f27 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -152,7 +152,7 @@
       "/wd4201",  # nameless struct/union
       "/wd4245",  # conversion from int to unsigned int (llvm)
     ]
-  } else {
+  } else if (target_cpu == "x86" || target_cpu == "x64") {
     cflags = [
       "-Wno-unused-local-typedef",
       "-msse2",
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 3d49658..0103a25 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -103,7 +103,7 @@
 
 		static bool detectARM()
 		{
-			#if defined(__arm__)
+			#if defined(__arm__) || defined(__aarch64__)
 				return true;
 			#elif defined(__i386__) || defined(__x86_64__)
 				return false;
@@ -372,6 +372,8 @@
 			assert(sizeof(void*) == 8 && elfHeader->e_machine == EM_X86_64);
 		#elif defined(__arm__)
 			assert(sizeof(void*) == 4 && elfHeader->e_machine == EM_ARM);
+		#elif defined(__aarch64__)
+			assert(sizeof(void*) == 8 && elfHeader->e_machine == EM_AARCH64);
 		#else
 			#error "Unsupported platform"
 		#endif
diff --git a/src/Renderer/BUILD.gn b/src/Renderer/BUILD.gn
index 04ccd2e..6b95b11 100644
--- a/src/Renderer/BUILD.gn
+++ b/src/Renderer/BUILD.gn
@@ -22,7 +22,7 @@
       "/wd4324",  # structure was padded due to alignment specifier
       "/wd5030",  # attribute is not recognized
     ]
-  } else {
+  } else if (target_cpu == "x86" || target_cpu == "x64") {
     cflags = [
       "-msse2",
       "-Wno-sign-compare",
diff --git a/third_party/LLVM/BUILD.gn b/third_party/LLVM/BUILD.gn
index 9883df3..c09a83e 100644
--- a/third_party/LLVM/BUILD.gn
+++ b/third_party/LLVM/BUILD.gn
@@ -54,7 +54,7 @@
     cflags += [ "-Wno-error" ]
   }
 
-  if (is_clang) {
+  if (is_clang && (target_cpu == "x86" || target_cpu == "x64")) {
     cflags += [
       "-msse2",
       "-Wno-header-hygiene",