package compiler; /* Verificar operacao unaria negacao valor em laco * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ import API.Api; import API.BuildParams; import API.CodeProcessor; import API.Target; import Export.MultCoreJun; import Export.Simulation; import IntermediaryCode.IRGenerator; import java.util.logging.Level; import java.util.logging.Logger; import targets.mips.Gen; /** * * @author Eugenio */ public class IVANNOSYS { protected static IvannosysCompiler COM; /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { try { String cmd = "", file = ""; if (args.length > 0) { cmd = args[0]; } switch (cmd) { case "create": break; default: COM = new IvannosysCompiler( "UTF-8", IvannosysCompiler.INPUT_FILE) .include(".\\src\\samples") .include(".\\src\\libs") // Especifica a classe de geração de codigo de tres enderecos .IRGenerator(new IRGenerator()); // Extensao dos arquivos // .setExtensionLibrary(".go"); // Inicializa a api do compilador Api.Init(COM); // Parametros de compilação BuildParams.Add("display.ERROS", "true"); BuildParams.Add("display.IR", "true"); BuildParams.Add("display.AST", "true"); BuildParams.Add("mode", "developement"); // Especifica a classe de geração de código alvo mips Gen Mips = new targets.mips.Gen(); // Adiciona dois metodos de exportação ao alvo mips // Metodo de simualcao Mips.AddExportOption("simulation", new Simulation(new tools.mips.MipsSettings() { { // Não executar passo a passo Set("stepByStep", "false"); // Necessario para poder usar os breakpoints Set("mode", "debug"); // Determina os pontos de para no codigo alvo Set("breakpoints", "94"); // Caminho do arquivo de memoria de instrucoes Set("memory.instruction", "\\src\\tools\\mips\\memory\\mi.memory"); // Tamanho da memorua de instrucoes Set("memory.instruction.size", 16 * 1024); // Caminho do arquivo de memoria de dados Set("memory.data", "\\src\\tools\\mips\\memory\\md.memory"); // Tamanho da memorua de dados Set("memory.data.size", 16 * 1024); } })); // Metodo exporta profile para arquitetura de juninho Mips.AddExportOption("MultCoreJun", new MultCoreJun()); Target.Add("mips", Mips); // Registra os processadores para o alvo mips // Executa alocacao de registradores antes de traduzir cada bloco CodeProcessor.On("mips", "BeforeTranslateBlock", "mips.register.alloc"); CodeProcessor.On("mips", "AfterTranslateBlock", "mips.o.L1,mips.copy.dep"); // Atualiza os enderecos CodeProcessor.On("mips", "AfterTranslate", "mips.update.address"); // file = "src\\samples\\program.go"; // file = "src\\samples\\program.go"; // file = "src\\samples\\program_mult_jon.go"; // file = "src\\samples\\program_mult.go"; file = "src\\samples\\program_jun_bit_count.go"; // file = "src\\samples\\program_jun_mult_manycore.go"; // Compila o arquivo de entrada COM.Compile(file); } } catch (Exception ex) { Logger.getLogger(IVANNOSYS.class.getName()).log(Level.SEVERE, null, ex); } } }