ratematchsend.setTapeType(tapeType);
    JBlock generateRateMatchSteadyState(SIRFilter filter)				    {	JBlock block = new JBlock(null, new JStatement[0], null);	//reset the simple index	if (isSimple()){	    block.addStatement		(new JExpressionStatement(null,					  (new JAssignmentExpression					   (null,					    new JLocalVariableExpression					    (null, generatedVariables.simpleIndex),					    new JIntLiteral(-1))), null));	}	    		//should be at least peek - pop items in the buffer, so	//just receive pop * filterInfo.steadyMult in the buffer and we can	//run for an entire filterInfo.steadyMult state	block.addStatement	    (makeForLoop(receiveCode(filter, filter.getInputType(),				     generatedVariables),			 generatedVariables.exeIndex,			 new JIntLiteral(filterInfo.pop * filterInfo.steadyMult)));		//now, run the work function steady times...	JBlock workBlock = 	    (JBlock)ObjectDeepCloner.	    deepCopy(filter.getWork().getBody());	//convert all of the push expressions in the steady state work block into	//stores to the output buffer	workBlock.accept(new SLIRReplacingVisitor() {		/**		 * Visits a push expression.		 */		public Object visitPushExpression(SIRPushExpression self,						  CType tapeType,						  JExpression arg) {		    JExpression newExp = (JExpression)arg.accept(this);		    //the expression is the argument of the call		    JExpression[] args = new JExpression[1];		    args[0] = newExp;		    		    JMethodCallExpression ratematchsend = 			new JMethodCallExpression(null, new JThisExpression(null),						  RawExecutionCode.rateMatchSendMethod,						  args);		    		    return ratematchsend;		}	    });		//if we are in debug mode, print out that the filter is firing	if (SpaceTimeBackend.FILTER_DEBUG_MODE) {	    block.addStatement		(new SIRPrintStatement(null,				       new JStringLiteral(null, filter.getName() + " firing."),				       null));	}	//add the cloned work function to the block	block.addStatement	    (makeForLoop(workBlock, generatedVariables.exeIndex,	     new JIntLiteral(filterInfo.steadyMult)));		//now add the code to push the output buffer onto the static network and 	//reset the output buffer index	//    for (steady*push*typesize)	//        push(__SENDBUFFER__[++ __SENDBUFFERINDEX__])	if (filterInfo.push > 0) {	    	    SIRPushExpression pushExp =  new SIRPushExpression		(new JArrayAccessExpression		 (null, 		  new JLocalVariableExpression		  (null,		   generatedVariables.sendBuffer),		  new JLocalVariableExpression		  (null,		   generatedVariables.exeIndex)));	    	    pushExp.setTapeType(Util.getBaseType(filter.getOutputType()));	    	    JExpressionStatement send = new JExpressionStatement(null, pushExp, null);	    	    block.addStatement		(makeForLoop(send, generatedVariables.exeIndex,			 new JIntLiteral(filterInfo.steadyMult * filterInfo.push * 					 Util.getTypeSize(filter.getOutputType()))));	    //reset the send buffer index	    block.addStatement		(new JExpressionStatement(null,					  new JAssignmentExpression(null,								    new JLocalVariableExpression								    (null, generatedVariables.sendBufferIndex),								    new JIntLiteral(-1)),					  null));	}		//if we are in decoupled mode do not put the work function in a for loop	//and add the print statements	if (KjcOptions.decoupled) {	    block.addStatementFirst		(new SIRPrintStatement(null, 				       new JIntLiteral(0),				       null));	    block.addStatement(block.size(), 				    new SIRPrintStatement(null, 							  new JIntLiteral(1),							  null));	}		return block;	    }