📄 fpaversion.c
字号:
#ifndef lintstatic char sccsid[] = "@(#)fpaversion.c 1.1 92/07/30 SMI";#endif/* * Copyright (c) 1986 by Sun Microsystems, Inc. */ #include <stdio.h>#include <signal.h>#include <sys/file.h>#include <sys/types.h>#include <sys/ioctl.h>#include "fpa.h"#include "values.h"/* History: * 1/24/86 Mark Moyer Test Written * 9/21/87 Mark Moyer sincos testing added * 12/21/88 Fernando Urbina Added the FPA+ testing capability * 1/21/89 Fernando Urbina Fixed problem in FPA+ testing (would not test w/ * IMASK=0. * 1/23/89 Fernando Urbina Added square root testing for FPA+. (Command Register) * 1/26/89 F. Urbina Added sqrt for FPA+, (SP/DP Extended) * 3/21/89 F. Urbina changed xsp sqrt tests to load different values in regs *//* The main purpose of this test is to verify the microcode. * Other tests were added so that this test may be a more complete * general FPA test, but the emphasis is definitely on 1) verifying * the microcode design and implementation, and 2) providing a * regression test for all microcode modifications. *//* Note: FPA+ Changes * * The FPA+ cannot generate a status of 2 (FINITE_EXACT). * It instead generates a status of 1 (ST_INFINITY). (dgh says this is OK). * In order to implement this I have done the following: * * 1. Test whether we are in an FPA or an FPA+ * by looking at the IMASK/Version register. * * 2. Copy the tables that expect a FINITE_EXACT result, * call them "+" tables, and change the expected result to INFINITY. * * The tables affected are: * a) sp_table[]: for FPA+ it's now called spp_table[]. * b) dp_table[]: for FPA+ it's now called dpp_table[]. * c) sd_table[]: for FPA+ it's now called sdp_table[]. * d) x_table[]: for FPA+ it's now called xp_table[]. * e) l_table[]: for FPA+ it's now called lp_table[]. * f) c_table[]: for FPA+ it's now called cp_table[]. * g) sincos_table[]: for FPA+ it's now called sincosp_table[]. * h) m_table[]: for FPA+ it's now called m_table[]. * * 3. Now, each test that uses any of those tables will need to be copied, * renamed to "+", and the call to those tables fixed. * * The tests involved are: * a) sp_test -> spp_test * b) dp_test -> dpp_test * c) sd_test -> sdp_test * d) x_test -> xp_test * e) c_test -> cp_test * f) matrix_test -> matrixp_test *//* some contants */#define sonezp1 0x3f800001#define donezp1 0x3ff00000,0x00000001#define sonezm1 0x3f7fffff#define donezm1 0x3fefffff,0xffffffff#define sonezp2 0x3f800002#define donezp2 0x3ff00000,0x00000002#define sonezm2 0x3f7ffffe#define donezm2 0x3fefffff,0xfffffffe/* second half of extended operation */#define X_2ND 0xE0001800/* write weitek status */#define WRITE_WEITEK_STATUS 0xE0000E40/* initialize (load the Weitek mode registers */#define INIT 0xE0000978/* test user registers, destructive & non-destructive */#define REG_TEST_D 0xE00009C8#define REG_TEST_N 0xE00009CC/* register operations */#define REG_CPY_DP 0xE0000884#define REG_CPY_SP 0xE0000880#define PUT_REG_SP 0xE0000C00#define PUT_REG_MS 0xE0000C00#define PUT_REG_LS 0xE0000C04#define GET_REG_SP 0xE0000C00#define GET_REG_MS 0xE0000C00#define GET_REG_LS 0xE0000C04/* load pointer register RAM operations */#define LDP_MS 0xE0000E80#define LDP_LS 0xE0000E84/* single precision operations */#define SP_NOP 0xE0000000#define SP_NEG 0xE0000080#define SP_ABS 0xE0000100#define SP_FLT 0xE0000180#define SP_FIX 0xE0000200#define SP_CNV 0xE0000280#define SP_SQR 0xE0000300#define SP_ADD 0xE0000380#define SP_SUB 0xE0000400#define SP_MUL 0xE0000480#define SP_DIV 0xE0000500#define SP_BSUB 0xE0000580#define SP_BDIV 0xE0000600#define SP_CMP0 0xE0000680#define SP_CMPR 0xE0000700#define SP_CMPM 0xE0000780#define DP_NOP 0xE0000004,0xE0001000#define DP_NEG 0xE0000084,0xE0001000#define DP_ABS 0xE0000104,0xE0001000#define DP_FLT 0xE0000184,0xE0001000#define DP_FIX 0xE0000204,0xE0001000#define DP_CNV 0xE0000284,0xE0001000#define DP_SQR 0xE0000304,0xE0001000#define DP_ADD 0xE0000384,0xE0001000#define DP_SUB 0xE0000404,0xE0001000#define DP_MUL 0xE0000484,0xE0001000#define DP_DIV 0xE0000504,0xE0001000#define DP_BSUB 0xE0000584,0xE0001000#define DP_BDIV 0xE0000604,0xE0001000#define DP_CMP0 0xE0000684,0xE0001000#define DP_CMPR 0xE0000704,0xE0001000#define DP_CMPM 0xE0000784,0xE0001000#define XS_SIN 0xE0001000#define XD_SIN 0xE0001004#define XS_COS 0xE0001080#define XD_COS 0xE0001084#define XS_TAN 0xE0001100#define XD_TAN 0xE0001104#define XS_ATAN 0xE0001180#define XD_ATAN 0xE0001184#define XS_EXPM 0xE0001200#define XD_EXPM 0xE0001204#define XS_LNP 0xE0001280#define XD_LNP 0xE0001284#define XS_EXP 0xE0001300#define XD_EXP 0xE0001304#define XS_LN 0xE0001380#define XD_LN 0xE0001384#define XS_ADD 0xE0001300#define XD_ADD 0xE0001304#define XS_SUB 0xE0001380#define XD_SUB 0xE0001384#define XS_MUL 0xE0001400#define XD_MUL 0xE0001404#define XS_DIV 0xE0001480#define XD_DIV 0xE0001484#define XS_BSUB 0xE0001500#define XD_BSUB 0xE0001504#define XS_BDIV 0xE0001580#define XD_BDIV 0xE0001584#define XS_PIV0 0xE0001800#define XD_PIV0 0xE0001804#define XS_PIV1 0xE0001880#define XD_PIV1 0xE0001884#define XS_PIV2 0xE0001900#define XD_PIV2 0xE0001904#define XS_PIV3 0xE0001980#define XD_PIV3 0xE0001984#define XS_PIV4 0xE0001A00#define XD_PIV4 0xE0001A04#define XS_PIV5 0xE0001A80#define XD_PIV5 0xE0001A84#define XS_PIV6 0xE0001B00#define XD_PIV6 0xE0001B04#define XS_PIV7 0xE0001B80#define XD_PIV7 0xE0001B84#define XS_PIV8 0xE0001C00#define XD_PIV8 0xE0001C04#define XS_PIV9 0xE0001C80#define XD_PIV9 0xE0001C84#define XS_PIVA 0xE0001D00#define XD_PIVA 0xE0001D04#define XS_LIN0 0xE0001000#define XS_LIN1 0xE0001080#define XS_LIN2 0xE0001100#define XS_LIN3 0xE0001180#define XS_LIN4 0xE0001200#define XS_LIN5 0xE0001280#define XS_SQRT 0xE0001600#define XD_SQRT 0xE0001604#define CS_SIN 0xE0000800#define CD_SIN 0xE0000804#define CS_COS 0xE0000808#define CD_COS 0xE000080C#define CS_TAN 0xE0000810#define CD_TAN 0xE0000814#define CS_ATAN 0xE0000818#define CD_ATAN 0xE000081C#define CS_EXP1 0xE0000820#define CD_EXP1 0xE0000824#define CS_LN1 0xE0000828#define CD_LN1 0xE000082C#define CS_EXP 0xE0000830#define CD_EXP 0xE0000834#define CS_LN 0xE0000838#define CD_LN 0xE000083C#define CS_SQRT 0xE0000840#define CD_SQRT 0xE0000844
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -