Example #1
0
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
Example #2
0
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
Example #3
0
    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
Example #4
0
    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
Example #5
0
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
Example #6
0
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
Example #7
0
    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