Qucs-S S-parameter Viewer & RF Synthesis Tools
Loading...
Searching...
No Matches
docs
help
help-venv
lib
python3.12
site-packages
greenlet
platform
switch_riscv_unix.h
1
#define STACK_REFPLUS 1
2
3
#ifdef SLP_EVAL
4
#define STACK_MAGIC 0
5
6
#define REGS_TO_SAVE "s1", "s2", "s3", "s4", "s5", \
7
"s6", "s7", "s8", "s9", "s10", "s11", "fs0", "fs1", \
8
"fs2", "fs3", "fs4", "fs5", "fs6", "fs7", "fs8", "fs9", \
9
"fs10", "fs11"
10
11
static
int
12
slp_switch(
void
)
13
{
14
int
ret;
15
long
fp;
16
long
*stackref, stsizediff;
17
18
__asm__
volatile
(
""
: : : REGS_TO_SAVE);
19
__asm__
volatile
(
"mv %0, fp"
:
"=r"
(fp) : );
20
__asm__
volatile
(
"mv %0, sp"
:
"=r"
(stackref) : );
21
{
22
SLP_SAVE_STATE(stackref, stsizediff);
23
__asm__
volatile
(
24
"add sp, sp, %0\n\t"
25
"add fp, fp, %0\n\t"
26
:
/* no outputs */
27
:
"r"
(stsizediff)
28
);
29
SLP_RESTORE_STATE();
30
}
31
__asm__
volatile
(
""
: : : REGS_TO_SAVE);
32
#if __riscv_xlen == 32
33
__asm__
volatile
(
"lw fp, %0"
: :
"m"
(fp));
34
#else
35
__asm__
volatile
(
"ld fp, %0"
: :
"m"
(fp));
36
#endif
37
__asm__
volatile
(
"mv %0, zero"
:
"=r"
(ret) : );
38
return
ret;
39
}
40
41
#endif
Generated by
1.9.8