Beispiel #1
0
static double evalfn(double (*fcn)(double), int n)
{
  double x, nn, tmpsum, pnt1, pnt2;
  static double sum;
  int i,j;

  if (n==1){
    sum=FCN(0.5);
    return(sum);}
  else {
    for(i=1,j=1;j<n-1;j++) i*=3;
    nn=i;
    pnt1=1/(3.0*nn);
    pnt2=2.0*pnt1;
    x=0.5*pnt1;
    tmpsum=0.0;
    for(j=1;j<=i;j++){
      tmpsum+=FCN(x);
      x+=pnt2;
      tmpsum+=FCN(x);
      x+=pnt1;}
    sum=(sum+tmpsum/nn)/3.0;
    return(sum);}}
Beispiel #2
0
static int
dis_class2(uint32_t *pc, uint32_t inst)
{
	int op3 = OP3(inst);
	char *opc[] = {
		"add",    "and",    "or",       "xor",
		"sub",    "andn",   "orn",      "xnor",
		"addc",   "mulx",   "umul",     "smul",
		"subc",   "udivx",  "udiv",     "sdiv",
		"addcc",  "andcc",  "orcc",     "xorcc",
		"subcc",  "andncc", "orncc",    "xnorcc",
		"addccc", "-",      "umulcc",   "smulcc",
		"subccc", "-",      "udivcc",   "sdivcc",
		"taddcc", "tsubcc", "taddcctv", "tsubcctv",
		"mulscc", "sll",    "srl",      "sra",
		"rdy",    "-",      "rdpr",     "flushw",
		"movcc",  "sdivx",  "popc",     "movr",
		"wry",    "saved",  "wrpr",     "-",
		"fpop1",  "fpop2",  "impldep1", "impldep2",
		"jmpl",   "return", "tcc",      "flush",
		"save",   "restore", "done",     "-"
	};

	switch(op3) {
	case 0x00: /* ADD */
	case 0x01: /* AND */
	case 0x02: /* OR */
	case 0x03: /* XOR */
	case 0x04: /* SUB */
	case 0x05: /* ANDN */
	case 0x06: /* ORN */
	case 0x07: /* XNOR */
	case 0x08: /* ADDC */
	case 0x09: /* MULX */
	case 0x0a: /* UMUL */
	case 0x0b: /* SMUL */
	case 0x0c: /* SUBC */
	case 0x0d: /* UDIVX */
	case 0x0e: /* UDIV */
	case 0x0f: /* SDIV */

	case 0x10: /* ADDcc */
	case 0x11: /* ANDcc */
	case 0x12: /* ORcc */
	case 0x13: /* XORcc */
	case 0x14: /* SUBcc */
	case 0x15: /* ANDNcc */
	case 0x16: /* ORNcc */
	case 0x17: /* XNORcc */
	case 0x18: /* ANDCcc */
	case 0x1a: /* UMULcc */
	case 0x1b: /* SMULcc */
	case 0x1c: /* SUBCcc */
	case 0x1e: /* UDIVcc */
	case 0x1f: /* SDIVcc */

	case 0x20: /* TADDcc */
	case 0x21: /* TSUBcc */
	case 0x22: /* TADDccTV */
	case 0x23: /* TSUBccTV */
	case 0x24: /* MULScc */
	case 0x2c: /* MOVcc */
	case 0x2d: /* SDIVX */
	case 0x2f: /* MOVr */
	case 0x38: /* JMPL */
	case 0x3c: /* SAVE */
	case 0x3d: /* RESTORE */
		(void)printf("%p:\t%s\t%s, ", (void *)pc, 
			     opc[op3], sregs[RS1(inst)]);
		if (IMM(inst))
			(void)printf("%ld, ", SIMM13(inst));
		else
			(void)printf("%s, ", sregs[RS2(inst)]);
		(void)printf("%s\n", sregs[RD(inst)]);
		return (op3 == 0x38) ? DELAY : OK;

	case 0x2b: /* FLUSHW */
		if ((RD(inst) == 0) && (RS1(inst) == 0)
		    && (IMM(inst) == 0) && (SIMM13(inst) == 0)) {
			(void)printf("%p:\t%s\n", (void *)pc, opc[op3]);
			return OK;
		}
		ILLEGAL;
	case 0x39: /* RETURN */
	case 0x3b: /* FLUSH */
		if (RD(inst)) {
			ILLEGAL;
		}
		(void)printf("%p:\t%s\t%s + ", (void *)pc, opc[op3], sregs[RS1(inst)]);
		if (IMM(inst))
			(void)printf("%ld\n", SIMM13(inst));
		else
			(void)printf("%s\n", sregs[RS2(inst)]);
		return OK;
	case 0x19:
	case 0x1d:
	case 0x29:
	case 0x33:
	case 0x3f:
		ILLEGAL;
	case 0x25: /* SLL/SLLX */
	case 0x26: /* SRL/SRLX */
	case 0x27: /* SRA/SRAX */
		(void)printf("%p:\t%s%s\t%s, ", (void *)pc,
		       opc[op3], X(inst) ? "x" : "", sregs[RS1(inst)]);
		if (IMM(inst))
			(void)printf("%d, ",
			       X(inst) ? SHIFT64(inst) : SHIFT32(inst));
		else
			(void)printf("%s, ", sregs[RS2(inst)]);
		(void)printf("%s\n", sregs[RD(inst)]);
		return OK;
	case 0x28: /* RDASR */
		return dis_rdasr(pc, inst);
	case 0x2a: /* RDPR */
		return dis_rdpr(pc, inst);
	case 0x30: /* WRASR */
		return dis_wrasr(pc, inst);
	case 0x31: /* SAVED/RESTORED */
		if(FCN(inst) == 0) {
			(void)printf("%p:\tsaved\n", (void *)pc);
			return OK;
		}
		if(FCN(inst) == 1) {
			(void)printf("%p:\trestored\n", (void *)pc);
			return OK;
		}
		ILLEGAL;
	case 0x32: /* WRPR */
		return dis_wrpr(pc, inst);
	case 0x3a: /* Tcc */
		return dis_tcc(pc, inst);
	case 0x3e: /* DONE/RETRY */
		if(FCN(inst) == 0) {
			(void)printf("%p:\tdone\n", (void *)pc);
			return OK;
		}
		if(FCN(inst) == 1) {
			(void)printf("%p:\tretry\n", (void *)pc);
			return OK;
		}
		ILLEGAL;
	case 0x36: /* IMPDEP1 */
		(void)printf("XXXX %p:\timpldep1\n", (void *)pc );
		return ERR;
	case 0x37: /* IMPLDEP2 */
		(void)printf("XXXX %p:\timpldep2\n", (void *)pc);
		return ERR;
	default:
		(void)printf("XXXX dis_class2 op3=%x\n", op3);
		return ERR;
	}
}