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 .global _CPU_Context_volatile_clobber
0036
0037 _CPU_Context_volatile_clobber:
0038
0039 #ifdef PPC_MULTILIB_FPU
0040 .macro CLOBBER_F i
0041 addi r4, r3, 0x100 + \i
0042 stw r4, 32(r1)
0043 addi r4, r3, 0x200 + \i
0044 stw r4, 32 + 4(r1)
0045 lfd \i, 32(r1)
0046 .endm
0047
0048 PPC_REG_STORE_UPDATE r1, -96(r1)
0049
0050
0051 mffs f0
0052 stfd f0, 32(r1)
0053 lwz r0, 36(r1)
0054 nor r3, r0, r0
0055 rlwinm r0, r0, 0, 20, 14
0056 rlwinm r3, r3, 0, 15, 19
0057 or r0, r3, r0
0058 stw r0, 36(r1)
0059 lfd f0, 32(r1)
0060 mtfsf 0xff, f0
0061
0062 CLOBBER_F 0
0063 CLOBBER_F 1
0064 CLOBBER_F 2
0065 CLOBBER_F 3
0066 CLOBBER_F 4
0067 CLOBBER_F 5
0068 CLOBBER_F 6
0069 CLOBBER_F 7
0070 CLOBBER_F 8
0071 CLOBBER_F 9
0072 CLOBBER_F 10
0073 CLOBBER_F 11
0074 CLOBBER_F 12
0075 CLOBBER_F 13
0076 addi r1, r1, 96
0077 #endif
0078
0079 #ifdef PPC_MULTILIB_ALTIVEC
0080 .macro CLOBBER_V i
0081 addi r4, r3, 0x300 + \i
0082 stw r4, 32(r1)
0083 addi r4, r3, 0x400 + \i
0084 stw r4, 32 + 4(r1)
0085 addi r4, r3, 0x500 + \i
0086 stw r4, 32 + 8(r1)
0087 addi r4, r3, 0x600 + \i
0088 stw r4, 32 + 12(r1)
0089 li r4, 32
0090 lvx \i, r1, r4
0091 .endm
0092
0093 PPC_REG_STORE_UPDATE r1, -96(r1)
0094
0095
0096 mfvscr v0
0097 li r3, 44
0098 stvewx v0, r1, r3
0099 lwz r0, 44(r1)
0100 nor r3, r0, r0
0101 rlwinm r0, r0, 0, 0, 30
0102 rlwinm r3, r3, 0, 31, 31
0103 or r0, r3, r0
0104 stw r0, 44(r1)
0105 li r3, 44
0106 lvewx v0, r1, r3
0107 mtvscr v0
0108
0109 CLOBBER_V 0
0110 CLOBBER_V 1
0111 CLOBBER_V 2
0112 CLOBBER_V 3
0113 CLOBBER_V 4
0114 CLOBBER_V 5
0115 CLOBBER_V 6
0116 CLOBBER_V 7
0117 CLOBBER_V 8
0118 CLOBBER_V 9
0119 CLOBBER_V 10
0120 CLOBBER_V 11
0121 CLOBBER_V 12
0122 CLOBBER_V 13
0123 CLOBBER_V 14
0124 CLOBBER_V 15
0125 CLOBBER_V 16
0126 CLOBBER_V 17
0127 CLOBBER_V 18
0128 CLOBBER_V 19
0129 addi r1, r1, 96
0130 #endif
0131
0132 addi r4, r3, 10
0133 rlwinm r4, r4, 0, 20, 7
0134 mfcr r5
0135 rlwinm r5, r5, 0, 8, 19
0136 or r4, r4, r5
0137 mtcr r4
0138 addi r4, r3, 11
0139 mtctr r4
0140 addi r4, r3, 12
0141 mtxer r4
0142 addi r0, r3, 13
0143 addi r4, r3, 1
0144 addi r5, r3, 2
0145 addi r6, r3, 3
0146 addi r7, r3, 4
0147 addi r8, r3, 5
0148 addi r9, r3, 6
0149 addi r10, r3, 7
0150 addi r11, r3, 8
0151 addi r12, r3, 9
0152 blr