; ; File: DoFunc.a ; ; Contains: Code to handle unimplemented instruction execution on 040s ; ; Originally Written by: Motorola Inc. ; Adapted to Apple/MPW: Jon Okada ; ; Copyright: © 1990-1993 by Apple Computer, Inc., all rights reserved. ; ; This file is used in these builds: Mac32 ; ; Change History (most recent first): ; ; 2/3/93 CSS Update from Horror: ;

10/5/92 BG (for Jon Okada) Fixing a bug in the Motorola FPSP found by Jon ; having to do with accidently clearing the quotient field in the ; USER_FPSR. ; <4> 5/24/91 BG Corrected table "pmodt" (5 entries lacked offset entries). ; <3> 4/13/91 BG Changed a constant NaN format so that the instruction FSINCOS ; for infinite returns the same quite Nan as the 881. ; <2> 3/30/91 BG Rolling in Jon Okada's latest changes. ; <1> 12/14/90 BG First checked into TERROR/BBS. ; dofunc.a ; Based upon Motorola files 'do_func.sa' and 'tbldo.sa' ; CHANGE LOG: ; 02 Jan 91 JPO Incorporated table 'tblepre' from Motorola file 'tbldo.sa', ; changing contents to 16-bit addresses relative to table top. ; Changed tables 'pmodt', 'premt', and 'pscalet' to contain ; 16-bit addresses relative to respective table tops. ; Deleted constants MONE, PZERO, PINF, and MINF ; and imbedded values in instructions. Changed ; constants MZERO and QNAN to single-precision. ; 08 Feb 91 JPO Modified routines "smod_fpn" and "srem_fpn" to filter out ; subnormal dst cases for special handling. ; 08 Apr 91 JPO Fixed "tbl_pre" entries for FTENTOX with normal or zero ; input (removed extra space before "-" sign. ; 09 Apr 91 JPO Changed constant QNAN back to extended precision. ; 02 May 91 JPO Corrected table "pmodt" (5 entries lacked offset entries). ; 26 Aug 92 JPO Cleared quotient field in USER_FPSR for FREM and FMOD ; instructions (see under "prem" and "pmod" below). * * do_func.sa 3.1 12/10/90 * * Do_func performs the unimplemented operation. The operation * to be performed is determined from the lower 7 bits of the * extension word (except in the case of fmovecr and fsincos). * The opcode and tag bits form an index into a jump table in * tbldo.sa. Cases of zero, infinity and NaN are handled in * do_func by forcing the default result. Normalized and * denormalized (there are no unnormalized numbers at this * point) are passed onto the emulation code. * * CMDREG1B and STAG are extracted from the fsave frame * and combined to form the table index. The function called * will start with a0 pointing to the ETEMP operand. Dyadic * functions can find FPTEMP at -12(a0). * * Called functions return their result in fp0. Sincos returns * sin(x) in fp0 and cos(x) in fp1. * * Copyright (C) Motorola, Inc. 1990 * All Rights Reserved * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA * The copyright notice above does not evidence any * actual or intended publication of such source code. * DO_FUNC IDNT 2,1 Motorola 040 Floating Point Software Package ALIGN 16 PONE dc.l $3fff0000,$80000000,$00000000 ;+1 MZERO dc.l $80000000 ; <1/2/91, JPO> MPIBY2 dc.l $BFFF0000,$C90FDAA2,$2168C235 ;-PI/2 ;QNAN dc.l $7FFFFFFF ; <1/2/91, JPO> - deleted <4/9/91, JPO> dc.l $00000000 ; added <4/9/91, JPO> QNAN dc.l $7fff0000,$ffffffff,$ffffffff,$00000000 ; added <4/9/91, JPO> ;MONE dc.l $bfff0000,$80000000,$00000000 ;-1 ;PZERO dc.l $00000000,$00000000,$00000000 ;+0 ;MZERO dc.l $80000000,$00000000,$00000000 ;-0 ;PINF dc.l $7fff0000,$00000000,$00000000 ;+inf ;MINF dc.l $ffff0000,$00000000,$00000000 ;-inf ;QNAN dc.l $7fff0000,$ffffffff,$ffffffff ;non-signaling nan ;PPIBY2 dc.l $3FFF0000,$C90FDAA2,$2168C235 ;+PI/2 available at PIBY2 in 'constants.a' * * tbldo.sa 3.1 12/10/90 * * Modified: * 8/16/90 chinds The table was constructed to use only one level * of indirection in do_func for monoadic * functions. Dyadic functions require two * levels, and the tables are still contained * in do_func. The table is arranged for * index with a 10-bit index, with the first * 7 bits the opcode, and the remaining 3 * the stag. For dyadic functions, all * valid addresses are to the generic entry * point. * * Copyright (C) Motorola, Inc. 1990 * All Rights Reserved * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA * The copyright notice above does not evidence any * actual or intended publication of such source code. * TBLDO IDNT 2,1 Motorola 040 Floating Point Software Package * instruction ;opcode-stag Notes tblpre: dc.w smovcr-tblpre ;$00-0 fmovecr all dc.w smovcr-tblpre ;$00-1 fmovecr all dc.w smovcr-tblpre ;$00-2 fmovecr all dc.w smovcr-tblpre ;$00-3 fmovecr all dc.w smovcr-tblpre ;$00-4 fmovecr all dc.w smovcr-tblpre ;$00-5 fmovecr all dc.w smovcr-tblpre ;$00-6 fmovecr all dc.w smovcr-tblpre ;$00-7 fmovecr all dc.w sint-tblpre ;$01-0 fint norm dc.w szero-tblpre ;$01-1 fint zero dc.w sinf-tblpre ;$01-2 fint inf dc.w src_nan-tblpre ;$01-3 fint nan dc.w sintd-tblpre ;$01-4 fint denorm inx dc.w serror-tblpre ;$01-5 fint ERROR dc.w serror-tblpre ;$01-6 fint ERROR dc.w serror-tblpre ;$01-7 fint ERROR dc.w ssinh-tblpre ;$02-0 fsinh norm dc.w szero-tblpre ;$02-1 fsinh zero dc.w sinf-tblpre ;$02-2 fsinh inf dc.w src_nan-tblpre ;$02-3 fsinh nan dc.w ssinhd-tblpre ;$02-4 fsinh denorm dc.w serror-tblpre ;$02-5 fsinh ERROR dc.w serror-tblpre ;$02-6 fsinh ERROR dc.w serror-tblpre ;$02-7 fsinh ERROR dc.w sintrz-tblpre ;$03-0 fintrz norm dc.w szero-tblpre ;$03-1 fintrz zero dc.w sinf-tblpre ;$03-2 fintrz inf dc.w src_nan-tblpre ;$03-3 fintrz nan dc.w snzrinx-tblpre ;$03-4 fintrz denorm inx dc.w serror-tblpre ;$03-5 fintrz ERROR dc.w serror-tblpre ;$03-6 fintrz ERROR dc.w serror-tblpre ;$03-7 fintrz ERROR dc.w serror-tblpre ;$04-0 ERROR - illegal extension dc.w serror-tblpre ;$04-1 ERROR - illegal extension dc.w serror-tblpre ;$04-2 ERROR - illegal extension dc.w serror-tblpre ;$04-3 ERROR - illegal extension dc.w serror-tblpre ;$04-4 ERROR - illegal extension dc.w serror-tblpre ;$04-5 ERROR - illegal extension dc.w serror-tblpre ;$04-6 ERROR - illegal extension dc.w serror-tblpre ;$04-7 ERROR - illegal extension dc.w serror-tblpre ;$05-0 ERROR - illegal extension dc.w serror-tblpre ;$05-1 ERROR - illegal extension dc.w serror-tblpre ;$05-2 ERROR - illegal extension dc.w serror-tblpre ;$05-3 ERROR - illegal extension dc.w serror-tblpre ;$05-4 ERROR - illegal extension dc.w serror-tblpre ;$05-5 ERROR - illegal extension dc.w serror-tblpre ;$05-6 ERROR - illegal extension dc.w serror-tblpre ;$05-7 ERROR - illegal extension dc.w sslognp1-tblpre ;$06-0 flognp1 norm dc.w szero-tblpre ;$06-1 flognp1 zero dc.w sopr_inf-tblpre ;$06-2 flognp1 inf dc.w src_nan-tblpre ;$06-3 flognp1 nan dc.w slognp1d-tblpre ;$06-4 flognp1 denorm dc.w serror-tblpre ;$06-5 flognp1 ERROR dc.w serror-tblpre ;$06-6 flognp1 ERROR dc.w serror-tblpre ;$06-7 flognp1 ERROR dc.w serror-tblpre ;$07-0 ERROR - illegal extension dc.w serror-tblpre ;$07-1 ERROR - illegal extension dc.w serror-tblpre ;$07-2 ERROR - illegal extension dc.w serror-tblpre ;$07-3 ERROR - illegal extension dc.w serror-tblpre ;$07-4 ERROR - illegal extension dc.w serror-tblpre ;$07-5 ERROR - illegal extension dc.w serror-tblpre ;$07-6 ERROR - illegal extension dc.w serror-tblpre ;$07-7 ERROR - illegal extension dc.w setoxm1-tblpre ;$08-0 fetoxm1 norm dc.w szero-tblpre ;$08-1 fetoxm1 zero dc.w setoxm1i-tblpre ;$08-2 fetoxm1 inf dc.w src_nan-tblpre ;$08-3 fetoxm1 nan dc.w setoxm1d-tblpre ;$08-4 fetoxm1 denorm dc.w serror-tblpre ;$08-5 fetoxm1 ERROR dc.w serror-tblpre ;$08-6 fetoxm1 ERROR dc.w serror-tblpre ;$08-7 fetoxm1 ERROR dc.w stanh-tblpre ;$09-0 ftanh norm dc.w szero-tblpre ;$09-1 ftanh zero dc.w sone-tblpre ;$09-2 ftanh inf dc.w src_nan-tblpre ;$09-3 ftanh nan dc.w stanhd-tblpre ;$09-4 ftanh denorm dc.w serror-tblpre ;$09-5 ftanh ERROR dc.w serror-tblpre ;$09-6 ftanh ERROR dc.w serror-tblpre ;$09-7 ftanh ERROR dc.w satan-tblpre ;$0a-0 fatan norm dc.w szero-tblpre ;$0a-1 fatan zero dc.w spi_2-tblpre ;$0a-2 fatan inf dc.w src_nan-tblpre ;$0a-3 fatan nan dc.w satand-tblpre ;$0a-4 fatan denorm dc.w serror-tblpre ;$0a-5 fatan ERROR dc.w serror-tblpre ;$0a-6 fatan ERROR dc.w serror-tblpre ;$0a-7 fatan ERROR dc.w serror-tblpre ;$0b-0 ERROR - illegal extension dc.w serror-tblpre ;$0b-1 ERROR - illegal extension dc.w serror-tblpre ;$0b-2 ERROR - illegal extension dc.w serror-tblpre ;$0b-3 ERROR - illegal extension dc.w serror-tblpre ;$0b-4 ERROR - illegal extension dc.w serror-tblpre ;$0b-5 ERROR - illegal extension dc.w serror-tblpre ;$0b-6 ERROR - illegal extension dc.w serror-tblpre ;$0b-7 ERROR - illegal extension dc.w sasin-tblpre ;$0c-0 fasin norm dc.w szero-tblpre ;$0c-1 fasin zero dc.w t_operr-tblpre ;$0c-2 fasin inf dc.w src_nan-tblpre ;$0c-3 fasin nan dc.w sasind-tblpre ;$0c-4 fasin denorm dc.w serror-tblpre ;$0c-5 fasin ERROR dc.w serror-tblpre ;$0c-6 fasin ERROR dc.w serror-tblpre ;$0c-7 fasin ERROR dc.w satanh-tblpre ;$0d-0 fatanh norm dc.w szero-tblpre ;$0d-1 fatanh zero dc.w t_operr-tblpre ;$0d-2 fatanh inf dc.w src_nan-tblpre ;$0d-3 fatanh nan dc.w satanhd-tblpre ;$0d-4 fatanh denorm dc.w serror-tblpre ;$0d-5 fatanh ERROR dc.w serror-tblpre ;$0d-6 fatanh ERROR dc.w serror-tblpre ;$0d-7 fatanh ERROR dc.w ssin-tblpre ;$0e-0 fsin norm dc.w szero-tblpre ;$0e-1 fsin zero dc.w t_operr-tblpre ;$0e-2 fsin inf dc.w src_nan-tblpre ;$0e-3 fsin nan dc.w ssind-tblpre ;$0e-4 fsin denorm dc.w serror-tblpre ;$0e-5 fsin ERROR dc.w serror-tblpre ;$0e-6 fsin ERROR dc.w serror-tblpre ;$0e-7 fsin ERROR dc.w stan-tblpre ;$0f-0 ftan norm dc.w szero-tblpre ;$0f-1 ftan zero dc.w t_operr-tblpre ;$0f-2 ftan inf dc.w src_nan-tblpre ;$0f-3 ftan nan dc.w stand-tblpre ;$0f-4 ftan denorm dc.w serror-tblpre ;$0f-5 ftan ERROR dc.w serror-tblpre ;$0f-6 ftan ERROR dc.w serror-tblpre ;$0f-7 ftan ERROR dc.w setox-tblpre ;$10-0 fetox norm dc.w ld_pone-tblpre ;$10-1 fetox zero dc.w szr_inf-tblpre ;$10-2 fetox inf dc.w src_nan-tblpre ;$10-3 fetox nan dc.w setoxd-tblpre ;$10-4 fetox denorm dc.w serror-tblpre ;$10-5 fetox ERROR dc.w serror-tblpre ;$10-6 fetox ERROR dc.w serror-tblpre ;$10-7 fetox ERROR dc.w stwotox-tblpre ;$11-0 ftwotox norm dc.w ld_pone-tblpre ;$11-1 ftwotox zero dc.w szr_inf-tblpre ;$11-2 ftwotox inf dc.w src_nan-tblpre ;$11-3 ftwotox nan dc.w stwotoxd-tblpre ;$11-4 ftwotox denorm dc.w serror-tblpre ;$11-5 ftwotox ERROR dc.w serror-tblpre ;$11-6 ftwotox ERROR dc.w serror-tblpre ;$11-7 ftwotox ERROR dc.w stentox-tblpre ;$12-0 ftentox norm ; removed tab before "-tblpre" <4/8/91, JPO> dc.w ld_pone-tblpre ;$12-1 ftentox zero ; removed tab before "-tblpre" <4/8/91, JPO> dc.w szr_inf-tblpre ;$12-2 ftentox inf dc.w src_nan-tblpre ;$12-3 ftentox nan dc.w stentoxd-tblpre ;$12-4 ftentox denorm dc.w serror-tblpre ;$12-5 ftentox ERROR dc.w serror-tblpre ;$12-6 ftentox ERROR dc.w serror-tblpre ;$12-7 ftentox ERROR dc.w serror-tblpre ;$13-0 ERROR - illegal extension dc.w serror-tblpre ;$13-1 ERROR - illegal extension dc.w serror-tblpre ;$13-2 ERROR - illegal extension dc.w serror-tblpre ;$13-3 ERROR - illegal extension dc.w serror-tblpre ;$13-4 ERROR - illegal extension dc.w serror-tblpre ;$13-5 ERROR - illegal extension dc.w serror-tblpre ;$13-6 ERROR - illegal extension dc.w serror-tblpre ;$13-7 ERROR - illegal extension dc.w sslogn-tblpre ;$14-0 flogn norm dc.w t_dz2-tblpre ;$14-1 flogn zero dc.w sopr_inf-tblpre ;$14-2 flogn inf dc.w src_nan-tblpre ;$14-3 flogn nan dc.w sslognd-tblpre ;$14-4 flogn denorm dc.w serror-tblpre ;$14-5 flogn ERROR dc.w serror-tblpre ;$14-6 flogn ERROR dc.w serror-tblpre ;$14-7 flogn ERROR dc.w sslog10-tblpre ;$15-0 flog10 norm dc.w t_dz2-tblpre ;$15-1 flog10 zero dc.w sopr_inf-tblpre ;$15-2 flog10 inf dc.w src_nan-tblpre ;$15-3 flog10 nan dc.w sslog10d-tblpre ;$15-4 flog10 denorm dc.w serror-tblpre ;$15-5 flog10 ERROR dc.w serror-tblpre ;$15-6 flog10 ERROR dc.w serror-tblpre ;$15-7 flog10 ERROR dc.w sslog2-tblpre ;$16-0 flog2 norm dc.w t_dz2-tblpre ;$16-1 flog2 zero dc.w sopr_inf-tblpre ;$16-2 flog2 inf dc.w src_nan-tblpre ;$16-3 flog2 nan dc.w sslog2d-tblpre ;$16-4 flog2 denorm dc.w serror-tblpre ;$16-5 flog2 ERROR dc.w serror-tblpre ;$16-6 flog2 ERROR dc.w serror-tblpre ;$16-7 flog2 ERROR dc.w serror-tblpre ;$17-0 ERROR - illegal extension dc.w serror-tblpre ;$17-1 ERROR - illegal extension dc.w serror-tblpre ;$17-2 ERROR - illegal extension dc.w serror-tblpre ;$17-3 ERROR - illegal extension dc.w serror-tblpre ;$17-4 ERROR - illegal extension dc.w serror-tblpre ;$17-5 ERROR - illegal extension dc.w serror-tblpre ;$17-6 ERROR - illegal extension dc.w serror-tblpre ;$17-7 ERROR - illegal extension dc.w serror-tblpre ;$18-0 ERROR - illegal extension dc.w serror-tblpre ;$18-1 ERROR - illegal extension dc.w serror-tblpre ;$18-2 ERROR - illegal extension dc.w serror-tblpre ;$18-3 ERROR - illegal extension dc.w serror-tblpre ;$18-4 ERROR - illegal extension dc.w serror-tblpre ;$18-5 ERROR - illegal extension dc.w serror-tblpre ;$18-6 ERROR - illegal extension dc.w serror-tblpre ;$18-7 ERROR - illegal extension dc.w scosh-tblpre ;$19-0 fcosh norm dc.w ld_pone-tblpre ;$19-1 fcosh zero dc.w ld_pinf-tblpre ;$19-2 fcosh inf dc.w src_nan-tblpre ;$19-3 fcosh nan dc.w scoshd-tblpre ;$19-4 fcosh denorm dc.w serror-tblpre ;$19-5 fcosh ERROR dc.w serror-tblpre ;$19-6 fcosh ERROR dc.w serror-tblpre ;$19-7 fcosh ERROR dc.w serror-tblpre ;$1a-0 ERROR - illegal extension dc.w serror-tblpre ;$1a-1 ERROR - illegal extension dc.w serror-tblpre ;$1a-2 ERROR - illegal extension dc.w serror-tblpre ;$1a-3 ERROR - illegal extension dc.w serror-tblpre ;$1a-4 ERROR - illegal extension dc.w serror-tblpre ;$1a-5 ERROR - illegal extension dc.w serror-tblpre ;$1a-6 ERROR - illegal extension dc.w serror-tblpre ;$1a-7 ERROR - illegal extension dc.w serror-tblpre ;$1b-0 ERROR - illegal extension dc.w serror-tblpre ;$1b-1 ERROR - illegal extension dc.w serror-tblpre ;$1b-2 ERROR - illegal extension dc.w serror-tblpre ;$1b-3 ERROR - illegal extension dc.w serror-tblpre ;$1b-4 ERROR - illegal extension dc.w serror-tblpre ;$1b-5 ERROR - illegal extension dc.w serror-tblpre ;$1b-6 ERROR - illegal extension dc.w serror-tblpre ;$1b-7 ERROR - illegal extension dc.w sacos-tblpre ;$1c-0 facos norm dc.w ld_ppi2-tblpre ;$1c-1 facos zero dc.w t_operr-tblpre ;$1c-2 facos inf dc.w src_nan-tblpre ;$1c-3 facos nan dc.w sacosd-tblpre ;$1c-4 facos denorm dc.w serror-tblpre ;$1c-5 facos ERROR dc.w serror-tblpre ;$1c-6 facos ERROR dc.w serror-tblpre ;$1c-7 facos ERROR dc.w scos-tblpre ;$1d-0 fcos norm dc.w ld_pone-tblpre ;$1d-1 fcos zero dc.w t_operr-tblpre ;$1d-2 fcos inf dc.w src_nan-tblpre ;$1d-3 fcos nan dc.w scosd-tblpre ;$1d-4 fcos denorm dc.w serror-tblpre ;$1d-5 fcos ERROR dc.w serror-tblpre ;$1d-6 fcos ERROR dc.w serror-tblpre ;$1d-7 fcos ERROR dc.w sgetexp-tblpre ;$1e-0 fgetexp norm dc.w szero-tblpre ;$1e-1 fgetexp zero dc.w t_operr-tblpre ;$1e-2 fgetexp inf dc.w src_nan-tblpre ;$1e-3 fgetexp nan dc.w sgetexpd-tblpre ;$1e-4 fgetexp denorm dc.w serror-tblpre ;$1e-5 fgetexp ERROR dc.w serror-tblpre ;$1e-6 fgetexp ERROR dc.w serror-tblpre ;$1e-7 fgetexp ERROR dc.w sgetman-tblpre ;$1f-0 fgetman norm dc.w szero-tblpre ;$1f-1 fgetman zero dc.w t_operr-tblpre ;$1f-2 fgetman inf dc.w src_nan-tblpre ;$1f-3 fgetman nan dc.w sgetmand-tblpre ;$1f-4 fgetman denorm dc.w serror-tblpre ;$1f-5 fgetman ERROR dc.w serror-tblpre ;$1f-6 fgetman ERROR dc.w serror-tblpre ;$1f-7 fgetman ERROR dc.w serror-tblpre ;$20-0 ERROR - illegal extension dc.w serror-tblpre ;$20-1 ERROR - illegal extension dc.w serror-tblpre ;$20-2 ERROR - illegal extension dc.w serror-tblpre ;$20-3 ERROR - illegal extension dc.w serror-tblpre ;$20-4 ERROR - illegal extension dc.w serror-tblpre ;$20-5 ERROR - illegal extension dc.w serror-tblpre ;$20-6 ERROR - illegal extension dc.w serror-tblpre ;$20-7 ERROR - illegal extension dc.w pmod-tblpre ;$21-0 fmod all dc.w pmod-tblpre ;$21-1 fmod all dc.w pmod-tblpre ;$21-2 fmod all dc.w pmod-tblpre ;$21-3 fmod all dc.w pmod-tblpre ;$21-4 fmod all dc.w serror-tblpre ;$21-5 fmod ERROR dc.w serror-tblpre ;$21-6 fmod ERROR dc.w serror-tblpre ;$21-7 fmod ERROR dc.w serror-tblpre ;$22-0 ERROR - illegal extension dc.w serror-tblpre ;$22-1 ERROR - illegal extension dc.w serror-tblpre ;$22-2 ERROR - illegal extension dc.w serror-tblpre ;$22-3 ERROR - illegal extension dc.w serror-tblpre ;$22-4 ERROR - illegal extension dc.w serror-tblpre ;$22-5 ERROR - illegal extension dc.w serror-tblpre ;$22-6 ERROR - illegal extension dc.w serror-tblpre ;$22-7 ERROR - illegal extension dc.w serror-tblpre ;$23-0 ERROR - illegal extension dc.w serror-tblpre ;$23-1 ERROR - illegal extension dc.w serror-tblpre ;$23-2 ERROR - illegal extension dc.w serror-tblpre ;$23-3 ERROR - illegal extension dc.w serror-tblpre ;$23-4 ERROR - illegal extension dc.w serror-tblpre ;$23-5 ERROR - illegal extension dc.w serror-tblpre ;$23-6 ERROR - illegal extension dc.w serror-tblpre ;$23-7 ERROR - illegal extension dc.w serror-tblpre ;$24-0 ERROR - illegal extension dc.w serror-tblpre ;$24-1 ERROR - illegal extension dc.w serror-tblpre ;$24-2 ERROR - illegal extension dc.w serror-tblpre ;$24-3 ERROR - illegal extension dc.w serror-tblpre ;$24-4 ERROR - illegal extension dc.w serror-tblpre ;$24-5 ERROR - illegal extension dc.w serror-tblpre ;$24-6 ERROR - illegal extension dc.w serror-tblpre ;$24-7 ERROR - illegal extension dc.w prem-tblpre ;$25-0 frem all dc.w prem-tblpre ;$25-1 frem all dc.w prem-tblpre ;$25-2 frem all dc.w prem-tblpre ;$25-3 frem all dc.w prem-tblpre ;$25-4 frem all dc.w serror-tblpre ;$25-5 frem ERROR dc.w serror-tblpre ;$25-6 frem ERROR dc.w serror-tblpre ;$25-7 frem ERROR dc.w pscale-tblpre ;$26-0 fscale all dc.w pscale-tblpre ;$26-1 fscale all dc.w pscale-tblpre ;$26-2 fscale all dc.w pscale-tblpre ;$26-3 fscale all dc.w pscale-tblpre ;$26-4 fscale all dc.w serror-tblpre ;$26-5 fscale ERROR dc.w serror-tblpre ;$26-6 fscale ERROR dc.w serror-tblpre ;$26-7 fscale ERROR dc.w serror-tblpre ;$27-0 ERROR - illegal extension dc.w serror-tblpre ;$27-1 ERROR - illegal extension dc.w serror-tblpre ;$27-2 ERROR - illegal extension dc.w serror-tblpre ;$27-3 ERROR - illegal extension dc.w serror-tblpre ;$27-4 ERROR - illegal extension dc.w serror-tblpre ;$27-5 ERROR - illegal extension dc.w serror-tblpre ;$27-6 ERROR - illegal extension dc.w serror-tblpre ;$27-7 ERROR - illegal extension dc.w serror-tblpre ;$28-0 ERROR - illegal extension dc.w serror-tblpre ;$28-1 ERROR - illegal extension dc.w serror-tblpre ;$28-2 ERROR - illegal extension dc.w serror-tblpre ;$28-3 ERROR - illegal extension dc.w serror-tblpre ;$28-4 ERROR - illegal extension dc.w serror-tblpre ;$28-5 ERROR - illegal extension dc.w serror-tblpre ;$28-6 ERROR - illegal extension dc.w serror-tblpre ;$28-7 ERROR - illegal extension dc.w serror-tblpre ;$29-0 ERROR - illegal extension dc.w serror-tblpre ;$29-1 ERROR - illegal extension dc.w serror-tblpre ;$29-2 ERROR - illegal extension dc.w serror-tblpre ;$29-3 ERROR - illegal extension dc.w serror-tblpre ;$29-4 ERROR - illegal extension dc.w serror-tblpre ;$29-5 ERROR - illegal extension dc.w serror-tblpre ;$29-6 ERROR - illegal extension dc.w serror-tblpre ;$29-7 ERROR - illegal extension dc.w serror-tblpre ;$2a-0 ERROR - illegal extension dc.w serror-tblpre ;$2a-1 ERROR - illegal extension dc.w serror-tblpre ;$2a-2 ERROR - illegal extension dc.w serror-tblpre ;$2a-3 ERROR - illegal extension dc.w serror-tblpre ;$2a-4 ERROR - illegal extension dc.w serror-tblpre ;$2a-5 ERROR - illegal extension dc.w serror-tblpre ;$2a-6 ERROR - illegal extension dc.w serror-tblpre ;$2a-7 ERROR - illegal extension dc.w serror-tblpre ;$2b-0 ERROR - illegal extension dc.w serror-tblpre ;$2b-1 ERROR - illegal extension dc.w serror-tblpre ;$2b-2 ERROR - illegal extension dc.w serror-tblpre ;$2b-3 ERROR - illegal extension dc.w serror-tblpre ;$2b-4 ERROR - illegal extension dc.w serror-tblpre ;$2b-5 ERROR - illegal extension dc.w serror-tblpre ;$2b-6 ERROR - illegal extension dc.w serror-tblpre ;$2b-7 ERROR - illegal extension dc.w serror-tblpre ;$2c-0 ERROR - illegal extension dc.w serror-tblpre ;$2c-1 ERROR - illegal extension dc.w serror-tblpre ;$2c-2 ERROR - illegal extension dc.w serror-tblpre ;$2c-3 ERROR - illegal extension dc.w serror-tblpre ;$2c-4 ERROR - illegal extension dc.w serror-tblpre ;$2c-5 ERROR - illegal extension dc.w serror-tblpre ;$2c-6 ERROR - illegal extension dc.w serror-tblpre ;$2c-7 ERROR - illegal extension dc.w serror-tblpre ;$2d-0 ERROR - illegal extension dc.w serror-tblpre ;$2d-1 ERROR - illegal extension dc.w serror-tblpre ;$2d-2 ERROR - illegal extension dc.w serror-tblpre ;$2d-3 ERROR - illegal extension dc.w serror-tblpre ;$2d-4 ERROR - illegal extension dc.w serror-tblpre ;$2d-5 ERROR - illegal extension dc.w serror-tblpre ;$2d-6 ERROR - illegal extension dc.w serror-tblpre ;$2d-7 ERROR - illegal extension dc.w serror-tblpre ;$2e-0 ERROR - illegal extension dc.w serror-tblpre ;$2e-1 ERROR - illegal extension dc.w serror-tblpre ;$2e-2 ERROR - illegal extension dc.w serror-tblpre ;$2e-3 ERROR - illegal extension dc.w serror-tblpre ;$2e-4 ERROR - illegal extension dc.w serror-tblpre ;$2e-5 ERROR - illegal extension dc.w serror-tblpre ;$2e-6 ERROR - illegal extension dc.w serror-tblpre ;$2e-7 ERROR - illegal extension dc.w serror-tblpre ;$2f-0 ERROR - illegal extension dc.w serror-tblpre ;$2f-1 ERROR - illegal extension dc.w serror-tblpre ;$2f-2 ERROR - illegal extension dc.w serror-tblpre ;$2f-3 ERROR - illegal extension dc.w serror-tblpre ;$2f-4 ERROR - illegal extension dc.w serror-tblpre ;$2f-5 ERROR - illegal extension dc.w serror-tblpre ;$2f-6 ERROR - illegal extension dc.w serror-tblpre ;$2f-7 ERROR - illegal extension dc.w ssincos-tblpre ;$30-0 fsincos norm dc.w ssincosz-tblpre ;$30-1 fsincos zero dc.w ssincosi-tblpre ;$30-2 fsincos inf dc.w ssincosnan-tblpre ;$30-3 fsincos nan dc.w ssincosd-tblpre ;$30-4 fsincos denorm dc.w serror-tblpre ;$30-5 fsincos ERROR dc.w serror-tblpre ;$30-6 fsincos ERROR dc.w serror-tblpre ;$30-7 fsincos ERROR dc.w ssincos-tblpre ;$31-0 fsincos norm dc.w ssincosz-tblpre ;$31-1 fsincos zero dc.w ssincosi-tblpre ;$31-2 fsincos inf dc.w ssincosnan-tblpre ;$31-3 fsincos nan dc.w ssincosd-tblpre ;$31-4 fsincos denorm dc.w serror-tblpre ;$31-5 fsincos ERROR dc.w serror-tblpre ;$31-6 fsincos ERROR dc.w serror-tblpre ;$31-7 fsincos ERROR dc.w ssincos-tblpre ;$32-0 fsincos norm dc.w ssincosz-tblpre ;$32-1 fsincos zero dc.w ssincosi-tblpre ;$32-2 fsincos inf dc.w ssincosnan-tblpre ;$32-3 fsincos nan dc.w ssincosd-tblpre ;$32-4 fsincos denorm dc.w serror-tblpre ;$32-5 fsincos ERROR dc.w serror-tblpre ;$32-6 fsincos ERROR dc.w serror-tblpre ;$32-7 fsincos ERROR dc.w ssincos-tblpre ;$33-0 fsincos norm dc.w ssincosz-tblpre ;$33-1 fsincos zero dc.w ssincosi-tblpre ;$33-2 fsincos inf dc.w ssincosnan-tblpre ;$33-3 fsincos nan dc.w ssincosd-tblpre ;$33-4 fsincos denorm dc.w serror-tblpre ;$33-5 fsincos ERROR dc.w serror-tblpre ;$33-6 fsincos ERROR dc.w serror-tblpre ;$33-7 fsincos ERROR dc.w ssincos-tblpre ;$34-0 fsincos norm dc.w ssincosz-tblpre ;$34-1 fsincos zero dc.w ssincosi-tblpre ;$34-2 fsincos inf dc.w ssincosnan-tblpre ;$34-3 fsincos nan dc.w ssincosd-tblpre ;$34-4 fsincos denorm dc.w serror-tblpre ;$34-5 fsincos ERROR dc.w serror-tblpre ;$34-6 fsincos ERROR dc.w serror-tblpre ;$34-7 fsincos ERROR dc.w ssincos-tblpre ;$35-0 fsincos norm dc.w ssincosz-tblpre ;$35-1 fsincos zero dc.w ssincosi-tblpre ;$35-2 fsincos inf dc.w ssincosnan-tblpre ;$35-3 fsincos nan dc.w ssincosd-tblpre ;$35-4 fsincos denorm dc.w serror-tblpre ;$35-5 fsincos ERROR dc.w serror-tblpre ;$35-6 fsincos ERROR dc.w serror-tblpre ;$35-7 fsincos ERROR dc.w ssincos-tblpre ;$36-0 fsincos norm dc.w ssincosz-tblpre ;$36-1 fsincos zero dc.w ssincosi-tblpre ;$36-2 fsincos inf dc.w ssincosnan-tblpre ;$36-3 fsincos nan dc.w ssincosd-tblpre ;$36-4 fsincos denorm dc.w serror-tblpre ;$36-5 fsincos ERROR dc.w serror-tblpre ;$36-6 fsincos ERROR dc.w serror-tblpre ;$36-7 fsincos ERROR dc.w ssincos-tblpre ;$37-0 fsincos norm dc.w ssincosz-tblpre ;$37-1 fsincos zero dc.w ssincosi-tblpre ;$37-2 fsincos inf dc.w ssincosnan-tblpre ;$37-3 fsincos nan dc.w ssincosd-tblpre ;$37-4 fsincos denorm dc.w serror-tblpre ;$37-5 fsincos ERROR dc.w serror-tblpre ;$37-6 fsincos ERROR dc.w serror-tblpre ;$37-7 fsincos ERROR do_func: clr.b CU_ONLY(a6) * * Check for fmovecr. It does not follow the format of fp gen * unimplemented instructions. The test is on the upper 6 bits; * if they are $17, the inst is fmovecr. Call entry smovcr * directly. * bfextu CMDREG1B(a6){0:6},d0 ;get opclass and src fields cmpi.l #$17,d0 ;if op class and size fields are $17, * ;it is FMOVECR; if not, continue bne.b not_fmovecr ; jmp smovcr ;fmovecr; jmp directly to emulation - change to bra <1/2/91, JPO> bra smovcr ; <1/2/91, JPO> not_fmovecr: move.w CMDREG1B(a6),d0 and.l #$7F,d0 cmpi.l #$38,d0 ;if the extension is >= $38, bge.b serror ;it is illegal bfextu STAG(a6){0:3},d1 lsl.l #3,d0 ;make room for STAG add.l d1,d0 ;combine for final index into table lea.l tblpre,a1 ;start of monster jump table ; move.l (a1,d0.w*4),a1 ;real target address - deleted <1/2/91, JPO> adda.w (a1,d0.w*2),a1 ; <1/2/91, JPO> lea.l ETEMP(a6),a0 ;a0 is pointer to src op move.l USER_FPCR(a6),d1 and.l #$FF,d1 ; discard all but rounding mode/prec fmove.l #0,fpcr jmp (a1) * * ERROR * serror: st.b STORE_FLG(a6) rts * * These routines load forced values into fp0. They are called * by index into tbldo. * * Load a signed zero to fp0 and set inex2/ainex * snzrinx: btst.b #sign_bit,LOCAL_EX(a0) ;get sign of source operand bne.b ld_mzinx ;if negative, branch bsr ld_pzero ;bsr so we can return and set inx bra t_inx2 ;now, set the inx for the next inst ld_mzinx: bsr ld_mzero ;if neg, load neg zero, return here bra t_inx2 ;now, set the inx for the next inst * * Load a signed zero to fp0; do not set inex2/ainex * szero: btst.b #sign_bit,LOCAL_EX(a0) ;get sign of source operand bne ld_mzero ;if neg, load neg zero bra ld_pzero ;load positive zero * * Load a signed infinity to fp0; do not set inex2/ainex * sinf: btst.b #sign_bit,LOCAL_EX(a0) ;get sign of source operand bne ld_minf ;if negative branch bra ld_pinf * * Load a signed one to fp0; do not set inex2/ainex * sone: btst.b #sign_bit,LOCAL_EX(a0) ;check sign of source bne ld_mone bra ld_pone * * Load a signed pi/2 to fp0; do not set inex2/ainex * spi_2: btst.b #sign_bit,LOCAL_EX(a0) ;check sign of source bne ld_mpi2 bra ld_ppi2 * * Load either a +0 or +inf for plus/minus operand * szr_inf: btst.b #sign_bit,LOCAL_EX(a0) ;check sign of source bne ld_pzero bra ld_pinf * * Result is either an operr or +inf for plus/minus operand * [Used by slogn, slognp1, slog10, and slog2] * sopr_inf: btst.b #sign_bit,LOCAL_EX(a0) ;check sign of source bne t_operr bra ld_pinf * * FLOGNP1 * sslognp1: fmovem.x (a0),fp0 fcmp.b #-1,fp0 fbgt slognp1 fbeq t_dz2 ;if = -1, divide by zero exception fmove.l #0,FPSR ;clr N flag bra t_operr ;take care of operands < -1 * * FETOXM1 * setoxm1i: btst.b #sign_bit,LOCAL_EX(a0) ;check sign of source bne ld_mone bra ld_pinf * * FLOGN * * Test for 1.0 as an input argument, returning +zero. Also check * the sign and return operr if negative. * sslogn: btst.b #sign_bit,LOCAL_EX(a0) bne t_operr ;take care of operands < 0 cmpi.w #$3fff,LOCAL_EX(a0) ;test for 1.0 input bne slogn cmpi.l #$80000000,LOCAL_HI(a0) bne slogn tst.l LOCAL_LO(a0) bne slogn ; fmove.x PZERO,fp0 ; deleted <1/2/91, JPO> fmove.b #0,fp0 rts sslognd: btst.b #sign_bit,LOCAL_EX(a0) beq slognd bra t_operr ;take care of operands < 0 * * FLOG10 * sslog10: btst.b #sign_bit,LOCAL_EX(a0) bne t_operr ;take care of operands < 0 cmpi.w #$3fff,LOCAL_EX(a0) ;test for 1.0 input bne slog10 cmpi.l #$80000000,LOCAL_HI(a0) bne slog10 tst.l LOCAL_LO(a0) bne slog10 ; fmove.x PZERO,fp0 ; deleted <1/2/91, JPO> fmove.b #0,fp0 ; <1/2/91, JPO> rts sslog10d: btst.b #sign_bit,LOCAL_EX(a0) beq slog10d bra t_operr ;take care of operands < 0 * * FLOG2 * sslog2: btst.b #sign_bit,LOCAL_EX(a0) bne t_operr ;take care of operands < 0 cmpi.w #$3fff,LOCAL_EX(a0) ;test for 1.0 input bne slog2 cmpi.l #$80000000,LOCAL_HI(a0) bne slog2 tst.l LOCAL_LO(a0) bne slog2 ; fmove.x PZERO,fp0 ; deleted <1/2/91, JPO> fmove.b #0,fp0 ; <1/2/91, JPO> rts sslog2d: btst.b #sign_bit,LOCAL_EX(a0) beq slog2d bra t_operr ;take care of operands < 0 * * FMOD * pmodt: * ;$21 fmod * ;dtag,stag dc.w smod-pmodt ; 00,00 norm,norm = normal dc.w smod_oper-pmodt ; 00,01 norm,zero = nan with operr dc.w smod_fpn-pmodt ; 00,10 norm,inf = fpn dc.w smod_snan-pmodt ; 00,11 norm,nan = nan dc.w smod_zro-pmodt ; 01,00 zero,norm = +-zero dc.w smod_oper-pmodt ; 01,01 zero,zero = nan with operr dc.w smod_zro-pmodt ; 01,10 zero,inf = +-zero dc.w smod_snan-pmodt ; 01,11 zero,nan = nan dc.w smod_oper-pmodt ; 10,00 inf,norm = nan with operr dc.w smod_oper-pmodt ; 10,01 inf,zero = nan with operr dc.w smod_oper-pmodt ; 10,10 inf,inf = nan with operr dc.w smod_snan-pmodt ; 10,11 inf,nan = nan - added "-pmodt" <5/2/91, JPO> dc.w smod_dnan-pmodt ; 11,00 nan,norm = nan - added "-pmodt" <5/2/91, JPO> dc.w smod_dnan-pmodt ; 11,01 nan,zero = nan - added "-pmodt" <5/2/91, JPO> dc.w smod_dnan-pmodt ; 11,10 nan,inf = nan - added "-pmodt" <5/2/91, JPO> dc.w smod_dnan-pmodt ; 11,11 nan,nan = nan - added "-pmodt" <5/2/91, JPO> pmod: clr.b FPSR_QBYTE(a6) ; clear quotient bits in FPSR - ADDED <8/26/92, JPO> CSS bfextu STAG(a6){0:3},d0 ;stag = d0 bfextu DTAG(a6){0:3},d1 ;dtag = d1 * * Alias extended denorms to norms for the jump table. * bclr.l #2,d0 bclr.l #2,d1 lsl.b #2,d1 or.b d0,d1 ;d1{3:2} = dtag, d1{1:0} = stag * ;Tag values: * ;00 = norm or denorm * ;01 = zero * ;10 = inf * ;11 = nan lea pmodt,a1 ; move.l (a1,d1.w*4),a1 ; removed <1/2/91, JPO> adda.w (a1,d1.w*2),a1 ; get special routine from table <1/2/91, JPO> jmp (a1) smod_snan: bra src_nan smod_dnan: bra dst_nan smod_oper: bra t_operr smod_zro: move.b ETEMP(a6),d1 ;get sign of src op move.b FPTEMP(a6),d0 ;get sign of dst op eor.b d0,d1 ;get exor of sign bits btst.l #7,d1 ;test for sign beq.b smod_zsn ;if clr, do not set sign big bset.b #q_sn_bit,FPSR_QBYTE(a6) ;set q-byte sign bit smod_zsn: btst.l #7,d0 ;test if + or - beq ld_pzero ;if pos then load +0 bra ld_mzero ;else neg load -0 smod_fpn: move.b ETEMP(a6),d1 ;get sign of src op move.b FPTEMP(a6),d0 ;get sign of dst op eor.b d0,d1 ;get exor of sign bits btst.l #7,d1 ;test for sign beq.b smod_fsn ;if clr, do not set sign big bset.b #q_sn_bit,FPSR_QBYTE(a6) ;set q-byte sign bit smod_fsn: tst.b DTAG(a6) ; filter out subnormal dst case <2/8/91, JPO> bpl.b @1 ; normalized dst <2/8/91, JPO> lea.l FPTEMP(a6),a0 ; a0 <- addr(FPTEMP) <2/8/91, JPO> bra t_resdnrm ; force unfl result <2/8/91, JPO> @1: ; label added <2/8/91, JPO> fmove.l USER_FPCR(a6),fpcr ;use user's rmode and precision fmove.x FPTEMP(a6),fp0 ;load dest operand to fp0 rts * * FREM * premt: * ;$25 frem * ;dtag,stag dc.w srem-premt ; 00,00 norm,norm = normal dc.w srem_oper-premt ; 00,01 norm,zero = nan with operr dc.w srem_fpn-premt ; 00,10 norm,inf = fpn dc.w srem_snan-premt ; 00,11 norm,nan = nan dc.w srem_zro-premt ; 01,00 zero,norm = +-zero dc.w srem_oper-premt ; 01,01 zero,zero = nan with operr dc.w srem_zro-premt ; 01,10 zero,inf = +-zero dc.w srem_snan-premt ; 01,11 zero,nan = nan dc.w srem_oper-premt ; 10,00 inf,norm = nan with operr dc.w srem_oper-premt ; 10,01 inf,zero = nan with operr dc.w srem_oper-premt ; 10,10 inf,inf = nan with operr dc.w srem_snan-premt ; 10,11 inf,nan = nan dc.w srem_dnan-premt ; 11,00 nan,norm = nan dc.w srem_dnan-premt ; 11,01 nan,zero = nan dc.w srem_dnan-premt ; 11,10 nan,inf = nan dc.w srem_dnan-premt ; 11,11 nan,nan = nan prem: clr.b FPSR_QBYTE(a6) ; clear quotient bits in FPSR - ADDED <8/26/92, JPO> CSS bfextu STAG(a6){0:3},d0 ;stag = d0 bfextu DTAG(a6){0:3},d1 ;dtag = d1 * * Alias extended denorms to norms for the jump table. * bclr #2,d0 bclr #2,d1 lsl.b #2,d1 or.b d0,d1 ;d1{3:2} = dtag, d1{1:0} = stag * ;Tag values: * ;00 = norm or denorm * ;01 = zero * ;10 = inf * ;11 = nan lea premt,a1 ; move.l (a1,d1.w*4),a1 ; deleted <1/2/91, JPO> adda.w (a1,d1.w*2),a1 ; get special routine from table <1/2/91, JPO> jmp (a1) srem_snan: bra src_nan srem_dnan: bra dst_nan srem_oper: bra t_operr srem_zro: move.b ETEMP(a6),d1 ;get sign of src op move.b FPTEMP(a6),d0 ;get sign of dst op eor.b d0,d1 ;get exor of sign bits btst.l #7,d1 ;test for sign beq.b srem_zsn ;if clr, do not set sign big bset.b #q_sn_bit,FPSR_QBYTE(a6) ;set q-byte sign bit srem_zsn: btst.l #7,d0 ;test if + or - beq ld_pzero ;if pos then load +0 bra ld_mzero ;else neg load -0 srem_fpn: move.b ETEMP(a6),d1 ;get sign of src op move.b FPTEMP(a6),d0 ;get sign of dst op eor.b d0,d1 ;get exor of sign bits btst.l #7,d1 ;test for sign beq.b srem_fsn ;if clr, do not set sign big bset.b #q_sn_bit,FPSR_QBYTE(a6) ;set q-byte sign bit srem_fsn: tst.b DTAG(a6) ; filter out subnormal dst case <2/8/91, JPO> bpl.b @1 ; normalized dst <2/8/91, JPO> lea.l FPTEMP(a6),a0 ; a0 <- addr(FPTEMP) <2/8/91, JPO> bra t_resdnrm ; force unfl result <2/8/91, JPO> @1: ; label added <2/8/91, JPO> fmove.l USER_FPCR(a6),fpcr ;use user's rmode and precision fmove.x FPTEMP(a6),fp0 ;return dest to fp0 rts * * FSCALE * pscalet: * ;$26 fscale * ;dtag,stag dc.w sscale-pscalet ; 00,00 norm,norm = result dc.w sscale-pscalet ; 00,01 norm,zero = fpn dc.w scl_opr-pscalet ; 00,10 norm,inf = nan with operr dc.w scl_snan-pscalet ; 00,11 norm,nan = nan dc.w scl_zro-pscalet ; 01,00 zero,norm = +-zero dc.w scl_zro-pscalet ; 01,01 zero,zero = +-zero dc.w scl_opr-pscalet ; 01,10 zero,inf = nan with operr dc.w scl_snan-pscalet ; 01,11 zero,nan = nan dc.w scl_inf-pscalet ; 10,00 inf,norm = +-inf dc.w scl_inf-pscalet ; 10,01 inf,zero = +-inf dc.w scl_opr-pscalet ; 10,10 inf,inf = nan with operr dc.w scl_snan-pscalet ; 10,11 inf,nan = nan dc.w scl_dnan-pscalet ; 11,00 nan,norm = nan dc.w scl_dnan-pscalet ; 11,01 nan,zero = nan dc.w scl_dnan-pscalet ; 11,10 nan,inf = nan dc.w scl_dnan-pscalet ; 11,11 nan,nan = nan pscale: bfextu STAG(a6){0:3},d0 ;stag in d0 bfextu DTAG(a6){0:3},d1 ;dtag in d1 bclr.l #2,d0 ;alias denorm into norm bclr.l #2,d1 ;alias denorm into norm lsl.b #2,d1 or.b d0,d1 ;d1{4:2} = dtag, d1{1:0} = stag * ;dtag values stag values: * ;000 = norm 00 = norm * ;001 = zero 01 = zero * ;010 = inf 10 = inf * ;011 = nan 11 = nan * ;100 = dnrm * * lea.l pscalet,a1 ;load start of jump table ; move.l (a1,d1.w*4),a1 ;load a1 with label depending on tag - removed <1/2/91, JPO> adda.w (a1,d1.w*2),a1 ; <1/2/91, JPO> jmp (a1) ;go to the routine scl_opr: bra t_operr scl_dnan: bra dst_nan scl_zro: btst.b #sign_bit,FPTEMP_EX(a6) ;test if + or - beq ld_pzero ;if pos then load +0 bra ld_mzero ;if neg then load -0 scl_inf: btst.b #sign_bit,FPTEMP_EX(a6) ;test if + or - beq.b ld_pinf ;if pos then load +inf bra ld_minf ;else neg load -inf scl_snan: bra src_nan * * FSINCOS * ssincosz: btst.b #sign_bit,ETEMP(a6) ;get sign beq.b sincosp ; fmove.x MZERO,fp0 ; removed <1/2/91, JPO> fmove.s MZERO,fp0 ; <1/2/91, JPO> bra.b sincoscom sincosp: ; fmove.x PZERO,fp0 ; deleted <1/2/91, JPO> fmove.b #0,fp0 ; <1/2/91, JPO> sincoscom: fmovem.x PONE,fp1 ;do not allow FPSR to be affected bra sto_cos ;store cosine result ssincosi: ; fmove.x QNAN,fp1 ;load NAN - deleted <1/2/91, JPO> ; fmove.s QNAN,fp1 ; <1/2/91, JPO> - DELETED <4/9/91, JPO> fmove.x QNAN,fp1 ; load extended quiet NaN <4/9/91, JPO> bsr sto_cos ;store cosine result ; fmove.x QNAN,fp0 ;load NAN - deleted <1/2/91, JPO> ; fmove.s QNAN,fp1 ; <1/2/91, JPO> - DELETED <4/9/91, JPO> bra t_operr ssincosnan: move.l ETEMP_EX(a6),FP_SCR1(a6) move.l ETEMP_HI(a6),FP_SCR1+4(a6) move.l ETEMP_LO(a6),FP_SCR1+8(a6) bset.b #signan_bit,FP_SCR1+4(a6) fmovem.x FP_SCR1(a6),fp1 bsr sto_cos bra src_nan * * This code forces default values for the zero, inf, and nan cases * in the transcendentals code. The CC bits must be set in the * stacked FPSR to be correctly reported. * ***Returns +PI/2 ld_ppi2: ; fmove.x PPIBY2,fp0 ;load +pi/2 - deleted <1/2/91, JPO> fmove.x PIBY2,fp0 ; <1/2/91, JPO> bra t_inx2 ;set inex2 exc ***Returns -PI/2 ld_mpi2: fmove.x MPIBY2,fp0 ;load -pi/2 or.l #neg_mask,USER_FPSR(a6) ;set N bit bra t_inx2 ;set inex2 exc ***Returns +inf ld_pinf: ; fmove.x PINF,fp0 ;load +inf <1/2/91, JPO> fmove.s #"$7f800000",fp0 ; <1/2/91, JPO> or.l #inf_mask,USER_FPSR(a6) ;set I bit rts ***Returns -inf ld_minf: ; fmove.x MINF,fp0 ;load -inf <1/2/91, JPO> fmove.s #"$ff800000",fp0 ; <1/2/91, JPO> or.l #neg_mask+inf_mask,USER_FPSR(a6) ;set N and I bits rts ***Returns +1 ld_pone: fmove.x PONE,fp0 ;load +1 rts ***Returns -1 ld_mone: ; fmove.x MONE,fp0 ;load -1 - deleted <1/2/91, JPO> fmove.b #-1,fp0 ; <1/2/91, JPO> or.l #neg_mask,USER_FPSR(a6) ;set N bit rts ***Returns +0 ld_pzero: ; fmove.x PZERO,fp0 ;load +0 - deleted <1/2/91, JPO> fmove.b #0,fp0 ; <1/2/91, JPO> or.l #z_mask,USER_FPSR(a6) ;set Z bit rts ***Returns -0 ld_mzero: ; fmove.x MZERO,fp0 ;load -0 - deleted <1/2/91, JPO> fmove.s MZERO,fp0 ; <1/2/91, JPO> or.l #neg_mask+z_mask,USER_FPSR(a6) ;set N and Z bits rts