[staging/LoongArch RESEND PATCH v1 32/33] BaseTools: Add LoongArch64 binding.


Chao Li
 

Add LoongArch64 ProcessorBin.h and add LoongArch to Makefiles.

Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <gaoliming@...>
Cc: Yuwei Chen <yuwei.chen@...>

Signed-off-by: Chao Li <lichao@...>
Co-authored-by: Baoqi Zhang <zhangbaoqi@...>
---
BaseTools/Source/C/GNUmakefile | 3 +
.../C/Include/LoongArch64/ProcessorBind.h | 80 +++++++++++++++++++
2 files changed, 83 insertions(+)
create mode 100644 BaseTools/Source/C/Include/LoongArch64/ProcessorBind.h

diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile
index 8c191e0c38..5275f657ef 100644
--- a/BaseTools/Source/C/GNUmakefile
+++ b/BaseTools/Source/C/GNUmakefile
@@ -29,6 +29,9 @@ ifndef HOST_ARCH
ifneq (,$(findstring riscv64,$(uname_m)))=0D
HOST_ARCH=3DRISCV64=0D
endif=0D
+ ifneq (,$(findstring loongarch64,$(uname_m)))=0D
+ HOST_ARCH=3DLOONGARCH64=0D
+ endif=0D
ifndef HOST_ARCH=0D
$(info Could not detected HOST_ARCH from uname results)=0D
$(error HOST_ARCH is not defined!)=0D
diff --git a/BaseTools/Source/C/Include/LoongArch64/ProcessorBind.h b/BaseT=
ools/Source/C/Include/LoongArch64/ProcessorBind.h
new file mode 100644
index 0000000000..84c6b8ea7a
--- /dev/null
+++ b/BaseTools/Source/C/Include/LoongArch64/ProcessorBind.h
@@ -0,0 +1,80 @@
+/** @file=0D
+ Processor or Compiler specific defines and types for LoongArch=0D
+=0D
+ Copyright (c) 2022, Loongson Technology Corporation Limited. All rights =
reserved.<BR>=0D
+=0D
+ SPDX-License-Identifier: BSD-2-Clause-Patent=0D
+=0D
+**/=0D
+#ifndef __PROCESSOR_BIND_H__=0D
+#define __PROCESSOR_BIND_H__=0D
+=0D
+//=0D
+// Define the processor type so other code can make processor based choice=
s=0D
+//=0D
+#define MDE_CPU_LOONGARCH64=0D
+=0D
+#define EFIAPI=0D
+=0D
+//=0D
+// Make sure we are using the correct packing rules per EFI specification=
=0D
+//=0D
+#ifndef __GNUC__=0D
+#pragma pack()=0D
+#endif=0D
+=0D
+//=0D
+// Use ANSI C 2000 stdint.h integer width declarations=0D
+//=0D
+#include <stdint.h>=0D
+typedef uint8_t BOOLEAN;=0D
+typedef int8_t INT8;=0D
+typedef uint8_t UINT8;=0D
+typedef int16_t INT16;=0D
+typedef uint16_t UINT16;=0D
+typedef int32_t INT32;=0D
+typedef uint32_t UINT32;=0D
+typedef int64_t INT64;=0D
+typedef uint64_t UINT64;=0D
+typedef char CHAR8;=0D
+typedef uint16_t CHAR16;=0D
+=0D
+//=0D
+// Signed value of native width. (4 bytes on supported 32-bit processor i=
nstructions,=0D
+// 8 bytes on supported 64-bit processor instructions)=0D
+//=0D
+typedef INT64 INTN;=0D
+=0D
+//=0D
+// Unsigned value of native width. (4 bytes on supported 32-bit processor=
instructions,=0D
+// 8 bytes on supported 64-bit processor instructions)=0D
+//=0D
+typedef UINT64 UINTN;=0D
+=0D
+//=0D
+// Processor specific defines=0D
+//=0D
+=0D
+//=0D
+// A value of native width with the highest bit set.=0D
+//=0D
+#define MAX_BIT 0x8000000000000000ULL=0D
+//=0D
+// A value of native width with the two highest bits set.=0D
+//=0D
+#define MAX_2_BITS 0xC000000000000000ULL=0D
+=0D
+#if defined(__GNUC__)=0D
+ //=0D
+ // For GNU assembly code, .global or .globl can declare global symbols.=
=0D
+ // Define this macro to unify the usage.=0D
+ //=0D
+ #define ASM_GLOBAL .globl=0D
+#endif=0D
+=0D
+//=0D
+// The stack alignment required for LoongArch=0D
+//=0D
+#define CPU_STACK_ALIGNMENT 16=0D
+=0D
+#endif=0D
--=20
2.27.0

Join devel@edk2.groups.io to automatically receive all group messages.