Skip to content

Commit

Permalink
For #1537, support aarch64 for armv8. 3.0.84
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Dec 25, 2019
1 parent 0e0889a commit ea8111c
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 5 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ For previous versions, please read:

## V3 changes

* v3.0, 2019-12-25, For [#1537][bug #1537], support aarch64 for armv8. 3.0.84
* v3.0, 2019-12-25, For [#1538][bug #1538], fresh chunk allow fmt=0 or fmt=1. 3.0.83
* v3.0, 2019-12-25, Remove FFMPEG and NGINX, please use [srs-docker](https://github.com/ossrs/srs-docker) instead. 3.0.82
* v3.0, 2019-12-25, For [#1537][bug #1537], remove cross-build, not used patches, directly build st.
Expand Down
102 changes: 98 additions & 4 deletions trunk/3rdparty/st-srs/md.S
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,100 @@



#elif defined(__aarch64__)

/****************************************************************/

#define JB_X19 0
#define JB_X20 1
#define JB_X21 2
#define JB_X22 3
#define JB_X23 4
#define JB_X24 5
#define JB_X25 6
#define JB_X26 7
#define JB_X27 8
#define JB_X28 9
#define JB_X29 10
#define JB_LR 11
#define JB_SP 13

#define JB_D8 14
#define JB_D9 15
#define JB_D10 16
#define JB_D11 17
#define JB_D12 18
#define JB_D13 19
#define JB_D14 20
#define JB_D15 21

.file "md.S"
.text

/* _st_md_cxt_save(__jmp_buf env) */
.globl _st_md_cxt_save
.type _st_md_cxt_save, %function
.align 4
_st_md_cxt_save:
stp x19, x20, [x0, #JB_X19<<3]
stp x21, x22, [x0, #JB_X21<<3]
stp x23, x24, [x0, #JB_X23<<3]
stp x25, x26, [x0, #JB_X25<<3]
stp x27, x28, [x0, #JB_X27<<3]
stp x29, x30, [x0, #JB_X29<<3]

stp d8, d9, [x0, #JB_D8<<3]
stp d10, d11, [x0, #JB_D10<<3]
stp d12, d13, [x0, #JB_D12<<3]
stp d14, d15, [x0, #JB_D14<<3]
mov x2, sp
str x2, [x0, #JB_SP<<3]

mov x0, #0
ret
.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 4
_st_md_cxt_restore:
ldp x19, x20, [x0, #JB_X19<<3]
ldp x21, x22, [x0, #JB_X21<<3]
ldp x23, x24, [x0, #JB_X23<<3]
ldp x25, x26, [x0, #JB_X25<<3]
ldp x27, x28, [x0, #JB_X27<<3]

ldp x29, x30, [x0, #JB_X29<<3]

ldp d8, d9, [x0, #JB_D8<<3]
ldp d10, d11, [x0, #JB_D10<<3]
ldp d12, d13, [x0, #JB_D12<<3]
ldp d14, d15, [x0, #JB_D14<<3]

ldr x5, [x0, #JB_SP<<3]
mov sp, x5

cmp x1, #0
mov x0, #1
csel x0, x1, x0, ne
/* Use br instead of ret because ret is guaranteed to mispredict */
br x30
.size _st_md_cxt_restore, .-_st_md_cxt_restore

/****************************************************************/










#elif defined(__arm__)

/****************************************************************/
Expand All @@ -486,7 +580,7 @@
.size _st_md_cxt_save, .-_st_md_cxt_save

/****************************************************************/

.globl _st_md_cxt_restore
.type _st_md_cxt_restore, %function
.align 2
Expand All @@ -495,13 +589,13 @@
movs r0, r1 // r1 -> return value
// The bellow is a group, that is:
// if (r0 == 0) r0 =1;
ITT eq
ITT eq
moveq r0, #1 // long_jmp should never return 0

ldmia ip!, {v1-v6, sl, fp} // restore registers.
ldr sp, [ip], #4 // restore sp, like: sp=*ip; ip+=4;
ldr lr, [ip], #4
bx lr
bx lr
.size _st_md_cxt_restore, .-_st_md_cxt_restore

/****************************************************************/
Expand Down
6 changes: 6 additions & 0 deletions trunk/3rdparty/st-srs/md.h
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,12 @@
#endif
#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[JB_RSP]

#elif defined(__aarch64__)
/* https://github.com/ossrs/state-threads/issues/9 */
#define MD_STACK_GROWS_DOWN
#define MD_USE_BUILTIN_SETJMP
#define MD_GET_SP(_t) (_t)->context[0].__jmpbuf[13]

#elif defined(__arm__)
#define MD_STACK_GROWS_DOWN
/* https://github.com/ossrs/state-threads/issues/1#issuecomment-244648573 */
Expand Down
2 changes: 1 addition & 1 deletion trunk/src/core/srs_core.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// The version config.
#define VERSION_MAJOR 3
#define VERSION_MINOR 0
#define VERSION_REVISION 83
#define VERSION_REVISION 84

// The macros generated by configure script.
#include <srs_auto_headers.hpp>
Expand Down

0 comments on commit ea8111c

Please sign in to comment.