xref: /qemu/linux-user/arm/nwfpe/fpa11.inl (revision 70539e1850ddd3a7ee6f9a8db7bd8e81b85225a4)
100406dffSbellard/*
200406dffSbellard    NetWinder Floating Point Emulator
300406dffSbellard    (c) Rebel.COM, 1998,1999
400406dffSbellard
500406dffSbellard    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
600406dffSbellard
700406dffSbellard    This program is free software; you can redistribute it and/or modify
800406dffSbellard    it under the terms of the GNU General Public License as published by
900406dffSbellard    the Free Software Foundation; either version 2 of the License, or
1000406dffSbellard    (at your option) any later version.
1100406dffSbellard
1200406dffSbellard    This program is distributed in the hope that it will be useful,
1300406dffSbellard    but WITHOUT ANY WARRANTY; without even the implied warranty of
1400406dffSbellard    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1500406dffSbellard    GNU General Public License for more details.
1600406dffSbellard
1700406dffSbellard    You should have received a copy of the GNU General Public License
18*70539e18SBlue Swirl    along with this program; if not, see <http://www.gnu.org/licenses/>.
1900406dffSbellard*/
2000406dffSbellard
2100406dffSbellard#include "fpa11.h"
2200406dffSbellard
2300406dffSbellard/* Read and write floating point status register */
24b7a100daSbellardstatic inline unsigned int readFPSR(void)
2500406dffSbellard{
2600406dffSbellard  FPA11 *fpa11 = GET_FPA11();
2700406dffSbellard  return(fpa11->fpsr);
2800406dffSbellard}
2900406dffSbellard
30b7a100daSbellardstatic inline void writeFPSR(FPSR reg)
3100406dffSbellard{
3200406dffSbellard  FPA11 *fpa11 = GET_FPA11();
3300406dffSbellard  /* the sysid byte in the status register is readonly */
3400406dffSbellard  fpa11->fpsr = (fpa11->fpsr & MASK_SYSID) | (reg & ~MASK_SYSID);
3500406dffSbellard}
3600406dffSbellard
3700406dffSbellard/* Read and write floating point control register */
38b7a100daSbellardstatic inline FPCR readFPCR(void)
3900406dffSbellard{
4000406dffSbellard  FPA11 *fpa11 = GET_FPA11();
4100406dffSbellard  /* clear SB, AB and DA bits before returning FPCR */
4200406dffSbellard  return(fpa11->fpcr & ~MASK_RFC);
4300406dffSbellard}
4400406dffSbellard
45b7a100daSbellardstatic inline void writeFPCR(FPCR reg)
4600406dffSbellard{
4700406dffSbellard  FPA11 *fpa11 = GET_FPA11();
4800406dffSbellard  fpa11->fpcr &= ~MASK_WFC;		/* clear SB, AB and DA bits */
4900406dffSbellard  fpa11->fpcr |= (reg & MASK_WFC);	/* write SB, AB and DA bits */
5000406dffSbellard}
51