Ai
1 Star 0 Fork 40

hefq343/boost_1

forked from src-openEuler/boost
关闭
 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
boost-1.78-add-boost-context-support-for-loongarch64.patch 23.03 KB
一键复制 编辑 原始数据 按行查看 历史
Regan.He 提交于 2023-08-10 13:47 +08:00 . add loongarch64 support
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
From 217e51b9101fb4779c8dc00a562f77c0c9a70afe Mon Sep 17 00:00:00 2001
From: Wenlong Zhang <zhangwenlong@loongson.cn>
Date: Wed, 11 Jan 2023 17:28:18 +0800
Subject: [PATCH] add boost context support for loongarch64 new
---
boost/predef/architecture.h | 1 +
boost/predef/architecture/loongarch.h | 39 ++++++
boost/predef/other/endian.h | 1 +
boostcpp.jam | 5 +-
libs/config/checks/architecture/Jamfile.jam | 1 +
libs/config/checks/architecture/loongarch.cpp | 11 ++
libs/context/CMakeLists.txt | 4 +-
libs/context/build/Jamfile.v2 | 13 ++
libs/context/build/architecture.jam | 4 +
libs/context/doc/architectures.qbk | 1 +
libs/context/doc/context.xml | 27 ++++
.../doc/html/context/architectures.html | 27 ++++
.../src/asm/jump_loongarch64_sysv_elf_gas.S | 121 ++++++++++++++++++
.../src/asm/make_loongarch64_sysv_elf_gas.S | 72 +++++++++++
.../src/asm/ontop_loongarch64_sysv_elf_gas.S | 118 +++++++++++++++++
tools/build/src/engine/jam.h | 4 +
.../tools/features/architecture-feature.jam | 3 +
17 files changed, 448 insertions(+), 4 deletions(-)
create mode 100644 boost/predef/architecture/loongarch.h
create mode 100644 libs/config/checks/architecture/loongarch.cpp
create mode 100644 libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S
create mode 100644 libs/context/src/asm/make_loongarch64_sysv_elf_gas.S
create mode 100644 libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S
diff --git a/boost/predef/architecture.h b/boost/predef/architecture.h
index 471c263..55d036f 100644
--- a/boost/predef/architecture.h
+++ b/boost/predef/architecture.h
@@ -17,6 +17,7 @@ http://www.boost.org/LICENSE_1_0.txt)
#include <boost/predef/architecture/convex.h>
#include <boost/predef/architecture/e2k.h>
#include <boost/predef/architecture/ia64.h>
+#include <boost/predef/architecture/loongarch.h>
#include <boost/predef/architecture/m68k.h>
#include <boost/predef/architecture/mips.h>
#include <boost/predef/architecture/parisc.h>
diff --git a/boost/predef/architecture/loongarch.h b/boost/predef/architecture/loongarch.h
new file mode 100644
index 0000000..17015d8
--- /dev/null
+++ b/boost/predef/architecture/loongarch.h
@@ -0,0 +1,39 @@
+/*
+Copyright Zhang Na 2022
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_LOONGARCH_H
+#define BOOST_PREDEF_ARCHITECTURE_LOONGARCH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/* tag::reference[]
+= `BOOST_ARCH_LOONGARCH`
+[options="header"]
+|===
+| {predef_symbol} | {predef_version}
+| `+__loongarch__+` | {predef_detection}
+|===
+*/ // end::reference[]
+
+#define BOOST_ARCH_LOONGARCH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__loongarch__)
+# undef BOOST_ARCH_LOONGARCH
+# define BOOST_ARCH_LOONGARCH BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_LOONGARCH
+# define BOOST_ARCH_LOONGARCH_AVAILABLE
+#endif
+
+#define BOOST_ARCH_LOONGARCH_NAME "LoongArch"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_LOONGARCH,BOOST_ARCH_LOONGARCH_NAME)
diff --git a/boost/predef/other/endian.h b/boost/predef/other/endian.h
index d8ec63f..b712673 100644
--- a/boost/predef/other/endian.h
+++ b/boost/predef/other/endian.h
@@ -121,6 +121,7 @@ information and acquired knowledge:
defined(__ARMEL__) || \
defined(__THUMBEL__) || \
defined(__AARCH64EL__) || \
+ defined(__loongarch__) || \
defined(_MIPSEL) || \
defined(__MIPSEL) || \
defined(__MIPSEL__) || \
diff --git a/boostcpp.jam b/boostcpp.jam
index f60e85c..c938b72 100644
--- a/boostcpp.jam
+++ b/boostcpp.jam
@@ -634,7 +634,7 @@ rule address-model ( )
return <conditional>@boostcpp.deduce-address-model ;
}
-local deducable-architectures = sw_64 arm mips1 power riscv s390x sparc x86 combined ;
+local deducable-architectures = sw_64 arm loongarch mips1 power riscv s390x sparc x86 combined ;
feature.feature deduced-architecture : $(deducable-architectures) : propagated optional composite hidden ;
for a in $(deducable-architectures)
{
@@ -645,10 +645,11 @@ rule deduce-architecture ( properties * )
{
local result ;
local filtered = [ toolset-properties $(properties) ] ;
- local names = arm sw_64 mips1 power riscv s390x sparc x86 combined ;
+ local names = arm sw_64 loongarch mips1 power riscv s390x sparc x86 combined ;
local idx = [ configure.find-builds "default architecture" : $(filtered)
: /boost/architecture//arm
: /boost/architecture//sw_64
+ : /boost/architecture//loongarch
: /boost/architecture//mips1
: /boost/architecture//power
: /boost/architecture//riscv
diff --git a/libs/config/checks/architecture/Jamfile.jam b/libs/config/checks/architecture/Jamfile.jam
index f86c732..ee260ff 100644
--- a/libs/config/checks/architecture/Jamfile.jam
+++ b/libs/config/checks/architecture/Jamfile.jam
@@ -19,6 +19,7 @@ obj 64 : 64.cpp ;
obj arm : arm.cpp ;
obj sw_64 : sw_64.cpp ;
obj combined : combined.cpp ;
+obj loongarch : loongarch.cpp ;
obj mips1 : mips1.cpp ;
obj power : power.cpp ;
obj riscv : riscv.cpp ;
diff --git a/libs/config/checks/architecture/loongarch.cpp b/libs/config/checks/architecture/loongarch.cpp
new file mode 100644
index 0000000..5be8cb0
--- /dev/null
+++ b/libs/config/checks/architecture/loongarch.cpp
@@ -0,0 +1,11 @@
+// loongarch.cpp
+//
+// Copyright (c) 2012 Steven Watanabe
+//
+// Distributed under the Boost Software License Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(__loongarch__)
+#error "Not LoongArch"
+#endif
diff --git a/libs/context/CMakeLists.txt b/libs/context/CMakeLists.txt
index 99c11b2..f301143 100644
--- a/libs/context/CMakeLists.txt
+++ b/libs/context/CMakeLists.txt
@@ -48,7 +48,7 @@ unset(_default_abi)
## Arch-and-model
-set(_all_archs arm arm64 sw_64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined)
+set(_all_archs arm arm64 loongarch64 sw_64 mips32 mips64 ppc32 ppc64 riscv64 s390x i386 x86_64 combined)
# Try at start to auto determine arch from CMake.
if(CMAKE_SYSTEM_PROCESSOR IN_LIST _all_archs)
@@ -74,7 +74,7 @@ else()
endif()
endif()
-set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, mips32, sw_64, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)")
+set(BOOST_CONTEXT_ARCHITECTURE "${_default_arch}" CACHE STRING "Boost.Context architecture (arm, arm64, loongarch64, mips32, sw_64, mips64, ppc32, ppc64, riscv64, s390x, i386, x86_64, combined)")
set_property(CACHE BOOST_CONTEXT_ARCHITECTURE PROPERTY STRINGS ${_all_archs})
unset(_all_archs)
diff --git a/libs/context/build/Jamfile.v2 b/libs/context/build/Jamfile.v2
index 30e9598..6238510 100644
--- a/libs/context/build/Jamfile.v2
+++ b/libs/context/build/Jamfile.v2
@@ -254,6 +254,19 @@ alias asm_sources
<toolset>darwin
;
+# LOONGARCH64
+# LOONGARCH64/SYSV/ELF
+alias asm_sources
+ : asm/make_loongarch64_sysv_elf_gas.S
+ asm/jump_loongarch64_sysv_elf_gas.S
+ asm/ontop_loongarch64_sysv_elf_gas.S
+ : <abi>sysv
+ <address-model>64
+ <architecture>loongarch
+ <binary-format>elf
+ <toolset>gcc
+ ;
+
# MIPS
# MIPS32/O32/ELF
alias asm_sources
diff --git a/libs/context/build/architecture.jam b/libs/context/build/architecture.jam
index 4c7d211..78820cd 100644
--- a/libs/context/build/architecture.jam
+++ b/libs/context/build/architecture.jam
@@ -59,6 +59,10 @@ rule deduce-architecture ( properties * )
{
return <architecture>sw_64 ;
}
+ else if [ configure.builds /boost/architecture//loongarch : $(properties) : loongarch ]
+ {
+ return <architecture>loongarch ;
+ }
else if [ configure.builds /boost/architecture//mips : $(properties) : mips ]
{
return <architecture>mips ;
diff --git a/libs/context/doc/architectures.qbk b/libs/context/doc/architectures.qbk
index 4be823c..76d6d58 100644
--- a/libs/context/doc/architectures.qbk
+++ b/libs/context/doc/architectures.qbk
@@ -15,6 +15,7 @@ architectures:
[[arm (aarch32)] [AAPCS|ELF] [AAPCS|PE] [-] [AAPCS|MACH-O]]
[[arm (aarch64)] [AAPCS|ELF] [-] [AAPCS|MACH-O] [AAPCS|MACH-O]]
[[i386] [SYSV|ELF] [MS|PE] [SYSV|MACH-O] [-]]
+ [[loongarch64] [SYSV|ELF] [-] [-] [-]]
[[mips] [O32|N64|ELF] [-] [-] [-]]
[[ppc32] [SYSV|ELF|XCOFF] [-] [SYSV|MACH-O] [-]]
[[ppc64] [SYSV|ELF|XCOFF] [-] [SYSV|MACH-O] [-]]
diff --git a/libs/context/doc/context.xml b/libs/context/doc/context.xml
index d83439d..ef920cd 100644
--- a/libs/context/doc/context.xml
+++ b/libs/context/doc/context.xml
@@ -3379,6 +3379,33 @@
</para>
</entry>
</row>
+ <row>
+ <entry>
+ <para>
+ loongarch64
+ </para>
+ </entry>
+ <entry>
+ <para>
+ SYSV|ELF
+ </para>
+ </entry>
+ <entry>
+ <para>
+ -
+ </para>
+ </entry>
+ <entry>
+ <para>
+ -
+ </para>
+ </entry>
+ <entry>
+ <para>
+ -
+ </para>
+ </entry>
+ </row>
<row>
<entry>
<para>
diff --git a/libs/context/doc/html/context/architectures.html b/libs/context/doc/html/context/architectures.html
index 416627d..29bd803 100644
--- a/libs/context/doc/html/context/architectures.html
+++ b/libs/context/doc/html/context/architectures.html
@@ -151,6 +151,33 @@
</td>
</tr>
<tr>
+<td>
+ <p>
+ loongarch64
+ </p>
+ </td>
+<td>
+ <p>
+ SYSV|ELF
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+<td>
+ <p>
+ -
+ </p>
+ </td>
+</tr>
+<tr>
<td>
<p>
mips
diff --git a/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S
new file mode 100644
index 0000000..74c081e
--- /dev/null
+++ b/libs/context/src/asm/jump_loongarch64_sysv_elf_gas.S
@@ -0,0 +1,121 @@
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 8 | 16 | 24 | *
+ * ------------------------------------------------- *
+ * | FS0 | FS1 | FS2 | FS3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 40 | 48 | 56 | *
+ * ------------------------------------------------- *
+ * | FS4 | FS5 | FS6 | FS7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 72 | 80 | 88 | *
+ * ------------------------------------------------- *
+ * | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | S8 | FP | RA | PC | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.file "jump_loongarch64_sysv_elf_gas.S"
+.text
+.globl jump_fcontext
+.align 2
+.type jump_fcontext,@function
+jump_fcontext:
+ # reserve space on stack
+ addi.d $sp, $sp, -160
+
+ # save fs0 - fs7
+ fst.d $fs0, $sp, 0
+ fst.d $fs1, $sp, 8
+ fst.d $fs2, $sp, 16
+ fst.d $fs3, $sp, 24
+ fst.d $fs4, $sp, 32
+ fst.d $fs5, $sp, 40
+ fst.d $fs6, $sp, 48
+ fst.d $fs7, $sp, 56
+
+ # save s0 - s8, fp, ra
+ st.d $s0, $sp, 64
+ st.d $s1, $sp, 72
+ st.d $s2, $sp, 80
+ st.d $s3, $sp, 88
+ st.d $s4, $sp, 96
+ st.d $s5, $sp, 104
+ st.d $s6, $sp, 112
+ st.d $s7, $sp, 120
+ st.d $s8, $sp, 128
+ st.d $fp, $sp, 136
+ st.d $ra, $sp, 144
+
+ # save RA as PC
+ st.d $ra, $sp, 152
+
+ # store SP (pointing to context-data) in A2
+ move $a2, $sp
+
+ # restore SP (pointing to context-data) from A0
+ move $sp, $a0
+
+ # load fs0 - fs7
+ fld.d $fs0, $sp, 0
+ fld.d $fs1, $sp, 8
+ fld.d $fs2, $sp, 16
+ fld.d $fs3, $sp, 24
+ fld.d $fs4, $sp, 32
+ fld.d $fs5, $sp, 40
+ fld.d $fs6, $sp, 48
+ fld.d $fs7, $sp, 56
+
+ #load s0 - s7
+ ld.d $s0, $sp, 64
+ ld.d $s1, $sp, 72
+ ld.d $s2, $sp, 80
+ ld.d $s3, $sp, 88
+ ld.d $s4, $sp, 96
+ ld.d $s5, $sp, 104
+ ld.d $s6, $sp, 112
+ ld.d $s7, $sp, 120
+ ld.d $s8, $sp, 128
+ ld.d $fp, $sp, 136
+ ld.d $ra, $sp, 144
+
+ # return transfer_t from jump
+ # pass transfer_t as first arg in context function
+ # a0 == FCTX, a1 == DATA
+ move $a0, $a2
+
+ # load PC
+ ld.d $a2, $sp, 152
+
+ # restore stack
+ addi.d $sp, $sp, 160
+
+ # jump to context
+ jr $a2
+.size jump_fcontext, .-jump_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S
new file mode 100644
index 0000000..5506270
--- /dev/null
+++ b/libs/context/src/asm/make_loongarch64_sysv_elf_gas.S
@@ -0,0 +1,72 @@
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 8 | 16 | 24 | *
+ * ------------------------------------------------- *
+ * | FS0 | FS1 | FS2 | FS3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 40 | 48 | 56 | *
+ * ------------------------------------------------- *
+ * | FS4 | FS5 | FS6 | FS7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 72 | 80 | 88 | *
+ * ------------------------------------------------- *
+ * | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | S8 | FP | RA | PC | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.file "make_loongarch64_sysv_elf_gas.S"
+.text
+.globl make_fcontext
+.align 2
+.type make_fcontext,@function
+make_fcontext:
+ # shift address in A0 to lower 16 byte boundary
+ bstrins.d $a0, $zero, 3, 0
+
+ # reserve space for context-data on context-stack
+ addi.d $a0, $a0, -160
+
+ # third arg of make_fcontext() == address of context-function
+ st.d $a2, $a0, 152
+
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ la.local $a4, finish
+ st.d $a4, $a0, 144
+
+ # return pointer to context-data
+ jr $ra
+
+finish:
+ # exit code is zero
+ li.d $a0, 0
+ # call _exit(0)
+ b %plt(_exit)
+
+.size make_fcontext, .-make_fcontext
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S b/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S
new file mode 100644
index 0000000..c6ea044
--- /dev/null
+++ b/libs/context/src/asm/ontop_loongarch64_sysv_elf_gas.S
@@ -0,0 +1,118 @@
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 8 | 16 | 24 | *
+ * ------------------------------------------------- *
+ * | FS0 | FS1 | FS2 | FS3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 40 | 48 | 56 | *
+ * ------------------------------------------------- *
+ * | FS4 | FS5 | FS6 | FS7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 72 | 80 | 88 | *
+ * ------------------------------------------------- *
+ * | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | S8 | FP | RA | PC | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.file "ontop_loongarch64_sysv_elf_gas.S"
+.text
+.globl ontop_fcontext
+.align 2
+.type ontop_fcontext,@function
+ontop_fcontext:
+ # reserve space on stack
+ addi.d $sp, $sp, -160
+
+ # save fs0 - fs7
+ fst.d $fs0, $sp, 0
+ fst.d $fs1, $sp, 8
+ fst.d $fs2, $sp, 16
+ fst.d $fs3, $sp, 24
+ fst.d $fs4, $sp, 32
+ fst.d $fs5, $sp, 40
+ fst.d $fs6, $sp, 48
+ fst.d $fs7, $sp, 56
+
+ # save s0 - s8, fp, ra
+ st.d $s0, $sp, 64
+ st.d $s1, $sp, 72
+ st.d $s2, $sp, 80
+ st.d $s3, $sp, 88
+ st.d $s4, $sp, 96
+ st.d $s5, $sp, 104
+ st.d $s6, $sp, 112
+ st.d $s7, $sp, 120
+ st.d $s8, $sp, 128
+ st.d $fp, $sp, 136
+ st.d $ra, $sp, 144
+
+ # save RA as PC
+ st.d $ra, $sp, 152
+
+ # store SP (pointing to context-data) in A3
+ move $a3, $sp
+
+ # restore SP (pointing to context-data) from A0
+ move $sp, $a0
+
+ # load fs0 - fs11
+ fld.d $fs0, $sp, 0
+ fld.d $fs1, $sp, 8
+ fld.d $fs2, $sp, 16
+ fld.d $fs3, $sp, 24
+ fld.d $fs4, $sp, 32
+ fld.d $fs5, $sp, 40
+ fld.d $fs6, $sp, 48
+ fld.d $fs7, $sp, 56
+
+ #load s0 - s11, fp, ra
+ ld.d $s0, $sp, 64
+ ld.d $s1, $sp, 72
+ ld.d $s2, $sp, 80
+ ld.d $s3, $sp, 88
+ ld.d $s4, $sp, 96
+ ld.d $s5, $sp, 104
+ ld.d $s6, $sp, 112
+ ld.d $s7, $sp, 120
+ ld.d $s8, $sp, 128
+ ld.d $fp, $sp, 136
+ ld.d $ra, $sp, 144
+
+ # return transfer_t from jump
+ # pass transfer_t as first arg in context function
+ # a0 == FCTX, a1 == DATA
+ move $a0, $a3
+
+ # adjust stack
+ addi.d $sp, $sp, 160
+
+ # jump to context
+ jr $a2
+.size ontop_fcontext, .-ontop_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/tools/build/src/engine/jam.h b/tools/build/src/engine/jam.h
index 59e5f82..76a7869 100644
--- a/tools/build/src/engine/jam.h
+++ b/tools/build/src/engine/jam.h
@@ -446,6 +446,10 @@
#define OSPLAT "OSPLAT=PARISC"
#endif
+#ifdef __loongarch64
+ #define OSPLAT "OSPLAT=LOONGARCH64"
+#endif
+
#ifndef OSPLAT
#define OSPLAT ""
#endif
diff --git a/tools/build/src/tools/features/architecture-feature.jam b/tools/build/src/tools/features/architecture-feature.jam
index e320307..124b4be 100644
--- a/tools/build/src/tools/features/architecture-feature.jam
+++ b/tools/build/src/tools/features/architecture-feature.jam
@@ -45,6 +45,9 @@ feature.feature architecture
# RISC-V
riscv
+ # loongarch
+ loongarch
+
# z Systems (aka s390x)
s390x
:
--
2.33.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hefq343/boost_1.git
git@gitee.com:hefq343/boost_1.git
hefq343
boost_1
boost_1
openEuler-22.03-LTS-SP4

搜索帮助