1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #2689, Support loongarch, loongson CPU. v5.0.19

This commit is contained in:
winlin 2021-10-24 13:29:14 +08:00
parent a86f3905b2
commit 5b44cc6a17
11 changed files with 3481 additions and 6 deletions

View file

@ -428,6 +428,88 @@
/****************************************************************/
#elif defined(__loongarch__)
/****************************************************************/
/*
* Internal __jmp_buf layout
*/
#define JB_SP 0 /* R3, SP, Stack pointer */
#define JB_RA 1 /* R1, RA, Return address */
#define JB_FP 2 /* FP/R22 Frame pointer */
#define JB_S0 3 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S1 4 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S2 5 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S3 6 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S4 7 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S5 8 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S6 9 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S7 10 /* R23-R31, S0-S8, Subroutine register variable */
#define JB_S8 11 /* R23-R31, S0-S8, Subroutine register variable */
.file "md_linux.S"
.text
/* _st_md_cxt_save(__jmp_buf env) */ /* The env is $r4, https://github.com/ossrs/state-threads/issues/24#porting */
.globl _st_md_cxt_save
.type _st_md_cxt_save, %function
.align 2
_st_md_cxt_save:
st.d $r3, $r4, 0 /* Save sp to env[0], *(long*)($r4+0) = sp */
st.d $r1, $r4, 8 /* Save ra to env[1], *(long*)($r4+8) = r1 */
st.d $r22, $r4, 16 /* Save fp to env[2], *(long*)($r4+16) = r22 */
st.d $r23, $r4, 24 /* Save r23 to env[3], *(long*)($r4+24) = r23 */
st.d $r24, $r4, 32 /* Save r24 to env[4], *(long*)($r4+32) = r24 */
st.d $r25, $r4, 40 /* Save r25 to env[5], *(long*)($r4+40) = r25 */
st.d $r26, $r4, 48 /* Save r26 to env[6], *(long*)($r4+48) = r26 */
st.d $r27, $r4, 56 /* Save r27 to env[7], *(long*)($r4+56) = r27 */
st.d $r28, $r4, 64 /* Save r28 to env[8], *(long*)($r4+64) = r28 */
st.d $r29, $r4, 72 /* Save r29 to env[9], *(long*)($r4+72) = r29 */
st.d $r30, $r4, 80 /* Save r30 to env[10], *(long*)($r4+80) = r30 */
st.d $r31, $r4, 88 /* Save r31 to env[11], *(long*)($r4+88) = r31 */
addi.w $r12, $r0, 0 /* Set return value to 0 */
move $r4, $r12 /* Set return value to 0 */
jirl $r0, $r1, 0 /* Return */
.size _st_md_cxt_save, .-_st_md_cxt_save
/****************************************************************/
/* _st_md_cxt_restore(__jmp_buf env, int val) */
.globl _st_md_cxt_restore
.type _st_md_cxt_restore, %function
.align 2
_st_md_cxt_restore:
ld.d $r3, $r4, 0 /* Load sp from env[0], sp=*(long*)($r4+0) */
ld.d $r1, $r4, 8 /* Load ra from env[1], r1=*(long*)($r4+8) */
ld.d $r22, $r4, 16 /* Load fp from env[2], r22=*(long*)($r4+16) */
ld.d $r23, $r4, 24 /* Load r23 from env[3], r23=*(long*)($r4+24) */
ld.d $r24, $r4, 32 /* Load r24 from env[4], r24=*(long*)($r4+32) */
ld.d $r25, $r4, 40 /* Load r25 from env[5], r25=*(long*)($r4+40) */
ld.d $r26, $r4, 48 /* Load r26 from env[6], r26=*(long*)($r4+48) */
ld.d $r27, $r4, 56 /* Load r27 from env[7], r27=*(long*)($r4+56) */
ld.d $r28, $r4, 64 /* Load r28 from env[8], r28=*(long*)($r4+64) */
ld.d $r29, $r4, 72 /* Load r29 from env[9], r29=*(long*)($r4+72) */
ld.d $r30, $r4, 80 /* Load r30 from env[10], r30=*(long*)($r4+80) */
ld.d $r31, $r4, 88 /* Load r31 from env[11], r31=*(long*)($r4+88) */
addi.w $r12, $r0, 1 /* Set return value to 1 */
move $r4, $r12 /* Set return value to 1 */
jirl $r0, $r1, 0 /* Return to the saved return address */
.size _st_md_cxt_restore, .-_st_md_cxt_restore
/****************************************************************/
#endif
#endif