]> begriffs open source - freertos/blob - portable/IAR/V850ES/ISR_Support.h
Style: uncrustify kernel files
[freertos] / portable / IAR / V850ES / ISR_Support.h
1 /*\r
2  * FreeRTOS Kernel V10.3.1\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  */\r
26 \r
27         EXTERN pxCurrentTCB\r
28         EXTERN usCriticalNesting\r
29 \r
30 #include "FreeRTOSConfig.h"\r
31 \r
32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
33 ; Context save and restore macro definitions\r
34 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
35 \r
36 portSAVE_CONTEXT MACRO\r
37 \r
38     add     -0x0C,sp                    ; prepare stack to save necessary values\r
39     st.w    lp,8[sp]                    ; store LP to stack\r
40     stsr    0,r31\r
41     st.w    lp,4[sp]                    ; store EIPC to stack\r
42     stsr    1,lp\r
43     st.w    lp,0[sp]                    ; store EIPSW to stack\r
44 #if configDATA_MODE == 1                                        ; Using the Tiny data model\r
45     prepare {r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30},76,sp ; save general purpose registers\r
46     sst.w   r19,72[ep]\r
47     sst.w   r18,68[ep]\r
48     sst.w   r17,64[ep]\r
49     sst.w   r16,60[ep]\r
50     sst.w   r15,56[ep]\r
51     sst.w   r14,52[ep]\r
52     sst.w   r13,48[ep]\r
53     sst.w   r12,44[ep]\r
54     sst.w   r11,40[ep]\r
55     sst.w   r10,36[ep]\r
56     sst.w   r9,32[ep]\r
57     sst.w   r8,28[ep]\r
58     sst.w   r7,24[ep]\r
59     sst.w   r6,20[ep]\r
60     sst.w   r5,16[ep]\r
61     sst.w   r4,12[ep]\r
62 #else                                                           ; Using the Small/Large data model\r
63     prepare {r20,r21,r22,r23,r24,r26,r27,r28,r29,r30},72,sp     ; save general purpose registers\r
64     sst.w   r19,68[ep]\r
65     sst.w   r18,64[ep]\r
66     sst.w   r17,60[ep]\r
67     sst.w   r16,56[ep]\r
68     sst.w   r15,52[ep]\r
69     sst.w   r14,48[ep]\r
70     sst.w   r13,44[ep]\r
71     sst.w   r12,40[ep]\r
72     sst.w   r11,36[ep]\r
73     sst.w   r10,32[ep]\r
74     sst.w   r9,28[ep]\r
75     sst.w   r8,24[ep]\r
76     sst.w   r7,20[ep]\r
77     sst.w   r6,16[ep]\r
78     sst.w   r5,12[ep]\r
79 #endif /* configDATA_MODE */\r
80     sst.w   r2,8[ep]\r
81     sst.w   r1,4[ep]\r
82     MOVHI   hi1(usCriticalNesting),r0,r1        ; save usCriticalNesting value to stack\r
83     ld.w    lw1(usCriticalNesting)[r1],r2\r
84     sst.w   r2,0[ep]\r
85     MOVHI   hi1(pxCurrentTCB),r0,r1                     ; save SP to top of current TCB\r
86     ld.w    lw1(pxCurrentTCB)[r1],r2\r
87     st.w    sp,0[r2]\r
88     ENDM\r
89 \r
90 \r
91 portRESTORE_CONTEXT MACRO\r
92 \r
93     MOVHI   hi1(pxCurrentTCB),r0,r1                     ; get Stackpointer address\r
94     ld.w    lw1(pxCurrentTCB)[r1],sp\r
95     MOV     sp,r1\r
96     ld.w    0[r1],sp                                            ; load stackpointer\r
97     MOV     sp,ep                                                       ; set stack pointer to element pointer\r
98     sld.w   0[ep],r1                                            ; load usCriticalNesting value from stack\r
99     MOVHI   hi1(usCriticalNesting),r0,r2\r
100     st.w    r1,lw1(usCriticalNesting)[r2]\r
101     sld.w   4[ep],r1                                            ; restore general purpose registers\r
102     sld.w   8[ep],r2\r
103 #if configDATA_MODE == 1                                        ; Using Tiny data model\r
104     sld.w   12[ep],r4\r
105     sld.w   16[ep],r5\r
106     sld.w   20[ep],r6\r
107     sld.w   24[ep],r7\r
108     sld.w   28[ep],r8\r
109     sld.w   32[ep],r9\r
110     sld.w   36[ep],r10\r
111     sld.w   40[ep],r11\r
112     sld.w   44[ep],r12\r
113     sld.w   48[ep],r13\r
114     sld.w   52[ep],r14\r
115     sld.w   56[ep],r15\r
116     sld.w   60[ep],r16\r
117     sld.w   64[ep],r17\r
118     sld.w   68[ep],r18\r
119     sld.w   72[ep],r19\r
120     dispose 76,{r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30}\r
121 #else                                                                           ; Using Small/Large data model\r
122     sld.w   12[ep],r5\r
123     sld.w   16[ep],r6\r
124     sld.w   20[ep],r7\r
125     sld.w   24[ep],r8\r
126     sld.w   28[ep],r9\r
127     sld.w   32[ep],r10\r
128     sld.w   36[ep],r11\r
129     sld.w   40[ep],r12\r
130     sld.w   44[ep],r13\r
131     sld.w   48[ep],r14\r
132     sld.w   52[ep],r15\r
133     sld.w   56[ep],r16\r
134     sld.w   60[ep],r17\r
135     sld.w   64[ep],r18\r
136     sld.w   68[ep],r19\r
137     dispose 72,{r20,r21,r22,r23,r24,r26,r27,r28,r29,r30}\r
138 #endif /* configDATA_MODE */\r
139     ld.w    0[sp],lp                                            ; restore EIPSW from stack\r
140     ldsr    lp,1\r
141     ld.w    4[sp],lp                                            ; restore EIPC from stack\r
142     ldsr    lp,0\r
143     ld.w    8[sp],lp                                            ; restore LP from stack\r
144     add     0x0C,sp                                                     ; set SP to right position\r
145 \r
146     RETI\r
147 \r
148     ENDM\r