1/* 2 * Copyright (c) 2015-2016, Linaro Limited 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include <asm.S> 29#include <kernel/unwind.h> 30 31 .section .text.vfp_asm 32 33/* void vfp_save_extension_regs(uint64_t regs[VFP_NUM_REGS]); */ 34FUNC vfp_save_extension_regs , : 35UNWIND( .fnstart) 36 vstm r0!, {d0-d15} 37 vstm r0, {d16-d31} 38 bx lr 39UNWIND( .fnend) 40END_FUNC vfp_save_extension_regs 41 42/* void vfp_restore_extension_regs(uint64_t regs[VFP_NUM_REGS]); */ 43FUNC vfp_restore_extension_regs , : 44UNWIND( .fnstart) 45 vldm r0!, {d0-d15} 46 vldm r0, {d16-d31} 47 bx lr 48UNWIND( .fnend) 49END_FUNC vfp_restore_extension_regs 50 51/* void vfp_write_fpexc(uint32_t fpexc) */ 52FUNC vfp_write_fpexc , : 53UNWIND( .fnstart) 54 vmsr fpexc, r0 55 bx lr 56UNWIND( .fnend) 57END_FUNC vfp_write_fpexc 58 59/* uint32_t vfp_read_fpexc(void) */ 60FUNC vfp_read_fpexc , : 61UNWIND( .fnstart) 62 vmrs r0, fpexc 63 bx lr 64UNWIND( .fnend) 65END_FUNC vfp_read_fpexc 66 67/* void vfp_write_fpscr(uint32_t fpscr) */ 68FUNC vfp_write_fpscr , : 69UNWIND( .fnstart) 70 vmsr fpscr, r0 71 bx lr 72UNWIND( .fnend) 73END_FUNC vfp_write_fpscr 74 75/* uint32_t vfp_read_fpscr(void) */ 76FUNC vfp_read_fpscr , : 77UNWIND( .fnstart) 78 vmrs r0, fpscr 79 bx lr 80UNWIND( .fnend) 81END_FUNC vfp_read_fpscr 82