IVANNOSYS.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package compiler;
  2. /*
  3. Verificar operacao unaria negacao valor em laco
  4. * To change this license header, choose License Headers in Project Properties.
  5. * To change this template file, choose Tools | Templates
  6. * and open the template in the editor.
  7. */
  8. import API.Api;
  9. import API.BuildParams;
  10. import API.Middleware;
  11. import API.Target;
  12. import Export.MultCoreJun;
  13. import Export.Simulation;
  14. import IntermediaryCode.IRGenerator;
  15. import java.util.logging.Level;
  16. import java.util.logging.Logger;
  17. import targets.mips.Translate;
  18. /**
  19. *
  20. * @author Eugenio
  21. */
  22. public class IVANNOSYS {
  23. protected static IvannosysCompiler COM;
  24. /**
  25. * @param args the command line arguments
  26. */
  27. public static void main(String[] args) throws Exception {
  28. try {
  29. String cmd = "", file = "";
  30. if (args.length
  31. > 0) {
  32. cmd = args[0];
  33. }
  34. switch (cmd) {
  35. case "create":
  36. break;
  37. default:
  38. // Middleware.Add("mips.analise", new analise.AnaliseDependenciaMiddleware());
  39. // Middleware.Add("mips.module.scheduling", new analise.ModuleSchedulingMiddleware());
  40. COM = new IvannosysCompiler(
  41. "UTF-8",
  42. IvannosysCompiler.INPUT_FILE)
  43. .include(".\\src\\samples")
  44. .include(".\\src\\libs")
  45. // Especifica a classe de geração de codigo de tres enderecos
  46. .IRGenerator(new IRGenerator());
  47. // Extensao dos arquivos
  48. // .setExtensionLibrary(".go");
  49. // Inicializa a api do compilador
  50. Api.Init(COM);
  51. // Parametros de compilação
  52. BuildParams.Add("display.ERROS", "true");
  53. BuildParams.Add("display.IR", "true");
  54. BuildParams.Add("display.AST", "true");
  55. BuildParams.Add("mode", "developement");
  56. // Especifica a classe de geração de código alvo mips
  57. Translate Mips = new targets.mips.Translate();
  58. // Adiciona dois metodos de exportação ao alvo mips
  59. // Metodo de simualcao
  60. Mips.AddExportOption("simulation", new Simulation(new tools.mips.MipsSettings() {
  61. {
  62. // Não executar passo a passo
  63. Set("step.by.step", "false");
  64. // Necessario para poder usar os breakpoints
  65. // Set("mode", "debug");
  66. // Determina os pontos de para no codigo alvo
  67. // Set("breakpoints", "94-9c");
  68. // Set("breakpoints", "1d8,214,2e0,28c,2f0,250,330");
  69. // Set("breakpoints", "1d8,214,250,28c,2dc,2e0,2d8,2f0,300,314,324,350,35c");
  70. // Set("breakpoints", "2e8-350,35c");
  71. // Set("breakpoints", "314,35c");
  72. // Set("breakpoints", "350,35c");
  73. // Caminho do arquivo de memoria de instrucoes
  74. Set("memory.instruction", "\\src\\tools\\mips\\memory\\mi.memory");
  75. // Tamanho da memorua de instrucoes 16 kb
  76. Set("memory.instruction.size", 16 * 1024);
  77. // Caminho do arquivo de memoria de dados
  78. Set("memory.data", "\\src\\tools\\mips\\memory\\md.memory");
  79. // Tamanho da memorua de dados 16 kb
  80. Set("memory.data.size", 16 * 1024);
  81. Set("memory.data.reset", "true");
  82. }
  83. }));
  84. // Metodo exporta profile para arquitetura de juninho
  85. Mips.AddExportOption("MultCoreJun", new MultCoreJun());
  86. Target.Add("mips", Mips);
  87. // Registra os processadores para o alvo mips
  88. // Executa alocacao de registradores antes de traduzir cada bloco
  89. Middleware.On("mips", "before.translate.block", "mips.register.alloc");
  90. Middleware.On("mips", "after.translate.block", "mips.o.L1,mips.copy.dep");
  91. // Atualiza os enderecos de saltos e set no campo offset
  92. // Middleware.On("mips", "after.translate", "mips.update.address,mips.analise,mips.module.scheduling");
  93. // Middleware.On("mips", "after.translate", "mips.update.address,mips.module.scheduling");
  94. Middleware.On("mips", "after.translate", "mips.update.address");
  95. // file = "src\\samples\\program.go";
  96. // file = "src\\samples\\program.go";
  97. // file = "src\\samples\\program_mult_jon.go";
  98. // file = "src\\samples\\program_mult.go";
  99. // file = "src\\samples\\program_jun_bit_count.go";
  100. file = "src\\samples\\program_jun_laplaciano.go";
  101. // file = "src\\samples\\program_jun_bytes.go";
  102. // file = "src\\samples\\program_jun_mult_manycore.go";
  103. // Compila o arquivo de entrada
  104. COM.Compile(file);
  105. }
  106. } catch (Exception ex) {
  107. Logger.getLogger(IVANNOSYS.class.getName()).log(Level.SEVERE, null, ex);
  108. }
  109. }
  110. }