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
0034 #define FRAME_OFFSET_R16 0
0035 #define FRAME_OFFSET_R17 4
0036 #define FRAME_OFFSET_R18 8
0037 #define FRAME_OFFSET_R19 12
0038 #define FRAME_OFFSET_R20 16
0039 #define FRAME_OFFSET_R21 20
0040 #define FRAME_OFFSET_R22 24
0041 #define FRAME_OFFSET_R23 28
0042 #define FRAME_OFFSET_FP 32
0043 #define FRAME_OFFSET_RA 36
0044
0045 #define FRAME_SIZE (FRAME_OFFSET_RA + 4)
0046
0047 .set noat
0048 .section .text
0049
0050 .global _CPU_Context_validate
0051
0052 _CPU_Context_validate:
0053
0054
0055 subi sp, sp, FRAME_SIZE
0056 stw r16, FRAME_OFFSET_R16(sp)
0057 stw r17, FRAME_OFFSET_R17(sp)
0058 stw r18, FRAME_OFFSET_R18(sp)
0059 stw r19, FRAME_OFFSET_R19(sp)
0060 stw r20, FRAME_OFFSET_R20(sp)
0061 stw r21, FRAME_OFFSET_R21(sp)
0062 stw r22, FRAME_OFFSET_R22(sp)
0063 stw r23, FRAME_OFFSET_R23(sp)
0064 stw fp, FRAME_OFFSET_FP(sp)
0065 stw ra, FRAME_OFFSET_RA(sp)
0066
0067
0068
0069
0070 mov at, sp
0071
0072
0073
0074 subi r3, r4, 1
0075 addi r5, r4, 1
0076 addi r6, r4, 2
0077 addi r7, r4, 3
0078 addi r8, r4, 4
0079 addi r9, r4, 5
0080 addi r10, r4, 6
0081 addi r11, r4, 7
0082 addi r12, r4, 8
0083 addi r13, r4, 9
0084 addi r14, r4, 10
0085 addi r15, r4, 11
0086 addi r16, r4, 12
0087 addi r17, r4, 13
0088 addi r18, r4, 14
0089 addi r19, r4, 15
0090 addi r20, r4, 16
0091 addi r21, r4, 17
0092 addi r22, r4, 18
0093 addi r23, r4, 19
0094 addi fp, r4, 20
0095 addi ra, r4, 21
0096
0097
0098 check:
0099 bne sp, at, restore
0100 subi r2, r4, 1
0101 bne r2, r3, restore
0102 addi r2, r4, 1
0103 bne r2, r5, restore
0104 addi r2, r4, 2
0105 bne r2, r6, restore
0106 addi r2, r4, 3
0107 bne r2, r7, restore
0108 addi r2, r4, 4
0109 bne r2, r8, restore
0110 addi r2, r4, 5
0111 bne r2, r9, restore
0112 addi r2, r4, 6
0113 bne r2, r10, restore
0114 addi r2, r4, 7
0115 bne r2, r11, restore
0116 addi r2, r4, 8
0117 bne r2, r12, restore
0118 addi r2, r4, 9
0119 bne r2, r13, restore
0120 addi r2, r4, 10
0121 bne r2, r14, restore
0122 addi r2, r4, 11
0123 bne r2, r15, restore
0124 addi r2, r4, 12
0125 bne r2, r16, restore
0126 addi r2, r4, 13
0127 bne r2, r17, restore
0128 addi r2, r4, 14
0129 bne r2, r18, restore
0130 addi r2, r4, 15
0131 bne r2, r19, restore
0132 addi r2, r4, 16
0133 bne r2, r20, restore
0134 addi r2, r4, 17
0135 bne r2, r21, restore
0136 addi r2, r4, 18
0137 bne r2, r22, restore
0138 addi r2, r4, 19
0139 bne r2, r23, restore
0140 addi r2, r4, 20
0141 bne r2, fp, restore
0142 addi r2, r4, 21
0143 bne r2, ra, restore
0144 br check
0145
0146
0147 restore:
0148 ldw ra, FRAME_OFFSET_RA(sp)
0149 ldw fp, FRAME_OFFSET_FP(sp)
0150 ldw r23, FRAME_OFFSET_R23(sp)
0151 ldw r22, FRAME_OFFSET_R22(sp)
0152 ldw r21, FRAME_OFFSET_R21(sp)
0153 ldw r20, FRAME_OFFSET_R20(sp)
0154 ldw r19, FRAME_OFFSET_R19(sp)
0155 ldw r18, FRAME_OFFSET_R18(sp)
0156 ldw r17, FRAME_OFFSET_R17(sp)
0157 ldw r16, FRAME_OFFSET_R16(sp)
0158 addi sp, sp, FRAME_SIZE
0159 ret