Files
lk/app/tests/float_instructions.S
Travis Geiselbrecht cba9e47987 [license] replace the longer full MIT license with a shorter one
Used scripts/replacelic. Everything seems to build fine.
2019-07-05 17:22:23 -07:00

73 lines
1.2 KiB
ArmAsm

/*
* Copyright (c) 2014 Travis Geiselbrecht
*
* Use of this source code is governed by a MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT
*/
#include <lk/asm.h>
#if ARM_WITH_VFP
.fpu neon
.syntax unified
.macro disable, scratchreg
vmrs \scratchreg, fpexc
bic \scratchreg, #(1<<30)
vmsr fpexc, \scratchreg
.endm
.macro vfp_instructions
disable r12
vadd.f32 s0, s0, s0
disable r12
vadd.f64 d0, d0, d0
disable r12
ldr r0, =float_test_scratch
vldr s0, [r0]
.endm
.macro neon_instructions
disable r12
vadd.f32 q0, q0, q0
disable r12
ldr r0, =float_test_scratch
vld1.f32 { q0 }, [r0]
disable r12
vmov s0, r0
.endm
#if !ARM_ONLY_THUMB
.arm
FUNCTION(float_vfp_arm_instruction_test)
vfp_instructions
bx lr
FUNCTION(float_neon_arm_instruction_test)
neon_instructions
bx lr
#endif
.thumb
FUNCTION(float_vfp_thumb_instruction_test)
vfp_instructions
bx lr
FUNCTION(float_neon_thumb_instruction_test)
neon_instructions
bx lr
.data
LOCAL_DATA(float_test_scratch)
.word 0
.word 0
#endif // ARM_WITH_VFP