Skip to content

Commit

Permalink
Fix compilation issue of IA32_flat port (#1122)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
kar-rahul-aws and aggarg committed Aug 19, 2024
1 parent 294569e commit 49e8831
Showing 1 changed file with 71 additions and 74 deletions.
145 changes: 71 additions & 74 deletions portable/GCC/IA32_flat/ISR_Support.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 49e8831

Please sign in to comment.