Changes in kernel/arch/ppc32/src/asm.S [b66cc97:9d58539] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/asm.S
rb66cc97 r9d58539 27 27 */ 28 28 29 #include <abi/asmtool.h>30 29 #include <arch/asm/regname.h> 31 30 #include <arch/msr.h> 32 #include <arch/istate_struct.h>33 31 34 32 .text 35 33 36 FUNCTION_BEGIN(userspace_asm) 34 .global userspace_asm 35 .global iret 36 .global iret_syscall 37 .global memcpy_from_uspace 38 .global memcpy_to_uspace 39 .global memcpy_from_uspace_failover_address 40 .global memcpy_to_uspace_failover_address 41 .global early_putchar 42 43 userspace_asm: 44 37 45 /* 38 46 * r3 = uspace_uarg … … 46 54 rlwinm r31, r31, 0, 17, 15 47 55 mtmsr r31 48 isync49 56 50 57 /* Set entry point */ … … 52 59 mtsrr0 r5 53 60 54 /* Set pr ivilegedstate, enable interrupts */61 /* Set problem state, enable interrupts */ 55 62 56 63 ori r31, r31, MSR_PR … … 69 76 70 77 rfi 71 FUNCTION_END(userspace_asm) 72 73 SYMBOL(iret) 78 79 iret: 80 74 81 /* Disable interrupts */ 75 82 … … 77 84 rlwinm r31, r31, 0, 17, 15 78 85 mtmsr r31 79 isync 80 81 lwz r0, ISTATE_OFFSET_R0(sp) 82 lwz r2, ISTATE_OFFSET_R2(sp) 83 lwz r3, ISTATE_OFFSET_R3(sp) 84 lwz r4, ISTATE_OFFSET_R4(sp) 85 lwz r5, ISTATE_OFFSET_R5(sp) 86 lwz r6, ISTATE_OFFSET_R6(sp) 87 lwz r7, ISTATE_OFFSET_R7(sp) 88 lwz r8, ISTATE_OFFSET_R8(sp) 89 lwz r9, ISTATE_OFFSET_R9(sp) 90 lwz r10, ISTATE_OFFSET_R10(sp) 91 lwz r11, ISTATE_OFFSET_R11(sp) 92 lwz r13, ISTATE_OFFSET_R13(sp) 93 lwz r14, ISTATE_OFFSET_R14(sp) 94 lwz r15, ISTATE_OFFSET_R15(sp) 95 lwz r16, ISTATE_OFFSET_R16(sp) 96 lwz r17, ISTATE_OFFSET_R17(sp) 97 lwz r18, ISTATE_OFFSET_R18(sp) 98 lwz r19, ISTATE_OFFSET_R19(sp) 99 lwz r20, ISTATE_OFFSET_R20(sp) 100 lwz r21, ISTATE_OFFSET_R21(sp) 101 lwz r22, ISTATE_OFFSET_R22(sp) 102 lwz r23, ISTATE_OFFSET_R23(sp) 103 lwz r24, ISTATE_OFFSET_R24(sp) 104 lwz r25, ISTATE_OFFSET_R25(sp) 105 lwz r26, ISTATE_OFFSET_R26(sp) 106 lwz r27, ISTATE_OFFSET_R27(sp) 107 lwz r28, ISTATE_OFFSET_R28(sp) 108 lwz r29, ISTATE_OFFSET_R29(sp) 109 lwz r30, ISTATE_OFFSET_R30(sp) 110 lwz r31, ISTATE_OFFSET_R31(sp) 111 112 lwz r12, ISTATE_OFFSET_CR(sp) 86 87 lwz r0, 8(sp) 88 lwz r2, 12(sp) 89 lwz r3, 16(sp) 90 lwz r4, 20(sp) 91 lwz r5, 24(sp) 92 lwz r6, 28(sp) 93 lwz r7, 32(sp) 94 lwz r8, 36(sp) 95 lwz r9, 40(sp) 96 lwz r10, 44(sp) 97 lwz r11, 48(sp) 98 lwz r13, 52(sp) 99 lwz r14, 56(sp) 100 lwz r15, 60(sp) 101 lwz r16, 64(sp) 102 lwz r17, 68(sp) 103 lwz r18, 72(sp) 104 lwz r19, 76(sp) 105 lwz r20, 80(sp) 106 lwz r21, 84(sp) 107 lwz r22, 88(sp) 108 lwz r23, 92(sp) 109 lwz r24, 96(sp) 110 lwz r25, 100(sp) 111 lwz r26, 104(sp) 112 lwz r27, 108(sp) 113 lwz r28, 112(sp) 114 lwz r29, 116(sp) 115 lwz r30, 120(sp) 116 lwz r31, 124(sp) 117 118 lwz r12, 128(sp) 113 119 mtcr r12 114 120 115 lwz r12, ISTATE_OFFSET_PC(sp)121 lwz r12, 132(sp) 116 122 mtsrr0 r12 117 123 118 lwz r12, ISTATE_OFFSET_SRR1(sp)124 lwz r12, 136(sp) 119 125 mtsrr1 r12 120 126 121 lwz r12, ISTATE_OFFSET_LR(sp)127 lwz r12, 140(sp) 122 128 mtlr r12 123 129 124 lwz r12, ISTATE_OFFSET_CTR(sp)130 lwz r12, 144(sp) 125 131 mtctr r12 126 132 127 lwz r12, ISTATE_OFFSET_XER(sp)133 lwz r12, 148(sp) 128 134 mtxer r12 129 135 130 lwz r12, ISTATE_OFFSET_R12(sp)131 lwz sp, ISTATE_OFFSET_SP(sp)136 lwz r12, 156(sp) 137 lwz sp, 160(sp) 132 138 133 139 rfi 134 140 135 SYMBOL(iret_syscall) 141 iret_syscall: 142 143 /* Reset decrementer */ 144 145 li r31, 1000 146 mtdec r31 147 136 148 /* Disable interrupts */ 137 149 … … 139 151 rlwinm r31, r31, 0, 17, 15 140 152 mtmsr r31 141 isync 142 143 lwz r0, ISTATE_OFFSET_R0(sp) 144 lwz r2, ISTATE_OFFSET_R2(sp) 145 lwz r4, ISTATE_OFFSET_R4(sp) 146 lwz r5, ISTATE_OFFSET_R5(sp) 147 lwz r6, ISTATE_OFFSET_R6(sp) 148 lwz r7, ISTATE_OFFSET_R7(sp) 149 lwz r8, ISTATE_OFFSET_R8(sp) 150 lwz r9, ISTATE_OFFSET_R9(sp) 151 lwz r10, ISTATE_OFFSET_R10(sp) 152 lwz r11, ISTATE_OFFSET_R11(sp) 153 lwz r13, ISTATE_OFFSET_R13(sp) 154 lwz r14, ISTATE_OFFSET_R14(sp) 155 lwz r15, ISTATE_OFFSET_R15(sp) 156 lwz r16, ISTATE_OFFSET_R16(sp) 157 lwz r17, ISTATE_OFFSET_R17(sp) 158 lwz r18, ISTATE_OFFSET_R18(sp) 159 lwz r19, ISTATE_OFFSET_R19(sp) 160 lwz r20, ISTATE_OFFSET_R20(sp) 161 lwz r21, ISTATE_OFFSET_R21(sp) 162 lwz r22, ISTATE_OFFSET_R22(sp) 163 lwz r23, ISTATE_OFFSET_R23(sp) 164 lwz r24, ISTATE_OFFSET_R24(sp) 165 lwz r25, ISTATE_OFFSET_R25(sp) 166 lwz r26, ISTATE_OFFSET_R26(sp) 167 lwz r27, ISTATE_OFFSET_R27(sp) 168 lwz r28, ISTATE_OFFSET_R28(sp) 169 lwz r29, ISTATE_OFFSET_R29(sp) 170 lwz r30, ISTATE_OFFSET_R30(sp) 171 lwz r31, ISTATE_OFFSET_R31(sp) 172 173 lwz r12, ISTATE_OFFSET_CR(sp) 153 154 lwz r0, 8(sp) 155 lwz r2, 12(sp) 156 lwz r4, 20(sp) 157 lwz r5, 24(sp) 158 lwz r6, 28(sp) 159 lwz r7, 32(sp) 160 lwz r8, 36(sp) 161 lwz r9, 40(sp) 162 lwz r10, 44(sp) 163 lwz r11, 48(sp) 164 lwz r13, 52(sp) 165 lwz r14, 56(sp) 166 lwz r15, 60(sp) 167 lwz r16, 64(sp) 168 lwz r17, 68(sp) 169 lwz r18, 72(sp) 170 lwz r19, 76(sp) 171 lwz r20, 80(sp) 172 lwz r21, 84(sp) 173 lwz r22, 88(sp) 174 lwz r23, 92(sp) 175 lwz r24, 96(sp) 176 lwz r25, 100(sp) 177 lwz r26, 104(sp) 178 lwz r27, 108(sp) 179 lwz r28, 112(sp) 180 lwz r29, 116(sp) 181 lwz r30, 120(sp) 182 lwz r31, 124(sp) 183 184 lwz r12, 128(sp) 174 185 mtcr r12 175 186 176 lwz r12, ISTATE_OFFSET_PC(sp)187 lwz r12, 132(sp) 177 188 mtsrr0 r12 178 189 179 lwz r12, ISTATE_OFFSET_SRR1(sp)190 lwz r12, 136(sp) 180 191 mtsrr1 r12 181 192 182 lwz r12, ISTATE_OFFSET_LR(sp)193 lwz r12, 140(sp) 183 194 mtlr r12 184 195 185 lwz r12, ISTATE_OFFSET_CTR(sp)196 lwz r12, 144(sp) 186 197 mtctr r12 187 198 188 lwz r12, ISTATE_OFFSET_XER(sp)199 lwz r12, 148(sp) 189 200 mtxer r12 190 201 191 lwz r12, ISTATE_OFFSET_R12(sp)192 lwz sp, ISTATE_OFFSET_SP(sp)202 lwz r12, 156(sp) 203 lwz sp, 160(sp) 193 204 194 205 rfi 195 206 196 FUNCTION_BEGIN(memcpy_from_uspace) 197 FUNCTION_BEGIN(memcpy_to_uspace) 207 memcpy_from_uspace: 208 memcpy_to_uspace: 209 198 210 srwi. r7, r5, 3 199 211 addi r6, r3, -4 … … 256 268 mtctr r7 257 269 b 1b 258 FUNCTION_END(memcpy_from_uspace) 259 FUNCTION_END(memcpy_to_uspace) 260 261 SYMBOL(memcpy_from_uspace_failover_address) 262 SYMBOL(memcpy_to_uspace_failover_address) 270 271 memcpy_from_uspace_failover_address: 272 memcpy_to_uspace_failover_address: 263 273 /* Return zero, failure */ 264 274 xor r3, r3, r3 265 275 blr 266 276 267 FUNCTION_BEGIN(early_putchar) 277 early_putchar: 268 278 blr 269 FUNCTION_END(early_putchar)
Note:
See TracChangeset
for help on using the changeset viewer.