kernel/eka/nkernsmp/arm/vectors.cia
changeset 293 0659d0e1a03c
parent 90 947f0dc9f7a8
equal deleted inserted replaced
291:206a6eaaeb71 293:0659d0e1a03c
   135 	__ASM_CLI();							// all interrupts off
   135 	__ASM_CLI();							// all interrupts off
   136 	SRSDBW(MODE_SVC);						// save return address and return CPSR to supervisor stack
   136 	SRSDBW(MODE_SVC);						// save return address and return CPSR to supervisor stack
   137 	asm("sub	sp, sp, #%a0" : : "i" _FOFF(SThreadExcStack,iR15));
   137 	asm("sub	sp, sp, #%a0" : : "i" _FOFF(SThreadExcStack,iR15));
   138 	asm("stmia	sp, {r0-r14}^ ");			// save R0-R12, R13_usr, R14_usr
   138 	asm("stmia	sp, {r0-r14}^ ");			// save R0-R12, R13_usr, R14_usr
   139 	asm("mov	r4, #%a0" : : "i" ((TInt)SThreadExcStack::ESvc));
   139 	asm("mov	r4, #%a0" : : "i" ((TInt)SThreadExcStack::ESvc));
       
   140 	asm("ldr	r12, [lr, #-4] ");			// get SWI opcode
   140 	USER_MEMORY_GUARD_ON_IF_MODE_USR(r11);
   141 	USER_MEMORY_GUARD_ON_IF_MODE_USR(r11);
   141 	asm("ldr	r12, [lr, #-4] ");			// get SWI opcode
       
   142 	GET_RWNO_TID(,r11);
   142 	GET_RWNO_TID(,r11);
   143 	asm("str	r4, [sp, #%a0]" : : "i" _FOFF(SThreadExcStack,iExcCode));	// word describing exception type
   143 	asm("str	r4, [sp, #%a0]" : : "i" _FOFF(SThreadExcStack,iExcCode));	// word describing exception type
   144 	asm("movs	r12, r12, lsl #9 ");		// 512*SWI number into r12
   144 	asm("movs	r12, r12, lsl #9 ");		// 512*SWI number into r12
   145 	asm("adr	lr, fast_swi_exit ");
   145 	asm("adr	lr, fast_swi_exit ");
   146 	asm("ldr	r9, [r11, #%a0]" : : "i" _FOFF(TSubScheduler,iCurrentThread));
   146 	asm("ldr	r9, [r11, #%a0]" : : "i" _FOFF(TSubScheduler,iCurrentThread));