mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
0766ac6e35
Add loongarch64 assembly files from Boost, needed for fibers support, and hook up loongarch64 fibers support during configure. Close GH-13914
122 lines
3.9 KiB
ArmAsm
122 lines
3.9 KiB
ArmAsm
/*******************************************************
|
|
* *
|
|
* ------------------------------------------------- *
|
|
* | 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
|