File indexing completed on 2025-05-11 08:24:25
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031
0032 #include <rtems/asm.h>
0033 #include <rtems/score/cpu.h>
0034
0035 .section .text
0036
0037 PUBLIC(_CPU_Context_validate)
0038 SYM(_CPU_Context_validate):
0039
0040 l.addi r1, r1, -140
0041
0042 l.sw 8(r1), r2
0043 l.sw 12(r1), r3
0044 l.sw 16(r1), r4
0045 l.sw 20(r1), r5
0046 l.sw 24(r1), r6
0047 l.sw 28(r1), r7
0048 l.sw 32(r1), r8
0049 l.sw 36(r1), r9
0050 l.sw 40(r1), r10
0051 l.sw 44(r1), r11
0052 l.sw 48(r1), r12
0053 l.sw 52(r1), r13
0054 l.sw 56(r1), r14
0055 l.sw 60(r1), r15
0056 l.sw 64(r1), r16
0057 l.sw 68(r1), r17
0058 l.sw 72(r1), r18
0059 l.sw 76(r1), r19
0060 l.sw 80(r1), r20
0061 l.sw 84(r1), r21
0062 l.sw 88(r1), r22
0063 l.sw 92(r1), r23
0064 l.sw 96(r1), r24
0065 l.sw 100(r1), r25
0066 l.sw 104(r1), r26
0067 l.sw 108(r1), r27
0068 l.sw 112(r1), r28
0069 l.sw 116(r1), r29
0070 l.sw 120(r1), r30
0071 l.sw 124(r1), r31
0072
0073
0074
0075
0076 l.add r13, r0, r0
0077
0078
0079 l.add r31, r1, r0
0080
0081 .macro fill_register reg
0082 l.addi r13, r13, 1
0083 l.addi \reg, r13, 0
0084 .endm
0085
0086 fill_register r2
0087 fill_register r3
0088 fill_register r4
0089 fill_register r5
0090 fill_register r6
0091 fill_register r7
0092 fill_register r8
0093 fill_register r9
0094 fill_register r10
0095 fill_register r11
0096 fill_register r12
0097 fill_register r13
0098 fill_register r14
0099 fill_register r15
0100 fill_register r16
0101 fill_register r17
0102 fill_register r18
0103 fill_register r19
0104 fill_register r20
0105 fill_register r21
0106 fill_register r22
0107 fill_register r23
0108 fill_register r24
0109 fill_register r25
0110 fill_register r26
0111 fill_register r27
0112 fill_register r28
0113 fill_register r29
0114 fill_register r30
0115 fill_register r31
0116
0117
0118 check:
0119
0120 .macro check_register reg
0121 l.addi r13, r13, 1
0122 l.sfne \reg, r13
0123 l.bf restore
0124 l.nop
0125 .endm
0126
0127 l.sfne r31, r1
0128 l.bf restore
0129 l.nop
0130
0131 l.addi r13, r0, 0
0132
0133 check_register r2
0134 check_register r3
0135 check_register r4
0136 check_register r5
0137 check_register r6
0138 check_register r7
0139 check_register r8
0140 check_register r9
0141 check_register r10
0142 check_register r11
0143 check_register r12
0144 check_register r13
0145 check_register r14
0146 check_register r15
0147 check_register r16
0148 check_register r17
0149 check_register r18
0150 check_register r19
0151 check_register r20
0152 check_register r21
0153 check_register r22
0154 check_register r23
0155 check_register r24
0156 check_register r25
0157 check_register r26
0158 check_register r27
0159 check_register r28
0160 check_register r29
0161 check_register r30
0162 check_register r31
0163
0164 l.j check
0165 l.nop
0166
0167
0168 restore:
0169
0170 l.lwz r2, 8(r1)
0171 l.lwz r3, 12(r1)
0172 l.lwz r4, 16(r1)
0173 l.lwz r5, 20(r1)
0174 l.lwz r6, 24(r1)
0175 l.lwz r7, 28(r1)
0176 l.lwz r8, 32(r1)
0177 l.lwz r9, 36(r1)
0178 l.lwz r10, 40(r1)
0179 l.lwz r11, 44(r1)
0180 l.lwz r12, 48(r1)
0181 l.lwz r13, 52(r1)
0182 l.lwz r14, 56(r1)
0183 l.lwz r15, 60(r1)
0184 l.lwz r16, 64(r1)
0185 l.lwz r17, 68(r1)
0186 l.lwz r18, 72(r1)
0187 l.lwz r19, 76(r1)
0188 l.lwz r20, 80(r1)
0189 l.lwz r21, 84(r1)
0190 l.lwz r22, 88(r1)
0191 l.lwz r23, 92(r1)
0192 l.lwz r24, 96(r1)
0193 l.lwz r25, 100(r1)
0194 l.lwz r26, 104(r1)
0195 l.lwz r27, 108(r1)
0196 l.lwz r28, 112(r1)
0197 l.lwz r29, 116(r1)
0198 l.lwz r30, 120(r1)
0199 l.lwz r31, 124(r1)
0200
0201 l.addi r1, r1, 140
0202
0203 l.jr r9
0204 l.nop