;/*
; * FreeRTOS Kernel <DEVELOPMENT BRANCH>
; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
; *
; * SPDX-License-Identifier: MIT
; *
; * Permission is hereby granted, free of charge, to any person obtaining a copy of
; * this software and associated documentation files (the "Software"), to deal in
; * the Software without restriction, including without limitation the rights to
; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; * the Software, and to permit persons to whom the Software is furnished to do so,
; * subject to the following conditions:
; *
; * The above copyright notice and this permission notice shall be included in all
; * copies or substantial portions of the Software.
; *
; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
; *
; * https://www.FreeRTOS.org
; * https://github.com/FreeRTOS
; *
; */

    .import _pxCurrentTCB
    .import _vTaskSwitchContext
    .import _xTaskIncrementTick

    .export _vPortStartFirstTask
    .export _ulPortGetGBR
    .export _vPortYieldHandler
    .export _vPortPreemptiveTick
    .export _vPortCooperativeTick
    .export _vPortSaveFlopRegisters
    .export _vPortRestoreFlopRegisters

    .section    P

    .INCLUDE "ISR_Support.inc"

_vPortStartFirstTask:

    portRESTORE_CONTEXT

;-----------------------------------------------------------

_vPortYieldHandler:

    portSAVE_CONTEXT

    mov.l   #_vTaskSwitchContext, r0
    jsr     @r0
    nop

    portRESTORE_CONTEXT

;-----------------------------------------------------------

_vPortPreemptiveTick

    portSAVE_CONTEXT

    mov.l   #_xTaskIncrementTick, r0
    jsr     @r0
    nop

    mov.l   #_vTaskSwitchContext, r0
    jsr     @r0
    nop

    portRESTORE_CONTEXT

;-----------------------------------------------------------

_vPortCooperativeTick

    portSAVE_CONTEXT

    mov.l   #_xTaskIncrementTick, r0
    jsr     @r0
    nop

    portRESTORE_CONTEXT

;-----------------------------------------------------------

_ulPortGetGBR:

    stc.l   gbr, r0
    rts
    nop

;-----------------------------------------------------------

_vPortSaveFlopRegisters:

    fmov.s  fr0, @-r4
    fmov.s  fr1, @-r4
    fmov.s  fr2, @-r4
    fmov.s  fr3, @-r4
    fmov.s  fr4, @-r4
    fmov.s  fr5, @-r4
    fmov.s  fr6, @-r4
    fmov.s  fr7, @-r4
    fmov.s  fr8, @-r4
    fmov.s  fr9, @-r4
    fmov.s  fr10, @-r4
    fmov.s  fr11, @-r4
    fmov.s  fr12, @-r4
    fmov.s  fr13, @-r4
    fmov.s  fr14, @-r4
    fmov.s  fr15, @-r4
    sts.l   fpul, @-r4
    sts.l   fpscr, @-r4

    rts
    nop

;-----------------------------------------------------------

_vPortRestoreFlopRegisters:

    add.l  #-72, r4
    lds.l  @r4+, fpscr
    lds.l  @r4+, fpul
    fmov.s @r4+, fr15
    fmov.s @r4+, fr14
    fmov.s @r4+, fr13
    fmov.s @r4+, fr12
    fmov.s @r4+, fr11
    fmov.s @r4+, fr10
    fmov.s @r4+, fr9
    fmov.s @r4+, fr8
    fmov.s @r4+, fr7
    fmov.s @r4+, fr6
    fmov.s @r4+, fr5
    fmov.s @r4+, fr4
    fmov.s @r4+, fr3
    fmov.s @r4+, fr2
    fmov.s @r4+, fr1
    fmov.s @r4+, fr0

    rts
    nop

    .end
