implemented new code splitting mechanism (split to equal slices)
[deliverable/titan.core.git] / compiler2 / Code.cc
index 074fdc87845e20853a8252523f50419c274dff13..feac7577b57bb8393873e7ec6f226473410ef89d 100644 (file)
  *   Forstner, Matyas
  *   Kovacs, Ferenc
  *   Raduly, Csaba
+ *   Szabo, Bence Janos
  *   Szabo, Janos Zoltan – initial implementation
  *
  ******************************************************************************/
 #include "Code.hh"
 #include "../common/memory.h"
 #include "error.h"
+#include "CodeGenHelper.hh"
 
 #include <ctype.h>
 
@@ -54,6 +56,31 @@ namespace Common {
     output->functions.init_comp = NULL;
     output->functions.start = NULL;
     output->functions.control = NULL;
+    output->intervals.pre_things_size = 0;
+    output->intervals.methods_size = 0;
+    output->intervals.function_bodies_size = 0;
+    output->intervals.static_conversion_function_bodies_size = 0;
+    output->intervals.static_function_bodies_size = 0;
+    output->intervals.methods_max_size = 1;
+    output->intervals.function_bodies_max_size = 1;
+    output->intervals.static_conversion_function_bodies_max_size = 1;
+    output->intervals.static_function_bodies_max_size = 1;
+    if (CodeGenHelper::GetInstance().get_split_mode() == CodeGenHelper::SPLIT_TO_SLICES) {
+      output->intervals.methods = (size_t*)Malloc(output->intervals.methods_max_size * sizeof(size_t));
+      output->intervals.function_bodies = (size_t*)Malloc(output->intervals.function_bodies_max_size * sizeof(size_t));
+      output->intervals.static_conversion_function_bodies = (size_t*)Malloc(output->intervals.static_conversion_function_bodies_max_size * sizeof(size_t));
+      output->intervals.static_function_bodies = (size_t*)Malloc(output->intervals.static_function_bodies_max_size * sizeof(size_t));
+      
+      output->intervals.methods[0] = 0;
+      output->intervals.function_bodies[0] = 0;
+      output->intervals.static_conversion_function_bodies[0] = 0;
+      output->intervals.static_function_bodies[0] = 0;
+    } else {
+      output->intervals.methods = NULL;
+      output->intervals.function_bodies = NULL;
+      output->intervals.static_conversion_function_bodies = NULL;
+      output->intervals.static_function_bodies = NULL;
+    }
   }
 
   void Code::merge_output(output_struct *dest, output_struct *src)
@@ -142,6 +169,10 @@ namespace Common {
     Free(output->functions.init_comp);
     Free(output->functions.start);
     Free(output->functions.control);
+    Free(output->intervals.methods);
+    Free(output->intervals.function_bodies);
+    Free(output->intervals.static_conversion_function_bodies);
+    Free(output->intervals.static_function_bodies);
     init_output(output);
   }
 
This page took 0.024133 seconds and 5 git commands to generate.