// dump the current CPU state void dump_state(bool disassemble) { char buffer[256]; UINT8 instruction[32]; buffer[0] = 0; int bytes = 0; if (disassemble) { // fill in an array of bytes in the CPU's natural order int maxbytes = m_cpu->max_opcode_bytes(); for (int bytenum = 0; bytenum < maxbytes; bytenum++) instruction[bytenum] = m_space->read_byte(RAM_BASE + bytenum); // disassemble the current instruction bytes = m_cpu->disassemble(buffer, RAM_BASE, instruction, instruction) & DASMFLAG_LENGTHMASK; } // output the registers printf("PC : %08X", UINT32(m_cpu->state_int(PPC_PC))); if (disassemble && bytes > 0) { printf(" => "); for (int bytenum = 0; bytenum < bytes; bytenum++) printf("%02X", instruction[bytenum]); printf(" %s", buffer); } printf("\n"); for (int regnum = 0; regnum < 32; regnum++) { printf("R%-2d: %08X ", regnum, UINT32(m_cpu->state_int(PPC_R0 + regnum))); if (regnum % 4 == 3) printf("\n"); } printf("CR : %08X LR : %08X CTR: %08X XER: %08X\n", UINT32(m_cpu->state_int(PPC_CR)), UINT32(m_cpu->state_int(PPC_LR)), UINT32(m_cpu->state_int(PPC_CTR)), UINT32(m_cpu->state_int(PPC_XER))); for (int regnum = 0; regnum < 32; regnum++) { printf("F%-2d: %10g ", regnum, u2d(m_cpu->state_int(PPC_F0 + regnum))); if (regnum % 4 == 3) printf("\n"); } }
double __Inf(int sign) { return u2d(sign < 0 ? uvneginf : uvinf); }
void tet_hp::tobasis(init_bdry_cndtn *ibc, int tlvl) { int tind,i,j,k,m,n,v0,v1,eind,find; TinyVector<FLT,3> pt; int stridey = MXGP; int stridex = MXGP*MXGP; /* LOOP THROUGH VERTICES */ for(i=0;i<npnt;++i) for(n=0;n<NV;++n) ugbd(tlvl).v(i,n) = ibc->f(n,pnts(i),gbl->time); if (basis::tet(log2p).em == 0) return; /* LOOP THROUGH EDGES */ for(eind = 0; eind < nseg; ++eind) { v0 = seg(eind).pnt(0); v1 = seg(eind).pnt(1); if (seg(eind).info < 0){ for(n=0;n<ND;++n) basis::tet(log2p).proj1d(pnts(v0)(n),pnts(v1)(n),&crd1d(n)(0)); } else { crdtocht1d(eind,tlvl); for(n=0;n<ND;++n) basis::tet(log2p).proj1d(&cht(n)(0),&crd1d(n)(0)); } for(n=0;n<NV;++n) basis::tet(log2p).proj1d(ugbd(tlvl).v(v0,n),ugbd(tlvl).v(v1,n),&u1d(n)(0)); for(i=0;i<basis::tet(log2p).gpx; ++i) { pt(0) = crd1d(0)(i); pt(1) = crd1d(1)(i); pt(2) = crd1d(2)(i); for(n=0;n<NV;++n){ // difference between actual function and linear u1d(n)(i) -= ibc->f(n,pt,gbl->time); } } for(n=0;n<NV;++n) basis::tet(log2p).intgrt1d(&lf(n)(0),&u1d(n)(0)); for(n=0;n<NV;++n) { for(m=0;m<basis::tet(log2p).em;++m){ ugbd(tlvl).e(eind,m,n) = -lf(n)(2+m)*basis::tet(log2p).diag1d(m); } } } if (basis::tet(log2p).fm == 0) return; /* LOOP THROUGH FACES */ for(find = 0; find < ntri; ++find) { ugtouht2d_bdry(find,tlvl); for(n=0;n<NV;++n) basis::tet(log2p).proj2d_bdry(&uht(n)(0),&u2d(n)(0)(0),stridey); if (tri(find).info < 0) { for(n=0;n<ND;++n) basis::tet(log2p).proj2d(vrtxbd(tlvl)(tri(find).pnt(0))(n),vrtxbd(tlvl)(tri(find).pnt(1))(n),vrtxbd(tlvl)(tri(find).pnt(2))(n),&crd2d(n)(0)(0),stridey); } else { crdtocht2d(find,tlvl); for(n=0;n<ND;++n) basis::tet(log2p).proj2d_bdry(&cht(n)(0),&crd2d(n)(0)(0),stridey); } for (i=0; i < basis::tet(log2p).gpx; ++i ) { for (j=0; j < basis::tet(log2p).gpy; ++j ) { pt(0) = crd2d(0)(i)(j); pt(1) = crd2d(1)(i)(j); pt(2) = crd2d(2)(i)(j); for(n=0;n<NV;++n) { u2d(n)(i)(j) -= ibc->f(n,pt,gbl->time); } } } for(n=0;n<NV;++n) { basis::tet(log2p).intgrt2d(&lf(n)(0),&u2d(n)(0)(0),stridey); for(i=0;i<basis::tet(log2p).fm;++i){ ugbd(tlvl).f(find,i,n) = -lf(n)(3+3*basis::tet(log2p).em+i)*basis::tet(log2p).diag2d(i); } } } if (basis::tet(log2p).im == 0) return; /* LOOP THROUGH TETS */ for(tind = 0; tind < ntet; ++tind) { ugtouht_bdry(tind,tlvl); for(n=0;n<NV;++n) basis::tet(log2p).proj_bdry(&uht(n)(0),&u(n)(0)(0)(0),stridex,stridey); if (tet(tind).info < 0) { for(n=0;n<ND;++n) basis::tet(log2p).proj(vrtxbd(tlvl)(tet(tind).pnt(0))(n),vrtxbd(tlvl)(tet(tind).pnt(1))(n),vrtxbd(tlvl)(tet(tind).pnt(2))(n),vrtxbd(tlvl)(tet(tind).pnt(3))(n),&crd(n)(0)(0)(0),stridex,stridey); } else { crdtocht(tind,tlvl); for(n=0;n<ND;++n) basis::tet(log2p).proj_bdry(&cht(n)(0),&crd(n)(0)(0)(0),stridex,stridey); } for (i=0; i < basis::tet(log2p).gpx; ++i ) { for (j=0; j < basis::tet(log2p).gpy; ++j ) { for (k=0; k < basis::tet(log2p).gpz; ++k ) { pt(0) = crd(0)(i)(j)(k); pt(1) = crd(1)(i)(j)(k); pt(2) = crd(2)(i)(j)(k); for(n=0;n<NV;++n) u(n)(i)(j)(k) -= ibc->f(n,pt,gbl->time); } } } for(n=0;n<NV;++n) { basis::tet(log2p).intgrt(&lf(n)(0),&u(n)(0)(0)(0),stridex,stridey); for(i=0;i<basis::tet(log2p).im;++i) { ugbd(tlvl).i(tind,i,n) = -lf(n)(basis::tet(log2p).bm+i)*basis::tet(log2p).diag3d(i); } } } return; }
double __NaN(void) { return u2d(uvnan); }