void CodeEmitterNVC0::emitPredicate(const Instruction *i) { if (i->predSrc >= 0) { assert(i->getPredicate()->reg.file == FILE_PREDICATE); srcId(i->src[i->predSrc], 10); if (i->cc == CC_NOT_P) code[0] |= 0x2000; // negate } else { code[0] |= 0x1c00; } }
void ReadKkit::setupSlaveMsg( const string& src, const string& dest ) { // Convert the pool to a BufPool, if it isn't one already Id destId( basePath_ + "/kinetics/" + dest ); assert( destId != Id() ); if( !destId.element()->cinfo()->isA( "BufPool" )) { destId.element()->zombieSwap( BufPool::initCinfo() ); } map< string, Id >* nameMap; // Check if the src is a table or a stim Id srcId( basePath_ + "/kinetics/" + src ); assert( srcId != Id() ); string output = "output"; if ( srcId.element()->cinfo()->isA( "TableBase" ) ) { nameMap = &tabIds_; } else if ( srcId.element()->cinfo()->isA( "PulseGen" ) ) { nameMap = &stimIds_; output = "output"; } else { cout << "Error: Unknown source for SLAVE msg: (" << src << ", " << dest << ")\n"; return; } // NSLAVE is 1, CONCSLAVE is 2. map< Id, int >::iterator i = poolFlags_.find( destId ); if ( i == poolFlags_.end() || !( i->second & 2 ) ) { innerAddMsg( src, *nameMap, output, dest, poolIds_, "setNInit" ); } else { innerAddMsg( src, *nameMap, output, dest, poolIds_, "setConcInit" ); double CONCSCALE = 0.001; // Rescale from uM to millimolar. if ( nameMap == &tabIds_ ) { SetGet2< double, double >::set( srcId, "linearTransform", CONCSCALE, 0 ); } else if ( nameMap == &stimIds_ ) { double x = Field< double >::get( srcId, "baseLevel" ); Field< double >::set( srcId, "baseLevel", x * CONCSCALE ); x = Field< double >::get( srcId, "firstLevel" ); Field< double >::set( srcId, "firstLevel", x * CONCSCALE ); x = Field< double >::get( srcId, "secondLevel" ); Field< double >::set( srcId, "secondLevel", x * CONCSCALE ); } } // cout << "Added slave msg from " << src << " to " << dest << endl; }