source: rtems/cpukit/score/cpu/or1k/or1k-context-validate.S @ 305357e

4.115
Last change on this file since 305357e was 305357e, checked in by Hesham ALMatary <heshamelmatary@…>, on Aug 31, 2014 at 11:29:41 PM

or1k: Implement context validate and context volatile clobber functions.

score/cpu/or1k: Add two new assembly functions: _CPU_Context_validate
and _CPU_Context_volatile_clobber; their implementation follows
corresponding ARM functions.

  • Property mode set to 100644
File size: 3.3 KB
Line 
1/*
2 * COPYRIGHT (c) 2014 Hesham ALMatary <heshamelmatary@gmail.com>
3 *
4 * The license and distribution terms for this file may be
5 * found in the file LICENSE in this distribution or at
6 * http://www.rtems.org/license/LICENSE.
7 */
8
9#ifdef HAVE_CONFIG_H
10  #include "config.h"
11#endif
12
13#include <rtems/asm.h>
14#include <rtems/score/cpu.h>
15
16.section        .text
17
18PUBLIC(_CPU_Context_validate)
19SYM(_CPU_Context_validate):
20
21  l.addi r1, r1, -140
22
23  l.sw  8(r1), r2
24  l.sw  12(r1), r3
25  l.sw  16(r1), r4
26  l.sw  20(r1), r5
27  l.sw  24(r1), r6
28  l.sw  28(r1), r7
29  l.sw  32(r1), r8
30  l.sw  36(r1), r9
31  l.sw  40(r1), r10
32  l.sw  44(r1), r11
33  l.sw  48(r1), r12
34  l.sw  52(r1), r13
35  l.sw  56(r1), r14
36  l.sw  60(r1), r15
37  l.sw  64(r1), r16
38  l.sw  68(r1), r17
39  l.sw  72(r1), r18
40  l.sw  76(r1), r19
41  l.sw  80(r1), r20
42  l.sw  84(r1), r21
43  l.sw  88(r1), r22
44  l.sw  92(r1), r23
45  l.sw  96(r1), r24
46  l.sw  100(r1), r25
47  l.sw  104(r1), r26
48  l.sw  108(r1), r27
49  l.sw  112(r1), r28
50  l.sw  116(r1), r29
51  l.sw  120(r1), r30
52  l.sw  124(r1), r31
53
54  /* Fill */
55
56  /* r13 is used for temporary values */
57  l.add r13, r0, r0
58
59  /* r31 contains the stack pointer */
60  l.add r31, r1, r0
61
62.macro fill_register reg
63  l.addi        r13, r13, 1
64  l.addi        \reg, r13, 0
65.endm
66
67  fill_register r2
68  fill_register r3
69  fill_register r4
70  fill_register r5
71  fill_register r6
72  fill_register r7
73  fill_register r8
74  fill_register r9
75  fill_register r10
76  fill_register r11
77  fill_register r12
78  fill_register r13
79  fill_register r14
80  fill_register r15
81  fill_register r16
82  fill_register r17
83  fill_register r18
84  fill_register r19
85  fill_register r20
86  fill_register r21
87  fill_register r22
88  fill_register r23
89  fill_register r24
90  fill_register r25
91  fill_register r26
92  fill_register r27
93  fill_register r28
94  fill_register r29
95  fill_register r30
96  fill_register r31
97
98        /* Check */
99check:
100
101.macro check_register reg
102        l.addi r13, r13, 1
103        l.sfne \reg, r13
104        l.bf   restore
105        l.nop
106.endm
107
108        l.sfne r31, r1
109        l.bf restore
110        l.nop
111
112        l.addi r13, r0, 0
113
114        check_register  r2
115        check_register  r3
116        check_register  r4
117        check_register  r5
118        check_register  r6
119        check_register  r7
120        check_register  r8
121        check_register  r9
122        check_register  r10
123  check_register        r11
124  check_register        r12
125  check_register        r13
126  check_register        r14
127  check_register        r15
128  check_register        r16
129  check_register        r17
130  check_register        r18
131  check_register        r19
132  check_register        r20
133        check_register  r21
134        check_register  r22
135        check_register  r23
136        check_register  r24
137        check_register  r25
138        check_register  r26
139        check_register  r27
140        check_register  r28
141        check_register  r29
142        check_register  r30
143        check_register  r31
144
145        l.j check
146        l.nop
147
148/* Restore */
149restore:
150
151  l.lwz  r2,  8(r1)
152  l.lwz  r3,  12(r1)
153  l.lwz  r4,  16(r1)
154  l.lwz  r5,  20(r1)
155  l.lwz  r6,  24(r1)
156  l.lwz  r7,  28(r1)
157  l.lwz  r8,  32(r1)
158  l.lwz  r9,  36(r1)
159  l.lwz  r10, 40(r1)
160  l.lwz  r11, 44(r1)
161  l.lwz  r12, 48(r1)
162  l.lwz  r13, 52(r1)
163  l.lwz  r14, 56(r1)
164  l.lwz  r15, 60(r1)
165  l.lwz  r16, 64(r1)
166  l.lwz  r17, 68(r1)
167  l.lwz  r18, 72(r1)
168  l.lwz  r19, 76(r1)
169  l.lwz  r20, 80(r1)
170  l.lwz  r21, 84(r1)
171  l.lwz  r22, 88(r1)
172  l.lwz  r23, 92(r1)
173  l.lwz  r24, 96(r1)
174  l.lwz  r25, 100(r1)
175  l.lwz  r26, 104(r1)
176  l.lwz  r27, 108(r1)
177  l.lwz  r28, 112(r1)
178  l.lwz  r29, 116(r1)
179  l.lwz  r30, 120(r1)
180  l.lwz  r31, 124(r1)
181
182  l.addi r1, r1, 140
183
184  l.jr r9
185  l.nop
Note: See TracBrowser for help on using the repository browser.