]> begriffs open source - cmsis-freertos/blob - Source/portable/Renesas/SH2A_FPU/ISR_Support.inc
Correct memory allocation and access in osMemoryPoolNew (#142)
[cmsis-freertos] / Source / portable / Renesas / SH2A_FPU / ISR_Support.inc
1 ;/*
2 ; * FreeRTOS Kernel V11.2.0
3 ; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4 ; *
5 ; * SPDX-License-Identifier: MIT
6 ; *
7 ; * Permission is hereby granted, free of charge, to any person obtaining a copy of
8 ; * this software and associated documentation files (the "Software"), to deal in
9 ; * the Software without restriction, including without limitation the rights to
10 ; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11 ; * the Software, and to permit persons to whom the Software is furnished to do so,
12 ; * subject to the following conditions:
13 ; *
14 ; * The above copyright notice and this permission notice shall be included in all
15 ; * copies or substantial portions of the Software.
16 ; *
17 ; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 ; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19 ; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20 ; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 ; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 ; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 ; *
24 ; * https://www.FreeRTOS.org
25 ; * https://github.com/FreeRTOS
26 ; *
27 ; */
28     .macro portSAVE_CONTEXT
29
30     ; Save r0 to r14 and pr.
31     movml.l r15, @-r15
32
33     ; Save mac1, mach and gbr
34     sts.l   macl, @-r15
35     sts.l   mach, @-r15
36     stc.l   gbr, @-r15
37
38     ; Get the address of pxCurrentTCB
39     mov.l   #_pxCurrentTCB, r0
40
41     ; Get the address of pxTopOfStack from the TCB.
42     mov.l   @r0, r0
43
44     ; Save the stack pointer in pxTopOfStack.
45     mov.l   r15, @r0
46
47     .endm
48
49 ;-----------------------------------------------------------
50
51     .macro portRESTORE_CONTEXT
52
53     ; Get the address of the pxCurrentTCB variable.
54     mov.l   #_pxCurrentTCB, r0
55
56     ; Get the address of the task stack from pxCurrentTCB.
57     mov.l   @r0, r0
58
59     ; Get the task stack itself into the stack pointer.
60     mov.l   @r0, r15
61
62     ; Restore system registers.
63     ldc.l   @r15+, gbr
64     lds.l   @r15+, mach
65     lds.l   @r15+, macl
66
67     ; Restore r0 to r14 and PR
68     movml.l @r15+, r15
69
70     ; Pop the SR and PC to jump to the start of the task.
71     rte
72     nop
73
74     .endm
75 ;-----------------------------------------------------------