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