Simulator.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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 > 0) {
  31. cmd = args[0];
  32. }
  33. switch (cmd) {
  34. case "create":
  35. break;
  36. default:
  37. // Middleware.Add("mips.analise", new analise.AnaliseDependenciaMiddleware());
  38. // Middleware.Add("mips.module.scheduling", new analise.ModuleSchedulingMiddleware());
  39. COM = new IvannosysCompiler(
  40. "UTF-8",
  41. IvannosysCompiler.INPUT_FILE)
  42. .include(".\\src\\samples")
  43. .include(".\\src\\libs")
  44. // Especifica a classe de geração de codigo de tres enderecos
  45. .IRGenerator(new IRGenerator());
  46. // Extensao dos arquivos
  47. // .setExtensionLibrary(".go");
  48. // Inicializa a api do compilador
  49. Api.Init(COM);
  50. // Parametros de compilação
  51. BuildParams.Add("display.ERROS", "true");
  52. BuildParams.Add("display.IR", "true");
  53. BuildParams.Add("display.AST", "true");
  54. BuildParams.Add("mode", "developement");
  55. // Especifica a classe de geração de código alvo mips
  56. Translate Mips = new targets.mips.Translate();
  57. // Adiciona dois metodos de exportação ao alvo mips
  58. // Metodo de simualcao
  59. Mips.AddExportOption("simulation", new Simulation(new tools.mips.MipsSettings() {
  60. {
  61. // Não executar passo a passo
  62. // Set("step.by.step", "true");
  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", "c4");
  68. // Set("breakpoints", "f4");
  69. // Set("breakpoints", "94-9c");
  70. // Set("breakpoints", "1d8,214,2e0,28c,2f0,250,330");
  71. // Set("breakpoints", "1d8,214,250,28c,2dc,2e0,2d8,2f0,300,314,324,350,35c");
  72. // Set("breakpoints", "2e8-350,35c");
  73. // Set("breakpoints", "314,35c");
  74. // Set("breakpoints", "350,35c");
  75. // Caminho do arquivo de memoria de instrucoes
  76. Set("memory.instruction", "\\src\\tools\\mips\\memory\\mi.memory");
  77. // Tamanho da memorua de instrucoes 16 kb
  78. Set("memory.instruction.size", 16 * 1024);
  79. // Caminho do arquivo de memoria de dados
  80. Set("memory.data", "\\src\\tools\\mips\\memory\\md.memory");
  81. // Tamanho da memorua de dados 16 kb
  82. Set("memory.data.size", 16 * 1024);
  83. Set("memory.data.reset", "true");
  84. }
  85. }));
  86. // Metodo exporta profile para arquitetura de juninho
  87. Mips.AddExportOption("MultCoreJun", new MultCoreJun());
  88. Target.Add("mips", Mips);
  89. // Registra os processadores para o alvo mips
  90. // Executa alocacao de registradores antes de traduzir cada bloco
  91. Middleware.On("mips", "before.translate.block", "mips.register.alloc");
  92. // Middleware.On("mips", "after.translate.block", "mips.o.L1,mips.copy.dep");
  93. Middleware.On("mips", "after.translate.block", "mips.copy.dep");
  94. // Atualiza os enderecos de saltos e set no campo offset
  95. // Middleware.On("mips", "after.translate", "mips.update.address,mips.analise,mips.module.scheduling");
  96. // Middleware.On("mips", "after.translate", "mips.update.address,mips.module.scheduling");
  97. Middleware.On("mips", "after.translate", "mips.update.address");
  98. // cmd = "src\\samples\\program.go";
  99. // cmd = "src\\samples\\program.go";
  100. // cmd = "src\\samples\\program_mult_jon.go";
  101. // cmd = "src\\samples\\program_mult.go";
  102. // cmd = "src\\samples\\program_jun_bit_count.go";
  103. cmd = "src\\samples\\program_jun_bit_count_1.go";
  104. // cmd = "src\\samples\\program_jun_laplaciano.go";
  105. // cmd = "src\\samples\\program_jun_bytes.go";
  106. // cmd = "src\\samples\\program_jun_mult_manycore.go";
  107. // Compila o arquivo de entrada
  108. COM.Compile(cmd);
  109. }
  110. } catch (Exception ex) {
  111. Logger.getLogger(IVANNOSYS.class.getName()).log(Level.SEVERE, null, ex);
  112. }
  113. }
  114. }