xref: /nrf52832-nimble/rt-thread/libcpu/v850/70f34/macdefs.inc (revision 104654410c56c573564690304ae786df310c91fc)
1;
2;       These are the macros used by the v850 port of the uCOS/II.
3;
4
5
6
7
8
9;********************************************************************
10;	function:
11;	description:
12;	--- Modifies ----------------------------------------------
13;		   IO :
14;		   Mem:
15;		   CPU:
16;	--- Uses --------------------------------------------------
17;		   IO :
18;		   Mem:
19;	--- Input -------------------------------------------------
20;	--- Output ------------------------------------------------
21;	--- Notes -------------------------------------------------
22;====================================================================
23
24SAVE_CPU_CTX MACRO
25	;Save all registers on entry (r3 is the stack pointer)
26	prepare {r23,r24,r25,r26,r27,r28,r29,r30,r31},(8+(4*14))	 ;Add 8 bytes for 2 more registers
27	mov sp, ep
28        sst.w r1, 0[ep]
29	sst.w r2, 4[ep]
30	sst.w r5, 8[ep]
31	sst.w r6, 12[ep]
32	sst.w r7, 16[ep]
33	sst.w r8, 20[ep]
34	sst.w r9, 24[ep]
35	sst.w r10, 28[ep]
36	sst.w r11, 32[ep]
37	sst.w r12, 36[ep]
38	sst.w r13, 40[ep]
39	sst.w r14, 44[ep]
40	sst.w r15, 48[ep]
41	sst.w r16, 52[ep]
42	;Save caller's PC
43	stsr EIPC, r1
44	sst.w r1, 56[ep]
45	;Save caller's PSW
46	stsr EIPSW, r1
47	sst.w r1, 60[ep]
48
49        ENDMAC
50
51
52
53
54
55;********************************************************************
56;	function:
57;	description:
58;	--- Modifies ----------------------------------------------
59;		   IO :
60;		   Mem:
61;		   CPU:
62;	--- Uses --------------------------------------------------
63;		   IO :
64;		   Mem:
65;	--- Input -------------------------------------------------
66;	--- Output ------------------------------------------------
67;	--- Notes -------------------------------------------------
68;====================================================================
69SAVE_SP MACRO
70	;Save stack pointer on OSTCBCur->OSTCBStkPtr (OSTCBStkPtr=0)
71	mov OSTCBCur, r21
72	ld.w 0[r21], r21
73	st.w sp, 0[r21]
74        ENDMAC
75
76
77
78;********************************************************************
79;	function:
80;	description:
81;	--- Modifies ----------------------------------------------
82;		   IO :
83;		   Mem:
84;		   CPU:
85;	--- Uses --------------------------------------------------
86;		   IO :
87;		   Mem:
88;	--- Input -------------------------------------------------
89;	--- Output ------------------------------------------------
90;	--- Notes -------------------------------------------------
91;====================================================================
92ISR_ENTRY  MACRO
93        LOCAL _DontSaveSP
94
95        ;Save all CPU registers according to the standard stack frame
96        SAVE_CPU_CTX
97
98	mov OSIntNesting, r1                   ;Increment OSNesting by one
99	LD.BU	0[r1],r2
100        add 1, r2
101	ST.B  r2, 0[r1]
102        cmp 1, r2                              ;If OSNesting==1 save SP in current TCB
103        bne _DontSaveSP
104        SAVE_SP
105_DontSaveSP:
106        ENDMAC
107
108;********************************************************************
109;	function:
110;	description:
111;	--- Modifies ----------------------------------------------
112;		   IO :
113;		   Mem:
114;		   CPU:
115;	--- Uses --------------------------------------------------
116;		   IO :
117;		   Mem:
118;	--- Input -------------------------------------------------
119;	--- Output ------------------------------------------------
120;	--- Notes -------------------------------------------------
121;====================================================================
122ISR_EXIT MACRO
123        jarl OSIntExit, lp                      ;Call OSIntExit()
124	jr OS_Restore_CPU_Context               ;Restore processors registers and execute RETI
125        ENDMAC
126