⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpa_systest.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * static char     fpasccsid[] = "@(#)fpa_systest.c 1.1 7/30/92 Copyright Sun Microsystems";  * * Copyright (c) 1985 by Sun Microsystems, Inc  * * * * * Author : Chad B. Rao  * * Date   : 1/16/86       ....   Revision A 3/3/86               Revision B * Clayton Woo Modified to fit under sysdiag enviroment  */#include <sys/types.h>#include "fpa.h"#include <sys/ioctl.h>#include <sundev/fpareg.h>#include <stdio.h>#include <sys/time.h>#include <errno.h>#include <sys/file.h>#include <math.h>#include <signal.h>#include "fpcrttypes.h"#define		SYSTEST_ERROR	6#define		FATAL		2typedef	void	(*func_ptr)();	/* to be used for casting */char           *err_msg[] = {			     "Ierr",			     "Imask",			     "Ldptr",			     "Mapping Ram",			     "Micro Store Ram",			     "Register Ram Upper Half",			     "Simple Instruction",			     "Register Ram Lower Half",			     "Shadow Ram",			     "Pointer",			     "Pointer Incr. Decr.",			     "Lock",			     "F+",			     "Mode Register",			     "Wstatus Register",			     "Weitek Data Path",			     "Weitek Operation",			     "Weitek Status",			     "Jump Conditions",			     "Timing",			     "Linpack"};struct shadow_regs {    u_long          shreg_msw;    u_long          shreg_lsw;};struct shadow_regs shadow[] = {			       0xE0000E00, 0xE0000E04,			       0xE0000E08, 0xE0000E0C,			       0xE0000E10, 0xE0000E14,			       0xE0000E18, 0xE0000E1C,			       0xE0000E20, 0xE0000E24,			       0xE0000E28, 0xE0000E2C,			       0xE0000E30, 0xE0000E34,			       0xE0000E38, 0xE0000E3C};/* Lock test */struct registers {    u_long          reg_msw;    u_long          reg_lsw;};struct registers user[] = {			   0xE0000C00, 0xE0000C04,			   0xE0000C08, 0xE0000C0C,			   0xE0000C10, 0xE0000C14,			   0xE0000C18, 0xE0000C1C,			   0xE0000C20, 0xE0000C24,			   0xE0000C28, 0xE0000C2C,			   0xE0000C30, 0xE0000C34,			   0xE0000C38, 0xE0000C3C,			   0xE0000C40, 0xE0000C44,			   0xE0000C48, 0xE0000C4C,			   0xE0000C50, 0xE0000C54,			   0xE0000C58, 0xE0000C5C,			   0xE0000C60, 0xE0000C64,			   0xE0000C68, 0xE0000C6C,			   0xE0000C70, 0xE0000C74,			   0xE0000C78, 0xE0000C7C,			   0xE0000C80, 0xE0000C84,			   0xE0000C88, 0xE0000C8C,			   0xE0000C90, 0xE0000C94,			   0xE0000C98, 0xE0000C9C,			   0xE0000CA0, 0xE0000CA4,			   0xE0000CA8, 0xE0000CAC,			   0xE0000CB0, 0xE0000CB4,			   0xE0000CB8, 0xE0000CBC,			   0xE0000CC0, 0xE0000CC4,			   0xE0000CC8, 0xE0000CCC,			   0xE0000CD0, 0xE0000CD4,			   0xE0000CD8, 0xE0000CDC,			   0xE0000CE0, 0xE0000CE4,			   0xE0000CE8, 0xE0000CEC,			   0xE0000CF0, 0xE0000CF4,			   0xE0000CF8, 0xE0000CFC};/* * struct shadow_regs shadow[] = {  * * 0xE0000E00,   0xE0000E04, 0xE0000E08,   0xE0000E0C, 0xE0000E10,   0xE0000E14, * 0xE0000E18,   0xE0000E1C, 0xE0000E20,   0xE0000E24, 0xE0000E28,   * 0xE0000E2C, 0xE0000E30,   0xE0000E34, 0xE0000E38,   0xE0000E3C };  */struct dp_short {    u_long          addr;};/* * struct dp_short dps[] = {  * * 0xE0000384, 0xE000038C, 0xE0000394, 0xE000039C, 0xE00003A4, 0xE00003AC,   * 0xE00003B4,  0xE00003BC, 0xE00003C4, 0xE00003CC, 0xE00003D4, 0xE00003DC, * 0xE00003E4, 0xE00003EC, 0xE00003F4, 0xE00003FC };  */struct dp_short dps[] = {			 0xE0000504,			 0xE000050C,			 0xE0000514,			 0xE000051C,			 0xE0000524,			 0xE000052C,			 0xE0000534,			 0xE000053C,			 0xE0000544,			 0xE000054C,			 0xE0000554,			 0xE000055C,			 0xE0000564,			 0xE000056C,			 0xE0000574,			 0xE000057C};struct dp_ext {    u_long          addr;    u_long          addr_lsw;};struct dp_ext   ext[] = {			 0xE0001484, 0xE0001800,			 0xE000148C, 0xE0001808,			 0xE0001494, 0xE0001810,			 0xE000149C, 0xE0001818,			 0xE00014A4, 0xE0001820,			 0xE00014AC, 0xE0001828,			 0xE00014B4, 0xE0001830,			 0xE00014BC, 0xE0001838,			 0xE00014C4, 0xE0001840,			 0xE00014CC, 0xE0001848,			 0xE00014D4, 0xE0001850,			 0xE00014DC, 0xE0001858,			 0xE00014E4, 0xE0001860,			 0xE00014EC, 0xE0001868,			 0xE00014F4, 0xE0001870,			 0xE00014FC, 0xE0001878};struct dp_cmd {    u_long          data;};struct dp_cmd   nxt_cmd[] = {			     0x000,			     0x041,			     0x082,			     0x0C3,			     0x104,			     0x145,			     0x186,			     0x1C7,			     0x208,			     0x249,			     0x28A,			     0x2CB,			     0x30C,			     0x34D,			     0x38E,			     0x3CF,			     0x410,			     0x452,			     0x493,			     0x4D4,			     0x515,			     0x556,			     0x597,			     0x5D8,			     0x619,			     0x65A,			     0x69B,			     0x6DC,			     0x71D,			     0x75E,			     0x79F};struct dp_cmd   cmd[] = {			 0x020040,			 0x030081,			 0x0400C2,			 0x050103,			 0x060144,			 0x070185,			 0x0801C6,			 0x090207,			 0x0A0248,			 0x0B0289,			 0x0C02CA,			 0x0D030B,			 0x0E034C,			 0x0F038D,			 0x1003CE,			 0x11040F,			 0x120450,			 0x130491,			 0x1404D2,			 0x150513,			 0x160554,			 0x170595,			 0x1805D6,			 0x190617,			 0x1A0658,			 0x1B0699,			 0x1C06DA,			 0x1D071B,			 0x1E075C,			 0x1F079D};/* Pointer test */struct pointers {    u_long          start_addr;		       /* starting address */    u_long          incr;		       /* increment */    u_long          no_times;		       /* number of times to do */    u_long          dp_addr;		       /* starting address for dp */    u_long          dp_incr;		       /* increment for dp address */    u_long          reg_value;		       /* value to be put into					        * register */    u_long          opr_value;		       /* value used as an oeprand */    u_long          result;		       /* the result to be checked					        * against */};struct pointers shrt[] ={ {0xE0000380, 8, 16, 0xE0001000, 0, 0x40000000, 0x40000000, 0x41000000}, {0xE0000384, 8, 16, 0xE0001000, 0, 0x40000000, 0x40180000, 0x40200000}, {0x0, 0, 0, 0x0, 0, 0, 0, 0}};struct pointers extend[] ={ {0xE0001300, 8, 16, 0xE0001800, 8, 0, 0, 0}, {0xE0001304, 8, 16, 0xE0001800, 8, 0, 0, 0}, {0x0, 0, 0, 0x0, 0, 0, 0, 0}};u_long          sp_short[] ={ 0xE0000380, 0xE0000388, 0xE0000390, 0xE0000398, 0xE00003A0, 0xE00003A8, 0xE00003B0, 0xE00003B8, 0xE00003C0, 0xE00003C8, 0xE00003D0, 0xE00003D8, 0xE00003E0, 0xE00003E8, 0xE00003F0, 0xE00003F8};u_long          dp_short[] ={ 0xE0000384, 0xE000038C, 0xE0000394, 0xE000039C, 0xE00003A4, 0xE00003AC, 0xE00003B4, 0xE00003BC, 0xE00003C4, 0xE00003CC, 0xE00003D4, 0xE00003DC, 0xE00003E4, 0xE00003EC, 0xE00003F4, 0xE00003FC};struct single_ext {    u_long          high;    u_long          low;};struct single_ext dp_extd[] ={ 0xE000180C, 0xE0001900, 0xE0001814, 0xE0001988, 0xE000181C, 0xE0001A10, 0xE0001824, 0xE0001A98, 0xE000182C, 0xE0001B20, 0xE0001834, 0xE0001BA8, 0xE000183C, 0xE0001C30, 0xE0001844, 0xE0001CB8, 0xE000184C, 0xE0001D40, 0xE0001854, 0xE0001DC8, 0xE000185C, 0xE0001E50, 0xE0001864, 0xE0001ED8, 0xE000186C, 0xE0001F60, 0xE0001874, 0xE0001FE8, 0xE000187C, 0xE0001870, 0xE0001804, 0xE00018F8};struct single_ext sp_extd[] ={ 0xE0001008, 0xE0001800, 0xE0001010, 0xE0001808, 0xE0001018, 0xE0001810, 0xE0001020, 0xE0001818, 0xE0001028, 0xE0001820, 0xE0001030, 0xE0001828, 0xE0001038, 0xE0001830, 0xE0001040, 0xE0001838, 0xE0001048, 0xE0001840, 0xE0001050, 0xE0001848, 0xE0001058, 0xE0001850, 0xE0001060, 0xE0001858, 0xE0001068, 0xE0001860, 0xE0001070, 0xE0001868, 0xE0001078, 0xE0001870, 0xE0001000, 0xE0001878};u_long          cmd_reg[] ={ 0x0C020040, 0x10030081, 0x140400C2, 0x18050103, 0x1C060144, 0x20070185, 0x240801C6, 0x28090207, 0x2C0A0248, 0x300B0289, 0x340C02CA, 0x380D030B, 0x3C0E034C, 0x400F038D, 0x441003CE, 0x4811040F, 0x4C120450, 0x50130491, 0x541404D2, 0x58150513, 0x5C160554, 0x60170595, 0x641805D6, 0x68190617, 0x6C1A0658, 0x701B0699, 0x741C06DA, 0x781D071B, 0x7C1E075C};struct sp_dp_cmd {    u_long          reg1;    u_long          reg2;    u_long          reg3;    u_long          res;};struct sp_dp_cmd sp_dp_res[] ={ 0x40000000, 0x41000000, 0x40800000, 0x41800000, 0x40000000, 0x40200000, 0x40100000, 0x40300000};/* ptr_indec test */struct REGS {    u_long          reg;};struct REGS     users[] = {			   0xE0000C00,			   0xE0000C08,			   0xE0000C10,			   0xE0000C18,			   0xE0000C20,			   0xE0000C28,			   0xE0000C30,			   0xE0000C38,			   0xE0000C40,			   0xE0000C48,			   0xE0000C50,			   0xE0000C58,			   0xE0000C60,			   0xE0000C68,			   0xE0000C70,			   0xE0000C78,			   0xE0000C80,			   0xE0000C88,			   0xE0000C90,			   0xE0000C98,			   0xE0000CA0,			   0xE0000CA8,			   0xE0000CB0,			   0xE0000CB8,			   0xE0000CC0,			   0xE0000CC8,			   0xE0000CD0,			   0xE0000CD8,			   0xE0000CE0,			   0xE0000CE8,			   0xE0000CF0,			   0xE0000CF8};struct ptr_command {    u_long          data;};struct ptr_command ptr_cmd[] ={ 0x10005, 0x20046, 0x30087, 0x400C8, 0x50109, 0x6014A, 0x7018B, 0x801CC, 0x9020D, 0xA024E, 0xB028F, 0xC02D0, 0xD0311, 0xE0352, 0xF0393, 0x1003D4, 0x110415, 0x120456, 0x130497, 0x1404D8, 0x150519, 0x16055A, 0x17059B, 0x1805DC, 0x19061D, 0x1A065E, 0x1B069F};u_long          val[] = {			 0x3FF00000,	       /* for dp 1 */			 0x40000000,	       /* for dp 2 */			 0x40080000,	       /* for dp 3 */			 0x40100000,	       /* for dp 4 */			 0x40140000	       /* for dp 5 */};/* wlwf test */struct fvalue {    u_long          addr;    u_long          reg2;    u_long          reg3;    u_long          result;};struct fvalue   fval[] = {			  0xE0000A00, 0x40800000, 0x40400000, 0x3F800000,/* single subtract, f32 - f32, 4 - 3 = 1 */			  0xE0000A04, 0x40100000, 0x40080000, 0x3FF00000,/* double subtract, f32/64 - f32/64, 4 - 3 = 1 */			  0xE0000A10, 0xC0000000, 0x40000000, 0x40800000,/* single magnitude of difference, |f32 - f32|, |-2 - 2| = 4 */			  0xE0000A20, 0xC0800000, 0xC0000000, 0x40000000,/* single subtract of magnitudes, |f32| - |f32|, |-4| - |-2| = 2 */			  0xE0000A40, 0x40000000, 0x00000000, 0xC0000000,/* single negate, -f32 + 0 , 2 = -2 */			  0xE0000A80, 0x40000000, 0x40400000, 0x40A00000,/* single add, f32 + f32, 2 + 3 = 5 */			  0x0, 0x0, 0x0, 0x0   /* end of table */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -