xref: /minix3/lib/libc/arch/arm/hardfloat/fpsetmask.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc/*	$NetBSD: fpsetmask.S,v 1.7 2014/01/23 00:00:16 joerg Exp $	*/
22fe8fb19SBen Gras
384d9c625SLionel Sambuc/*-
484d9c625SLionel Sambuc * Copyright (c) 2013 The NetBSD Foundation, Inc.
52fe8fb19SBen Gras * All rights reserved.
62fe8fb19SBen Gras *
784d9c625SLionel Sambuc * This code is derived from software contributed to The NetBSD Foundation
884d9c625SLionel Sambuc * by Matt Thomas of 3am Software Foundry.
984d9c625SLionel Sambuc *
102fe8fb19SBen Gras * Redistribution and use in source and binary forms, with or without
112fe8fb19SBen Gras * modification, are permitted provided that the following conditions
122fe8fb19SBen Gras * are met:
132fe8fb19SBen Gras * 1. Redistributions of source code must retain the above copyright
142fe8fb19SBen Gras *    notice, this list of conditions and the following disclaimer.
152fe8fb19SBen Gras * 2. Redistributions in binary form must reproduce the above copyright
162fe8fb19SBen Gras *    notice, this list of conditions and the following disclaimer in the
172fe8fb19SBen Gras *    documentation and/or other materials provided with the distribution.
182fe8fb19SBen Gras *
1984d9c625SLionel Sambuc * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2084d9c625SLionel Sambuc * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2184d9c625SLionel Sambuc * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2284d9c625SLionel Sambuc * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2384d9c625SLionel Sambuc * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2484d9c625SLionel Sambuc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2584d9c625SLionel Sambuc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2684d9c625SLionel Sambuc * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2784d9c625SLionel Sambuc * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2884d9c625SLionel Sambuc * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2984d9c625SLionel Sambuc * POSSIBILITY OF SUCH DAMAGE.
302fe8fb19SBen Gras */
312fe8fb19SBen Gras
3284d9c625SLionel Sambuc#ifndef __VFP_FP__
3384d9c625SLionel Sambuc#error FPA is not supported anymore
3484d9c625SLionel Sambuc#endif
3584d9c625SLionel Sambuc
3684d9c625SLionel Sambuc#include <arm/asm.h>
3784d9c625SLionel Sambuc#include <arm/vfpreg.h>
382fe8fb19SBen Gras
392fe8fb19SBen Gras/*
402fe8fb19SBen Gras * Set the current FP exception enable mask
412fe8fb19SBen Gras */
422fe8fb19SBen Gras
432fe8fb19SBen Gras#ifdef WEAK_ALIAS
442fe8fb19SBen GrasWEAK_ALIAS(fpsetmask, _fpsetmask)
4584d9c625SLionel Sambuc#define	fpsetmask	_fpsetmask
4684d9c625SLionel Sambuc#endif
4784d9c625SLionel Sambuc
482fe8fb19SBen GrasENTRY(fpsetmask)
4984d9c625SLionel Sambuc	and	r2, r0, #VFP_FPSCR_CSUM
5084d9c625SLionel Sambuc	vmrs	r1, fpscr
5184d9c625SLionel Sambuc	mov	r0, r1, lsr #8		/* Return old mask */
5284d9c625SLionel Sambuc	bic	r1, r1, #VFP_FPSCR_ESUM
5384d9c625SLionel Sambuc	orr	r1, r1, r2, lsl #8
5484d9c625SLionel Sambuc	vmsr	fpscr, r1
5584d9c625SLionel Sambuc	and	r0, r0, #VFP_FPSCR_CSUM
562fe8fb19SBen Gras	RET
5784d9c625SLionel SambucEND(fpsetmask)
58