boost: build context for mips64

It turns out there's upstream support for it. A small patch is needed
to fix softfloat support.

Also added patch to fix boost-fiber on octeon+. Failure happens because
the platform is based on an old MIPSr2 standard that lacks the pause
instruction.

It also turns out that MIPS64 builds are done with the wrong ABI.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
Rosen Penev
2021-02-12 18:06:06 -08:00
parent c87d337c1b
commit 7b360868ff
3 changed files with 84 additions and 3 deletions
+70
View File
@@ -0,0 +1,70 @@
--- a/libs/context/src/asm/jump_mips64_n64_elf_gas.S
+++ b/libs/context/src/asm/jump_mips64_n64_elf_gas.S
@@ -67,7 +67,7 @@ jump_fcontext:
sd $ra, 144($sp) # save RA
sd $ra, 152($sp) # save RA as PC
-
+#if defined(__mips_hard_float)
s.d $f24, 0($sp) # save F24
s.d $f25, 8($sp) # save F25
s.d $f26, 16($sp) # save F26
@@ -76,6 +76,7 @@ jump_fcontext:
s.d $f29, 40($sp) # save F29
s.d $f30, 48($sp) # save F30
s.d $f31, 56($sp) # save F31
+#endif
# store SP (pointing to old context-data) in v0 as return
move $v0, $sp
@@ -83,6 +84,7 @@ jump_fcontext:
# get SP (pointing to new context-data) from a0 param
move $sp, $a0
+#if defined(__mips_hard_float)
l.d $f24, 0($sp) # restore F24
l.d $f25, 8($sp) # restore F25
l.d $f26, 16($sp) # restore F26
@@ -91,6 +93,7 @@ jump_fcontext:
l.d $f29, 40($sp) # restore F29
l.d $f30, 48($sp) # restore F30
l.d $f31, 56($sp) # restore F31
+#endif
ld $s0, 64($sp) # restore S0
ld $s1, 72($sp) # restore S1
--- a/libs/context/src/asm/ontop_mips64_n64_elf_gas.S
+++ b/libs/context/src/asm/ontop_mips64_n64_elf_gas.S
@@ -67,7 +67,7 @@ ontop_fcontext:
sd $ra, 144($sp) # save RA
sd $ra, 152($sp) # save RA as PC
-
+#if defined(__mips_hard_float)
s.d $f24, 0($sp) # save F24
s.d $f25, 8($sp) # save F25
s.d $f26, 16($sp) # save F26
@@ -76,6 +76,7 @@ ontop_fcontext:
s.d $f29, 40($sp) # save F29
s.d $f30, 48($sp) # save F30
s.d $f31, 56($sp) # save F31
+#endif
# store SP (pointing to context-data) in t0
move $t0, $sp
@@ -83,6 +84,7 @@ ontop_fcontext:
# restore SP (pointing to context-data) from a0
move $sp, $a0
+#if defined(__mips_hard_float)
l.d $f24, 0($sp) # restore F24
l.d $f25, 8($sp) # restore F25
l.d $f26, 16($sp) # restore F26
@@ -91,6 +93,7 @@ ontop_fcontext:
l.d $f29, 40($sp) # restore F29
l.d $f30, 48($sp) # restore F30
l.d $f31, 56($sp) # restore F31
+#endif
ld $s0, 64($sp) # restore S0
ld $s1, 72($sp) # restore S1