You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
452 lines
8.4 KiB
Plaintext
452 lines
8.4 KiB
Plaintext
;/*
|
|
; * FreeRTOS Kernel V10.1.1
|
|
; * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
; *
|
|
; * 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.
|
|
; *
|
|
; * http://www.FreeRTOS.org
|
|
; * http://aws.amazon.com/freertos
|
|
; *
|
|
; * 1 tab == 4 spaces!
|
|
; */
|
|
|
|
.import _ulRegTest1CycleCount
|
|
.import _ulRegTest2CycleCount
|
|
.import _vPortYield
|
|
|
|
.export _vRegTest1Task
|
|
.export _vRegTest2Task
|
|
|
|
.section P, code, align=4
|
|
|
|
|
|
|
|
_vRegTest1Task:
|
|
|
|
; Fill the registers with known values.
|
|
mov #2, r1
|
|
mov #3, r2
|
|
mov #4, r3
|
|
mov #5, r4
|
|
mov #6, r5
|
|
mov #7, r6
|
|
mov #8, r7
|
|
mov #9, r8
|
|
mov #10, r9
|
|
mov #11, r10
|
|
mov #12, r11
|
|
mov #13, r12
|
|
mov #14, r13
|
|
mov #15, r14
|
|
|
|
mov #16, r0
|
|
lds r0, macl
|
|
mov #17, r0
|
|
lds r0, mach
|
|
mov #18, r0
|
|
ldc r0, gbr
|
|
|
|
; Also fill the flop registers with known values.
|
|
lds r1, fpul
|
|
fsts fpul, fr1
|
|
lds r2, fpul
|
|
fsts fpul, fr2
|
|
lds r3, fpul
|
|
fsts fpul, fr3
|
|
lds r4, fpul
|
|
fsts fpul, fr4
|
|
lds r5, fpul
|
|
fsts fpul, fr5
|
|
lds r6, fpul
|
|
fsts fpul, fr6
|
|
lds r7, fpul
|
|
fsts fpul, fr7
|
|
lds r8, fpul
|
|
fsts fpul, fr8
|
|
lds r9, fpul
|
|
fsts fpul, fr9
|
|
lds r10, fpul
|
|
fsts fpul, fr10
|
|
lds r11, fpul
|
|
fsts fpul, fr11
|
|
lds r12, fpul
|
|
fsts fpul, fr12
|
|
lds r13, fpul
|
|
fsts fpul, fr13
|
|
lds r14, fpul
|
|
fsts fpul, fr14
|
|
|
|
_vRegTest1Loop:
|
|
|
|
; Reset r1 which was used in the tests.
|
|
mov #2, r1
|
|
|
|
; Test that the registers still contain the expected values. If not, jump to
|
|
; vRegTestError, which will stop this function looping and so cause it to stop
|
|
; incrementing its loop counter. Both the standard and flop registers are
|
|
; checked.
|
|
mov #2, r0
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
flds fr1, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #3, r0
|
|
cmp/eq r0, r2
|
|
bf _vRegTest1Error
|
|
flds fr2, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #4, r0
|
|
cmp/eq r0, r3
|
|
bf _vRegTest1Error
|
|
flds fr3, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #5, r0
|
|
cmp/eq r0, r4
|
|
bf _vRegTest1Error
|
|
flds fr4, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #6, r0
|
|
cmp/eq r0, r5
|
|
bf _vRegTest1Error
|
|
flds fr5, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #7, r0
|
|
cmp/eq r0, r6
|
|
bf _vRegTest1Error
|
|
flds fr6, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #8, r0
|
|
cmp/eq r0, r7
|
|
bf _vRegTest1Error
|
|
flds fr7, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #9, r0
|
|
cmp/eq r0, r8
|
|
bf _vRegTest1Error
|
|
flds fr8, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #10, r0
|
|
cmp/eq r0, r9
|
|
bf _vRegTest1Error
|
|
flds fr9, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #11, r0
|
|
cmp/eq r0, r10
|
|
bf _vRegTest1Error
|
|
flds fr10, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #12, r0
|
|
cmp/eq r0, r11
|
|
bf _vRegTest1Error
|
|
flds fr11, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #13, r0
|
|
cmp/eq r0, r12
|
|
bf _vRegTest1Error
|
|
flds fr12, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #14, r0
|
|
cmp/eq r0, r13
|
|
bf _vRegTest1Error
|
|
flds fr13, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
mov #15, r0
|
|
cmp/eq r0, r14
|
|
bf _vRegTest1Error
|
|
flds fr14, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
sts macl, r0
|
|
mov #16, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
sts mach, r0
|
|
mov #17, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
stc gbr, r0
|
|
mov #18, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest1Error
|
|
|
|
; Increment the loop counter to indicate that this task is still running and
|
|
; still healthy.
|
|
mov.l #_ulRegTest1CycleCount, r0
|
|
mov.l @r0, r1
|
|
add #1, r1
|
|
mov.l r1, @r0
|
|
|
|
; Jump back to test all the registers again.
|
|
bra _vRegTest1Loop
|
|
nop
|
|
|
|
;-----------------------------------------------------------
|
|
|
|
_vRegTest1Error:
|
|
bra _vRegTest1Error
|
|
nop
|
|
|
|
;-----------------------------------------------------------
|
|
|
|
_vRegTest2Task:
|
|
|
|
; Fill the standard registers with known values.
|
|
mov #12, r1
|
|
mov #13, r2
|
|
mov #14, r3
|
|
mov #15, r4
|
|
mov #16, r5
|
|
mov #17, r6
|
|
mov #18, r7
|
|
mov #19, r8
|
|
mov #110, r9
|
|
mov #111, r10
|
|
mov #112, r11
|
|
mov #113, r12
|
|
mov #114, r13
|
|
|
|
mov #115, r0
|
|
lds r0, macl
|
|
mov #116, r0
|
|
lds r0, mach
|
|
mov #117, r0
|
|
ldc r0, gbr
|
|
|
|
; Also fill the flop registers with known values.
|
|
lds r1, fpul
|
|
fsts fpul, fr1
|
|
lds r2, fpul
|
|
fsts fpul, fr2
|
|
lds r3, fpul
|
|
fsts fpul, fr3
|
|
lds r4, fpul
|
|
fsts fpul, fr4
|
|
lds r5, fpul
|
|
fsts fpul, fr5
|
|
lds r6, fpul
|
|
fsts fpul, fr6
|
|
lds r7, fpul
|
|
fsts fpul, fr7
|
|
lds r8, fpul
|
|
fsts fpul, fr8
|
|
lds r9, fpul
|
|
fsts fpul, fr9
|
|
lds r10, fpul
|
|
fsts fpul, fr10
|
|
lds r11, fpul
|
|
fsts fpul, fr11
|
|
lds r12, fpul
|
|
fsts fpul, fr12
|
|
lds r13, fpul
|
|
fsts fpul, fr13
|
|
lds r14, fpul
|
|
fsts fpul, fr14
|
|
|
|
_vRegTest2Loop:
|
|
|
|
; Reset r1 which was used in the tests.
|
|
mov #12, r1
|
|
|
|
; Test that the registers still contain the expected values. If not, jump to
|
|
; vRegTestError, which will stop this function looping and so cause it to stop
|
|
; incrementing its loop counter. Both the standard and flop registers are
|
|
; checked.
|
|
mov #12, r0
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
flds fr1, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #13, r0
|
|
cmp/eq r0, r2
|
|
bf _vRegTest2Error
|
|
flds fr2, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #14, r0
|
|
cmp/eq r0, r3
|
|
bf _vRegTest2Error
|
|
flds fr3, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #15, r0
|
|
cmp/eq r0, r4
|
|
bf _vRegTest2Error
|
|
flds fr4, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #16, r0
|
|
cmp/eq r0, r5
|
|
bf _vRegTest2Error
|
|
flds fr5, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #17, r0
|
|
cmp/eq r0, r6
|
|
bf _vRegTest2Error
|
|
flds fr6, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #18, r0
|
|
cmp/eq r0, r7
|
|
bf _vRegTest2Error
|
|
flds fr7, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #19, r0
|
|
cmp/eq r0, r8
|
|
bf _vRegTest2Error
|
|
flds fr8, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #110, r0
|
|
cmp/eq r0, r9
|
|
bf _vRegTest2Error
|
|
flds fr9, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #111, r0
|
|
cmp/eq r0, r10
|
|
bf _vRegTest2Error
|
|
flds fr10, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #112, r0
|
|
cmp/eq r0, r11
|
|
bf _vRegTest2Error
|
|
flds fr11, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #113, r0
|
|
cmp/eq r0, r12
|
|
bf _vRegTest2Error
|
|
flds fr12, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
mov #114, r0
|
|
cmp/eq r0, r13
|
|
bf _vRegTest2Error
|
|
flds fr13, fpul
|
|
sts fpul, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
sts macl, r0
|
|
mov #115, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
sts mach, r0
|
|
mov #116, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
stc gbr, r0
|
|
mov #117, r1
|
|
cmp/eq r0, r1
|
|
bf _vRegTest2Error
|
|
|
|
; Increment the loop counter to indicate that this task is still running and
|
|
; still healthy.
|
|
mov.l #_ulRegTest2CycleCount, r0
|
|
mov.l @r0, r1
|
|
add #1, r1
|
|
mov.l r1, @r0
|
|
|
|
; Jump back to test all the registers again.
|
|
bra _vRegTest2Loop
|
|
nop
|
|
|
|
;-----------------------------------------------------------
|
|
|
|
_vRegTest2Error:
|
|
|
|
bra _vRegTest2Error
|
|
nop
|
|
|
|
|
|
.end
|
|
|