123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include <sysdep.h>
- #include "ucontext_i.h"
- ENTRY(__getcontext)
- swi $lp, [$r0 + UCONTEXT_PC]
- addi $r15, $r0, UCONTEXT_GREGS
- xor $r1, $r1, $r1
- smw.bim $r1, [$r15], $r1
- smw.bim $r1, [$r15], $r14
- addi $r15, $r15, 4
- smw.bim $r16, [$r15], $r25, #0xf
- move $r4, $r0
-
- move $r0, SIG_BLOCK
- move $r1, 0
- addi $r2, $r4, UCONTEXT_SIGMASK
- move $r3, _NSIG8
- syscall SYS_ify(rt_sigprocmask)
- bnez $r0, 1f
- #ifdef __NDS32_ABI_2FP_PLUS__
- addi $r2, $r4, UCONTEXT_FDREGS
- fmfcfg $r20
- slli $r20, $r20, #28
- srli $r20, $r20, #30
-
- beqz $r20, .LCFG0
- xori $r15, $r20, #0b10
- beqz $r15, .LCFG2
- srli $r20, $r20, #0b01
- beqz $r20, .LCFG1
-
- .LCFG3:
- fsdi $fd31, [$r2 + 248]
- fsdi $fd30, [$r2 + 240]
- fsdi $fd29, [$r2 + 232]
- fsdi $fd28, [$r2 + 224]
- fsdi $fd27, [$r2 + 216]
- fsdi $fd26, [$r2 + 208]
- fsdi $fd25, [$r2 + 200]
- fsdi $fd24, [$r2 + 192]
- .LCFG2:
- fsdi $fd10, [$r2 + 80]
- fsdi $fd9, [$r2 + 72]
- fsdi $fd8, [$r2 + 64]
- .LCFG1:
- fsdi $fd7, [$r2 + 56]
- fsdi $fd6, [$r2 + 48]
- fsdi $fd5, [$r2 + 40]
- fsdi $fd4, [$r2 + 32]
- .LCFG0:
- fsdi $fd3, [$r2 + 24]
-
- fmfcsr $r1
- swi $r1, [$r2 + 0x100]
- #endif
-
- xor $r0, $r0, $r0
-
- addi $r1, $r0, 1
- ret
- 1:
- move $r0, -1
- ret
- END(__getcontext)
- weak_alias (__getcontext, getcontext)
|