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

📄 debug.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic	char sccsid[] = "@(#)debug.c 1.1 92/07/30 SMI";#endif/* debuging functions for use with dbx */#ifdef DEBUG#include "cpass1.h"        /* macros for doing double indexing */# define R2PACK(x,y,z) (0200*((x)+1)+y+040000*z)# define R2UPK1(x) ((((x)>>7)-1)&0177)# define R2UPK2(x) ((x)&0177)# define R2UPK3(x) (x>>14)# define R2TEST(x) ((x)>=0200)typedef enum { F_hexfloat, F_immed, F_loworder, F_highorder } Floatform;char *rnames[] = {  /* keyed to register number tokens */        "*",   "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7",        "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%o6", "%o7",        "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7",        "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%i6", "%i7",        "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7",        "%f8",  "%f9",  "%f10", "%f11", "%f12", "%f13", "%f14", "%f15",        "%f16", "%f17", "%f18", "%f19", "%f20", "%f21", "%f22", "%f23",        "%f24", "%f25", "%f26", "%f27", "%f28", "%f29", "%f30", "%f31",};extern void eprint();epr( p )	NODE *p;{	fwalk( p, eprint, 0 );}static voidadrput( p )	register NODE *p; {	/* the 68k code saves lval and restores after the switch */	register int r;	/* output an address, with offsets, from p */	if( p->in.op == FLD ){	    p = p->in.left;	}	switch( p->in.op ){	case NAME:	case ICON:		putchar('[');		acon( p );		putchar(']');		return;	case FCON:		fcon( p, F_highorder );		return;	case REG:		r = p->tn.rval;		printf( "%s", rnames[r] );		return;	case OREG:		oregput(p);		break;	case UNARY MUL:		putchar('[');		adrput( p->in.left);		putchar(']');		return;	default:		cerror( "illegal address" );		return;	}}/* print out a constant */acon( p ) register NODE *p; { 	if( p->in.name[0] == '\0' ){		printf( "0x%x", p->tn.lval );	} else {		printf( "%s", p->in.name );		if( p->tn.lval != 0 ){			putchar('+');			printf( "0x%x", p->tn.lval );		}	}}oregput(p)        register NODE *p;{        int base = p->tn.rval;        int val;         base = p->tn.rval;        if (R2TEST(base)){                val = R2UPK2(base);                base = R2UPK1(base);                printf("[%s+%s]", rnames[base], rnames[val]);        } else {                putchar( '[' );                printf( "%s", rnames[base] );                if( p->tn.lval != 0 || p->in.name[0] != '\0' ) {                        putchar('+');                        acon( p );                }                putchar(']');        } /* if */} /* oregput */static char floatfmt[] = "0f%.7e";static char doublefmt[] = "0f%.15e";staticfcon( p, form )	register NODE *p;	Floatform form;{	float x;	long *lp;	switch(form) {	case F_hexfloat:		/* put out single precision representation in hex */		x = p->fpn.dval;		lp = (long*)&x;		printf("0x%x", *lp);		return;	case F_immed:		/*		 * put out the constant in e-floating point format;		 * for INIT nodes and coprocessor instructions.		 */		if (p->in.type == FLOAT) {			printf(floatfmt, p->fpn.dval);		} else {			printf(doublefmt, p->fpn.dval);		}		return;	}}#endif /* DEBUG */

⌨️ 快捷键说明

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