def _execute_Code(code, tables, state): # Save the current header and pc pc = state.pc header = state.header state.pc = 0 state.header = Header() for field in code.argument_fields: state.header[field] = header[field] for field in get_reserved_fields(): state.header[field] = header[field] # Execute instructions state = _execute_Instructions(code.instructions, tables, state) # Commit changes to the current header for field in code.argument_fields: header[field] = state.header[field] for field in get_reserved_fields(): header[field] = state.header[field] state.pc = pc state.header = header return state
def run_concurrent_ingress(self): while True: try: state = self.input_interface.get() # print 'concurrent_group_ingress_process' if state is None: return ''' Save the current header ''' header = state.header self._metadata_queue.put(state) for i in range(len(self._instruction_pipelines)): state.header = Header() for field in self._codes[i].argument_fields: state.header[field] = header[field] for field in get_reserved_fields(): state.header[field] = header[field] self._instruction_pipelines[i].put(state) except KeyboardInterrupt: break
def run_sequential_egress(self): instruction_pipeline = self._instruction_pipelines[0] while True: try: header = self._metadata_queue.get() # print 'sequential_group_egress_process' if header is None: return state = instruction_pipeline.get() ''' Commit changes to the original header ''' for field in self._code.argument_fields: header[field] = state.header[field] for field in get_reserved_fields(): header[field] = state.header[field] state.header = header self.output_interfaces[state.label].put(state) except KeyboardInterrupt: break
def type_check_Code(code, tables, context): pc = context.pc header = context.header context.pc = 0 context.header = Header() for field in code.argument_fields: context.header[field] = header[field] for field in get_reserved_fields(): context.header[field] = header[field] # Type check instructions type_check_Instruction(code.instructions, tables, context) # Commit changes to the current header for field in code.argument_fields: header[field] = context.header[field] for field in get_reserved_fields(): header[field] = context.header[field] context.pc = pc context.header = header
def run_atomic(self): instruction_pipeline = self._instruction_pipelines[0] while True: try: state = self.input_interface.get() # print 'atomic_group_process' if state is None: return ''' Save the current header ''' header = state.header state.header = Header() for field in self._code.argument_fields: state.header[field] = header[field] for field in get_reserved_fields(): state.header[field] = header[field] ''' Process the pipeline ''' instruction_pipeline.put(state) state = instruction_pipeline.get() ''' Commit changes to the current header ''' for field in self._code.argument_fields: header[field] = state.header[field] for field in get_reserved_fields(): header[field] = state.header[field] state.header = header self.output_interfaces[state.label].put(state) except KeyboardInterrupt: break