From 49e88310bec6f54f7cfe9db94edf3fb97e7d4ccc Mon Sep 17 00:00:00 2001 From: Rahul Kar <118818625+kar-rahul-aws@users.noreply.github.com> Date: Mon, 19 Aug 2024 05:37:24 +0000 Subject: [PATCH] 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> --- portable/GCC/IA32_flat/ISR_Support.h | 145 +++++++++++++-------------- 1 file changed, 71 insertions(+), 74 deletions(-) diff --git a/portable/GCC/IA32_flat/ISR_Support.h b/portable/GCC/IA32_flat/ISR_Support.h index 545a8d2363..18e10bf91e 100644 --- a/portable/GCC/IA32_flat/ISR_Support.h +++ b/portable/GCC/IA32_flat/ISR_Support.h @@ -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 - -cli -sub $1, ulInterruptNesting +.macro portINTERRUPT_EPILOGUE -/* If the nesting has unwound to zero. */ -movl ulInterruptNesting, % eax - test % eax, % eax - jne 2f + cli + sub $1, ulInterruptNesting -/* 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 the nesting has unwound to zero. */ + movl ulInterruptNesting, %eax + test %eax, %eax + jne 2f -1 : -/* Stack location is first item in the TCB. */ -movl pxCurrentTCB, % eax movl( % eax ), % esp + /* 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 - 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