//===-- BrainFOpcodes.cpp - BrainF interpreter opcodes ------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===--------------------------------------------------------------------===// #include "BrainFVM.h" #include opcode_func_t *BytecodeArray = 0; size_t *JumpMap = 0; uint8_t executed = 0; BrainFTraceRecorder *Recorder = 0; void op_plus(size_t pc, uint8_t *data) { Recorder->record_simple(pc, '+'); *data += 1; BytecodeArray[pc+1](pc+1, data); } void op_minus(size_t pc, uint8_t *data) { Recorder->record_simple(pc, '-'); *data -= 1; BytecodeArray[pc+1](pc+1, data); } void op_left(size_t pc, uint8_t *data) { Recorder->record_simple(pc, '<'); BytecodeArray[pc+1](pc+1, data-1); } void op_right(size_t pc, uint8_t *data) { Recorder->record_simple(pc, '>'); BytecodeArray[pc+1](pc+1, data+1); } void op_put(size_t pc, uint8_t *data) { Recorder->record_simple(pc, '.'); putchar(*data); BytecodeArray[pc+1](pc+1, data); } void op_get(size_t pc, uint8_t *data) { Recorder->record_simple(pc, ','); *data = getchar(); BytecodeArray[pc+1](pc+1, data); } void op_if(size_t pc, uint8_t *data) { Recorder->record(pc, '['); size_t new_pc = pc+1; if (!*data) new_pc = JumpMap[pc]+1; BytecodeArray[new_pc](new_pc, data); } void op_back(size_t pc, uint8_t *data) { Recorder->record_simple(pc, ']'); size_t new_pc = JumpMap[pc]; BytecodeArray[new_pc](new_pc, data); } void op_end(size_t, uint8_t *) { return; }