mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 02:59:01 +01:00 
			
		
		
		
	Fix compilation issue of IA32_flat port (#1122)
* Fix compilation issue of IAR32 port * Add new line at EOF * Fix header check --------- Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									294569e495
								
							
						
					
					
						commit
						49e88310be
					
				@ -26,106 +26,103 @@
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
.extern ulTopOfSystemStack
 | 
			
		||||
   .extern ulInterruptNesting
 | 
			
		||||
    .extern ulTopOfSystemStack
 | 
			
		||||
    .extern ulInterruptNesting
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
   .macro portFREERTOS_INTERRUPT_ENTRY
 | 
			
		||||
.macro portFREERTOS_INTERRUPT_ENTRY
 | 
			
		||||
 | 
			
		||||
/* Save general purpose registers. */
 | 
			
		||||
pusha
 | 
			
		||||
    /* Save general purpose registers. */
 | 
			
		||||
    pusha
 | 
			
		||||
 | 
			
		||||
/* If ulInterruptNesting is zero the rest of the task context will need
 | 
			
		||||
 * saving and a stack switch might be required. */
 | 
			
		||||
movl ulInterruptNesting, % eax
 | 
			
		||||
test % eax, % eax
 | 
			
		||||
jne     2f
 | 
			
		||||
    /* If ulInterruptNesting is zero the rest of the task context will need
 | 
			
		||||
    saving and a stack switch might be required. */
 | 
			
		||||
    movl    ulInterruptNesting, %eax
 | 
			
		||||
    test    %eax, %eax
 | 
			
		||||
    jne     2f
 | 
			
		||||
 | 
			
		||||
/* Interrupts are not nested, so save the rest of the task context. */
 | 
			
		||||
   .
 | 
			
		||||
    /* Interrupts are not nested, so save the rest of the task context. */
 | 
			
		||||
    .if configSUPPORT_FPU == 1
 | 
			
		||||
 | 
			
		||||
   if configSUPPORT_FPU == 1
 | 
			
		||||
        /* If the task has a buffer allocated to save the FPU context then
 | 
			
		||||
        save the FPU context now. */
 | 
			
		||||
        movl    pucPortTaskFPUContextBuffer, %eax
 | 
			
		||||
        test    %eax, %eax
 | 
			
		||||
        je      1f
 | 
			
		||||
        fnsave  ( %eax ) /* Save FLOP context into ucTempFPUBuffer array. */
 | 
			
		||||
        fwait
 | 
			
		||||
 | 
			
		||||
/* If the task has a buffer allocated to save the FPU context then
 | 
			
		||||
 * save the FPU context now. */
 | 
			
		||||
movl pucPortTaskFPUContextBuffer, % eax
 | 
			
		||||
test % eax, % eax
 | 
			
		||||
je      1f
 | 
			
		||||
fnsave( % eax ) /* Save FLOP context into ucTempFPUBuffer array. */
 | 
			
		||||
fwait
 | 
			
		||||
        1:
 | 
			
		||||
        /* Save the address of the FPU context, if any. */
 | 
			
		||||
        push    pucPortTaskFPUContextBuffer
 | 
			
		||||
 | 
			
		||||
1 :
 | 
			
		||||
/* Save the address of the FPU context, if any. */
 | 
			
		||||
push pucPortTaskFPUContextBuffer
 | 
			
		||||
    .endif /* configSUPPORT_FPU */
 | 
			
		||||
 | 
			
		||||
   .endif /* configSUPPORT_FPU */
 | 
			
		||||
    /* Find the TCB. */
 | 
			
		||||
    movl    pxCurrentTCB, %eax
 | 
			
		||||
 | 
			
		||||
/* Find the TCB. */
 | 
			
		||||
movl pxCurrentTCB, % eax
 | 
			
		||||
    /* Stack location is first item in the TCB. */
 | 
			
		||||
    movl    %esp, (%eax)
 | 
			
		||||
 | 
			
		||||
/* Stack location is first item in the TCB. */
 | 
			
		||||
     movl % esp, ( % eax )
 | 
			
		||||
    /* Switch stacks. */
 | 
			
		||||
    movl    ulTopOfSystemStack, %esp
 | 
			
		||||
    movl    %esp, %ebp
 | 
			
		||||
 | 
			
		||||
/* Switch stacks. */
 | 
			
		||||
movl ulTopOfSystemStack, % esp
 | 
			
		||||
movl % esp, % ebp
 | 
			
		||||
    2:
 | 
			
		||||
    /* Increment nesting count. */
 | 
			
		||||
    add     $1, ulInterruptNesting
 | 
			
		||||
 | 
			
		||||
2 :
 | 
			
		||||
/* Increment nesting count. */
 | 
			
		||||
add $1, ulInterruptNesting
 | 
			
		||||
 | 
			
		||||
   .endm
 | 
			
		||||
.endm
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
   .macro portINTERRUPT_EPILOGUE
 | 
			
		||||
.macro portINTERRUPT_EPILOGUE
 | 
			
		||||
 | 
			
		||||
cli
 | 
			
		||||
sub $1, ulInterruptNesting
 | 
			
		||||
    cli
 | 
			
		||||
    sub     $1, ulInterruptNesting
 | 
			
		||||
 | 
			
		||||
/* If the nesting has unwound to zero. */
 | 
			
		||||
movl ulInterruptNesting, % eax
 | 
			
		||||
     test % eax, % eax
 | 
			
		||||
     jne     2f
 | 
			
		||||
    /* If the nesting has unwound to zero. */
 | 
			
		||||
    movl    ulInterruptNesting, %eax
 | 
			
		||||
    test    %eax, %eax
 | 
			
		||||
    jne     2f
 | 
			
		||||
 | 
			
		||||
/* If a yield was requested then select a new TCB now. */
 | 
			
		||||
movl ulPortYieldPending, % eax
 | 
			
		||||
     test % eax, % eax
 | 
			
		||||
     je      1f
 | 
			
		||||
movl $0, ulPortYieldPending
 | 
			
		||||
call vTaskSwitchContext
 | 
			
		||||
    /* If a yield was requested then select a new TCB now. */
 | 
			
		||||
    movl    ulPortYieldPending, %eax
 | 
			
		||||
    test    %eax, %eax
 | 
			
		||||
    je      1f
 | 
			
		||||
    movl    $0, ulPortYieldPending
 | 
			
		||||
    call    vTaskSwitchContext
 | 
			
		||||
 | 
			
		||||
1 :
 | 
			
		||||
/* Stack location is first item in the TCB. */
 | 
			
		||||
movl pxCurrentTCB, % eax movl( % eax ), % esp
 | 
			
		||||
    1:
 | 
			
		||||
    /* Stack location is first item in the TCB. */
 | 
			
		||||
    movl    pxCurrentTCB, %eax
 | 
			
		||||
    movl    (%eax), %esp
 | 
			
		||||
 | 
			
		||||
   .
 | 
			
		||||
    .if configSUPPORT_FPU == 1
 | 
			
		||||
 | 
			
		||||
   if configSUPPORT_FPU == 1
 | 
			
		||||
        /* Restore address of task's FPU context buffer. */
 | 
			
		||||
        pop     pucPortTaskFPUContextBuffer
 | 
			
		||||
 | 
			
		||||
/* Restore address of task's FPU context buffer. */
 | 
			
		||||
pop pucPortTaskFPUContextBuffer
 | 
			
		||||
        /* If the task has a buffer allocated in which its FPU context is saved,
 | 
			
		||||
        then restore it now. */
 | 
			
		||||
        movl    pucPortTaskFPUContextBuffer, %eax
 | 
			
		||||
        test    %eax, %eax
 | 
			
		||||
        je      1f
 | 
			
		||||
        frstor  ( %eax )
 | 
			
		||||
        1:
 | 
			
		||||
    .endif
 | 
			
		||||
 | 
			
		||||
/* If the task has a buffer allocated in which its FPU context is saved,
 | 
			
		||||
 * then restore it now. */
 | 
			
		||||
movl pucPortTaskFPUContextBuffer, % eax
 | 
			
		||||
test % eax, % eax
 | 
			
		||||
je      1f
 | 
			
		||||
frstor( % eax )
 | 
			
		||||
1 :
 | 
			
		||||
.endif
 | 
			
		||||
    2:
 | 
			
		||||
    popa
 | 
			
		||||
 | 
			
		||||
2 :
 | 
			
		||||
popa
 | 
			
		||||
 | 
			
		||||
   .endm
 | 
			
		||||
.endm
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
   .macro portFREERTOS_INTERRUPT_EXIT
 | 
			
		||||
.macro portFREERTOS_INTERRUPT_EXIT
 | 
			
		||||
 | 
			
		||||
portINTERRUPT_EPILOGUE
 | 
			
		||||
/* EOI. */
 | 
			
		||||
movl $0x00, ( 0xFEE000B0 )
 | 
			
		||||
iret
 | 
			
		||||
    portINTERRUPT_EPILOGUE
 | 
			
		||||
    /* EOI. */
 | 
			
		||||
    movl    $0x00, (0xFEE000B0)
 | 
			
		||||
    iret
 | 
			
		||||
 | 
			
		||||
   .endm
 | 
			
		||||
.endm
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user